mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-09 17:31:45 +00:00
Fixed version of f3f7939c8b + get_element_zones
This commit is contained in:
@@ -194,6 +194,7 @@ Valid keys are:
|
||||
"``classification``", "Gets the element's classification reference(s)"
|
||||
"``group``", "Gets the element's group(s)"
|
||||
"``system``", "Gets the element's system(s). This is a subset of group(s)."
|
||||
"``zone``", "Gets the element's zone(s). This is a subset of group(s)."
|
||||
"``material`` or ``mat``", "Gets the assigned material, which may be a material set."
|
||||
"``item`` or ``i``", "If the previous key returns a material set, gets the relevant material set items"
|
||||
"``materials`` or ``mats``", "Gets a list of IfcMaterials assigned directly or indirectly (such as via a material set) to the element"
|
||||
|
||||
@@ -347,6 +347,8 @@ def _get_element_value(element: ifcopenshell.entity_instance, keys: list[str]) -
|
||||
value = ifcopenshell.util.element.get_groups(value)
|
||||
elif key == "system":
|
||||
value = ifcopenshell.util.system.get_element_systems(value)
|
||||
elif key == "zone":
|
||||
value = ifcopenshell.util.system.get_element_zones(value)
|
||||
elif key in ("x", "y", "z", "easting", "northing", "elevation") and hasattr(value, "ObjectPlacement"):
|
||||
if getattr(value, "ObjectPlacement", None):
|
||||
matrix = ifcopenshell.util.placement.get_local_placement(value.ObjectPlacement)
|
||||
|
||||
@@ -66,13 +66,24 @@ def get_system_elements(system: ifcopenshell.entity_instance) -> list[ifcopenshe
|
||||
def get_element_systems(element: ifcopenshell.entity_instance) -> list[ifcopenshell.entity_instance]:
|
||||
results = []
|
||||
for rel in element.HasAssignments:
|
||||
if rel.is_a("IfcRelAssignsToGroup") and rel.RelatingGroup.is_a() in (
|
||||
"IfcSystem",
|
||||
"IfcDistributionSystem",
|
||||
"IfcBuildingSystem",
|
||||
"IfcZone",
|
||||
):
|
||||
results.append(rel.RelatingGroup)
|
||||
if rel.is_a("IfcRelAssignsToGroup"):
|
||||
continue
|
||||
group = rel.RelatingGroup
|
||||
if not group.is_a("IfcSystem") or group.is_a() in ("IfcStructuralAnalysisModel", "IfcZone"):
|
||||
continue
|
||||
results.append(group)
|
||||
return results
|
||||
|
||||
|
||||
def get_element_zones(element: ifcopenshell.entity_instance) -> list[ifcopenshell.entity_instance]:
|
||||
results = []
|
||||
for rel in element.HasAssignments:
|
||||
if rel.is_a("IfcRelAssignsToGroup"):
|
||||
continue
|
||||
group = rel.RelatingGroup
|
||||
if not group.is_a("IfcZone"):
|
||||
continue
|
||||
results.append(group)
|
||||
return results
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user