Bugfixing, Added M400 magic

Fri, 03 Jun 2016 21:14:09 +0200

author
mbayer
date
Fri, 03 Jun 2016 21:14:09 +0200
changeset 19
234037fbca4b
parent 18
11f6d97f83b0
child 20
03b34402d405

Bugfixing, Added M400 magic

printrun-src/printrun/laser.py file | annotate | diff | comparison | revisions
printrun-src/printrun/pronterface.py file | annotate | diff | comparison | revisions
printrun-src/printrun/svg2gcode/shapes.py file | annotate | diff | comparison | revisions
--- a/printrun-src/printrun/laser.py	Fri Jun 03 10:06:09 2016 +0200
+++ b/printrun-src/printrun/laser.py	Fri Jun 03 21:14:09 2016 +0200
@@ -8,13 +8,13 @@
 LASERCUT SETTINGS
 TODO: move to printrun settings
 """
-ENGRAVE_SPEED = 40 * 60 # mm/min
+ENGRAVE_SPEED = 10 * 60 # mm/min
 # 30mm/min works for wood (regulate the output power to something between 10-30%)
 # 30mm/min for black anodized aluminum to get a light engraving @ 100% power
 # 10mm/min for black anodized aluminum to get more "silver" @ 100% power
 
-TRAVEL_SPEED = 60 * 60
-E_FACTOR = 0.1
+TRAVEL_SPEED = 120 * 60
+E_FACTOR = 0.5
 
 # BITMAP:
 DPI = 300
@@ -184,9 +184,11 @@
             if CHANGE_DIRECTION:
                 DIR = DIR * (-1) # change y direction on every X
 
-        fo.write("M571 S0 E0\n")
-        fo.write("M501 ; undo all settings made\n")
-        #fo.write("G28 X0 Y0 ; Home position\n")
+        fo.write("""M400 ; Wait for all moves to finish
+M571 S0 E0
+M42 P28 S0 ; Force laser off!
+M501 ; undo all settings made
+""")
 
         fo.close()
 
@@ -250,7 +252,7 @@
                         if LASER_STATE:
                             EN = " E%.4f F%.4f" % (
                               E_FACTOR *  math.hypot(coord[0] - last_coord[0], coord[1] - last_coord[1]),
-                              ENGRAVE_SPEED) 
+                              ENGRAVE_SPEED * 0.5 ) # 1/2 engraving speed
                         else:
                             EN = " F%.4f" % TRAVEL_SPEED
                             
@@ -266,9 +268,11 @@
                     last_cmd = cmd            
     
 
-        fo.write("M571 S0 E0\n")
-        fo.write("M501 ; undo all settings made\n")
-        #fo.write("G28 X0 Y0 ; Home position\n")
+        fo.write("""M400 ; Wait for all moves to finish
+M571 S0 E0
+M42 P28 S0 ; Force laser off!
+M501 ; undo all settings made
+""")
 
         fi.close()
         fo.close()    
@@ -278,7 +282,7 @@
             self.pronterwindow.load_gcode_async(filename + '.g')
 
 
-    def svg2gcode(self, filename, bed_max_x = 200, bed_max_y = 200, smoothness = 0.2):
+    def svg2gcode(self, filename, bed_max_x = 50, bed_max_y = 50, smoothness = 0.2):
         self.log("Generating paths from SVG...")        
 
         preamble = """
@@ -303,12 +307,13 @@
         self.log("Travel/Engrave speed: %d mm/sec, %d mm/sec" % (
             TRAVEL_SPEED / 60, ENGRAVE_SPEED / 60) )
 
-        postamble = ""
+        postamble = """M400 ; Wait for all moves to finish
+M571 S0 E0
+M42 P28 S0 ; Force laser off!
+M501 ; undo all settings made
+"""
         shape_preamble = "G92 E0\n"
-        shape_postamble =  """M571 S0 E0
-M501 ; undo all settings made
-
-"""
+        shape_postamble = ""
 
 
         """ 
@@ -358,7 +363,7 @@
                 m = shape_obj.transformation_matrix()
 
                 if d:
-                    fo.write("; printing shape: %s\n" % (tag_suffix))
+                    fo.write("M400 ; wait for moves finish, then printing shape: %s\n" % (tag_suffix))
                     E = 0
                     xo = 0
                     yo = 0
@@ -369,10 +374,12 @@
                         y = height - y
                         xs = scale_x * x
                         ys = scale_y * y
+                        if xo == xs and yo == ys: continue
+
                         if not pen: start = True 
                         if xs >= 0 and xs <= bed_max_x and ys >= 0 and ys <= bed_max_y:
                             if start:
-                                fo.write("G0 X%0.2f Y%0.2f ; Move to start of shape\n" % (xs, ys))
+                                fo.write("G0 X%0.2f Y%0.2f F%.4f ; Move to start of shape\n" % (xs, ys, TRAVEL_SPEED))
                                 start = False
                                 xo = xs
                                 yo = ys                                
@@ -380,8 +387,8 @@
                                 e_distance = math.hypot(xs - xo, ys - yo)
                                 xo = xs
                                 yo = ys                                
-                                E = E + (MM_PIXEL * e_distance)
-                                fo.write("G1 X%0.2f Y%0.2f E%.4f\n" % (xs, ys, E * E_FACTOR))
+                                E = E + (e_distance)
+                                fo.write("G1 X%0.2f Y%0.2f E%.4f F%.4f\n" % (xs, ys, E * E_FACTOR, ENGRAVE_SPEED))
                         else:
                             self.log("Position outside print dimension: %d, %d" % (xs, ys)) 
                     fo.write(shape_postamble)
--- a/printrun-src/printrun/pronterface.py	Fri Jun 03 10:06:09 2016 +0200
+++ b/printrun-src/printrun/pronterface.py	Fri Jun 03 21:14:09 2016 +0200
@@ -18,8 +18,6 @@
 # You should have received a copy of the GNU General Public License
 # along with Printrun.  If not, see <http://www.gnu.org/licenses/>.
 
-from laser import Lasercutter
-
 import os
 import Queue
 import sys
@@ -1379,6 +1377,10 @@
             except:
                 self.logError(_("Could not update recent files list:") +
                               "\n" + traceback.format_exc())
+
+            # import the library local so we dont have to restart the whole app when making code changes
+            from laser import Lasercutter
+
             if name.lower().endswith(".stl") or name.lower().endswith(".obj"):
                 self.slice(name)
             elif name.lower().endswith(".png") or name.lower().endswith(".jpg") or name.lower().endswith(".gif"):
--- a/printrun-src/printrun/svg2gcode/shapes.py	Fri Jun 03 10:06:09 2016 +0200
+++ b/printrun-src/printrun/svg2gcode/shapes.py	Fri Jun 03 21:14:09 2016 +0200
@@ -141,10 +141,9 @@
             points =  points.split()
             for pa in points:
                 self.points.append(pa)
-            if polycommon_el.get('fill'):
-                # Append first point to close shape
-                #self.points.append(points[0])
-                print repr(self.points)                
+            #if polycommon_el.get('fill'):
+            #    # Append first point to close shape
+            #    self.points.append(points[0])
         else:
             logging.error("polycommon: Unable to get the attributes for %s", self.xml_node)
 

mercurial