Fix #3939. Bug where IfcLabel data type was incorrectly used for longer text data.

This commit is contained in:
Dion Moult
2023-10-28 14:44:41 +11:00
parent e641120166
commit cdc3f70ff4
10 changed files with 32 additions and 24 deletions
@@ -908,14 +908,14 @@ class OverrideDuplicateMoveAggregate(bpy.types.Operator):
"pset.edit_pset", "pset.edit_pset",
tool.Ifc.get(), tool.Ifc.get(),
pset=tool.Ifc.get().by_id(pset["id"]), pset=tool.Ifc.get().by_id(pset["id"]),
properties={"Data": json.dumps(data)}, properties={"Data": tool.Ifc.get().createIfcText(json.dumps(data))},
) )
else: else:
ifcopenshell.api.run( ifcopenshell.api.run(
"pset.edit_pset", "pset.edit_pset",
tool.Ifc.get(), tool.Ifc.get(),
pset=tool.Ifc.get().by_id(pset["id"]), pset=tool.Ifc.get().by_id(pset["id"]),
properties={"Parent": parent.GlobalId, "Data": json.dumps(data)}, properties={"Parent": parent.GlobalId, "Data": tool.Ifc.get().createIfcText(json.dumps(data))},
) )
else: else:
@@ -927,7 +927,7 @@ class OverrideDuplicateMoveAggregate(bpy.types.Operator):
"pset.edit_pset", "pset.edit_pset",
tool.Ifc.get(), tool.Ifc.get(),
pset=pset, pset=pset,
properties={"Parent": parent.GlobalId, "Data": json.dumps(data)}, properties={"Parent": parent.GlobalId, "Data": tool.Ifc.get().createIfcText(json.dumps(data))},
) )
def add_child_to_assembly_data(new_entity): def add_child_to_assembly_data(new_entity):
@@ -941,7 +941,7 @@ class OverrideDuplicateMoveAggregate(bpy.types.Operator):
"pset.edit_pset", "pset.edit_pset",
tool.Ifc.get(), tool.Ifc.get(),
pset=tool.Ifc.get().by_id(parent_pset["id"]), pset=tool.Ifc.get().by_id(parent_pset["id"]),
properties={"Data": json.dumps(data)}, properties={"Data": tool.Ifc.get().createIfcText(json.dumps(data))},
) )
def create_data_structure(entity, level=-1): def create_data_structure(entity, level=-1):
@@ -1215,7 +1215,10 @@ class RefreshAggregate(bpy.types.Operator):
"pset.edit_pset", "pset.edit_pset",
tool.Ifc.get(), tool.Ifc.get(),
pset=pset, pset=pset,
properties={"Parent": instance_entity.GlobalId, "Data": json.dumps(data)}, properties={
"Parent": instance_entity.GlobalId,
"Data": tool.Ifc.get().createIfcText(json.dumps(data)),
},
) )
part_obj = tool.Ifc.get_object(part) part_obj = tool.Ifc.get_object(part)
@@ -1254,7 +1257,10 @@ class RefreshAggregate(bpy.types.Operator):
"pset.edit_pset", "pset.edit_pset",
tool.Ifc.get(), tool.Ifc.get(),
pset=pset, pset=pset,
properties={"Parent": instance_entity.GlobalId, "Data": json.dumps(data)}, properties={
"Parent": instance_entity.GlobalId,
"Data": tool.Ifc.get().createIfcText(json.dumps(data)),
},
) )
part_obj = tool.Ifc.get_object(part) part_obj = tool.Ifc.get_object(part)
@@ -59,7 +59,7 @@ class AddArray(bpy.types.Operator, tool.Ifc.Operator):
"pset.edit_pset", "pset.edit_pset",
tool.Ifc.get(), tool.Ifc.get(),
pset=pset, pset=pset,
properties={"Parent": element.GlobalId, "Data": json.dumps(data)}, properties={"Parent": element.GlobalId, "Data": tool.Ifc.get().createIfcText(json.dumps(data))},
) )
return {"FINISHED"} return {"FINISHED"}
@@ -132,7 +132,7 @@ class EditArray(bpy.types.Operator, tool.Ifc.Operator):
tool.Model.regenerate_array(parent, data) tool.Model.regenerate_array(parent, data)
pset = tool.Ifc.get().by_id(pset["id"]) pset = tool.Ifc.get().by_id(pset["id"])
data = json.dumps(data) data = tool.Ifc.get().createIfcText(json.dumps(data))
ifcopenshell.api.run("pset.edit_pset", tool.Ifc.get(), pset=pset, properties={"Data": data}) ifcopenshell.api.run("pset.edit_pset", tool.Ifc.get(), pset=pset, properties={"Data": data})
tool.Blender.Modifier.Array.set_children_lock_state(element, self.item, True) tool.Blender.Modifier.Array.set_children_lock_state(element, self.item, True)
@@ -196,7 +196,7 @@ class RemoveArray(bpy.types.Operator, tool.Ifc.Operator):
ifcopenshell.api.run("pset.remove_pset", tool.Ifc.get(), pset=pset) ifcopenshell.api.run("pset.remove_pset", tool.Ifc.get(), pset=pset)
else: else:
del data[self.item] del data[self.item]
data = json.dumps(data) data = tool.Ifc.get().createIfcText(json.dumps(data))
ifcopenshell.api.run("pset.edit_pset", tool.Ifc.get(), pset=pset, properties={"Data": data}) ifcopenshell.api.run("pset.edit_pset", tool.Ifc.get(), pset=pset, properties={"Data": data})
tool.Blender.Modifier.Array.constrain_children_to_parent(element) tool.Blender.Modifier.Array.constrain_children_to_parent(element)
@@ -549,7 +549,7 @@ class AddDoor(bpy.types.Operator, tool.Ifc.Operator):
"pset.edit_pset", "pset.edit_pset",
tool.Ifc.get(), tool.Ifc.get(),
pset=pset, pset=pset,
properties={"Data": json.dumps(door_data, default=list)}, properties={"Data": tool.Ifc.get().createIfcText(json.dumps(door_data, default=list))},
) )
update_door_modifier_representation(context, obj) update_door_modifier_representation(context, obj)
return {"FINISHED"} return {"FINISHED"}
@@ -608,7 +608,7 @@ class FinishEditingDoor(bpy.types.Operator, tool.Ifc.Operator):
update_door_modifier_representation(context, obj) update_door_modifier_representation(context, obj)
pset = tool.Pset.get_element_pset(element, "BBIM_Door") pset = tool.Pset.get_element_pset(element, "BBIM_Door")
door_data = json.dumps(door_data, default=list) door_data = tool.Ifc.get().createIfcText(json.dumps(door_data, default=list))
ifcopenshell.api.run("pset.edit_pset", tool.Ifc.get(), pset=pset, properties={"Data": door_data}) ifcopenshell.api.run("pset.edit_pset", tool.Ifc.get(), pset=pset, properties={"Data": door_data})
return {"FINISHED"} return {"FINISHED"}
@@ -856,7 +856,7 @@ class MEPAddTransition(bpy.types.Operator, tool.Ifc.Operator):
"pset.edit_pset", "pset.edit_pset",
tool.Ifc.get(), tool.Ifc.get(),
pset=pset, pset=pset,
properties={"Data": json.dumps(transition_data, default=list)}, properties={"Data": tool.Ifc.get().createIfcText(json.dumps(transition_data, default=list))},
) )
tool.System.add_ports(obj, offset_end_port=profile_offset_si) tool.System.add_ports(obj, offset_end_port=profile_offset_si)
@@ -1200,7 +1200,7 @@ class MEPAddBend(bpy.types.Operator, tool.Ifc.Operator):
"pset.edit_pset", "pset.edit_pset",
tool.Ifc.get(), tool.Ifc.get(),
pset=pset, pset=pset,
properties={"Data": json.dumps(bend_data, default=list)}, properties={"Data": tool.Ifc.get().createIfcText(json.dumps(bend_data, default=list))},
) )
tool.System.add_ports(obj, end_port_pos=second_object_offset) tool.System.add_ports(obj, end_port_pos=second_object_offset)
@@ -114,7 +114,7 @@ def update_bbim_railing_pset(element, railing_data):
pset = tool.Pset.get_element_pset(element, "BBIM_Railing") pset = tool.Pset.get_element_pset(element, "BBIM_Railing")
if not pset: if not pset:
pset = ifcopenshell.api.run("pset.add_pset", tool.Ifc.get(), product=element, name="BBIM_Railing") pset = ifcopenshell.api.run("pset.add_pset", tool.Ifc.get(), product=element, name="BBIM_Railing")
railing_data = json.dumps(railing_data, default=list) railing_data = tool.Ifc.get().createIfcText(json.dumps(railing_data, default=list))
ifcopenshell.api.run("pset.edit_pset", tool.Ifc.get(), pset=pset, properties={"Data": railing_data}) ifcopenshell.api.run("pset.edit_pset", tool.Ifc.get(), pset=pset, properties={"Data": railing_data})
@@ -412,7 +412,7 @@ def update_bbim_roof_pset(element, roof_data):
pset = tool.Pset.get_element_pset(element, "BBIM_Roof") pset = tool.Pset.get_element_pset(element, "BBIM_Roof")
if not pset: if not pset:
pset = ifcopenshell.api.run("pset.add_pset", tool.Ifc.get(), product=element, name="BBIM_Roof") pset = ifcopenshell.api.run("pset.add_pset", tool.Ifc.get(), product=element, name="BBIM_Roof")
roof_data = json.dumps(roof_data, default=list) roof_data = tool.Ifc.get().createIfcText(json.dumps(roof_data, default=list))
ifcopenshell.api.run("pset.edit_pset", tool.Ifc.get(), pset=pset, properties={"Data": roof_data}) ifcopenshell.api.run("pset.edit_pset", tool.Ifc.get(), pset=pset, properties={"Data": roof_data})
@@ -377,7 +377,7 @@ class AddStair(bpy.types.Operator, tool.Ifc.Operator):
"pset.edit_pset", "pset.edit_pset",
ifc_file, ifc_file,
pset=pset, pset=pset,
properties={"Data": json.dumps(stair_data)}, properties={"Data": tool.Ifc.get().createIfcText(json.dumps(stair_data))},
) )
regenerate_stair_mesh(context) regenerate_stair_mesh(context)
update_ifc_stair_props(obj) update_ifc_stair_props(obj)
@@ -419,7 +419,7 @@ class FinishEditingStair(bpy.types.Operator, tool.Ifc.Operator):
update_stair_representation(obj) update_stair_representation(obj)
pset = tool.Pset.get_element_pset(element, "BBIM_Stair") pset = tool.Pset.get_element_pset(element, "BBIM_Stair")
data = json.dumps(data) data = tool.Ifc.get().createIfcText(json.dumps(data))
ifcopenshell.api.run("pset.edit_pset", tool.Ifc.get(), pset=pset, properties={"Data": data}) ifcopenshell.api.run("pset.edit_pset", tool.Ifc.get(), pset=pset, properties={"Data": data})
# update IfcStairFlight properties # update IfcStairFlight properties
@@ -169,7 +169,7 @@ class UpdateDataFromSverchok(bpy.types.Operator, tool.Ifc.Operator):
"pset.edit_pset", "pset.edit_pset",
tool.Ifc.get(), tool.Ifc.get(),
pset=pset, pset=pset,
properties={"Data": json.dumps(sverchok_data)}, properties={"Data": tool.Ifc.get().createIfcText(json.dumps(sverchok_data))},
) )
update_sverchok_modifier(context) update_sverchok_modifier(context)
@@ -496,7 +496,7 @@ class AddWindow(bpy.types.Operator, tool.Ifc.Operator):
"pset.edit_pset", "pset.edit_pset",
tool.Ifc.get(), tool.Ifc.get(),
pset=pset, pset=pset,
properties={"Data": json.dumps(window_data, default=list)}, properties={"Data": tool.Ifc.get().createIfcText(json.dumps(window_data, default=list))},
) )
update_window_modifier_representation(context, obj) update_window_modifier_representation(context, obj)
return {"FINISHED"} return {"FINISHED"}
@@ -553,7 +553,7 @@ class FinishEditingWindow(bpy.types.Operator, tool.Ifc.Operator):
update_window_modifier_representation(context, obj) update_window_modifier_representation(context, obj)
pset = tool.Pset.get_element_pset(element, "BBIM_Window") pset = tool.Pset.get_element_pset(element, "BBIM_Window")
window_data = json.dumps(window_data, default=list) window_data = tool.Ifc.get().createIfcText(json.dumps(window_data, default=list))
ifcopenshell.api.run("pset.edit_pset", tool.Ifc.get(), pset=pset, properties={"Data": window_data}) ifcopenshell.api.run("pset.edit_pset", tool.Ifc.get(), pset=pset, properties={"Data": window_data})
return {"FINISHED"} return {"FINISHED"}
+6 -4
View File
@@ -513,7 +513,8 @@ class Model(blenderbim.core.tool.Model):
else: else:
pset = ifcopenshell.api.run("pset.add_pset", tool.Ifc.get(), product=element, name="BBIM_Boolean") pset = ifcopenshell.api.run("pset.add_pset", tool.Ifc.get(), product=element, name="BBIM_Boolean")
data = boolean_ids data = boolean_ids
ifcopenshell.api.run("pset.edit_pset", tool.Ifc.get(), pset=pset, properties={"Data": json.dumps(data)}) data = tool.Ifc.get().createIfcText(json.dumps(data))
ifcopenshell.api.run("pset.edit_pset", tool.Ifc.get(), pset=pset, properties={"Data": data})
@classmethod @classmethod
def unmark_manual_booleans(cls, element, booleans): def unmark_manual_booleans(cls, element, booleans):
@@ -526,7 +527,8 @@ class Model(blenderbim.core.tool.Model):
data = list(data) data = list(data)
pset = tool.Ifc.get().by_id(pset["id"]) pset = tool.Ifc.get().by_id(pset["id"])
if data: if data:
ifcopenshell.api.run("pset.edit_pset", tool.Ifc.get(), pset=pset, properties={"Data": json.dumps(data)}) data = tool.Ifc.get().createIfcText(json.dumps(data))
ifcopenshell.api.run("pset.edit_pset", tool.Ifc.get(), pset=pset, properties={"Data": data})
else: else:
ifcopenshell.api.run("pset.remove_pset", tool.Ifc.get(), pset=pset) ifcopenshell.api.run("pset.remove_pset", tool.Ifc.get(), pset=pset)
@@ -601,7 +603,7 @@ class Model(blenderbim.core.tool.Model):
else: else:
obj = tool.Ifc.get_object(element) obj = tool.Ifc.get_object(element)
array_pset = tool.Pset.get_element_pset(element, "BBIM_Array") array_pset = tool.Pset.get_element_pset(element, "BBIM_Array")
default_data = '[{"children": []}]' default_data = tool.Ifc.get().createIfcText('[{"children": []}]')
ifcopenshell.api.run( ifcopenshell.api.run(
"pset.edit_pset", "pset.edit_pset",
tool.Ifc.get(), tool.Ifc.get(),
@@ -611,7 +613,7 @@ class Model(blenderbim.core.tool.Model):
tool.Model.regenerate_array(obj, array_data) tool.Model.regenerate_array(obj, array_data)
json_data = json.dumps(array_data) json_data = tool.Ifc.get().createIfcText(json.dumps(array_data))
ifcopenshell.api.run("pset.edit_pset", tool.Ifc.get(), pset=array_pset, properties={"Data": json_data}) ifcopenshell.api.run("pset.edit_pset", tool.Ifc.get(), pset=array_pset, properties={"Data": json_data})
for i in range(len(array_data)): for i in range(len(array_data)):