From 93d2699155a467e78d404112c463df869ac53dc8 Mon Sep 17 00:00:00 2001 From: Gorgious Date: Wed, 25 Aug 2021 15:18:32 +0200 Subject: [PATCH] Revert "Fix Attribute data type not being assigned when it makes sense" This reverts commit 1117c8670c12bfe2dbd9ebb7138677ba3a241003. --- .../bim/module/classification/operator.py | 10 +++----- .../bim/module/georeference/operator.py | 12 ++++++++-- .../blenderbim/bim/module/group/operator.py | 2 +- .../blenderbim/bim/module/layer/operator.py | 2 +- .../bim/module/material/operator.py | 23 +++++++++++++++---- .../blenderbim/bim/module/pset/operator.py | 12 +++++++--- .../bim/module/structural/operator.py | 9 +++++--- .../blenderbim/bim/module/system/operator.py | 2 +- .../blenderbim/bim/module/unit/operator.py | 3 ++- 9 files changed, 51 insertions(+), 24 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/classification/operator.py b/src/blenderbim/blenderbim/bim/module/classification/operator.py index 66e26f5d2b..b1dd53b8fd 100644 --- a/src/blenderbim/blenderbim/bim/module/classification/operator.py +++ b/src/blenderbim/blenderbim/bim/module/classification/operator.py @@ -47,10 +47,6 @@ class AddClassification(bpy.types.Operator): bl_label = "Add Classification" bl_options = {"REGISTER", "UNDO"} - @classmethod - def poll(cls, context): - return getClassifications(context.scene.BIMClassificationProperties, context) - def execute(self, context): return IfcStore.execute_ifc_operator(self, context) @@ -81,9 +77,9 @@ class EnableEditingClassification(bpy.types.Operator): new.is_null = classification_data[attribute.name()] is None new.is_optional = attribute.optional() if attribute.name() == "ReferenceTokens": - new.set_value("" if new.is_null else json.dumps(classification_data[attribute.name()])) + new.string_value = "" if new.is_null else json.dumps(classification_data[attribute.name()]) else: - new.set_value("" if new.is_null else classification_data[attribute.name()]) + new.string_value = "" if new.is_null else classification_data[attribute.name()] props.active_classification_id = self.classification return {"FINISHED"} @@ -166,7 +162,7 @@ class EnableEditingClassificationReference(bpy.types.Operator): new.name = attribute.name() new.is_null = reference_data[attribute.name()] is None new.is_optional = attribute.optional() - new.set_value("" if new.is_null else reference_data[attribute.name()]) + new.string_value = "" if new.is_null else reference_data[attribute.name()] props.active_reference_id = self.reference return {"FINISHED"} diff --git a/src/blenderbim/blenderbim/bim/module/georeference/operator.py b/src/blenderbim/blenderbim/bim/module/georeference/operator.py index b3e9777435..2026de99e4 100644 --- a/src/blenderbim/blenderbim/bim/module/georeference/operator.py +++ b/src/blenderbim/blenderbim/bim/module/georeference/operator.py @@ -49,7 +49,14 @@ class EnableEditingGeoreferencing(bpy.types.Operator): new.is_null = Data.projected_crs[attribute.name()] is None new.is_optional = attribute.optional() new.data_type = data_type - new.set_value(new.get_value_default() if new.is_null else Data.projected_crs[attribute.name()]) + if data_type == "string": + new.string_value = "" if new.is_null else Data.projected_crs[attribute.name()] + elif data_type == "float": + new.float_value = 0.0 if new.is_null else Data.projected_crs[attribute.name()] + elif data_type == "integer": + new.int_value = 0 if new.is_null else Data.projected_crs[attribute.name()] + elif data_type == "boolean": + new.bool_value = False if new.is_null else Data.projected_crs[attribute.name()] props.is_map_unit_null = Data.projected_crs["MapUnit"] is None if not props.is_map_unit_null: @@ -72,7 +79,8 @@ class EnableEditingGeoreferencing(bpy.types.Operator): new.is_null = Data.map_conversion[attribute.name()] is None new.is_optional = attribute.optional() # Enforce a string data type to prevent data loss in single-precision Blender props - new.set_value("" if new.is_null else str(Data.map_conversion[attribute.name()])) + new.data_type = "string" + new.string_value = "" if new.is_null else str(Data.map_conversion[attribute.name()]) props.has_true_north = bool(Data.true_north) if Data.true_north: diff --git a/src/blenderbim/blenderbim/bim/module/group/operator.py b/src/blenderbim/blenderbim/bim/module/group/operator.py index d1bc2b43cc..0cd773791f 100644 --- a/src/blenderbim/blenderbim/bim/module/group/operator.py +++ b/src/blenderbim/blenderbim/bim/module/group/operator.py @@ -130,7 +130,7 @@ class EnableEditingGroup(bpy.types.Operator): new.name = attribute.name() new.is_null = data[attribute.name()] is None new.is_optional = attribute.optional() - new.set_value("" if new.is_null else data[attribute.name()]) + new.string_value = "" if new.is_null else data[attribute.name()] props.active_group_id = self.group return {"FINISHED"} diff --git a/src/blenderbim/blenderbim/bim/module/layer/operator.py b/src/blenderbim/blenderbim/bim/module/layer/operator.py index f077f2dfdb..2ebd391809 100644 --- a/src/blenderbim/blenderbim/bim/module/layer/operator.py +++ b/src/blenderbim/blenderbim/bim/module/layer/operator.py @@ -73,7 +73,7 @@ class EnableEditingLayer(bpy.types.Operator): new.name = attribute.name() new.is_null = data[attribute.name()] is None new.is_optional = attribute.optional() - new.set_value("" if new.is_null else data[attribute.name()]) + new.string_value = "" if new.is_null else data[attribute.name()] props.active_layer_id = self.layer return {"FINISHED"} diff --git a/src/blenderbim/blenderbim/bim/module/material/operator.py b/src/blenderbim/blenderbim/bim/module/material/operator.py index c19e3e6a2f..7637d98138 100644 --- a/src/blenderbim/blenderbim/bim/module/material/operator.py +++ b/src/blenderbim/blenderbim/bim/module/material/operator.py @@ -444,7 +444,7 @@ class EnableEditingAssignedMaterial(bpy.types.Operator): new = props.material_set_attributes.add() new.name = attribute.name() new.is_null = material_set_data[attribute.name()] is None - new.set_value("" if new.is_null else material_set_data[attribute.name()]) + new.string_value = "" if new.is_null else material_set_data[attribute.name()] return {"FINISHED"} def import_attributes(self, name, prop, data): @@ -600,7 +600,14 @@ class EnableEditingMaterialSetItem(bpy.types.Operator): new.name = attribute.name() new.is_null = material_set_item_data[attribute.name()] is None new.data_type = data_type - new.set_value(new.get_value_default() if new.is_null else material_set_item_data[attribute.name()]) + if data_type == "string": + new.string_value = "" if new.is_null else material_set_item_data[attribute.name()] + elif data_type == "float": + new.float_value = 0.0 if new.is_null else material_set_item_data[attribute.name()] + elif data_type == "integer": + new.int_value = 0 if new.is_null else material_set_item_data[attribute.name()] + elif data_type == "boolean": + new.bool_value = False if new.is_null else material_set_item_data[attribute.name()] def load_profile_attributes(self, material_set_item, material_set_item_data): self.props.material_set_item_profile_attributes.clear() @@ -621,12 +628,18 @@ class EnableEditingMaterialSetItem(bpy.types.Operator): new.is_null = profile_data[attribute.name()] is None new.is_optional = attribute.optional() new.data_type = data_type - if data_type == "enum": + if data_type == "string": + new.string_value = "" if new.is_null else profile_data[attribute.name()] + elif data_type == "float": + new.float_value = 0.0 if new.is_null else profile_data[attribute.name()] + elif data_type == "integer": + new.int_value = 0 if new.is_null else profile_data[attribute.name()] + elif data_type == "boolean": + new.bool_value = False if new.is_null else profile_data[attribute.name()] + elif data_type == "enum": new.enum_items = json.dumps(ifcopenshell.util.attribute.get_enum_items(attribute)) if profile_data[attribute.name()]: new.enum_value = profile_data[attribute.name()] - else: - new.set_value(new.get_value_default() if new.is_null else profile_data[attribute.name()]) # Force null to be false if the attribute is mandatory because when we first assign a profile, all of # its fields are null (which is illegal). diff --git a/src/blenderbim/blenderbim/bim/module/pset/operator.py b/src/blenderbim/blenderbim/bim/module/pset/operator.py index f3b41395c8..3e6a6edf82 100644 --- a/src/blenderbim/blenderbim/bim/module/pset/operator.py +++ b/src/blenderbim/blenderbim/bim/module/pset/operator.py @@ -141,12 +141,18 @@ class EnablePsetEditing(bpy.types.Operator): new.is_optional = True new.data_type = data_type - if data_type == "enum": + if data_type == "string": + new.string_value = "" if new.is_null else data[prop_template.Name] + elif data_type == "integer": + new.int_value = 0 if new.is_null else data[prop_template.Name] + elif data_type == "float": + new.float_value = 0.0 if new.is_null else data[prop_template.Name] + elif data_type == "boolean": + new.bool_value = False if new.is_null else data[prop_template.Name] + elif data_type == "enum": new.enum_items = json.dumps(enum_items) if data.get(prop_template.Name): new.enum_value = data[prop_template.Name] - else: - new.set_value(new.get_value_default() if new.is_null else data[prop_template.Name]) def load_from_pset_data(self, pset_data): for prop_id in pset_data["Properties"]: diff --git a/src/blenderbim/blenderbim/bim/module/structural/operator.py b/src/blenderbim/blenderbim/bim/module/structural/operator.py index 9dd84c5942..5bb3e1469b 100644 --- a/src/blenderbim/blenderbim/bim/module/structural/operator.py +++ b/src/blenderbim/blenderbim/bim/module/structural/operator.py @@ -176,7 +176,8 @@ class EnableEditingStructuralBoundaryCondition(bpy.types.Operator): new.data_type = "float" new.enum_value = [i for i in enum_items if i != "IfcBoolean"][0] elif data_type == "string": - new.set_value("" if new.is_null else data[attribute.name()]) + new.string_value = "" if new.is_null else data[attribute.name()] + new.data_type = "string" props.active_boundary_condition = self.boundary_condition return {"FINISHED"} @@ -358,7 +359,8 @@ class EnableEditingStructuralAnalysisModel(bpy.types.Operator): if data[attribute.name()]: new.enum_value = data[attribute.name()] else: - new.set_value("" if new.is_null else data[attribute.name()]) + new.string_value = "" if new.is_null else data[attribute.name()] + new.data_type = "string" props.active_structural_analysis_model_id = self.structural_analysis_model return {"FINISHED"} @@ -1095,7 +1097,8 @@ class EnableEditingBoundaryCondition(bpy.types.Operator): new.data_type = "float" new.enum_value = [i for i in enum_items if i != "IfcBoolean"][0] elif data_type == "string": - new.set_value("" if new.is_null else data[attribute.name()]) + new.string_value = "" if new.is_null else data[attribute.name()] + new.data_type = "string" props.active_boundary_condition_id = self.boundary_condition return {"FINISHED"} diff --git a/src/blenderbim/blenderbim/bim/module/system/operator.py b/src/blenderbim/blenderbim/bim/module/system/operator.py index a798ef6394..51597aa7c0 100644 --- a/src/blenderbim/blenderbim/bim/module/system/operator.py +++ b/src/blenderbim/blenderbim/bim/module/system/operator.py @@ -130,7 +130,7 @@ class EnableEditingSystem(bpy.types.Operator): new.name = attribute.name() new.is_null = data[attribute.name()] is None new.is_optional = attribute.optional() - new.set_value("" if new.is_null else data[attribute.name()]) + new.string_value = "" if new.is_null else data[attribute.name()] props.active_system_id = self.system return {"FINISHED"} diff --git a/src/blenderbim/blenderbim/bim/module/unit/operator.py b/src/blenderbim/blenderbim/bim/module/unit/operator.py index a042f9fb61..d55c0cd3e6 100644 --- a/src/blenderbim/blenderbim/bim/module/unit/operator.py +++ b/src/blenderbim/blenderbim/bim/module/unit/operator.py @@ -248,7 +248,8 @@ class EnableEditingUnit(bpy.types.Operator): new.name = name new.is_null = data[name] is None new.is_optional = False - new.set_value(json.dumps([e for e in IfcStore.get_file().by_id(data["id"]).Dimensions])) + new.data_type = "string" + new.string_value = json.dumps([e for e in IfcStore.get_file().by_id(data["id"]).Dimensions]) return True