mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-30 16:43:00 +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.
|
# 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")
|
body = ifcopenshell.util.representation.get_representation(element, "Model", "Body", "MODEL_VIEW")
|
||||||
if body and any(
|
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
|
||||||
return "PROFILE"
|
return "PROFILE"
|
||||||
|
|||||||
@@ -320,6 +320,22 @@ def resolve_items(
|
|||||||
return results
|
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]:
|
def get_prioritised_contexts(ifc_file: ifcopenshell.file) -> list[ifcopenshell.entity_instance]:
|
||||||
"""Gets a list of contexts ordered from high priority to low priority
|
"""Gets a list of contexts ordered from high priority to low priority
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user