mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-20 15:08:51 +00:00
disable editing rep item style if it comes from material constituent through shape aspect
This commit is contained in:
@@ -1649,11 +1649,43 @@ class RemoveRepresentationItem(bpy.types.Operator, Operator):
|
|||||||
bpy.ops.bim.enable_editing_representation_items()
|
bpy.ops.bim.enable_editing_representation_items()
|
||||||
|
|
||||||
|
|
||||||
|
def poll_editing_representaiton_item_style(cls, context):
|
||||||
|
if not (obj := getattr(context, "active_object", None)):
|
||||||
|
return False
|
||||||
|
props = obj.BIMGeometryProperties
|
||||||
|
if not props.is_editing:
|
||||||
|
return False
|
||||||
|
if not 0 <= props.active_item_index < len(props.items):
|
||||||
|
return False
|
||||||
|
item = props.items[props.active_item_index]
|
||||||
|
shape_aspect = item.shape_aspect
|
||||||
|
if shape_aspect == "":
|
||||||
|
return True
|
||||||
|
|
||||||
|
from blenderbim.bim.module.material.data import ObjectMaterialData
|
||||||
|
|
||||||
|
if not ObjectMaterialData.is_loaded:
|
||||||
|
ObjectMaterialData.load()
|
||||||
|
constituents = ObjectMaterialData.data["active_material_constituents"]
|
||||||
|
if any(c for c in constituents if c == shape_aspect):
|
||||||
|
cls.poll_message_set(
|
||||||
|
"Style comes from item's shape aspect related to the material constituent "
|
||||||
|
"with the same name and cannot be edited on representation item directly - "
|
||||||
|
"you can change it from the material constituent"
|
||||||
|
)
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
class EnableEditingRepresentationItemStyle(bpy.types.Operator, Operator):
|
class EnableEditingRepresentationItemStyle(bpy.types.Operator, Operator):
|
||||||
bl_idname = "bim.enable_editing_representation_item_style"
|
bl_idname = "bim.enable_editing_representation_item_style"
|
||||||
bl_label = "Enable Editing Representation Item Style"
|
bl_label = "Enable Editing Representation Item Style"
|
||||||
bl_options = {"REGISTER", "UNDO"}
|
bl_options = {"REGISTER", "UNDO"}
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def poll(cls, context):
|
||||||
|
return poll_editing_representaiton_item_style(cls, context)
|
||||||
|
|
||||||
def _execute(self, context):
|
def _execute(self, context):
|
||||||
props = context.active_object.BIMGeometryProperties
|
props = context.active_object.BIMGeometryProperties
|
||||||
props.is_editing_item_style = True
|
props.is_editing_item_style = True
|
||||||
@@ -1704,6 +1736,10 @@ class UnassignRepresentationItemStyle(bpy.types.Operator, Operator):
|
|||||||
bl_label = "Unassign Representation Item Style"
|
bl_label = "Unassign Representation Item Style"
|
||||||
bl_options = {"REGISTER", "UNDO"}
|
bl_options = {"REGISTER", "UNDO"}
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def poll(cls, context):
|
||||||
|
return poll_editing_representaiton_item_style(cls, context)
|
||||||
|
|
||||||
def _execute(self, context):
|
def _execute(self, context):
|
||||||
obj = context.active_object
|
obj = context.active_object
|
||||||
props = obj.BIMGeometryProperties
|
props = obj.BIMGeometryProperties
|
||||||
|
|||||||
@@ -152,6 +152,7 @@ class ObjectMaterialData:
|
|||||||
cls.data["materials"] = cls.materials()
|
cls.data["materials"] = cls.materials()
|
||||||
cls.data["type_material"] = cls.type_material()
|
cls.data["type_material"] = cls.type_material()
|
||||||
cls.data["material_type"] = cls.material_type()
|
cls.data["material_type"] = cls.material_type()
|
||||||
|
cls.data["active_material_constituents"] = cls.active_material_constituents()
|
||||||
cls.is_loaded = True
|
cls.is_loaded = True
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@@ -318,3 +319,10 @@ class ObjectMaterialData:
|
|||||||
if version == "IFC2X3":
|
if version == "IFC2X3":
|
||||||
material_types = ["IfcMaterial", "IfcMaterialLayerSet", "IfcMaterialList"]
|
material_types = ["IfcMaterial", "IfcMaterialLayerSet", "IfcMaterialList"]
|
||||||
return [(m, m, ifcopenshell.util.doc.get_entity_doc(version, m).get("description", "")) for m in material_types]
|
return [(m, m, ifcopenshell.util.doc.get_entity_doc(version, m).get("description", "")) for m in material_types]
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def active_material_constituents(cls):
|
||||||
|
material = cls.material
|
||||||
|
if not material.is_a("IfcMaterialConstituentSet"):
|
||||||
|
return []
|
||||||
|
return [m.Name for m in material.MaterialConstituents if m.Name]
|
||||||
|
|||||||
Reference in New Issue
Block a user