diff --git a/src/blenderbim/blenderbim/bim/module/material/__init__.py b/src/blenderbim/blenderbim/bim/module/material/__init__.py index 037befdbfd..ab63c8043e 100644 --- a/src/blenderbim/blenderbim/bim/module/material/__init__.py +++ b/src/blenderbim/blenderbim/bim/module/material/__init__.py @@ -30,7 +30,6 @@ classes = ( operator.AssignMaterial, operator.AssignParameterizedProfile, operator.ContractMaterialCategory, - operator.CopyMaterial, operator.DisableEditingAssignedMaterial, operator.DisableEditingMaterial, operator.DisableEditingMaterialSetItem, @@ -64,7 +63,6 @@ classes = ( prop.BIMMaterialProperties, prop.BIMObjectMaterialProperties, ui.BIM_PT_materials, - ui.BIM_PT_material, ui.BIM_PT_object_material, ui.BIM_UL_materials, ) diff --git a/src/blenderbim/blenderbim/bim/module/material/operator.py b/src/blenderbim/blenderbim/bim/module/material/operator.py index b132332e5d..b4f4487bba 100644 --- a/src/blenderbim/blenderbim/bim/module/material/operator.py +++ b/src/blenderbim/blenderbim/bim/module/material/operator.py @@ -141,8 +141,19 @@ class DuplicateMaterial(bpy.types.Operator, tool.Ifc.Operator): 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 = tool.Ifc.get().by_id(self.material) + new = tool.Ifc.run("material.copy_material", material=material) + + blender_material = tool.Ifc.get_object(material) + new_blender = blender_material.copy() + new_blender.use_fake_user = True + tool.Ifc.link(new, new_blender) + + if not new.is_a("IfcMaterialList"): + name = new[0] + " Copy" + new[0] = name + new_blender.name = name + material_prop_purge() bpy.ops.bim.load_materials() @@ -185,9 +196,10 @@ class UnlinkMaterial(bpy.types.Operator, tool.Ifc.Operator): bl_idname = "bim.unlink_material" bl_label = "Unlink Material" bl_options = {"REGISTER", "UNDO"} + material: bpy.props.IntProperty(name="Material ID") def _execute(self, context): - core.unlink_material(tool.Ifc, obj=context.active_object.active_material) + core.unlink_material(tool.Ifc, obj=tool.Ifc.get_object(tool.Ifc.get().by_id(self.material))) class AssignMaterial(bpy.types.Operator, tool.Ifc.Operator): @@ -679,35 +691,6 @@ class EditMaterialSetItem(bpy.types.Operator, tool.Ifc.Operator): bpy.ops.bim.disable_editing_material_set_item(obj=obj.name) -class CopyMaterial(bpy.types.Operator, tool.Ifc.Operator): - bl_idname = "bim.copy_material" - bl_label = "Copy Material" - bl_options = {"REGISTER", "UNDO"} - - def _execute(self, context): - blender_material = context.active_object.active_material - material = tool.Ifc.get_entity(blender_material) - - if tool.Ifc.has_changed_shading(blender_material): - blenderbim.core.style.update_style_colours(tool.Ifc, tool.Style, obj=blender_material) - - copied_material = ifcopenshell.api.run("material.copy_material", tool.Ifc.get(), material=material) - copied_blender_material = blender_material.copy() - copied_style = self.get_style(copied_material) - tool.Ifc.link(copied_material, copied_blender_material) - if copied_style: - tool.Ifc.link(copied_style, copied_blender_material) - context.active_object.active_material = copied_blender_material - - def get_style(self, material): - for material_representation in material.HasRepresentation: - for representation in material_representation.Representations: - for item in representation.Items: - for style in item.Styles: - if style.is_a("IfcSurfaceStyle"): - return style - - class ExpandMaterialCategory(bpy.types.Operator): bl_idname = "bim.expand_material_category" bl_label = "Expand Material Category" diff --git a/src/blenderbim/blenderbim/bim/module/material/ui.py b/src/blenderbim/blenderbim/bim/module/material/ui.py index 958c778cc4..3b74e7f8de 100644 --- a/src/blenderbim/blenderbim/bim/module/material/ui.py +++ b/src/blenderbim/blenderbim/bim/module/material/ui.py @@ -69,6 +69,8 @@ class BIM_PT_materials(Panel): op.material = material.ifc_definition_id op = row.operator("bim.enable_editing_material_style", text="", icon="SHADING_RENDERED") op.material = material.ifc_definition_id + op = row.operator("bim.unlink_material", icon="UNLINKED", text="") + op.material = material.ifc_definition_id row.operator("bim.remove_material", text="", icon="X").material = material.ifc_definition_id self.draw_editing_ui() @@ -114,29 +116,6 @@ class BIM_PT_materials(Panel): row.operator("bim.disable_editing_material", text="", icon="CANCEL") -class BIM_PT_material(Panel): - bl_label = "Material" - bl_idname = "BIM_PT_material" - bl_space_type = "PROPERTIES" - bl_region_type = "WINDOW" - bl_context = "material" - - @classmethod - def poll(cls, context): - return IfcStore.get_file() and context.active_object and context.active_object.active_material - - def draw(self, context): - row = self.layout.row(align=True) - material_id = context.active_object.active_material.BIMObjectProperties.ifc_definition_id - if bool(material_id): - row.operator("bim.remove_material", icon="X", text="Remove IFC Material").material = material_id - row.operator("bim.copy_material", icon="DUPLICATE", text="") - row.operator("bim.unlink_material", icon="UNLINKED", text="") - else: - op = row.operator("bim.add_material", icon="ADD", text="Create IFC Material") - op.obj = context.active_object.active_material.name - - class BIM_PT_object_material(Panel): bl_label = "Object Material" bl_idname = "BIM_PT_object_material"