You can now assign aggregates in bulk

This commit is contained in:
Dion Moult
2021-04-13 08:25:43 +10:00
parent 14cd8289ea
commit cab9e4d892
2 changed files with 32 additions and 29 deletions
@@ -12,12 +12,15 @@ class AssignObject(bpy.types.Operator):
def execute(self, context): def execute(self, context):
self.file = IfcStore.get_file() self.file = IfcStore.get_file()
related_object = bpy.data.objects.get(self.related_object) if self.related_object else bpy.context.active_object related_objects = (
props = related_object.BIMObjectProperties [bpy.data.objects.get(self.related_object)] if self.related_object else bpy.context.selected_objects
relating_object = bpy.data.objects.get(self.relating_object) if self.relating_object else props.relating_object )
relating_object = bpy.data.objects.get(self.relating_object)
if not relating_object or not relating_object.BIMObjectProperties.ifc_definition_id: if not relating_object or not relating_object.BIMObjectProperties.ifc_definition_id:
return {"FINISHED"} return {"FINISHED"}
product = self.file.by_id(props.ifc_definition_id) for related_object in related_objects:
oprops = related_object.BIMObjectProperties
product = self.file.by_id(oprops.ifc_definition_id)
ifcopenshell.api.run( ifcopenshell.api.run(
"aggregate.assign_object", "aggregate.assign_object",
self.file, self.file,
@@ -27,7 +30,7 @@ class AssignObject(bpy.types.Operator):
}, },
) )
bpy.ops.bim.edit_object_placement(obj=related_object.name) bpy.ops.bim.edit_object_placement(obj=related_object.name)
Data.load(IfcStore.get_file(), props.ifc_definition_id) Data.load(IfcStore.get_file(), oprops.ifc_definition_id)
bpy.ops.bim.disable_editing_aggregate(obj=related_object.name) bpy.ops.bim.disable_editing_aggregate(obj=related_object.name)
spatial_collection = bpy.data.collections.get(related_object.name) spatial_collection = bpy.data.collections.get(related_object.name)
@@ -34,7 +34,7 @@ class BIM_PT_aggregate(Panel):
if props.is_editing_aggregate: if props.is_editing_aggregate:
row = self.layout.row(align=True) row = self.layout.row(align=True)
row.prop(props, "relating_object", text="") row.prop(props, "relating_object", text="")
row.operator("bim.assign_object", icon="CHECKMARK", text="") row.operator("bim.assign_object", icon="CHECKMARK", text="").relating_object = props.relating_object.name
row.operator("bim.disable_editing_aggregate", icon="X", text="") row.operator("bim.disable_editing_aggregate", icon="X", text="")
else: else:
row = self.layout.row(align=True) row = self.layout.row(align=True)