diff options
Diffstat (limited to 'mesh_looptools.py')
-rw-r--r-- | mesh_looptools.py | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/mesh_looptools.py b/mesh_looptools.py index 41c1be0a..90c914cd 100644 --- a/mesh_looptools.py +++ b/mesh_looptools.py @@ -19,7 +19,7 @@ bl_info = { "name": "LoopTools", "author": "Bart Crouch", - "version": (4, 6, 7), + "version": (4, 6, 9), "blender": (2, 80, 0), "location": "View3D > Sidebar > Edit Tab / Edit Mode Context Menu", "warning": "", @@ -290,8 +290,10 @@ def calculate_plane(bm_mod, loop, method="best_fit", object=False): for i in range(itermax): vec = vec2 vec2 = mat @ vec - if vec2.length != 0: - vec2 /= vec2.length + # Calculate length with double precision to avoid problems with `inf` + vec2_length = math.sqrt(vec2[0] ** 2 + vec2[1] ** 2 + vec2[2] ** 2) + if vec2_length != 0: + vec2 /= vec2_length if vec2 == vec: break if vec2.length == 0: @@ -536,6 +538,10 @@ def get_derived_bmesh(object, bm): for mod in object.modifiers: if mod.type != 'MIRROR': mod.show_viewport = False + #leave the merge points untouched + if mod.type == 'MIRROR': + merge = mod.use_mirror_merge + mod.use_mirror_merge = False # get derived mesh bm_mod = bmesh.new() depsgraph = bpy.context.evaluated_depsgraph_get() @@ -546,6 +552,8 @@ def get_derived_bmesh(object, bm): # re-enable other modifiers for mod_name in show_viewport: object.modifiers[mod_name].show_viewport = True + if mod.type == 'MIRROR': + mod.use_mirror_merge = merge # no mirror modifiers, so no derived mesh necessary else: derived = False |