From 30b870b98db9f6da56d9fcc4c03cfc29206b3c6d Mon Sep 17 00:00:00 2001 From: Gorgious56 Date: Mon, 6 May 2024 13:20:33 +0200 Subject: [PATCH] Fix #4617 : Switching representation in edit mode is no longer possible --- .../bim/module/geometry/operator.py | 33 +++++++++++-------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/geometry/operator.py b/src/blenderbim/blenderbim/bim/module/geometry/operator.py index 42ee81af7a..312ceed51a 100644 --- a/src/blenderbim/blenderbim/bim/module/geometry/operator.py +++ b/src/blenderbim/blenderbim/bim/module/geometry/operator.py @@ -215,6 +215,13 @@ class SwitchRepresentation(bpy.types.Operator, Operator): disable_opening_subtractions: bpy.props.BoolProperty() should_switch_all_meshes: bpy.props.BoolProperty() + @classmethod + def poll(cls, context): + if context.active_object.mode == "OBJECT": + return True + cls.poll_message_set("Only available in OBJECT mode - Press TAB in the viewport") + return False + def _execute(self, context): target_representation = tool.Ifc.get().by_id(self.ifc_definition_id) target = target_representation.ContextOfItems @@ -223,6 +230,8 @@ class SwitchRepresentation(bpy.types.Operator, Operator): element = tool.Ifc.get_entity(obj) if not element: continue + if not obj.mode == "OBJECT": + continue if obj == context.active_object: representation = target_representation else: @@ -909,7 +918,7 @@ class OverrideDuplicateMove(bpy.types.Operator): if pset: pset = tool.Ifc.get().by_id(pset["id"]) ifcopenshell.api.run("pset.remove_pset", tool.Ifc.get(), pset=pset) - + if new[0].is_a("IfcElementAssembly"): linked_aggregate_group = [ r.RelatingGroup @@ -987,7 +996,7 @@ class DuplicateMoveLinkedAggregate(bpy.types.Operator): else: index = add_linked_aggregate_pset(part, index) # index += 1 - + obj = tool.Ifc.get_object(part) obj.select_set(True) @@ -1021,9 +1030,7 @@ class DuplicateMoveLinkedAggregate(bpy.types.Operator): return linked_aggregate_group = ifcopenshell.api.run("group.add_group", tool.Ifc.get(), Name=self.group_name) - ifcopenshell.api.run( - "group.assign_group", tool.Ifc.get(), products=[element], group=linked_aggregate_group - ) + ifcopenshell.api.run("group.assign_group", tool.Ifc.get(), products=[element], group=linked_aggregate_group) def custom_incremental_naming_for_element_assembly(old_to_new): for new in old_to_new.values(): @@ -1047,10 +1054,10 @@ class DuplicateMoveLinkedAggregate(bpy.types.Operator): if re.findall(pattern2, new_obj.name): split_name = new_obj.name.split(".") new_obj.name = split_name[0] + "_" + number - + def get_max_index(parts): psets = [ifcopenshell.util.element.get_pset(p, "BBIM_Linked_Aggregate") for p in parts] - index = [i['Index'] for i in psets if i] + index = [i["Index"] for i in psets if i] if len(index) > 0: index = max(index) return index @@ -1064,14 +1071,14 @@ class DuplicateMoveLinkedAggregate(bpy.types.Operator): new_pset = ifcopenshell.api.run( "pset.add_pset", tool.Ifc.get(), product=new[0], name=self.pset_name ) - + ifcopenshell.api.run( "pset.edit_pset", tool.Ifc.get(), pset=new_pset, properties={"Index": pset["Index"]}, ) - + if new[0].is_a("IfcElementAssembly"): linked_aggregate_group = [ r.RelatingGroup @@ -1080,7 +1087,6 @@ 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) - if len(context.selected_objects) != 1: return {"FINISHED"} @@ -1101,7 +1107,7 @@ class DuplicateMoveLinkedAggregate(bpy.types.Operator): select_objects_and_add_data(selected_element) old_to_new = OverrideDuplicateMove.execute_ifc_duplicate_operator(self, context, linked=True) - + tool.Root.recreate_aggregate(old_to_new) copy_linked_aggregate_data(old_to_new) @@ -1250,9 +1256,9 @@ class RefreshLinkedAggregate(bpy.types.Operator): selected_matrix = selected_obj.matrix_world object_duplicate = tool.Ifc.get_object(element) duplicate_matrix = object_duplicate.matrix_world.decompose() - + return selected_matrix, duplicate_matrix - + def set_new_matrix(selected_matrix, duplicate_matrix, old_to_new): for old, new in old_to_new.items(): new_obj = tool.Ifc.get_object(new[0]) @@ -1260,7 +1266,6 @@ class RefreshLinkedAggregate(bpy.types.Operator): matrix_diff = Matrix.inverted(selected_matrix) @ new_obj.matrix_world new_obj_matrix = new_base_matrix @ matrix_diff new_obj.matrix_world = new_obj_matrix - active_element = tool.Ifc.get_entity(context.active_object) if not active_element: