mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-27 10:51:13 +00:00
small refactor
This commit is contained in:
@@ -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"):
|
||||||
|
|||||||
Reference in New Issue
Block a user