mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-10 01:41:57 +00:00
Editing psets can now accept user specified data types and auto-detect non-string data types
This commit is contained in:
@@ -39,7 +39,7 @@ class Usecase:
|
||||
if value is None:
|
||||
prop.NominalValue = None
|
||||
else:
|
||||
primary_measure_type = self.get_primary_measure_type(prop.Name, previous_value=prop.NominalValue)
|
||||
primary_measure_type = self.get_primary_measure_type(prop.Name, old_value=prop.NominalValue, new_value=value)
|
||||
prop.NominalValue = self.file.create_entity(primary_measure_type, value)
|
||||
del self.settings["properties"][prop.Name]
|
||||
|
||||
@@ -48,7 +48,9 @@ class Usecase:
|
||||
for name, value in self.settings["properties"].items():
|
||||
if value is None:
|
||||
continue
|
||||
primary_measure_type = self.get_primary_measure_type(name)
|
||||
primary_measure_type = self.get_primary_measure_type(name, new_value=value)
|
||||
if hasattr(value, "is_a"):
|
||||
value = value.wrappedValue
|
||||
properties.append(
|
||||
self.file.create_entity(
|
||||
"IfcPropertySingleValue",
|
||||
@@ -71,11 +73,22 @@ class Usecase:
|
||||
elif hasattr(self.settings["pset"], "Properties"): # For IfcMaterialProperties
|
||||
return self.settings["pset"].Properties or []
|
||||
|
||||
def get_primary_measure_type(self, name, previous_value=None):
|
||||
if not self.pset_template:
|
||||
return previous_value.is_a() if previous_value else "IfcLabel"
|
||||
for prop_template in self.pset_template.HasPropertyTemplates:
|
||||
if prop_template.Name != name:
|
||||
continue
|
||||
return prop_template.PrimaryMeasureType or "IfcLabel"
|
||||
return previous_value.is_a() if previous_value else "IfcLabel"
|
||||
def get_primary_measure_type(self, name, old_value=None, new_value=None):
|
||||
if self.pset_template:
|
||||
for prop_template in self.pset_template.HasPropertyTemplates:
|
||||
if prop_template.Name != name:
|
||||
continue
|
||||
return prop_template.PrimaryMeasureType or "IfcLabel"
|
||||
if old_value:
|
||||
return old_value.is_a()
|
||||
elif new_value and hasattr(new_value, "is_a"):
|
||||
return new_value.is_a()
|
||||
elif new_value is not None:
|
||||
if isinstance(new_value, str):
|
||||
return "IfcLabel"
|
||||
elif isinstance(new_value, float):
|
||||
return "IfcReal"
|
||||
elif isinstance(new_value, bool):
|
||||
return "IfcBoolean"
|
||||
elif isinstance(new_value, int):
|
||||
return "IfcInteger"
|
||||
|
||||
Reference in New Issue
Block a user