mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-10 09:48:32 +00:00
Get psets utility now supports getting material and profile psets
This commit is contained in:
@@ -4,13 +4,17 @@ import ifcopenshell
|
||||
def get_psets(element, psets_only=False, qtos_only=False):
|
||||
psets = {}
|
||||
if element.is_a("IfcTypeObject"):
|
||||
if element.HasPropertySets:
|
||||
for definition in element.HasPropertySets:
|
||||
if psets_only and not definition.is_a("IfcPropertySet"):
|
||||
continue
|
||||
if qtos_only and not definition.is_a("IfcElementQuantity"):
|
||||
continue
|
||||
psets[definition.Name] = get_property_definition(definition)
|
||||
for definition in element.HasPropertySets or []:
|
||||
if psets_only and not definition.is_a("IfcPropertySet"):
|
||||
continue
|
||||
if qtos_only and not definition.is_a("IfcElementQuantity"):
|
||||
continue
|
||||
psets[definition.Name] = get_property_definition(definition)
|
||||
elif element.is_a("IfcMaterialDefinition") or element.is_a("IfcProfileDef"):
|
||||
for definition in element.HasProperties or []:
|
||||
if qtos_only:
|
||||
continue
|
||||
psets[definition.Name] = get_property_definition(definition)
|
||||
elif hasattr(element, "IsDefinedBy"):
|
||||
for relationship in element.IsDefinedBy:
|
||||
if relationship.is_a("IfcRelDefinesByProperties"):
|
||||
@@ -30,6 +34,8 @@ def get_property_definition(definition):
|
||||
props.update(get_quantities(definition.Quantities))
|
||||
elif definition.is_a("IfcPropertySet"):
|
||||
props.update(get_properties(definition.HasProperties))
|
||||
elif definition.is_a("IfcMaterialProperties") or definition.is_a("IfcProfileProperties"):
|
||||
props.update(get_properties(definition.Properties))
|
||||
else:
|
||||
# Entity introduced in IFC4
|
||||
# definition.is_a('IfcPreDefinedPropertySet'):
|
||||
@@ -42,7 +48,7 @@ def get_property_definition(definition):
|
||||
|
||||
def get_quantities(quantities):
|
||||
results = {}
|
||||
for quantity in quantities:
|
||||
for quantity in quantities or []:
|
||||
if quantity.is_a("IfcPhysicalSimpleQuantity"):
|
||||
results[quantity.Name] = quantity[3]
|
||||
return results
|
||||
|
||||
Reference in New Issue
Block a user