2025-04-29 18:26:13 +02:00

76 lines
2.8 KiB
Python

import bpy
from bpy.types import Panel
from .operator import MATERIAL_OT_merge_materials # Import the operator
class MATERIAL_PT_material_merger_panel(Panel):
"""Creates a Panel in the Shader Editor sidebar"""
bl_label = "Material Merger"
bl_idname = "MATERIAL_PT_material_merger_panel"
bl_space_type = 'NODE_EDITOR'
bl_region_type = 'UI'
bl_category = 'Tool' # Or 'Material' or a custom category
def draw(self, context):
layout = self.layout
# Get the active material in the Shader Editor
# This might be useful for defaulting one of the selectors
# mat = context.material
row = layout.row()
row.label(text="Select Materials to Merge:")
# Use properties from the operator to store selected material names
# The operator will read these when executed.
# We'll use StringProperty for simplicity in the UI for now.
# A more advanced UI might use PointerProperty to bpy.data.materials
# Material A selection
row = layout.row()
row.prop(context.scene, "material_merger_mat_a", text="Material A")
# Material B selection
row = layout.row()
row.prop(context.scene, "material_merger_mat_b", text="Material B")
# Merge button
row = layout.row()
# Pass the selected material names to the operator when button is clicked
row.operator(MATERIAL_OT_merge_materials.bl_idname, text=MATERIAL_OT_merge_materials.bl_label).material_a_name = context.scene.material_merger_mat_a
row.operator(MATERIAL_OT_merge_materials.bl_idname, text=MATERIAL_OT_merge_materials.bl_label).material_b_name = context.scene.material_merger_mat_b
# To store the selected material names, we need scene properties
# These will be registered and unregistered with the addon
def register_properties():
bpy.types.Scene.material_merger_mat_a = StringProperty(
name="Material A Name",
description="Name of the first material to merge",
default=""
)
bpy.types.Scene.material_merger_mat_b = StringProperty(
name="Material B Name",
description="Name of the second material to merge",
default=""
)
def unregister_properties():
del bpy.types.Scene.material_merger_mat_a
del bpy.types.Scene.material_merger_mat_b
def register():
register_properties()
bpy.utils.register_class(MATERIAL_PT_material_merger_panel)
print("MATERIAL_PT_material_merger_panel registered")
def unregister():
bpy.utils.unregister_class(MATERIAL_PT_material_merger_panel)
unregister_properties()
print("MATERIAL_PT_material_merger_panel unregistered")
if __name__ == "__main__":
# This block is for running the script directly in Blender's text editor
# It's useful for testing the panel layout without installing the addon
register()