Get psets utility now supports getting material and profile psets

This commit is contained in:
Dion Moult
2021-10-25 16:09:04 +11:00
parent fbadcc017b
commit 54fa45850a
2 changed files with 40 additions and 15 deletions
@@ -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