Fix error tabbing into IfcRevolvedAreaSolid with a boolean + add resolve_base_items

resolve_items couldn't find IfcRevolvedAreaSolid inside a boolean result
This commit is contained in:
Andrej730
2025-01-22 12:44:29 +05:00
parent 6ce4b5d0e8
commit 74a9669fa8
2 changed files with 17 additions and 1 deletions
+1 -1
View File
@@ -657,7 +657,7 @@ class Model(bonsai.core.tool.Model):
# so users will be able to at least move IfcRevolvedAreaSolid, until there will be a full support.
body = ifcopenshell.util.representation.get_representation(element, "Model", "Body", "MODEL_VIEW")
if body and any(
i["item"].is_a("IfcRevolvedAreaSolid") for i in ifcopenshell.util.representation.resolve_items(body)
i.is_a("IfcRevolvedAreaSolid") for i in ifcopenshell.util.representation.resolve_base_items(body)
):
return
return "PROFILE"
@@ -320,6 +320,22 @@ def resolve_items(
return results
def resolve_base_items(
representation: ifcopenshell.entity_instance,
) -> Generator[ifcopenshell.entity_instance, None, None]:
"""Resolve representation to it's base items resolving mapped items and boolean results to it's operands."""
queue: list[ifcopenshell.entity_instance] = list(representation.Items)
while queue:
item = queue.pop()
if item.is_a("IfcMappedItem"):
yield from resolve_base_items(item.MappingSource.MappedRepresentation)
elif item.is_a("IfcBooleanResult"):
queue.append(item.FirstOperand)
queue.append(item.SecondOperand)
else:
yield item
def get_prioritised_contexts(ifc_file: ifcopenshell.file) -> list[ifcopenshell.entity_instance]:
"""Gets a list of contexts ordered from high priority to low priority