diff --git a/src/ifcblenderexport/blenderbim/__init__.py b/src/ifcblenderexport/blenderbim/__init__.py index a17958e582..454e7731d2 100644 --- a/src/ifcblenderexport/blenderbim/__init__.py +++ b/src/ifcblenderexport/blenderbim/__init__.py @@ -71,6 +71,7 @@ if bpy is not None: operator.CreateAggregate, operator.EditAggregate, operator.SaveAggregate, + operator.ExplodeAggregate, operator.AssignClassification, operator.UnassignClassification, operator.RemoveClassification, diff --git a/src/ifcblenderexport/blenderbim/operator.py b/src/ifcblenderexport/blenderbim/operator.py index 45fa32f228..290b03be1b 100644 --- a/src/ifcblenderexport/blenderbim/operator.py +++ b/src/ifcblenderexport/blenderbim/operator.py @@ -671,6 +671,26 @@ class SaveAggregate(bpy.types.Operator): obj.hide_viewport = False return {'FINISHED'} + +class ExplodeAggregate(bpy.types.Operator): + bl_idname = 'bim.explode_aggregate' + bl_label = 'Explode Aggregate' + + def execute(self, context): + obj = bpy.context.active_object + if obj.instance_type != 'COLLECTION' \ + or 'IfcRelAggregates' not in obj.instance_collection.name: + return {'FINISHED'} + aggregate_collection = bpy.data.collections.get(obj.instance_collection.name) + spatial_collection = obj.users_collection[0] + for part in aggregate_collection.objects: + spatial_collection.objects.link(part) + aggregate_collection.objects.unlink(part) + bpy.data.objects.remove(obj, do_unlink=True) + bpy.data.collections.remove(aggregate_collection, do_unlink=True) + return {'FINISHED'} + + class AssignClassification(bpy.types.Operator): bl_idname = 'bim.assign_classification' bl_label = 'Assign Classification' diff --git a/src/ifcblenderexport/blenderbim/ui.py b/src/ifcblenderexport/blenderbim/ui.py index 4c9eff6fc4..857f0e84f3 100644 --- a/src/ifcblenderexport/blenderbim/ui.py +++ b/src/ifcblenderexport/blenderbim/ui.py @@ -352,8 +352,10 @@ class BIM_PT_bim(Panel): row.prop(bim_properties, "aggregate_class") row = layout.row() row.prop(bim_properties, "aggregate_name") - row = layout.row() + + row = layout.row(align=True) row.operator("bim.create_aggregate") + row.operator("bim.explode_aggregate") row = layout.row(align=True) row.operator("bim.edit_aggregate")