# HG changeset patch # User mdd # Date 1559235772 -7200 # Node ID ea4c43494a19070aedb32cddd2bad7b124e844d5 # Parent 08d027d2a53227486ca7ad45f3b18c30a6904d1d bugfixes on rastered image column endings, force laser off with G0 + little offset diff -r 08d027d2a532 -r ea4c43494a19 printrun-src/printrun/laser.py --- a/printrun-src/printrun/laser.py Thu May 30 18:10:01 2019 +0200 +++ b/printrun-src/printrun/laser.py Thu May 30 19:02:52 2019 +0200 @@ -163,6 +163,8 @@ engrave_speed = self.settings.lc_engrave_speed * 60 * self.settings.lc_bitmap_speed_factor for X in range(im.size[0]): gcode_col = "" + first_ymm = None + first_xmm = None E = 0 last_bit = 1 # we engrave on black pixel = 0 START_Y = 0 @@ -176,6 +178,7 @@ for Y in range(range_start, range_stop, DIR): YMM = abs((Y * self.MM_PIXEL) + INVERT_Y) XMM = X * self.MM_PIXEL + #print "X %d Y %d" % (X, Y) bit = self.pixel2bit(pix[X, Y]) if self.settings.lc_invert_cut: @@ -198,13 +201,21 @@ E = E + self.MM_PIXEL * (START_Y - Y) gcode_col += "G1 X%.4f Y%.4f E%.4f F%.4f\n" % ( XMM, YMM, E * E_FACTOR, engrave_speed) + if not first_xmm: + first_xmm = XMM + 0.1 # little offset needed! + first_ymm = YMM * 1 else: + if not first_xmm: + first_xmm = XMM + 0.1 # little offset needed! + first_ymm = YMM * 1 # bit value has changed! if bit == 0: # jump to start of line to write START_Y = Y gcode_col += "G0 X%.4f Y%.4f F%.4f\n" % ( XMM, YMM, travel_speed) + last_xmm = None + last_ymm = None else: # end of line to write if DIR > 0: @@ -216,6 +227,11 @@ last_bit = bit if gcode_col <> "": # we skip empty columns + # place last position as G0 to be sure to switch off laser immediately at finish of the line! + if first_xmm: + fo.write("G0 X%.4f Y%.4f F%.4f ; force laser off\n" % ( + first_xmm, first_ymm, travel_speed)) + fo.write("M400 ; X=%d printing row: direction %i\nG92 E0\n%s" % ( X, DIR, gcode_col)) if self.settings.lc_change_dir: diff -r 08d027d2a532 -r ea4c43494a19 printrun-src/printrun/pronterface.py --- a/printrun-src/printrun/pronterface.py Thu May 30 18:10:01 2019 +0200 +++ b/printrun-src/printrun/pronterface.py Thu May 30 19:02:52 2019 +0200 @@ -1486,14 +1486,17 @@ # Generate GCODE from IMAGE lc = laser.Lasercutter(pronterwindow = self) lc.image2gcode(name) + wx.CallAfter(self.endcb_lasercut) elif name.lower().endswith(".svg"): # Generate GCODE from SVG lc = laser.Lasercutter(pronterwindow = self) lc.svg2gcode(name) + wx.CallAfter(self.endcb_lasercut) elif name.lower().endswith(".hpgl") or name.lower().endswith(".plt"): # Generate GCODE from HPGL lc = laser.Lasercutter(pronterwindow = self) lc.hpgl2gcode(name) + wx.CallAfter(self.endcb_lasercut) else: self.load_gcode_async(name) else: