Fix bug resetting rotations after editing profile axis

Before - https://imgur.com/a/czjAoSb
After - https://imgur.com/a/ajiNcdK
This commit is contained in:
Andrej730
2024-03-06 11:52:49 +05:00
parent 1cd0bc9e7d
commit 24912bb827
@@ -1013,17 +1013,30 @@ class EditExtrusionAxis(bpy.types.Operator, tool.Ifc.Operator):
obj = context.active_object
element = tool.Ifc.get_entity(obj)
start = obj.matrix_world @ obj.data.vertices[0].co.copy()
end = obj.matrix_world @ obj.data.vertices[1].co.copy()
matrix = obj.matrix_world
previous_z_axis = matrix.col[2].to_3d().normalized()
start = matrix @ obj.data.vertices[0].co
end = matrix @ obj.data.vertices[1].co
depth = (end - start).length
z_axis = (end - start).normalized()
y_axis = Vector((0, 0, 1))
# making sure z_axis != y_axis
if z_axis == y_axis:
y_axis = Vector((0, 1, 0))
x_axis = y_axis.cross(z_axis).normalized()
y_axis = z_axis.cross(x_axis).normalized()
# if z-axis didn't changed we can just reuse the previous rotation
if not tool.Cad.are_vectors_equal(previous_z_axis, z_axis):
y_axis = Vector((0, 0, 1))
# making sure z_axis != y_axis
if z_axis == y_axis:
y_axis = Vector((0, 1, 0))
x_axis = y_axis.cross(z_axis).normalized()
y_axis = z_axis.cross(x_axis).normalized()
# update basises
matrix.col[0].xyz = x_axis
matrix.col[1].xyz = y_axis
matrix.col[2].xyz = z_axis
matrix.translation = start
body = ifcopenshell.util.representation.get_representation(element, "Model", "Body", "MODEL_VIEW")
blenderbim.core.geometry.switch_representation(
@@ -1036,16 +1049,6 @@ class EditExtrusionAxis(bpy.types.Operator, tool.Ifc.Operator):
should_sync_changes_first=False,
)
matrix = Matrix(
(
[x_axis[0], y_axis[0], z_axis[0], start.x],
[x_axis[1], y_axis[1], z_axis[1], start.y],
[x_axis[2], y_axis[2], z_axis[2], start.z],
[0, 0, 0, 1],
)
)
obj.matrix_world = matrix
bpy.context.view_layer.update()
joiner = DumbProfileJoiner()