52 lines
3.5 KiB
Markdown
52 lines
3.5 KiB
Markdown
# 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)
|
|
|
|
```mermaid
|
|
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; |