mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-09 17:31:45 +00:00
Fix #3483. You can now conveniently duplicate material layers.
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"])
|
||||
|
||||
Reference in New Issue
Block a user