From 8e77011dda56b7134f574782bf1c8030027f18b5 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Sun, 12 Jan 2025 15:44:57 +1100 Subject: [PATCH] Fix #5949. Remove material set psets panel in favour of merging into material manager psets panel. Previously, to edit a single IfcMaterial pset, you'd do so in the material manager. In contrast, to edit a IfcMaterialSet pset, you'd do so only when assigned to an object. Not only is it bad to edit psets in two locations, it also means you can't edit psets until you've first assigned the material set to an object which is bad. Now it's less code, and material / material set psets are in the same spot. There still more consolidation work to do, to allow editing of sets in the material manager and to figure out how to show item psets, but it's a step in the right direction. --- src/bonsai/bonsai/bim/module/pset/__init__.py | 3 -- src/bonsai/bonsai/bim/module/pset/data.py | 19 +------- src/bonsai/bonsai/bim/module/pset/ui.py | 43 +------------------ src/bonsai/bonsai/tool/blender.py | 4 -- src/bonsai/bonsai/tool/ifc.py | 1 - src/bonsai/bonsai/tool/pset.py | 2 - 6 files changed, 2 insertions(+), 70 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/pset/__init__.py b/src/bonsai/bonsai/bim/module/pset/__init__.py index 5e53bde928..0ab35183e4 100644 --- a/src/bonsai/bonsai/bim/module/pset/__init__.py +++ b/src/bonsai/bonsai/bim/module/pset/__init__.py @@ -47,7 +47,6 @@ classes = ( ui.BIM_PT_object_psets, ui.BIM_PT_object_qtos, ui.BIM_PT_material_psets, - ui.BIM_PT_material_set_psets, ui.BIM_PT_material_set_item_psets, ui.BIM_PT_task_qtos, ui.BIM_PT_resource_qtos, @@ -66,7 +65,6 @@ classes = ( def register(): bpy.types.Object.PsetProperties = bpy.props.PointerProperty(type=prop.PsetProperties) bpy.types.Scene.MaterialPsetProperties = bpy.props.PointerProperty(type=prop.PsetProperties) - bpy.types.Object.MaterialSetPsetProperties = bpy.props.PointerProperty(type=prop.PsetProperties) bpy.types.Object.MaterialSetItemPsetProperties = bpy.props.PointerProperty(type=prop.PsetProperties) bpy.types.Scene.TaskPsetProperties = bpy.props.PointerProperty(type=prop.PsetProperties) bpy.types.Scene.ResourcePsetProperties = bpy.props.PointerProperty(type=prop.PsetProperties) @@ -82,7 +80,6 @@ def register(): def unregister(): del bpy.types.Object.PsetProperties del bpy.types.Scene.MaterialPsetProperties - del bpy.types.Object.MaterialSetPsetProperties del bpy.types.Object.MaterialSetItemPsetProperties del bpy.types.Scene.TaskPsetProperties del bpy.types.Scene.ResourcePsetProperties diff --git a/src/bonsai/bonsai/bim/module/pset/data.py b/src/bonsai/bonsai/bim/module/pset/data.py index 7f1e391629..6506f7cce7 100644 --- a/src/bonsai/bonsai/bim/module/pset/data.py +++ b/src/bonsai/bonsai/bim/module/pset/data.py @@ -33,7 +33,6 @@ def refresh(): ObjectPsetsData.is_loaded = False ObjectQtosData.is_loaded = False MaterialPsetsData.is_loaded = False - MaterialSetPsetsData.is_loaded = False MaterialSetItemPsetsData.is_loaded = False TaskQtosData.is_loaded = False ResourceQtosData.is_loaded = False @@ -185,7 +184,7 @@ class MaterialPsetsData(Data): if material.ifc_definition_id: material = tool.Ifc.get().by_id(material.ifc_definition_id) category = getattr(material, "Category", None) or None - psets = bonsai.bim.schema.ifc.psetqto.get_applicable("IfcMaterial", category, pset_only=True) + psets = bonsai.bim.schema.ifc.psetqto.get_applicable(props.material_type, category, pset_only=True) psetnames = cls.format_pset_enum(psets) assigned_names = ifcopenshell.util.element.get_psets( material, psets_only=True, should_inherit=False @@ -194,22 +193,6 @@ class MaterialPsetsData(Data): return [] -class MaterialSetPsetsData(Data): - data = {} - is_loaded = False - - @classmethod - def load(cls): - psets = {} - element = tool.Ifc.get_entity(bpy.context.active_object) - if element: - material = ifcopenshell.util.element.get_material(element, should_skip_usage=True) - if material and "Set" in material.is_a(): - psets = cls.psetqtos(material) - cls.data = {"psets": psets} - cls.is_loaded = True - - class MaterialSetItemPsetsData(Data): data = {} is_loaded = False diff --git a/src/bonsai/bonsai/bim/module/pset/ui.py b/src/bonsai/bonsai/bim/module/pset/ui.py index 69333ac9b4..93d087c54e 100644 --- a/src/bonsai/bonsai/bim/module/pset/ui.py +++ b/src/bonsai/bonsai/bim/module/pset/ui.py @@ -25,7 +25,6 @@ from bonsai.bim.module.pset.data import ( ObjectPsetsData, ObjectQtosData, MaterialPsetsData, - MaterialSetPsetsData, MaterialSetItemPsetsData, TaskQtosData, ResourceQtosData, @@ -88,7 +87,7 @@ def draw_enumerated_property( def get_active_pset_obj_name(context: bpy.types.Context, obj_type: tool.Ifc.OBJECT_TYPE) -> str: - if obj_type in ("Object", "MaterialSet", "MaterialSetItem"): + if obj_type in ("Object", "MaterialSetItem"): return context.active_object.name return "" @@ -430,46 +429,6 @@ class BIM_PT_material_psets(Panel): draw_psetqto_ui(context, pset["id"], pset, props, self.layout, "Material") -class BIM_PT_material_set_psets(Panel): - bl_label = "Material Set Property Sets" - bl_idname = "BIM_PT_material_set_psets" - bl_options = {"DEFAULT_CLOSED"} - bl_space_type = "PROPERTIES" - bl_region_type = "WINDOW" - bl_context = "object" - bl_parent_id = "BIM_PT_object_material" - - @classmethod - def poll(cls, context): - if not context.active_object: - return False - if not tool.Ifc.get() or tool.Ifc.get().schema == "IFC2X3": - return False # We don't support material psets in IFC2X3 because they suck - if not tool.Ifc.get_entity(context.active_object): - return False - if not ObjectMaterialData.is_loaded: - ObjectMaterialData.load() - ifc_class = ObjectMaterialData.data["material_class"] - return bool(ifc_class and "Set" in ifc_class) - - def draw(self, context): - if not MaterialSetPsetsData.is_loaded: - MaterialSetPsetsData.load() - - props = context.active_object.MaterialSetPsetProperties - row = self.layout.row(align=True) - prop_with_search(row, props, "pset_name", text="") - op = row.operator("bim.add_pset", icon="ADD", text="") - op.obj = context.active_object.name - op.obj_type = "MaterialSet" - - if not props.active_pset_id and props.active_pset_name and props.active_pset_type == "PSET": - draw_psetqto_ui(context, 0, {}, props, self.layout, "MaterialSet") - - for pset in MaterialSetPsetsData.data["psets"]: - draw_psetqto_ui(context, pset["id"], pset, props, self.layout, "MaterialSet") - - class BIM_PT_material_set_item_psets(Panel): bl_label = "Material Set Item Property Sets" bl_idname = "BIM_PT_material_set_item_psets" diff --git a/src/bonsai/bonsai/tool/blender.py b/src/bonsai/bonsai/tool/blender.py index 8795f77155..d736599384 100644 --- a/src/bonsai/bonsai/tool/blender.py +++ b/src/bonsai/bonsai/tool/blender.py @@ -185,10 +185,6 @@ class Blender(bonsai.core.tool.Blender): return context.scene.BIMMaterialProperties.materials[ context.scene.BIMMaterialProperties.active_material_index ].ifc_definition_id - elif obj_type == "MaterialSet": - return ifcopenshell.util.element.get_material( - tool.Ifc.get_entity(bpy.data.objects.get(obj)), should_skip_usage=True - ).id() elif obj_type == "MaterialSetItem": return bpy.data.objects.get(obj).BIMObjectMaterialProperties.active_material_set_item_id elif obj_type == "Task": diff --git a/src/bonsai/bonsai/tool/ifc.py b/src/bonsai/bonsai/tool/ifc.py index 8144325584..502903601d 100644 --- a/src/bonsai/bonsai/tool/ifc.py +++ b/src/bonsai/bonsai/tool/ifc.py @@ -34,7 +34,6 @@ class Ifc(bonsai.core.tool.Ifc): OBJECT_TYPE = Literal[ "Object", "Material", - "MaterialSet", "MaterialSetItem", "Task", "Cost", diff --git a/src/bonsai/bonsai/tool/pset.py b/src/bonsai/bonsai/tool/pset.py index 9d37115aa4..7c07010fa8 100644 --- a/src/bonsai/bonsai/tool/pset.py +++ b/src/bonsai/bonsai/tool/pset.py @@ -45,8 +45,6 @@ class Pset(bonsai.core.tool.Pset): return bpy.data.objects.get(obj).PsetProperties elif obj_type == "Material": return bpy.context.scene.MaterialPsetProperties - elif obj_type == "MaterialSet": - return bpy.data.objects.get(obj).MaterialSetPsetProperties elif obj_type == "MaterialSetItem": return bpy.data.objects.get(obj).MaterialSetItemPsetProperties elif obj_type == "Task":