[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [4394] contrib/py/scripts/addons/ object_print3d_utils: add overhang check for printers that have limits for their overhang.

Campbell Barton ideasman42 at gmail.com
Tue Mar 19 22:06:17 CET 2013


Revision: 4394
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=4394
Author:   campbellbarton
Date:     2013-03-19 21:06:16 +0000 (Tue, 19 Mar 2013)
Log Message:
-----------
add overhang check for printers that have limits for their overhang.

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/ui.py

Modified: contrib/py/scripts/addons/object_print3d_utils/__init__.py
===================================================================
--- contrib/py/scripts/addons/object_print3d_utils/__init__.py	2013-03-19 17:00:12 UTC (rev 4393)
+++ contrib/py/scripts/addons/object_print3d_utils/__init__.py	2013-03-19 21:06:16 UTC (rev 4394)
@@ -71,12 +71,6 @@
             description="Path to directory where the files are created",
             default="//", maxlen=1024, subtype="DIR_PATH",
             )
-    angle_sharp = FloatProperty(
-            name="Angle",
-            subtype='ANGLE',
-            default=math.radians(160.0),
-            min=0.0, max=math.radians(180.0),
-            )
     thickness_min = FloatProperty(
             name="Thickness",
             description="Minimum thickness",
@@ -98,6 +92,18 @@
             default=math.radians(15.0),
             min=0.0, max=math.radians(180.0),
             )
+    angle_sharp = FloatProperty(
+            name="Angle",
+            subtype='ANGLE',
+            default=math.radians(160.0),
+            min=0.0, max=math.radians(180.0),
+            )
+    angle_overhang = FloatProperty(
+            name="Angle",
+            subtype='ANGLE',
+            default=0.0,
+            min=0.0, max=math.radians(90.0),
+            )
 
 classes = (
     ui.Print3DToolBarObject,
@@ -111,6 +117,7 @@
     operators.Print3DCheckIntersections,
     operators.Print3DCheckThick,
     operators.Print3DCheckSharp,
+    operators.Print3DCheckOverhang,
     operators.Print3DCheckAll,
 
     operators.Print3DCleanIsolated,

Modified: contrib/py/scripts/addons/object_print3d_utils/operators.py
===================================================================
--- contrib/py/scripts/addons/object_print3d_utils/operators.py	2013-03-19 17:00:12 UTC (rev 4393)
+++ contrib/py/scripts/addons/object_print3d_utils/operators.py	2013-03-19 21:06:16 UTC (rev 4394)
@@ -231,6 +231,41 @@
         return execute_check(self, context)
 
 
+class Print3DCheckOverhang(Operator):
+    """Check faces don't overhang past a certain angle"""
+    bl_idname = "mesh.print3d_check_overhang"
+    bl_label = "Print3D Check Overhang"
+
+    @staticmethod
+    def main_check(obj, info):
+        import math
+        from mathutils import Vector
+
+        scene = bpy.context.scene
+        print_3d = scene.print_3d
+        angle_overhang = (math.pi / 2.0) - print_3d.angle_overhang
+
+        if angle_overhang == math.pi:
+            info.append(("Skipping Overhang", ()))
+            return
+
+        bm = mesh_helpers.bmesh_copy_from_object(obj, transform=True, triangulate=False)
+        bm.normal_update()
+
+        z_down = Vector((0, 0, -1.0))
+        z_down_angle = z_down.angle
+
+        faces_overhang = [ele.index for ele in bm.faces
+                          if z_down_angle(ele.normal) < angle_overhang]
+
+        info.append(("Overhang Face: %d" % len(faces_overhang),
+                    (bmesh.types.BMFace, faces_overhang)))
+        bm.free()
+
+    def execute(self, context):
+        return execute_check(self, context)
+
+
 class Print3DCheckAll(Operator):
     """Run all checks"""
     bl_idname = "mesh.print3d_check_all"
@@ -242,6 +277,7 @@
         Print3DCheckDegenerate,
         Print3DCheckThick,
         Print3DCheckSharp,
+        Print3DCheckOverhang,
         )
 
     def execute(self, context):

Modified: contrib/py/scripts/addons/object_print3d_utils/ui.py
===================================================================
--- contrib/py/scripts/addons/object_print3d_utils/ui.py	2013-03-19 17:00:12 UTC (rev 4393)
+++ contrib/py/scripts/addons/object_print3d_utils/ui.py	2013-03-19 21:06:16 UTC (rev 4394)
@@ -89,6 +89,9 @@
         rowsub = col.row()
         rowsub.operator("mesh.print3d_check_sharp", text="Edge Sharp")
         rowsub.prop(print_3d, "angle_sharp", text="")
+        rowsub = col.row()
+        rowsub.operator("mesh.print3d_check_overhang", text="Overhang")
+        rowsub.prop(print_3d, "angle_overhang", text="")
         col = layout.column()
         col.operator("mesh.print3d_check_all", text="Check All")
 



More information about the Bf-extensions-cvs mailing list