From cd013079f410dac3cf461bf30cba23affba6f6f1 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 23 Apr 2024 16:09:26 +0500 Subject: [PATCH] bim.duplicate_material --- .../blenderbim/bim/module/material/__init__.py | 1 + .../blenderbim/bim/module/material/operator.py | 13 +++++++++++++ src/blenderbim/blenderbim/bim/module/material/ui.py | 2 ++ src/blenderbim/blenderbim/tool/material.py | 4 ++++ 4 files changed, 20 insertions(+) diff --git a/src/blenderbim/blenderbim/bim/module/material/__init__.py b/src/blenderbim/blenderbim/bim/module/material/__init__.py index 8757f86c55..037befdbfd 100644 --- a/src/blenderbim/blenderbim/bim/module/material/__init__.py +++ b/src/blenderbim/blenderbim/bim/module/material/__init__.py @@ -24,6 +24,7 @@ classes = ( operator.AddLayer, operator.AddListItem, operator.AddMaterial, + operator.DuplicateMaterial, operator.AddMaterialSet, operator.AddProfile, operator.AssignMaterial, diff --git a/src/blenderbim/blenderbim/bim/module/material/operator.py b/src/blenderbim/blenderbim/bim/module/material/operator.py index 77241afef5..b132332e5d 100644 --- a/src/blenderbim/blenderbim/bim/module/material/operator.py +++ b/src/blenderbim/blenderbim/bim/module/material/operator.py @@ -134,6 +134,19 @@ class AddMaterial(bpy.types.Operator, tool.Ifc.Operator): material_prop_purge() +class DuplicateMaterial(bpy.types.Operator, tool.Ifc.Operator): + bl_idname = "bim.duplicate_material" + bl_label = "Diplicate Material" + bl_options = {"REGISTER", "UNDO"} + material: bpy.props.IntProperty(name="Material ID") + + def _execute(self, context): + ifc_file = tool.Ifc.get() + tool.Material.duplicate_material(ifc_file.by_id(self.material)) + material_prop_purge() + bpy.ops.bim.load_materials() + + class AddMaterialSet(bpy.types.Operator, tool.Ifc.Operator): bl_idname = "bim.add_material_set" bl_label = "Add Material Set" diff --git a/src/blenderbim/blenderbim/bim/module/material/ui.py b/src/blenderbim/blenderbim/bim/module/material/ui.py index 1f24392af2..6273596940 100644 --- a/src/blenderbim/blenderbim/bim/module/material/ui.py +++ b/src/blenderbim/blenderbim/bim/module/material/ui.py @@ -61,6 +61,8 @@ class BIM_PT_materials(Panel): if self.props.materials and self.props.active_material_index < len(self.props.materials): material = self.props.materials[self.props.active_material_index] if material.ifc_definition_id: + op = row.operator("bim.duplicate_material", text="", icon="DUPLICATE") + op.material = material.ifc_definition_id op = row.operator("bim.select_by_material", text="", icon="RESTRICT_SELECT_OFF") op.material = material.ifc_definition_id op = row.operator("bim.enable_editing_material", text="", icon="GREASEPENCIL") diff --git a/src/blenderbim/blenderbim/tool/material.py b/src/blenderbim/blenderbim/tool/material.py index 8ebb745fa0..a6e0391030 100644 --- a/src/blenderbim/blenderbim/tool/material.py +++ b/src/blenderbim/blenderbim/tool/material.py @@ -38,6 +38,10 @@ class Material(blenderbim.core.tool.Material): def disable_editing_materials(cls): bpy.context.scene.BIMMaterialProperties.is_editing = False + @classmethod + def duplicate_material(cls, material: ifcopenshell.entity_instance) -> ifcopenshell.entity_instance: + return ifcopenshell.util.element.copy_deep(tool.Ifc.get(), material) + @classmethod def enable_editing_materials(cls): bpy.context.scene.BIMMaterialProperties.is_editing = True