From 8172096a5bc083308e83f54ebf377bc997e46d0d Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 25 Jun 2024 15:28:47 +0500 Subject: [PATCH] Do not directly access IfcStore.edited_objs --- .../blenderbim/bim/module/geometry/operator.py | 2 +- src/blenderbim/blenderbim/bim/module/model/railing.py | 2 +- src/blenderbim/blenderbim/bim/module/root/operator.py | 3 +-- src/blenderbim/blenderbim/tool/ifc.py | 10 ++++++---- src/blenderbim/blenderbim/tool/misc.py | 4 ++-- 5 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/geometry/operator.py b/src/blenderbim/blenderbim/bim/module/geometry/operator.py index 5b9ea31939..82a6fd6f0c 100644 --- a/src/blenderbim/blenderbim/bim/module/geometry/operator.py +++ b/src/blenderbim/blenderbim/bim/module/geometry/operator.py @@ -324,7 +324,7 @@ class UpdateRepresentation(bpy.types.Operator, Operator): if not obj.data: continue self.update_obj_mesh_representation(context, obj) - IfcStore.edited_objs.discard(obj) + tool.Ifc.finish_edit(obj) return {"FINISHED"} def update_obj_mesh_representation(self, context, obj): diff --git a/src/blenderbim/blenderbim/bim/module/model/railing.py b/src/blenderbim/blenderbim/bim/module/model/railing.py index 6d7bca3ad4..843db19ed2 100644 --- a/src/blenderbim/blenderbim/bim/module/model/railing.py +++ b/src/blenderbim/blenderbim/bim/module/model/railing.py @@ -108,7 +108,7 @@ def update_railing_modifier_ifc_data(context): tool.Model.replace_object_ifc_representation(body, obj, model_representation) # hacky way to ensure tha ifc representation won't get tessellated at project save - IfcStore.edited_objs.discard(obj) + tool.Ifc.finish_edit(obj) elif props.railing_type == "FRAMELESS_PANEL": tool.Ifc.edit(obj) diff --git a/src/blenderbim/blenderbim/bim/module/root/operator.py b/src/blenderbim/blenderbim/bim/module/root/operator.py index 130300c3f8..f459f8baf1 100644 --- a/src/blenderbim/blenderbim/bim/module/root/operator.py +++ b/src/blenderbim/blenderbim/bim/module/root/operator.py @@ -238,8 +238,7 @@ class UnlinkObject(bpy.types.Operator): for obj in objects: was_active_object = obj == context.active_object - if obj in IfcStore.edited_objs: - IfcStore.edited_objs.remove(obj) + tool.Ifc.finish_edit(obj) element = tool.Ifc.get_entity(obj) if element and self.should_delete: diff --git a/src/blenderbim/blenderbim/tool/ifc.py b/src/blenderbim/blenderbim/tool/ifc.py index b25d164c6f..51a8be132a 100644 --- a/src/blenderbim/blenderbim/tool/ifc.py +++ b/src/blenderbim/blenderbim/tool/ifc.py @@ -165,14 +165,16 @@ class Ifc(blenderbim.core.tool.Ifc): @classmethod def edit(cls, obj: bpy.types.Object) -> None: + """Mark object as edited.""" IfcStore.edited_objs.add(obj) @classmethod def finish_edit(cls, obj: bpy.types.Object) -> None: - try: - IfcStore.edited_objs.remove(obj) - except: - pass + """Unmark object as edited. + + Method is safe to use on an object that wasn't marked as edited before. + """ + IfcStore.edited_objs.discard(obj) @classmethod def resolve_uri(cls, uri): diff --git a/src/blenderbim/blenderbim/tool/misc.py b/src/blenderbim/blenderbim/tool/misc.py index 68e263eaaf..d34e10a716 100644 --- a/src/blenderbim/blenderbim/tool/misc.py +++ b/src/blenderbim/blenderbim/tool/misc.py @@ -93,8 +93,8 @@ class Misc(blenderbim.core.tool.Misc): bpy.ops.object.transform_apply(location=False, rotation=False, scale=True) @classmethod - def mark_object_as_edited(cls, obj): - IfcStore.edited_objs.add(obj) + def mark_object_as_edited(cls, obj: bpy.types.Object) -> None: + tool.Ifc.edit(obj) @classmethod def split_objects_with_cutter(