diff options
author | Campbell Barton <ideasman42@gmail.com> | 2021-04-29 10:54:58 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2021-04-29 10:54:58 +0300 |
commit | 868c8e8617d03f240385c86de271b18994a0436b (patch) | |
tree | e60acb3a5430bc576fe702520790ef955af62491 /source/blender/blenkernel/intern | |
parent | b10649f27b64d4955a8b9b798c3fd6f0c2787661 (diff) | |
parent | 73af884df004171bacffb82f3ff7f6e627a12690 (diff) |
Merge branch 'blender-v2.93-release'
Diffstat (limited to 'source/blender/blenkernel/intern')
-rw-r--r-- | source/blender/blenkernel/intern/mesh_mirror.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/source/blender/blenkernel/intern/mesh_mirror.c b/source/blender/blenkernel/intern/mesh_mirror.c index 93a2e9058fa..3d30c218fba 100644 --- a/source/blender/blenkernel/intern/mesh_mirror.c +++ b/source/blender/blenkernel/intern/mesh_mirror.c @@ -183,6 +183,19 @@ Mesh *BKE_mesh_mirror_apply_mirror_on_axis_for_modifier(MirrorModifierData *mmd, if (do_bisect) { copy_v3_v3(plane_co, itmp[3]); copy_v3_v3(plane_no, itmp[axis]); + + /* Account for non-uniform scale in `ob`, see: T87592. */ + float ob_scale[3] = { + len_squared_v3(ob->obmat[0]), + len_squared_v3(ob->obmat[1]), + len_squared_v3(ob->obmat[2]), + }; + /* Scale to avoid precision loss with extreme values. */ + const float ob_scale_max = max_fff(UNPACK3(ob_scale)); + if (LIKELY(ob_scale_max != 0.0f)) { + mul_v3_fl(ob_scale, 1.0f / ob_scale_max); + mul_v3_v3(plane_no, ob_scale); + } } } else if (do_bisect) { |