From e5d0eb13bf2438a7a708937cce9289671d163721 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 21 Aug 2024 11:50:34 +0500 Subject: [PATCH] Show in UI if representation item has UV mapping / colour map Example - https://i.imgur.com/bWV4dRj.png --- src/bonsai/bonsai/bim/module/geometry/operator.py | 9 +++++++++ src/bonsai/bonsai/bim/module/geometry/prop.py | 1 + src/bonsai/bonsai/bim/module/geometry/ui.py | 14 ++++++++++++++ 3 files changed, 24 insertions(+) diff --git a/src/bonsai/bonsai/bim/module/geometry/operator.py b/src/bonsai/bonsai/bim/module/geometry/operator.py index e4e4e0e3c8..03fbb234a0 100644 --- a/src/bonsai/bonsai/bim/module/geometry/operator.py +++ b/src/bonsai/bonsai/bim/module/geometry/operator.py @@ -1831,6 +1831,11 @@ class EnableEditingRepresentationItems(bpy.types.Operator, tool.Ifc.Operator): props.items.clear() + def add_tag(item, tag: str) -> None: + if item.tags: + item.tags += "," + item.tags += tag + if bpy.context.active_object.data and hasattr(bpy.context.active_object.data, "BIMMeshProperties"): active_representation_id = bpy.context.active_object.data.BIMMeshProperties.ifc_definition_id element = tool.Ifc.get().by_id(active_representation_id) @@ -1862,6 +1867,10 @@ class EnableEditingRepresentationItems(bpy.types.Operator, tool.Ifc.Operator): shape_aspect = inverse.OfShapeAspect[0] new.shape_aspect = shape_aspect.Name new.shape_aspect_id = shape_aspect.id() + elif inverse.is_a("IfcIndexedTextureMap"): + add_tag(new, "UV") + elif inverse.is_a("IfcIndexedColourMap"): + add_tag(new, "Colour") # sort created items sorted_items = sorted(props.items[:], key=lambda i: (not i.shape_aspect, i.shape_aspect)) diff --git a/src/bonsai/bonsai/bim/module/geometry/prop.py b/src/bonsai/bonsai/bim/module/geometry/prop.py index c3db9c4083..641695a16e 100644 --- a/src/bonsai/bonsai/bim/module/geometry/prop.py +++ b/src/bonsai/bonsai/bim/module/geometry/prop.py @@ -97,6 +97,7 @@ class RepresentationItem(PropertyGroup): ifc_definition_id: IntProperty(name="IFC Definition ID") shape_aspect: StringProperty(name="Shape Aspect") shape_aspect_id: IntProperty(name="Shape Aspect IFC ID") + tags: StringProperty(name="Tags") class ShapeAspect(PropertyGroup): diff --git a/src/bonsai/bonsai/bim/module/geometry/ui.py b/src/bonsai/bonsai/bim/module/geometry/ui.py index 948e1e1e00..1d0670b903 100644 --- a/src/bonsai/bonsai/bim/module/geometry/ui.py +++ b/src/bonsai/bonsai/bim/module/geometry/ui.py @@ -192,6 +192,7 @@ class BIM_PT_representation_items(Panel): RepresentationItemsData.load() props = context.active_object.BIMGeometryProperties + layout = self.layout row = self.layout.row(align=True) row.label(text=f"{RepresentationItemsData.data['total_items']} Items Found") @@ -231,6 +232,19 @@ class BIM_PT_representation_items(Panel): row = self.layout.row() row.label(text=active_item.layer or "No Presentation Layer", icon="STICKY_UVS_LOC") + if active_item.name.endswith("FaceSet"): + if "UV" in active_item.tags: + text = "Has UV mapping" + else: + text = "Has no UV mapping" + layout.label(text=text, icon="UV") + + if "Colour" in active_item.tags: + text = "Has colour mapping" + else: + text = "Has no colour mapping" + layout.label(text=text, icon="COLOR") + row = self.layout.row(align=True) if props.is_editing_item_shape_aspect: row.prop(props, "representation_item_shape_aspect", icon="SHAPEKEY_DATA", text="")