diff options
author | Mikhail Rachinskiy <mikhail.rachinskiy@gmail.com> | 2018-04-25 18:37:44 +0300 |
---|---|---|
committer | Mikhail Rachinskiy <mikhail.rachinskiy@gmail.com> | 2018-04-25 18:37:44 +0300 |
commit | a0198c53fb20552fa71d38340e4a34ace953d95a (patch) | |
tree | 009ee41785318b17c1e23f0545b298dbd0978bd3 /object_print3d_utils/operators.py | |
parent | b678ef752f129647e94bf21eb72c0fd30428d1ba (diff) |
Print3D: Fix (unreported) broken Clean Distorted
Distort check gave positive result with all faces.
Diffstat (limited to 'object_print3d_utils/operators.py')
-rw-r--r-- | object_print3d_utils/operators.py | 34 |
1 files changed, 7 insertions, 27 deletions
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) |