From d48f02a40be0e65f3e10d70f19a0759e391a3f37 Mon Sep 17 00:00:00 2001 From: Robin Quint Date: Fri, 8 Aug 2025 14:54:29 +0200 Subject: [PATCH] Implemented material syncing for mirrored types --- .../bonsai/bim/module/material/operator.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/bonsai/bonsai/bim/module/material/operator.py b/src/bonsai/bonsai/bim/module/material/operator.py index 6ec1ccf188..4a5267afa6 100644 --- a/src/bonsai/bonsai/bim/module/material/operator.py +++ b/src/bonsai/bonsai/bim/module/material/operator.py @@ -588,6 +588,7 @@ class EditAssignedMaterial(bpy.types.Operator, tool.Ifc.Operator): bpy.ops.bim.unassign_material(obj=obj.name) bpy.ops.bim.assign_material(obj=obj.name, material_type="IfcMaterial") bpy.ops.bim.disable_editing_assigned_material(obj=active_obj.name) + self.copy_material_to_mirrored(element) return {"FINISHED"} material_set = self.file.by_id(self.material_set) @@ -651,6 +652,24 @@ class EditAssignedMaterial(bpy.types.Operator, tool.Ifc.Operator): bpy.ops.bim.disable_editing_assigned_material(obj=active_obj.name) + self.copy_material_to_mirrored(element) + + def copy_material_to_mirrored(self, element: ifcopenshell.entity_instance): + type_element = ifcopenshell.util.element.get_type(element) + if not type_element: + return + + material = ifcopenshell.util.element.get_material(type_element) + if not material: + return + + mirrored_type = tool.Blender.Modifier.has_mirrored_type(type_element) + if not mirrored_type: + return + + ifcopenshell.api.material.assign_material(tool.Ifc.get(), [ mirrored_type ], material.is_a(), material) + tool.Material.ensure_material_assigned([ mirrored_type ], material.is_a(), material) + class EnableEditingMaterialSetItemProfile(bpy.types.Operator): bl_idname = "bim.enable_editing_material_set_item_profile"