diff --git a/src/blenderbim/blenderbim/bim/module/material/__init__.py b/src/blenderbim/blenderbim/bim/module/material/__init__.py index bb67ee7a96..958ff75add 100644 --- a/src/blenderbim/blenderbim/bim/module/material/__init__.py +++ b/src/blenderbim/blenderbim/bim/module/material/__init__.py @@ -32,9 +32,10 @@ classes = ( operator.CopyMaterial, operator.DisableEditingAssignedMaterial, operator.DisableEditingMaterial, - operator.DisableEditingMaterials, operator.DisableEditingMaterialSetItem, operator.DisableEditingMaterialSetItemProfile, + operator.DisableEditingMaterials, + operator.DuplicateLayer, operator.EditAssignedMaterial, operator.EditMaterial, operator.EditMaterialSetItem, diff --git a/src/blenderbim/blenderbim/bim/module/material/operator.py b/src/blenderbim/blenderbim/bim/module/material/operator.py index 4f7b77e4fc..dd245000ab 100644 --- a/src/blenderbim/blenderbim/bim/module/material/operator.py +++ b/src/blenderbim/blenderbim/bim/module/material/operator.py @@ -311,7 +311,6 @@ class RemoveLayer(bpy.types.Operator, tool.Ifc.Operator): bl_idname = "bim.remove_layer" bl_label = "Remove Layer" bl_options = {"REGISTER", "UNDO"} - obj: bpy.props.StringProperty() layer: bpy.props.IntProperty() def _execute(self, context): @@ -323,6 +322,21 @@ class RemoveLayer(bpy.types.Operator, tool.Ifc.Operator): ifcopenshell.api.run("material.remove_layer", tool.Ifc.get(), layer=layer) +class DuplicateLayer(bpy.types.Operator, tool.Ifc.Operator): + bl_idname = "bim.duplicate_layer" + bl_label = "Duplicate Layer" + bl_options = {"REGISTER", "UNDO"} + layer: bpy.props.IntProperty() + + def _execute(self, context): + layer = tool.Ifc.get().by_id(self.layer) + new_layer = ifcopenshell.util.element.copy(tool.Ifc.get(), layer) + for material_set in layer.ToMaterialLayerSet: + layers = list(material_set.MaterialLayers) + layers.insert(layers.index(layer), new_layer) + material_set.MaterialLayers = layers + + class AddListItem(bpy.types.Operator, tool.Ifc.Operator): bl_idname = "bim.add_list_item" bl_label = "Add List Item" diff --git a/src/blenderbim/blenderbim/bim/module/material/ui.py b/src/blenderbim/blenderbim/bim/module/material/ui.py index 773a3e14db..5c3b678a88 100644 --- a/src/blenderbim/blenderbim/bim/module/material/ui.py +++ b/src/blenderbim/blenderbim/bim/module/material/ui.py @@ -275,6 +275,8 @@ class BIM_PT_object_material(Panel): op.material_set_item = set_item["id"] op = row.operator("bim.enable_editing_material_set_item", icon="GREASEPENCIL", text="") op.material_set_item = set_item["id"] + if ObjectMaterialData.data["set_item_name"] == "layer": + row.operator("bim.duplicate_layer", icon="DUPLICATE", text="").layer = set_item["id"] op = row.operator(f"bim.remove_{ObjectMaterialData.data['set_item_name']}", icon="X", text="") if ObjectMaterialData.data["material_class"] == "IfcMaterialList": setattr(op, "list_item_set", ObjectMaterialData.data["set"]["id"])