From a1fb4d6b81f69c802c4a2e08ca15d0ff6a169643 Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Sun, 13 Oct 2024 11:24:41 -0500 Subject: [PATCH] fix #4051: filter to only show IfcProfileDefs that are attached to IfcMaterialProfiles --- src/bonsai/bonsai/bim/module/profile/operator.py | 7 +++++++ src/bonsai/bonsai/bim/module/profile/prop.py | 8 ++++++++ src/bonsai/bonsai/bim/module/profile/ui.py | 4 ++++ 3 files changed, 19 insertions(+) diff --git a/src/bonsai/bonsai/bim/module/profile/operator.py b/src/bonsai/bonsai/bim/module/profile/operator.py index 38eb3cba20..d7ea5f7653 100644 --- a/src/bonsai/bonsai/bim/module/profile/operator.py +++ b/src/bonsai/bonsai/bim/module/profile/operator.py @@ -37,7 +37,14 @@ class LoadProfiles(bpy.types.Operator): props = context.scene.BIMProfileProperties props.profiles.clear() + filter_material_profiles = props.is_filtering_material_profiles + for profile in tool.Ifc.get().by_type("IfcProfileDef"): + if filter_material_profiles: + inverse_references = tool.Ifc.get().get_inverse(profile) + related_material_profiles = [ref for ref in inverse_references if ref.is_a('IfcMaterialProfile')] + if not related_material_profiles: + continue if not profile.ProfileName: continue new = props.profiles.add() diff --git a/src/bonsai/bonsai/bim/module/profile/prop.py b/src/bonsai/bonsai/bim/module/profile/prop.py index 9fa4f5e360..e1ab4a5ae2 100644 --- a/src/bonsai/bonsai/bim/module/profile/prop.py +++ b/src/bonsai/bonsai/bim/module/profile/prop.py @@ -66,6 +66,14 @@ class BIMProfileProperties(PropertyGroup): active_arbitrary_profile_id: IntProperty(name="Active Arbitrary Profile Id") profile_attributes: CollectionProperty(name="Profile Attributes", type=Attribute) profile_classes: EnumProperty(items=get_profile_classes, name="Profile Classes") + is_filtering_material_profiles: bpy.props.BoolProperty( + name="Filter Material Profiles", + default=False, + description="Check to only show IfcProfileDefs attached to IfcMaterialProfiles", + update=lambda self, context: bpy.ops.bim.load_profiles() + ) + + def generate_thumbnail_for_active_profile(): diff --git a/src/bonsai/bonsai/bim/module/profile/ui.py b/src/bonsai/bonsai/bim/module/profile/ui.py index 23eecc0037..859aeccd83 100644 --- a/src/bonsai/bonsai/bim/module/profile/ui.py +++ b/src/bonsai/bonsai/bim/module/profile/ui.py @@ -83,6 +83,10 @@ class BIM_PT_profiles(Panel): self.props, "active_profile_index", ) + + row = self.layout.row() + row.prop(self.props, "is_filtering_material_profiles", text="Filter Material Profiles") + if active_profile: if active_profile.ifc_class in ( "IfcArbitraryClosedProfileDef",