[Bf-extensions-cvs] [a0198c53] master: Print3D: Fix (unreported) broken Clean Distorted

Mikhail Rachinskiy noreply at git.blender.org
Wed Apr 25 17:38:02 CEST 2018


Commit: a0198c53fb20552fa71d38340e4a34ace953d95a
Author: Mikhail Rachinskiy
Date:   Wed Apr 25 19:37:44 2018 +0400
Branches: master
https://developer.blender.org/rBAa0198c53fb20552fa71d38340e4a34ace953d95a

Print3D: Fix (unreported) broken Clean Distorted

Distort check gave positive result with all faces.

===================================================================

M	object_print3d_utils/mesh_helpers.py
M	object_print3d_utils/operators.py

===================================================================

diff --git a/object_print3d_utils/mesh_helpers.py b/object_print3d_utils/mesh_helpers.py
index ca6e0716..e1386b84 100644
--- a/object_print3d_utils/mesh_helpers.py
+++ b/object_print3d_utils/mesh_helpers.py
@@ -279,3 +279,19 @@ def object_merge(context, objects):
 
     # return new object
     return base_base
+
+
+def face_is_distorted(ele, angle_distort):
+    no = ele.normal
+    angle_fn = no.angle
+ 
+    for loop in ele.loops:
+        loopno = loop.calc_normal()
+
+        if loopno.dot(no) < 0.0:
+            loopno.negate()
+
+        if angle_fn(loopno, 1000.0) > angle_distort:
+            return True
+ 
+    return False
diff --git a/object_print3d_utils/operators.py b/object_print3d_utils/operators.py
index 8dcdf211..be8c323e 100644
--- a/object_print3d_utils/operators.py
+++ b/object_print3d_utils/operators.py
@@ -20,6 +20,8 @@
 
 # All Operator
 
+import array
+
 import bpy
 from bpy.types import Operator
 from bpy.props import (
@@ -129,8 +131,6 @@ class MESH_OT_Print3D_Check_Solid(Operator):
 
     @staticmethod
     def main_check(obj, info):
-        import array
-
         bm = mesh_helpers.bmesh_copy_from_object(obj, transform=False, triangulate=False)
 
         edges_non_manifold = array.array('i', (i for i, ele in enumerate(bm.edges)
@@ -173,7 +173,6 @@ class MESH_OT_Print3D_Check_Degenerate(Operator):
 
     @staticmethod
     def main_check(obj, info):
-        import array
         scene = bpy.context.scene
         print_3d = scene.print_3d
         threshold = print_3d.threshold_zero
@@ -202,27 +201,17 @@ class MESH_OT_Print3D_Check_Distorted(Operator):
 
     @staticmethod
     def main_check(obj, info):
-        import array
-
         scene = bpy.context.scene
         print_3d = scene.print_3d
         angle_distort = print_3d.angle_distort
 
-        def face_is_distorted(ele):
-            no = ele.normal
-            angle_fn = no.angle
-            for loop in ele.loops:
-                loopno = loop.calc_normal()
-                if loopno.dot(no) < 0.0:
-                    loopno.negate()
-                if angle_fn(loopno, 1000.0) > angle_distort:
-                    return True
-            return False
-
         bm = mesh_helpers.bmesh_copy_from_object(obj, transform=True, triangulate=False)
         bm.normal_update()
 
-        faces_distort = array.array('i', (i for i, ele in enumerate(bm.faces) if face_is_distorted(ele)))
+        faces_distort = array.array(
+                'i',
+                (i for i, ele in enumerate(bm.faces) if mesh_helpers.face_is_distorted(ele, angle_distort))
+                )
 
         info.append(("Non-Flat Faces: %d" % len(faces_distort),
                     (bmesh.types.BMFace, faces_distort)))
@@ -418,20 +407,11 @@ class MESH_OT_Print3D_Clean_Distorted(Operator):
         print_3d = scene.print_3d
         angle_distort = print_3d.angle_distort
 
-        def face_is_distorted(ele):
-            no = ele.normal
-            angle_fn = no.angle
-            for loop in ele.loops:
-                if angle_fn(loop.calc_normal(), 1000.0) > angle_distort:
-                    return True
-            return False
-
         obj = context.active_object
         bm = mesh_helpers.bmesh_from_object(obj)
         bm.normal_update()
-        elems_triangulate = [ele for ele in bm.faces if face_is_distorted(ele)]
+        elems_triangulate = [ele for ele in bm.faces if mesh_helpers.face_is_distorted(ele, angle_distort)]
 
-        # edit
         if elems_triangulate:
             bmesh.ops.triangulate(bm, faces=elems_triangulate)
             mesh_helpers.bmesh_to_object(obj, bm)



More information about the Bf-extensions-cvs mailing list