[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [4397] contrib/py/scripts/addons/ object_print3d_utils: add distorted face check.

Campbell Barton ideasman42 at gmail.com
Wed Mar 20 20:12:33 CET 2013


Revision: 4397
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=4397
Author:   campbellbarton
Date:     2013-03-20 19:12:33 +0000 (Wed, 20 Mar 2013)
Log Message:
-----------
add distorted face check.

Modified Paths:
--------------
    contrib/py/scripts/addons/object_print3d_utils/__init__.py
    contrib/py/scripts/addons/object_print3d_utils/operators.py
    contrib/py/scripts/addons/object_print3d_utils/todo.rst
    contrib/py/scripts/addons/object_print3d_utils/ui.py

Modified: contrib/py/scripts/addons/object_print3d_utils/__init__.py
===================================================================
--- contrib/py/scripts/addons/object_print3d_utils/__init__.py	2013-03-19 21:21:59 UTC (rev 4396)
+++ contrib/py/scripts/addons/object_print3d_utils/__init__.py	2013-03-20 19:12:33 UTC (rev 4397)
@@ -26,7 +26,7 @@
     "description": "Utilities for 3D printing",
     "warning": "",
     "wiki_url": "http://wiki.blender.org/index.php/Extensions:2.6/Py/"
-                "Scripts/XXX",
+                "Scripts/Modeling/PrintToolbox",
     "tracker_url": "",
     "support": 'OFFICIAL',
     "category": "Mesh"}
@@ -75,7 +75,7 @@
             name="Thickness",
             description="Minimum thickness",
             subtype='DISTANCE',
-            default=0.01,
+            default=0.001,  # 1mm
             min=0.0, max=1.0,
             )
     threshold_zero = FloatProperty(
@@ -101,7 +101,7 @@
     angle_overhang = FloatProperty(
             name="Angle",
             subtype='ANGLE',
-            default=0.0,
+            default=math.radians(45.0),
             min=0.0, max=math.radians(90.0),
             )
 
@@ -113,6 +113,7 @@
     operators.Print3DInfoArea,
 
     operators.Print3DCheckDegenerate,
+    operators.Print3DCheckDistorted,
     operators.Print3DCheckSolid,
     operators.Print3DCheckIntersections,
     operators.Print3DCheckThick,

Modified: contrib/py/scripts/addons/object_print3d_utils/operators.py
===================================================================
--- contrib/py/scripts/addons/object_print3d_utils/operators.py	2013-03-19 21:21:59 UTC (rev 4396)
+++ contrib/py/scripts/addons/object_print3d_utils/operators.py	2013-03-20 19:12:33 UTC (rev 4397)
@@ -185,6 +185,41 @@
         return execute_check(self, context)
 
 
+class Print3DCheckDistorted(Operator):
+    """Check for non-flat faces """
+    bl_idname = "mesh.print3d_check_distort"
+    bl_label = "Print3D Check Distorted Faces"
+
+    @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:
+                if angle_fn(loop.calc_normal(), 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)))
+
+        info.append(("Non-Flat Faces: %d" % len(faces_distort),
+                    (bmesh.types.BMFace, faces_distort)))
+
+        bm.free()
+
+    def execute(self, context):
+        return execute_check(self, context)
+
+
 class Print3DCheckThick(Operator):
     """Check geometry is above the minimum thickness preference """ \
     """(relies on correct normals)"""
@@ -275,6 +310,7 @@
         Print3DCheckSolid,
         Print3DCheckIntersections,
         Print3DCheckDegenerate,
+        Print3DCheckDistorted,
         Print3DCheckThick,
         Print3DCheckSharp,
         Print3DCheckOverhang,
@@ -369,8 +405,9 @@
 
         def face_is_distorted(ele):
             no = ele.normal
+            angle_fn = no.angle
             for loop in ele.loops:
-                if no.angle(loop.calc_normal(), 1000.0) > angle_distort:
+                if angle_fn(loop.calc_normal(), 1000.0) > angle_distort:
                     return True
             return False
 

Modified: contrib/py/scripts/addons/object_print3d_utils/todo.rst
===================================================================
--- contrib/py/scripts/addons/object_print3d_utils/todo.rst	2013-03-19 21:21:59 UTC (rev 4396)
+++ contrib/py/scripts/addons/object_print3d_utils/todo.rst	2013-03-20 19:12:33 UTC (rev 4397)
@@ -59,8 +59,8 @@
 
 - http://slic3r.org
 - https://github.com/makerbot/Miracle-Grue/blob/master/README.md
+- Use a sliver, like slicer, skeinforge, cura, kissslicer, netfabb, ....
 
-
 ...not sure yet exactly how this would work, but we could have a `Print` button and it would send the file off and print :).
 
 

Modified: contrib/py/scripts/addons/object_print3d_utils/ui.py
===================================================================
--- contrib/py/scripts/addons/object_print3d_utils/ui.py	2013-03-19 21:21:59 UTC (rev 4396)
+++ contrib/py/scripts/addons/object_print3d_utils/ui.py	2013-03-20 19:12:33 UTC (rev 4397)
@@ -84,6 +84,9 @@
         rowsub.operator("mesh.print3d_check_degenerate", text="Degenerate")
         rowsub.prop(print_3d, "threshold_zero", text="")
         rowsub = col.row()
+        rowsub.operator("mesh.print3d_check_distort", text="Distorted")
+        rowsub.prop(print_3d, "angle_distort", text="")
+        rowsub = col.row()
         rowsub.operator("mesh.print3d_check_thick", text="Thickness")
         rowsub.prop(print_3d, "thickness_min", text="")
         rowsub = col.row()



More information about the Bf-extensions-cvs mailing list