thanks @Andrej730 for the direction.
This commit is contained in:
Ryan Schultz
2024-12-14 13:07:53 -06:00
parent 1d271611c4
commit 07cf701e90
2 changed files with 23 additions and 18 deletions
+14 -1
View File
@@ -230,6 +230,10 @@ class ObjectMaterialData:
if cls.material.is_a("IfcMaterialProfileSetUsage"):
if cls.material.CardinalPoint:
results["cardinal_point"] = cardinal_point_map[cls.material.CardinalPoint]
if cls.material.is_a("IfcMaterialLayerSetUsage"):
if cls.material.LayerSetDirection:
results["layer_set_direction"] = cls.material.LayerSetDirection
return results
@classmethod
@@ -259,7 +263,16 @@ class ObjectMaterialData:
icon = "POINTCLOUD_DATA"
for item in items or []:
data = {"id": item.id(), "name": getattr(item, "Name", None) or "Unnamed", "icon": icon}
if item.is_a("IfcMaterial"):
material_id = item.id()
else:
material_id = item.Material.id()
data = {
"id": item.id(),
"name": getattr(item, "Name", None) or "Unnamed",
"icon": icon,
"material_id": material_id
}
if item.is_a("IfcMaterialProfile") and not item.Name:
if item.Profile:
data["name"] = item.Profile.ProfileName or "Unnamed"
+9 -17
View File
@@ -253,9 +253,9 @@ class BIM_PT_object_material(Panel):
len(self.props.material_set_item_profile_attributes)
and self.props.active_material_set_item_id == set_item["id"]
):
self.draw_editable_set_item_profile_ui(set_item)
self.draw_editable_set_item_profile_ui(box, set_item)
elif self.props.active_material_set_item_id == set_item["id"]:
self.draw_editable_set_item_ui(set_item)
self.draw_editable_set_item_ui(box, set_item)
else:
self.draw_read_only_set_item_ui(
box, set_item, index, is_first=index == 0, is_last=index == total_items - 1
@@ -263,16 +263,15 @@ class BIM_PT_object_material(Panel):
self.layerset_bounds(box, active_object, location="Bottom_Interior")
def draw_editable_set_item_profile_ui(self, set_item):
box = self.layout.box()
def draw_editable_set_item_profile_ui(self, box, set_item):
# box = self.layout.box()
row = box.row(align=True)
op = row.operator("bim.edit_material_set_item_profile", icon="CHECKMARK", text="Save Changes")
op.material_set_item = set_item["id"]
row.operator("bim.disable_editing_material_set_item_profile", icon="CANCEL", text="")
draw_attributes(self.props.material_set_item_profile_attributes, box)
def draw_editable_set_item_ui(self, set_item):
box = self.layout.box()
def draw_editable_set_item_ui(self, box, set_item):
row = box.row(align=True)
op = row.operator("bim.edit_material_set_item", icon="CHECKMARK", text="Save Changes")
op.material_set_item = set_item["id"]
@@ -365,7 +364,7 @@ class BIM_PT_object_material(Panel):
for set_item in ObjectMaterialData.data["set_items"]:
material_name = set_item["material"]
material_id = self.get_material_id_from_name(material_name)
material_id = set_item['material_id']
if ObjectMaterialData.data["material_class"] == "IfcMaterialList":
row = box.row()
row.label(text="IfcMaterial", icon="LAYER_ACTIVE")
@@ -379,17 +378,10 @@ class BIM_PT_object_material(Panel):
self.layerset_bounds(box, active_object, location="Bottom_Interior")
def get_material_id_from_name(self, material_name):
for index, set_item in enumerate(ObjectMaterialData.data["materials"]):
if material_name == ObjectMaterialData.data["materials"][index][1]:
material_id = int(ObjectMaterialData.data["materials"][index][0])
return material_id
def layerset_bounds(self, box, obj, location="Top_Exterior"):
element = tool.Ifc.get_entity(obj)
has_layersetdirection = hasattr(element.HasAssociations[0].RelatingMaterial, "LayerSetDirection")
if has_layersetdirection:
layer_set_direction = element.HasAssociations[0].RelatingMaterial.LayerSetDirection
set_usage = ObjectMaterialData.data.get('set_usage', {})
layer_set_direction = set_usage.get('layer_set_direction')
if layer_set_direction:
if location == "Top_Exterior":
if layer_set_direction == "AXIS3":
box.label(text="----- Top -----")