From 66f57f90df01281a39795d89dc300a2c8dd81f1f Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Sat, 4 Nov 2023 11:35:30 -0500 Subject: [PATCH] Select multiple arrays at one time, from various parts. Deselect non-compliant objects. --- .../blenderbim/bim/module/model/array.py | 37 +++++++++++-------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/model/array.py b/src/blenderbim/blenderbim/bim/module/model/array.py index fa685677f0..55820b74a1 100644 --- a/src/blenderbim/blenderbim/bim/module/model/array.py +++ b/src/blenderbim/blenderbim/bim/module/model/array.py @@ -248,23 +248,30 @@ class SelectAllArrayObjects(bpy.types.Operator): return True def execute(self, context): - object = context.active_object - element = tool.Ifc.get_entity(object) - array_pset = ifcopenshell.util.element.get_pset(element, "BBIM_Array") - if not array_pset: - self.report({"ERROR"}, f"Object is not part of an array.") - return {"CANCELLED"} + objects = context.selected_objects + for object in objects: + element = tool.Ifc.get_entity(object) + if not element: + self.report({"ERROR"}, f"Non IFC objects, were deselected.") + object.select_set(False) - try: - parent_element = tool.Ifc.get().by_guid(array_pset["Parent"]) - except RuntimeError: - self.report({"ERROR"}, f"Couldn't find array parent by guid '{array_pset['Parent']}'") - return {"CANCELLED"} + if element: + array_pset = ifcopenshell.util.element.get_pset(element, "BBIM_Array") + if not array_pset: + self.report({"ERROR"}, f"Objects not part of an array, were deselected.") + object.select_set(False) - array_objects = tool.Blender.Modifier.Array.get_all_objects(parent_element) - tool.Blender.set_objects_selection( - context, active_object=array_objects[0], selected_objects=array_objects, clear_previous_selection=False - ) + if array_pset: + try: + parent_element = tool.Ifc.get().by_guid(array_pset["Parent"]) + except RuntimeError: + self.report({"ERROR"}, f"Objects that don't have an array parent, were deselected.") + object.select_set(False) + + array_objects = tool.Blender.Modifier.Array.get_all_objects(parent_element) + tool.Blender.set_objects_selection( + context, active_object=array_objects[0], selected_objects=array_objects, clear_previous_selection=False + ) return {"FINISHED"}