diff --git a/src/bonsai/bonsai/bim/module/geometry/operator.py b/src/bonsai/bonsai/bim/module/geometry/operator.py index a2a5ce76e2..96d1d2a0aa 100644 --- a/src/bonsai/bonsai/bim/module/geometry/operator.py +++ b/src/bonsai/bonsai/bim/module/geometry/operator.py @@ -954,6 +954,12 @@ class OverrideDuplicateMove(bpy.types.Operator): new_obj = obj.copy() temp_data = None + # Currently for optimization we do not apply pending changes (scale or changed .data) + # to the original and duplicated objects. + # Keep new object edited if original is. + if tool.Ifc.is_edited(obj, ignore_scale=True): + tool.Ifc.edit(new_obj) + if obj.data and not linked_non_ifc_object: # assure root.copy_class won't replace the previous mesh globally temp_data = obj.data.copy() diff --git a/src/bonsai/bonsai/tool/ifc.py b/src/bonsai/bonsai/tool/ifc.py index cec12c6746..521ac35a88 100644 --- a/src/bonsai/bonsai/tool/ifc.py +++ b/src/bonsai/bonsai/tool/ifc.py @@ -66,8 +66,8 @@ class Ifc(bonsai.core.tool.Ifc): return IfcStore.get_file().schema @classmethod - def is_edited(cls, obj: bpy.types.Object) -> bool: - return tool.Geometry.is_scaled(obj) or obj in IfcStore.edited_objs + def is_edited(cls, obj: bpy.types.Object, *, ignore_scale: bool = False) -> bool: + return (not ignore_scale and tool.Geometry.is_scaled(obj)) or obj in IfcStore.edited_objs @classmethod def is_moved(cls, obj: bpy.types.Object) -> bool: