mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-22 21:42:28 +00:00
- Fix the basepoint to be the parent aggregate.
- Change the way that "location_to_cursor_3d" is called. - Create a new operator to use in the ui.
This commit is contained in:
@@ -144,8 +144,7 @@ class BIM_PT_linked_aggregate(Panel):
|
|||||||
row.label(text="Not a Linked Aggregate")
|
row.label(text="Not a Linked Aggregate")
|
||||||
else:
|
else:
|
||||||
row.label(text=f"{Number_Linked_Aggregates} Linked Aggregates")
|
row.label(text=f"{Number_Linked_Aggregates} Linked Aggregates")
|
||||||
op = row.operator("bim.object_duplicate_move_linked_aggregate", text="", icon="DUPLICATE")
|
op = row.operator("bim.duplicate_linked_aggregate_to_3d_cursor", text="", icon="DUPLICATE")
|
||||||
op.location_from_3d_cursor = True
|
|
||||||
if type(Number_Linked_Aggregates) is int:
|
if type(Number_Linked_Aggregates) is int:
|
||||||
if Number_Linked_Aggregates > 0:
|
if Number_Linked_Aggregates > 0:
|
||||||
op = row.operator("bim.select_linked_aggregates", text="", icon="OUTLINER_DATA_POINTCLOUD")
|
op = row.operator("bim.select_linked_aggregates", text="", icon="OUTLINER_DATA_POINTCLOUD")
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ classes = (
|
|||||||
operator.GetRepresentationIfcParameters,
|
operator.GetRepresentationIfcParameters,
|
||||||
operator.DuplicateMoveLinkedAggregate,
|
operator.DuplicateMoveLinkedAggregate,
|
||||||
operator.DuplicateMoveLinkedAggregateMacro,
|
operator.DuplicateMoveLinkedAggregateMacro,
|
||||||
|
operator.DuplicateLinkedAggregateTo3dCursor,
|
||||||
operator.OverrideDelete,
|
operator.OverrideDelete,
|
||||||
operator.OverrideDuplicateMove,
|
operator.OverrideDuplicateMove,
|
||||||
operator.OverrideDuplicateMoveLinked,
|
operator.OverrideDuplicateMoveLinked,
|
||||||
|
|||||||
@@ -936,18 +936,17 @@ class OverrideDuplicateMoveLinked(bpy.types.Operator):
|
|||||||
|
|
||||||
|
|
||||||
class DuplicateMoveLinkedAggregateMacro(bpy.types.Macro):
|
class DuplicateMoveLinkedAggregateMacro(bpy.types.Macro):
|
||||||
bl_description = "Create a new linked aggregate"
|
bl_description = "Create and move a new linked aggregate"
|
||||||
bl_idname = "bim.object_duplicate_move_linked_aggregate_macro"
|
bl_idname = "bim.object_duplicate_move_linked_aggregate_macro"
|
||||||
bl_label = "IFC Duplicate Linked Aggregate"
|
bl_label = "IFC Duplicate and Move Linked Aggregate"
|
||||||
bl_options = {"REGISTER", "UNDO"}
|
bl_options = {"REGISTER", "UNDO"}
|
||||||
|
|
||||||
|
|
||||||
class DuplicateMoveLinkedAggregate(bpy.types.Operator):
|
class DuplicateMoveLinkedAggregate(bpy.types.Operator):
|
||||||
bl_idname = "bim.object_duplicate_move_linked_aggregate"
|
bl_idname = "bim.object_duplicate_move_linked_aggregate"
|
||||||
bl_label = "IFC Duplicate Linked Aggregate"
|
bl_label = "IFC Duplicate and Move Linked Aggregate"
|
||||||
bl_options = {"REGISTER", "UNDO"}
|
bl_options = {"REGISTER", "UNDO"}
|
||||||
is_interactive: bpy.props.BoolProperty(name="Is Interactive", default=True)
|
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
|
@classmethod
|
||||||
def poll(cls, context):
|
def poll(cls, context):
|
||||||
@@ -960,7 +959,7 @@ class DuplicateMoveLinkedAggregate(bpy.types.Operator):
|
|||||||
return DuplicateMoveLinkedAggregate.execute_ifc_duplicate_linked_aggregate_operator(self, context)
|
return DuplicateMoveLinkedAggregate.execute_ifc_duplicate_linked_aggregate_operator(self, context)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def execute_ifc_duplicate_linked_aggregate_operator(self, context):
|
def execute_ifc_duplicate_linked_aggregate_operator(self, context, location_from_3d_cursor=False):
|
||||||
self.new_active_obj = None
|
self.new_active_obj = None
|
||||||
self.group_name = "BBIM_Linked_Aggregate"
|
self.group_name = "BBIM_Linked_Aggregate"
|
||||||
self.pset_name = "BBIM_Linked_Aggregate"
|
self.pset_name = "BBIM_Linked_Aggregate"
|
||||||
@@ -1075,13 +1074,9 @@ class DuplicateMoveLinkedAggregate(bpy.types.Operator):
|
|||||||
]
|
]
|
||||||
tool.Ifc.run("group.assign_group", group=linked_aggregate_group[0], products=new)
|
tool.Ifc.run("group.assign_group", group=linked_aggregate_group[0], products=new)
|
||||||
|
|
||||||
def get_location_from_3d_cursor(old_to_new):
|
def get_location_from_3d_cursor(old_to_new, aggregate):
|
||||||
for new in old_to_new.values():
|
base_obj = tool.Ifc.get_object(aggregate)
|
||||||
aggregate = ifcopenshell.util.element.get_aggregate(new[0])
|
base_obj_location = base_obj.location.copy()
|
||||||
if aggregate:
|
|
||||||
base_obj = tool.Ifc.get_object(aggregate)
|
|
||||||
base_obj_location = base_obj.location.copy()
|
|
||||||
break
|
|
||||||
|
|
||||||
for new in old_to_new.values():
|
for new in old_to_new.values():
|
||||||
new_obj = tool.Ifc.get_object(new[0])
|
new_obj = tool.Ifc.get_object(new[0])
|
||||||
@@ -1114,14 +1109,29 @@ class DuplicateMoveLinkedAggregate(bpy.types.Operator):
|
|||||||
|
|
||||||
custom_incremental_naming_for_element_assembly(old_to_new)
|
custom_incremental_naming_for_element_assembly(old_to_new)
|
||||||
|
|
||||||
if self.location_from_3d_cursor:
|
if location_from_3d_cursor:
|
||||||
get_location_from_3d_cursor(old_to_new)
|
get_location_from_3d_cursor(old_to_new, selected_element)
|
||||||
|
|
||||||
blenderbim.bim.handler.refresh_ui_data()
|
blenderbim.bim.handler.refresh_ui_data()
|
||||||
|
|
||||||
return old_to_new
|
return old_to_new
|
||||||
|
|
||||||
|
|
||||||
|
class DuplicateLinkedAggregateTo3dCursor(bpy.types.Operator):
|
||||||
|
bl_idname = "bim.duplicate_linked_aggregate_to_3d_cursor"
|
||||||
|
bl_label = "IFC Duplicate Linked Aggregate to 3d Cursor"
|
||||||
|
bl_options = {"REGISTER", "UNDO"}
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def poll(cls, context):
|
||||||
|
return len(context.selected_objects) > 0
|
||||||
|
|
||||||
|
def execute(self, context):
|
||||||
|
return OverrideDuplicateMove.execute_duplicate_operator(self, context, linked=False)
|
||||||
|
|
||||||
|
def _execute(self, context):
|
||||||
|
return DuplicateMoveLinkedAggregate.execute_ifc_duplicate_linked_aggregate_operator(self, context, location_from_3d_cursor=True)
|
||||||
|
|
||||||
class RefreshLinkedAggregate(bpy.types.Operator):
|
class RefreshLinkedAggregate(bpy.types.Operator):
|
||||||
bl_idname = "bim.refresh_linked_aggregate"
|
bl_idname = "bim.refresh_linked_aggregate"
|
||||||
bl_label = "IFC Refresh Linked Aggregate"
|
bl_label = "IFC Refresh Linked Aggregate"
|
||||||
|
|||||||
Reference in New Issue
Block a user