mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-09 09:21:46 +00:00
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:
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user