Partial fix for T44469: Do not fail because of division by zero.
This only fixes the 'symptoms', root of the issue here is that we get a weird covariance matrix - Blender's own invert function errors on it, this script's matrix_invert func does give some result, but in any case final result is not what one would expect...
This commit is contained in:
parent
eaf15114f3
commit
4b44a84b7c
Notes:
blender-bot
2023-02-14 19:56:28 +01:00
Referenced by issue #44942, Circle loop tool bug
|
@ -19,7 +19,7 @@
|
|||
bl_info = {
|
||||
"name": "LoopTools",
|
||||
"author": "Bart Crouch",
|
||||
"version": (4, 6, 5),
|
||||
"version": (4, 6, 6),
|
||||
"blender": (2, 72, 2),
|
||||
"location": "View3D > Toolbar and View3D > Specials (W-key)",
|
||||
"warning": "",
|
||||
|
@ -260,15 +260,14 @@ def calculate_plane(bm_mod, loop, method="best_fit", object=False):
|
|||
if not normal:
|
||||
# warning! this is different from .normalize()
|
||||
itermax = 500
|
||||
iter = 0
|
||||
vec = mathutils.Vector((1.0, 1.0, 1.0))
|
||||
vec2 = (mat * vec)/(mat * vec).length
|
||||
while vec != vec2 and iter<itermax:
|
||||
iter+=1
|
||||
vec2 = mathutils.Vector((1.0, 1.0, 1.0))
|
||||
for i in range(itermax):
|
||||
vec = vec2
|
||||
vec2 = mat * vec
|
||||
if vec2.length != 0:
|
||||
vec2 /= vec2.length
|
||||
if vec2 == vec:
|
||||
break
|
||||
if vec2.length == 0:
|
||||
vec2 = mathutils.Vector((1.0, 1.0, 1.0))
|
||||
normal = vec2
|
||||
|
|
Loading…
Reference in New Issue