mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-18 06:21:40 +00:00
Fix #3483. You can now conveniently duplicate material layers.
This commit is contained in:
@@ -32,9 +32,10 @@ classes = (
|
|||||||
operator.CopyMaterial,
|
operator.CopyMaterial,
|
||||||
operator.DisableEditingAssignedMaterial,
|
operator.DisableEditingAssignedMaterial,
|
||||||
operator.DisableEditingMaterial,
|
operator.DisableEditingMaterial,
|
||||||
operator.DisableEditingMaterials,
|
|
||||||
operator.DisableEditingMaterialSetItem,
|
operator.DisableEditingMaterialSetItem,
|
||||||
operator.DisableEditingMaterialSetItemProfile,
|
operator.DisableEditingMaterialSetItemProfile,
|
||||||
|
operator.DisableEditingMaterials,
|
||||||
|
operator.DuplicateLayer,
|
||||||
operator.EditAssignedMaterial,
|
operator.EditAssignedMaterial,
|
||||||
operator.EditMaterial,
|
operator.EditMaterial,
|
||||||
operator.EditMaterialSetItem,
|
operator.EditMaterialSetItem,
|
||||||
|
|||||||
@@ -311,7 +311,6 @@ class RemoveLayer(bpy.types.Operator, tool.Ifc.Operator):
|
|||||||
bl_idname = "bim.remove_layer"
|
bl_idname = "bim.remove_layer"
|
||||||
bl_label = "Remove Layer"
|
bl_label = "Remove Layer"
|
||||||
bl_options = {"REGISTER", "UNDO"}
|
bl_options = {"REGISTER", "UNDO"}
|
||||||
obj: bpy.props.StringProperty()
|
|
||||||
layer: bpy.props.IntProperty()
|
layer: bpy.props.IntProperty()
|
||||||
|
|
||||||
def _execute(self, context):
|
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)
|
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):
|
class AddListItem(bpy.types.Operator, tool.Ifc.Operator):
|
||||||
bl_idname = "bim.add_list_item"
|
bl_idname = "bim.add_list_item"
|
||||||
bl_label = "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.material_set_item = set_item["id"]
|
||||||
op = row.operator("bim.enable_editing_material_set_item", icon="GREASEPENCIL", text="")
|
op = row.operator("bim.enable_editing_material_set_item", icon="GREASEPENCIL", text="")
|
||||||
op.material_set_item = set_item["id"]
|
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="")
|
op = row.operator(f"bim.remove_{ObjectMaterialData.data['set_item_name']}", icon="X", text="")
|
||||||
if ObjectMaterialData.data["material_class"] == "IfcMaterialList":
|
if ObjectMaterialData.data["material_class"] == "IfcMaterialList":
|
||||||
setattr(op, "list_item_set", ObjectMaterialData.data["set"]["id"])
|
setattr(op, "list_item_set", ObjectMaterialData.data["set"]["id"])
|
||||||
|
|||||||
Reference in New Issue
Block a user