From e1db448bad36afe1b0adbdc37a07953f62259dc0 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 18 Aug 2023 12:05:53 +0500 Subject: [PATCH] Fixed clearing scales (after 3345d7e) It was producing a bug with text rotation in elevation view Added fix to make matrix normalization work for the cases when matrix is rotated and I've just found that mathutils.Matrix.normalize(d) is very conveniently ignoring 4th column (translation) (same for mathutils.Vector) --- src/blenderbim/blenderbim/bim/module/drawing/decoration.py | 5 +---- src/blenderbim/blenderbim/bim/module/drawing/svgwriter.py | 6 +----- src/blenderbim/blenderbim/tool/geometry.py | 4 +--- 3 files changed, 3 insertions(+), 12 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/drawing/decoration.py b/src/blenderbim/blenderbim/bim/module/drawing/decoration.py index 07ce208e95..d1d6a2ce70 100644 --- a/src/blenderbim/blenderbim/bim/module/drawing/decoration.py +++ b/src/blenderbim/blenderbim/bim/module/drawing/decoration.py @@ -525,10 +525,7 @@ class BaseDecorator: return matrix.inverted()[i].to_3d().normalized() text_dir_world_x_axis = get_basis_vector(obj.matrix_world) - camera_matrix = camera.matrix_world.copy() - camera_matrix[0][0] = 1 - camera_matrix[1][1] = 1 - camera_matrix[2][2] = 1 + camera_matrix = camera.matrix_world.normalized() text_dir = (camera_matrix.inverted().to_quaternion() @ text_dir_world_x_axis).to_2d().normalized() pos = location_3d_to_region_2d(region, region3d, text_world_position) diff --git a/src/blenderbim/blenderbim/bim/module/drawing/svgwriter.py b/src/blenderbim/blenderbim/bim/module/drawing/svgwriter.py index fed4e484b6..90265113f4 100644 --- a/src/blenderbim/blenderbim/bim/module/drawing/svgwriter.py +++ b/src/blenderbim/blenderbim/bim/module/drawing/svgwriter.py @@ -802,11 +802,7 @@ class SvgWriter: text_dir_world_x_axis = get_basis_vector(text_obj.matrix_world) # RCP cameras may be scaled, so reset scales. - camera_matrix = self.camera.matrix_world.copy() - camera_matrix[0][0] = 1 - camera_matrix[1][1] = 1 - camera_matrix[2][2] = 1 - + camera_matrix = self.camera.matrix_world.normalized() text_dir = (camera_matrix.inverted().to_quaternion() @ text_dir_world_x_axis).to_2d().normalized() angle = math.degrees(-text_dir.angle_signed(Vector((1, 0)))) diff --git a/src/blenderbim/blenderbim/tool/geometry.py b/src/blenderbim/blenderbim/tool/geometry.py index 6795def93d..84f18ad061 100644 --- a/src/blenderbim/blenderbim/tool/geometry.py +++ b/src/blenderbim/blenderbim/tool/geometry.py @@ -59,9 +59,7 @@ class Geometry(blenderbim.core.tool.Geometry): # Note that clearing scale has no impact on cameras. if (obj.scale - Vector((1.0, 1.0, 1.0))).length > 1e-4: if not obj.data: - obj.matrix_world[0][0] = 1 - obj.matrix_world[1][1] = 1 - obj.matrix_world[2][2] = 1 + obj.matrix_world.normalize() elif obj.data.users == 1: context_override = {} context_override["object"] = context_override["active_object"] = obj