mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-09 17:31:45 +00:00
Fix #6938 - Have parent facet select the parent aggregate as well.
This commit is contained in:
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user