small refactor

This commit is contained in:
Bruno Perdigão
2024-03-16 12:44:26 -03:00
parent c95a47ca97
commit 3bf4a8ef52
@@ -1238,6 +1238,23 @@ class RefreshLinkedAggregate(bpy.types.Operator):
return list(set(linked_aggregate_groups)), selected_parents return list(set(linked_aggregate_groups)), selected_parents
def get_original_matrix(element, base_instance):
selected_obj = tool.Ifc.get_object(base_instance)
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])
new_base_matrix = Matrix.LocRotScale(*duplicate_matrix)
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) active_element = tool.Ifc.get_entity(context.active_object)
if not active_element: if not active_element:
self.report({"INFO"}, "Object has no Ifc metadata.") self.report({"INFO"}, "Object has no Ifc metadata.")
@@ -1277,10 +1294,11 @@ class RefreshLinkedAggregate(bpy.types.Operator):
element_aggregate = ifcopenshell.util.element.get_aggregate(element) element_aggregate = ifcopenshell.util.element.get_aggregate(element)
selected_obj = tool.Ifc.get_object(base_instance) # selected_obj = tool.Ifc.get_object(base_instance)
selected_matrix = selected_obj.matrix_world # selected_matrix = selected_obj.matrix_world
object_duplicate = tool.Ifc.get_object(element) # object_duplicate = tool.Ifc.get_object(element)
duplicate_matrix = object_duplicate.matrix_world.decompose() # duplicate_matrix = object_duplicate.matrix_world.decompose()
selected_matrix, duplicate_matrix = get_original_matrix(element, base_instance)
original_names = get_original_names(element) original_names = get_original_names(element)
@@ -1292,12 +1310,14 @@ class RefreshLinkedAggregate(bpy.types.Operator):
tool.Ifc.get_object(base_instance).select_set(True) tool.Ifc.get_object(base_instance).select_set(True)
old_to_new = DuplicateMoveLinkedAggregate.execute_ifc_duplicate_linked_aggregate_operator(self, context) old_to_new = DuplicateMoveLinkedAggregate.execute_ifc_duplicate_linked_aggregate_operator(self, context)
for old, new in old_to_new.items():
new_obj = tool.Ifc.get_object(new[0]) set_new_matrix(selected_matrix, duplicate_matrix, old_to_new)
new_base_matrix = Matrix.LocRotScale(*duplicate_matrix) # for old, new in old_to_new.items():
matrix_diff = Matrix.inverted(selected_matrix) @ new_obj.matrix_world # new_obj = tool.Ifc.get_object(new[0])
new_obj_matrix = new_base_matrix @ matrix_diff # new_base_matrix = Matrix.LocRotScale(*duplicate_matrix)
new_obj.matrix_world = new_obj_matrix # 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
for old, new in old_to_new.items(): for old, new in old_to_new.items():
if element_aggregate and new[0].is_a("IfcElementAssembly"): if element_aggregate and new[0].is_a("IfcElementAssembly"):