Fix T48086: Smart UV Project fails w/ small faces
authorCampbell Barton <ideasman42@gmail.com>
Wed, 20 Apr 2016 01:49:14 +0000 (11:49 +1000)
committerCampbell Barton <ideasman42@gmail.com>
Wed, 20 Apr 2016 01:51:03 +0000 (11:51 +1000)
Epsilon for small faces was too large.

Also suppress exception when all faces area are below the epsilon.

release/scripts/startup/bl_operators/uvcalc_smart_project.py

index 7ad835256566ec64d73e8d7a44d1a779f135fd39..52e7b0e0ae45c13a68f127e0fe8e90eba0affbdc 100644 (file)
@@ -23,7 +23,11 @@ import bpy
 from bpy.types import Operator
 
 DEG_TO_RAD = 0.017453292519943295 # pi/180.0
-SMALL_NUM = 0.00000001  # see bug [#31598] why we dont have smaller values
+# see bugs:
+# - T31598 (when too small).
+# - T48086 (when too big).
+SMALL_NUM = 1e-12
+
 
 global USER_FILL_HOLES
 global USER_FILL_HOLES_QUALITY
@@ -813,9 +817,6 @@ def main(context,
         else:
             meshFaces = [thickface(f, uv_layer, me_verts) for i, f in enumerate(me.polygons)]
 
-        if not meshFaces:
-            continue
-
 #XXX           Window.DrawProgressBar(0.1, 'SmartProj UV Unwrapper, mapping "%s", %i faces.' % (me.name, len(meshFaces)))
 
         # =======
@@ -835,6 +836,9 @@ def main(context,
                 uv.zero()
             meshFaces.pop()
 
+        if not meshFaces:
+            continue
+
         # Smallest first is slightly more efficient, but if the user cancels early then its better we work on the larger data.
 
         # Generate Projection Vecs