when bpy.ops.bim.object_duplicate_move_linked_aggregate is called from the panel, the new objects are placed based on the 3d cursor position

This commit is contained in:
Bruno Perdigão
2024-04-30 17:50:31 -03:00
parent 97e0c43702
commit 04172a87cb
2 changed files with 18 additions and 1 deletions
@@ -145,6 +145,7 @@ class BIM_PT_linked_aggregate(Panel):
else:
row.label(text=f"{Number_Linked_Aggregates} Linked Aggregates")
op = row.operator("bim.object_duplicate_move_linked_aggregate", text="", icon="DUPLICATE")
op.location_from_3d_cursor = True
if type(Number_Linked_Aggregates) is int:
if Number_Linked_Aggregates > 0:
op = row.operator("bim.select_linked_aggregates", text="", icon="OUTLINER_DATA_POINTCLOUD")
@@ -947,6 +947,7 @@ class DuplicateMoveLinkedAggregate(bpy.types.Operator):
bl_label = "IFC Duplicate Linked Aggregate"
bl_options = {"REGISTER", "UNDO"}
is_interactive: bpy.props.BoolProperty(name="Is Interactive", default=True)
location_from_3d_cursor: bpy.props.BoolProperty(name="Position Duplicate Based on 3d cursor", default=False)
@classmethod
def poll(cls, context):
@@ -1073,7 +1074,19 @@ class DuplicateMoveLinkedAggregate(bpy.types.Operator):
if "BBIM_Linked_Aggregate" in r.RelatingGroup.Name
]
tool.Ifc.run("group.assign_group", group=linked_aggregate_group[0], products=new)
def get_location_from_3d_cursor(old_to_new):
for new in old_to_new.values():
aggregate = ifcopenshell.util.element.get_aggregate(new[0])
if aggregate:
base_obj = tool.Ifc.get_object(aggregate)
base_obj_location = base_obj.location.copy()
break
for new in old_to_new.values():
new_obj = tool.Ifc.get_object(new[0])
location_diff = new_obj.location - base_obj_location
new_obj.location = context.scene.cursor.location + location_diff
if len(context.selected_objects) != 1:
return {"FINISHED"}
@@ -1101,6 +1114,9 @@ class DuplicateMoveLinkedAggregate(bpy.types.Operator):
custom_incremental_naming_for_element_assembly(old_to_new)
if self.location_from_3d_cursor:
get_location_from_3d_cursor(old_to_new)
blenderbim.bim.handler.refresh_ui_data()
return old_to_new