mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-19 14:41:25 +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)
|
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"):
|
for rel in self.file.by_type("IfcRelFillsElement"):
|
||||||
parent = rel.RelatingOpeningElement
|
parent = rel.RelatingOpeningElement
|
||||||
if parent and (
|
if parent and (
|
||||||
@@ -1042,15 +1035,19 @@ class FacetTransformer(lark.Transformer):
|
|||||||
):
|
):
|
||||||
parents.add(parent)
|
parents.add(parent)
|
||||||
|
|
||||||
|
# Get all children of the matched parents
|
||||||
children: set[ifcopenshell.entity_instance] = set()
|
children: set[ifcopenshell.entity_instance] = set()
|
||||||
for parent in parents:
|
for parent in parents:
|
||||||
children |= set(ifcopenshell.util.element.get_decomposition(parent))
|
children |= set(ifcopenshell.util.element.get_decomposition(parent))
|
||||||
|
|
||||||
|
# Combine parents and children into a single result set
|
||||||
|
result = parents | children
|
||||||
|
|
||||||
self.add_default_elements()
|
self.add_default_elements()
|
||||||
if comparison == "=":
|
if comparison == "=":
|
||||||
self.elements = self.elements & children
|
self.elements = self.elements & result
|
||||||
else:
|
else:
|
||||||
self.elements -= children
|
self.elements -= result
|
||||||
|
|
||||||
def query(self, args):
|
def query(self, args):
|
||||||
keys, comparison, value = 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=Project") == {element, element2, element3}
|
||||||
assert subject.filter_elements(self.file, "IfcWall, parent=Space") == {element}
|
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=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}
|
assert subject.filter_elements(self.file, "IfcWall, parent=Space") == {element}
|
||||||
|
|
||||||
def test_selecting_multiple_filter_groups(self):
|
def test_selecting_multiple_filter_groups(self):
|
||||||
|
|||||||
Reference in New Issue
Block a user