diff --git a/src/ifcopenshell-python/ifcopenshell/util/selector.py b/src/ifcopenshell-python/ifcopenshell/util/selector.py index 5cc0eb6091..a2ce6fb467 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/selector.py +++ b/src/ifcopenshell-python/ifcopenshell/util/selector.py @@ -1028,13 +1028,6 @@ class FacetTransformer(lark.Transformer): ): parents.add(parent) - for rel in self.file.by_type("IfcRelVoidsElement"): - parent = rel.RelatingBuildingElement - if parent and ( - self.compare(parent.Name, comparison, value) or self.compare(parent.GlobalId, comparison, value) - ): - parents.add(parent) - for rel in self.file.by_type("IfcRelFillsElement"): parent = rel.RelatingOpeningElement if parent and ( @@ -1042,15 +1035,19 @@ class FacetTransformer(lark.Transformer): ): parents.add(parent) + # Get all children of the matched parents children: set[ifcopenshell.entity_instance] = set() for parent in parents: children |= set(ifcopenshell.util.element.get_decomposition(parent)) + # Combine parents and children into a single result set + result = parents | children + self.add_default_elements() if comparison == "=": - self.elements = self.elements & children + self.elements = self.elements & result else: - self.elements -= children + self.elements -= result def query(self, args): keys, comparison, value = args diff --git a/src/ifcopenshell-python/test/util/test_selector.py b/src/ifcopenshell-python/test/util/test_selector.py index 7869d1c645..41bf0649e7 100644 --- a/src/ifcopenshell-python/test/util/test_selector.py +++ b/src/ifcopenshell-python/test/util/test_selector.py @@ -306,7 +306,7 @@ class TestFilterElements(test.bootstrap.IFC4): assert subject.filter_elements(self.file, "IfcWall, parent=Project") == {element, element2, element3} assert subject.filter_elements(self.file, "IfcWall, parent=Space") == {element} assert subject.filter_elements(self.file, "IfcWall, parent=G") == {element, element2, element3} - assert subject.filter_elements(self.file, "IfcWall, parent=Element2") == {element3} + assert subject.filter_elements(self.file, "IfcWall, parent=Element2") == {element2, element3} assert subject.filter_elements(self.file, "IfcWall, parent=Space") == {element} def test_selecting_multiple_filter_groups(self):