From e3f2f2175df16be52bd7b5617b59cbb79d9e9c33 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 22 Sep 2023 16:00:20 +0500 Subject: [PATCH] Moving common code for duplication operators --- .../bim/module/geometry/operator.py | 65 +------------------ src/blenderbim/blenderbim/tool/geometry.py | 24 +++++++ 2 files changed, 27 insertions(+), 62 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/geometry/operator.py b/src/blenderbim/blenderbim/bim/module/geometry/operator.py index 23e620f7a4..a2a01392f5 100644 --- a/src/blenderbim/blenderbim/bim/module/geometry/operator.py +++ b/src/blenderbim/blenderbim/bim/module/geometry/operator.py @@ -680,27 +680,7 @@ class OverrideDuplicateMove(bpy.types.Operator): return len(context.selected_objects) > 0 def execute(self, context): - # Deep magick from the dawn of time - if IfcStore.get_file(): - IfcStore.execute_ifc_operator(self, context) - if self.new_active_obj: - context.view_layer.objects.active = self.new_active_obj - return {"FINISHED"} - - new_active_obj = None - for obj in context.selected_objects: - new_obj = obj.copy() - if obj.data: - new_obj.data = obj.data.copy() - if obj == context.active_object: - new_active_obj = new_obj - for collection in obj.users_collection: - collection.objects.link(new_obj) - obj.select_set(False) - new_obj.select_set(True) - if new_active_obj: - context.view_layer.objects.active = new_active_obj - return {"FINISHED"} + return tool.Geometry.duplicate_move_operator_execute(self, context, linked=False) def _execute(self, context): objects_to_duplicate = set(context.selected_objects) @@ -814,25 +794,7 @@ class OverrideDuplicateMoveLinked(bpy.types.Operator): return len(context.selected_objects) > 0 def execute(self, context): - # Deep magick from the dawn of time - if IfcStore.get_file(): - IfcStore.execute_ifc_operator(self, context) - if self.new_active_obj: - context.view_layer.objects.active = self.new_active_obj - return {"FINISHED"} - - new_active_obj = None - for obj in context.selected_objects: - new_obj = obj.copy() - if obj == context.active_object: - new_active_obj = new_obj - for collection in obj.users_collection: - collection.objects.link(new_obj) - obj.select_set(False) - new_obj.select_set(True) - if new_active_obj: - context.view_layer.objects.active = new_active_obj - return {"FINISHED"} + return tool.Geometry.duplicate_move_operator_execute(self, context, linked=True) def _execute(self, context): self.new_active_obj = None @@ -881,28 +843,7 @@ class OverrideDuplicateMoveAggregate(bpy.types.Operator): return len(context.selected_objects) > 0 def execute(self, context): - # Deep magick from the dawn of time - if IfcStore.get_file(): - IfcStore.execute_ifc_operator(self, context) - if self.new_active_obj: - context.view_layer.objects.active = self.new_active_obj - return {"FINISHED"} - - new_active_obj = None - - for obj in context.selected_objects: - new_obj = obj.copy() - if obj.data: - new_obj.data = obj.data.copy() - if obj == context.active_object: - new_active_obj = new_obj - for collection in obj.users_collection: - collection.objects.link(new_obj) - obj.select_set(False) - new_obj.select_set(True) - if new_active_obj: - context.view_layer.objects.active = new_active_obj - return {"FINISHED"} + return tool.Geometry.duplicate_move_operator_execute(self, context, linked=False) def _execute(self, context): self.new_active_obj = None diff --git a/src/blenderbim/blenderbim/tool/geometry.py b/src/blenderbim/blenderbim/tool/geometry.py index 8e624d61f0..5860f369f2 100644 --- a/src/blenderbim/blenderbim/tool/geometry.py +++ b/src/blenderbim/blenderbim/tool/geometry.py @@ -641,3 +641,27 @@ class Geometry(blenderbim.core.tool.Geometry): @classmethod def get_model_representations(cls): return tool.Ifc.get().by_type("IfcShapeRepresentation") + + @classmethod + def duplicate_move_operator_execute(cls, operator, context, linked=False): + # Deep magick from the dawn of time + if IfcStore.get_file(): + IfcStore.execute_ifc_operator(operator, context) + if operator.new_active_obj: + context.view_layer.objects.active = operator.new_active_obj + return {"FINISHED"} + + new_active_obj = None + for obj in context.selected_objects: + new_obj = obj.copy() + if linked and obj.data: + new_obj.data = obj.data.copy() + if obj == context.active_object: + new_active_obj = new_obj + for collection in obj.users_collection: + collection.objects.link(new_obj) + obj.select_set(False) + new_obj.select_set(True) + if new_active_obj: + context.view_layer.objects.active = new_active_obj + return {"FINISHED"}