Asset-Frameworker/ProjectNotes/GUI_BLENDER_INTEGRATION_PLAN.md
2025-04-29 18:26:13 +02:00

3.5 KiB

GUI Blender Integration Plan

Goal

Add a checkbox and input fields to the GUI (gui/main_window.py) to enable/disable Blender script execution and specify the .blend file paths, defaulting to config.py values. Integrate this control into the processing logic (gui/processing_handler.py).

Proposed Plan

  1. Modify gui/main_window.py:

    • Add a QCheckBox (e.g., self.blender_integration_checkbox) to the processing panel layout.
    • Add two pairs of QLineEdit widgets and QPushButton browse buttons for the nodegroup .blend path (self.nodegroup_blend_path_input, self.browse_nodegroup_blend_button) and the materials .blend path (self.materials_blend_path_input, self.browse_materials_blend_button).
    • Initialize the text of the QLineEdit widgets by reading the DEFAULT_NODEGROUP_BLEND_PATH and DEFAULT_MATERIALS_BLEND_PATH values from config.py when the GUI starts.
    • Connect signals from the browse buttons to new methods that open a QFileDialog to select .blend files and update the corresponding input fields.
    • Modify the slot connected to the "Start Processing" button to:
      • Read the checked state of self.blender_integration_checkbox.
      • Read the text from self.nodegroup_blend_path_input and self.materials_blend_path_input.
      • Pass these three pieces of information (checkbox state, nodegroup path, materials path) to the ProcessingHandler when initiating the processing task.
  2. Modify gui/processing_handler.py:

    • Add parameters to the method that starts the processing (likely start_processing) to accept the Blender integration flag (boolean), the nodegroup .blend path (string), and the materials .blend path (string).
    • Implement the logic for finding the Blender executable (reading BLENDER_EXECUTABLE_PATH from config.py or checking PATH) within processing_handler.py.
    • Implement the logic for executing the Blender scripts using subprocess.run within processing_handler.py. This logic should be similar to the run_blender_script function added to main.py in the previous step.
    • Ensure this Blender script execution logic is conditional based on the received integration flag and runs after the main asset processing (handled by the worker pool) is complete.

Execution Flow Diagram (GUI)

graph TD
    A[GUI: User Clicks Start Processing] --> B{Blender Integration Checkbox Checked?};
    B -- Yes --> C[Get Blend File Paths from Input Fields];
    C --> D[Pass Paths and Flag to ProcessingHandler];
    D --> E[ProcessingHandler: Start Asset Processing (Worker Pool)];
    E --> F[ProcessingHandler: Asset Processing Complete];
    F --> G{Blender Integration Flag True?};
    G -- Yes --> H[ProcessingHandler: Find Blender Executable];
    H --> I{Blender Executable Found?};
    I -- Yes --> J{Nodegroup Blend Path Valid?};
    J -- Yes --> K[ProcessingHandler: Run Nodegroup Script in Blender];
    K --> L{Script Successful?};
    L -- Yes --> M{Materials Blend Path Valid?};
    L -- No --> N[ProcessingHandler: Report Nodegroup Error];
    N --> M;
    M -- Yes --> O[ProcessingHandler: Run Materials Script in Blender];
    O --> P{Script Successful?};
    P -- Yes --> Q[ProcessingHandler: Report Completion];
    P -- No --> R[ProcessingHandler: Report Materials Error];
    R --> Q;
    M -- No --> Q;
    J -- No --> M[Skip Nodegroup Script];
    I -- No --> Q[Skip Blender Scripts];
    G -- No --> Q;
    B -- No --> E;