From 7858cb128ed471f7fc2b06a77e36a4c9479ce9c2 Mon Sep 17 00:00:00 2001 From: Stephen Boddy Date: Fri, 20 Jun 2025 17:52:39 +0100 Subject: [PATCH] Fix #5563 inconsistent behaviour of Status filter --- .../bonsai/bim/module/sequence/operator.py | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/bonsai/bonsai/bim/module/sequence/operator.py b/src/bonsai/bonsai/bim/module/sequence/operator.py index 90b7203149..0b824b4f9c 100644 --- a/src/bonsai/bonsai/bim/module/sequence/operator.py +++ b/src/bonsai/bonsai/bim/module/sequence/operator.py @@ -72,6 +72,28 @@ class DisableStatusFilters(bpy.types.Operator): def execute(self, context): props = context.scene.BIMStatusProperties + + query = [] + visible_statuses = {s.name for s in props.statuses} + for name in visible_statuses: + if name == "No Status": + q = f"IfcProduct, /Pset_.*Common/.Status=NULL, EPset_Status.Status=NULL" + else: + q = f"IfcProduct, /Pset_.*Common/.Status={name} + IfcProduct, EPset_Status.Status={name}" + query.append(q) + query = " + ".join(query) + + if not query: + self.report({"INFO"}, "No statuses selected.") + + visible_elements = ifcopenshell.util.selector.filter_elements(tool.Ifc.get(), query) + + for obj in bpy.context.view_layer.objects: + element = tool.Ifc.get_entity(obj) + if not element or not element.is_a("IfcProduct"): + continue + obj.hide_set(element not in visible_elements) + props.is_enabled = False return {"FINISHED"} @@ -96,7 +118,6 @@ class ActivateStatusFilters(bpy.types.Operator): if not query: self.report({"INFO"}, "No statuses selected.") - return {"FINISHED"} visible_elements = ifcopenshell.util.selector.filter_elements(tool.Ifc.get(), query)