mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-10 09:48:32 +00:00
Add IfcTester support and test cases for bounded, table, and reference props
This commit is contained in:
@@ -86,6 +86,11 @@ def get_quantities(quantities):
|
||||
for quantity in quantities or []:
|
||||
if quantity.is_a("IfcPhysicalSimpleQuantity"):
|
||||
results[quantity.Name] = quantity[3]
|
||||
elif quantity.is_a("IfcPhysicalComplexQuantity"):
|
||||
data = {k: v for k, v in quantity.get_info().items() if v is not None and k != "Name"}
|
||||
data["properties"] = get_quantities(quantity.HasQuantities)
|
||||
del data["HasQuantities"]
|
||||
results[quantity.Name] = data
|
||||
return results
|
||||
|
||||
|
||||
@@ -98,6 +103,12 @@ def get_properties(properties):
|
||||
results[prop.Name] = [v.wrappedValue for v in prop.EnumerationValues] or None
|
||||
elif prop.is_a("IfcPropertyListValue"):
|
||||
results[prop.Name] = [v.wrappedValue for v in prop.ListValues] or None
|
||||
elif prop.is_a("IfcPropertyBoundedValue"):
|
||||
data = prop.get_info()
|
||||
del data["Unit"]
|
||||
results[prop.Name] = data
|
||||
elif prop.is_a("IfcPropertyTableValue"):
|
||||
results[prop.Name] = prop.get_info()
|
||||
elif prop.is_a("IfcComplexProperty"):
|
||||
data = {k: v for k, v in prop.get_info().items() if v is not None and k != "Name"}
|
||||
data["properties"] = get_properties(prop.HasProperties)
|
||||
|
||||
@@ -341,6 +341,29 @@ def get_property_unit(prop, ifc_file):
|
||||
measure_class = prop.EnumerationValues[0].is_a()
|
||||
elif prop.is_a("IfcPropertyListValue") and prop.ListValues:
|
||||
measure_class = prop.ListValues[0].is_a()
|
||||
elif prop.is_a("IfcPropertyBoundedValue"):
|
||||
if prop.UpperBoundValue:
|
||||
measure_class = prop.UpperBoundValue.is_a()
|
||||
elif prop.LowerBoundValue:
|
||||
measure_class = prop.LowerBoundValue.is_a()
|
||||
elif prop.SetPointValue:
|
||||
measure_class = prop.SetPointValue.is_a()
|
||||
elif prop.is_a("IfcPropertyTableValue"):
|
||||
table_units = {}
|
||||
for attribute in ["Defining", "Defined"]:
|
||||
if getattr(prop, f"{attribute}Unit"):
|
||||
table_units[f"{attribute}Unit"] = getattr(prop, f"{attribute}Unit")
|
||||
elif getattr(prop, f"{attribute}Values"):
|
||||
measure_class = getattr(prop, f"{attribute}Values")[0].is_a()
|
||||
unit_type = get_measure_unit_type(measure_class)
|
||||
units = [u for u in unit_assignment.Units if getattr(u, "UnitType", None) == unit_type]
|
||||
if units:
|
||||
table_units[f"{attribute}Unit"] = units[0]
|
||||
else:
|
||||
table_units[f"{attribute}Unit"] = None
|
||||
else:
|
||||
table_units[f"{attribute}Unit"] = None
|
||||
return table_units
|
||||
unit_type = get_measure_unit_type(measure_class)
|
||||
units = [u for u in unit_assignment.Units if getattr(u, "UnitType", None) == unit_type]
|
||||
if units:
|
||||
|
||||
Reference in New Issue
Block a user