Fix #6938 - Have parent facet select the parent aggregate as well.

This commit is contained in:
Ryan Schultz
2025-11-11 20:19:38 -06:00
parent 85b3f831dc
commit abef655482
2 changed files with 7 additions and 10 deletions
@@ -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
@@ -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):