From 9c184a450842df13226e870e6e50c0515e53a659 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20W=C3=BCst?= Date: Fri, 10 Apr 2015 16:51:16 +0200 Subject: Fixes bug #1409568: added possibility to use multiple pens (when using pen plotters, cutting plotters ignore it) via marking layers with pen information Fixed bugs: - https://launchpad.net/bugs/1409568 (bzr r14049) --- share/extensions/hpgl_encoder.py | 76 +++++++++++++++++++++++----------------- share/extensions/hpgl_output.py | 4 +-- share/extensions/plotter.py | 15 ++++---- 3 files changed, 53 insertions(+), 42 deletions(-) (limited to 'share') diff --git a/share/extensions/hpgl_encoder.py b/share/extensions/hpgl_encoder.py index a16561e97..75c5fa889 100644 --- a/share/extensions/hpgl_encoder.py +++ b/share/extensions/hpgl_encoder.py @@ -23,7 +23,6 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA import math import re import string -#from StringIO import StringIO # local libraries import bezmisc import cspsubdiv @@ -66,6 +65,7 @@ class hpglEncoder: self.sizeY = 'False' self.dryRun = True self.lastPoint = [0, 0, 0] + self.lastPen = -1 self.offsetX = 0 self.offsetY = 0 self.scaleX = self.options.resolutionX / effect.unittouu("1.0in") # dots per inch to dots per user unit @@ -109,7 +109,7 @@ class hpglEncoder: # dryRun to find edges groupmat = [[self.mirrorX * self.scaleX * self.viewBoxTransformX, 0.0, 0.0], [0.0, self.mirrorY * self.scaleY * self.viewBoxTransformY, 0.0]] groupmat = simpletransform.composeTransform(groupmat, simpletransform.parseTransform('rotate(' + self.options.orientation + ')')) - self.vData = [['', -1.0, -1.0], ['', -1.0, -1.0], ['', -1.0, -1.0], ['', -1.0, -1.0]] + self.vData = [['', 'False', 0, 0], ['', 'False', 0, 0], ['', 'False', 0, 0], ['', 'False', 0, 0]] self.processGroups(self.doc, groupmat) if self.divergenceX == 'False' or self.divergenceY == 'False' or self.sizeX == 'False' or self.sizeY == 'False': raise Exception('NO_PATHS') @@ -156,11 +156,11 @@ class hpglEncoder: groupmat = [[self.mirrorX * self.scaleX * self.viewBoxTransformX, 0.0, -self.divergenceX + self.offsetX], [0.0, self.mirrorY * self.scaleY * self.viewBoxTransformY, -self.divergenceY + self.offsetY]] groupmat = simpletransform.composeTransform(groupmat, simpletransform.parseTransform('rotate(' + self.options.orientation + ')')) - self.vData = [['', -1.0, -1.0], ['', -1.0, -1.0], ['', -1.0, -1.0], ['', -1.0, -1.0]] + self.vData = [['', 'False', 0, 0], ['', 'False', 0, 0], ['', 'False', 0, 0], ['', 'False', 0, 0]] # add move to zero point and precut if self.toolOffset > 0.0 and self.options.precut: if self.options.center: - # position precut outside of drawing plus one times the tooloffset + # position precut outside of drawing plus one time the tooloffset if self.offsetX >= 0.0: precutX = self.offsetX + self.toolOffset else: @@ -169,17 +169,15 @@ class hpglEncoder: precutY = self.offsetY + self.toolOffset else: precutY = self.offsetY - self.toolOffset - self.processOffset('PU', precutX, precutY) - self.processOffset('PD', precutX, precutY + self.toolOffset * 8) + self.processOffset('PU', precutX, precutY, self.options.pen) + self.processOffset('PD', precutX, precutY + self.toolOffset * 8, self.options.pen) else: - self.processOffset('PU', 0, 0) - self.processOffset('PD', 0, self.toolOffset * 8) - else: - self.processOffset('PU', 0, 0) + self.processOffset('PU', 0, 0, self.options.pen) + self.processOffset('PD', 0, self.toolOffset * 8, self.options.pen) # start conversion self.processGroups(self.doc, groupmat) # shift an empty node in in order to process last node in cache - self.processOffset('PU', 0, 0) + self.processOffset('PU', 0, 0, 0) if self.options.debug: return self.hpgl, self else: @@ -190,7 +188,7 @@ class hpglEncoder: paths = [] for node in doc: if (node.tag == inkex.addNS('g', 'svg') and self.isGroupVisible(node)) or node.tag == inkex.addNS('path', 'svg'): - paths.append([node.tag, node, self.mergeTransform(node, groupmat)]) + paths.append([node.tag, node, self.mergeTransform(node, groupmat), self.getPenNumber(node)]) doc = '' hasGroups = True while hasGroups: @@ -200,11 +198,19 @@ class hpglEncoder: hasGroups = True for path in paths[i][1]: if (path.tag == inkex.addNS('g', 'svg') and self.isGroupVisible(path)) or path.tag == inkex.addNS('path', 'svg'): - paths.append([path.tag, path, self.mergeTransform(path, paths[i][2])]) + paths.insert(i + 1, [path.tag, path, self.mergeTransform(path, paths[i][2]), paths[i][3]]) paths[i][0] = '' for node in paths: if node[0] == inkex.addNS('path', 'svg'): - self.processPath(node[1], node[2]) + self.processPath(node[1], node[2], node[3]) + + def getPenNumber(self, doc): + penNum = str(doc.get('{' + inkex.NSS['inkscape'] + '}label')).lower().strip(' \t\n\r') + if re.search(r'( |\A)pen *\d+( |\Z)', penNum): + penNum = re.sub(r'(.* |\A)pen *(\d+)( .*|\Z)', r'\2', penNum, 1) + return int(penNum) + else: + return self.options.pen def mergeTransform(self, doc, matrix): # get and merge two matrixes into one @@ -222,7 +228,7 @@ class hpglEncoder: return False return True - def processPath(self, node, mat): + def processPath(self, node, mat, pen): # process path path = node.get('d') if path: @@ -239,7 +245,7 @@ class hpglEncoder: posX, posY = singlePathPoint[1] # check if point is repeating, if so, ignore if int(round(posX)) != int(round(oldPosX)) or int(round(posY)) != int(round(oldPosY)): - self.processOffset(cmd, posX, posY) + self.processOffset(cmd, posX, posY, pen) cmd = 'PD' oldPosX = posX oldPosY = posY @@ -255,10 +261,10 @@ class hpglEncoder: overcutLength += self.getLength(oldPosX, oldPosY, posX, posY) if overcutLength >= self.overcut: newLength = self.changeLength(oldPosX, oldPosY, posX, posY, - (overcutLength - self.overcut)) - self.processOffset(cmd, newLength[0], newLength[1]) + self.processOffset(cmd, newLength[0], newLength[1], pen) break else: - self.processOffset(cmd, posX, posY) + self.processOffset(cmd, posX, posY, pen) oldPosX = posX oldPosY = posY @@ -277,34 +283,34 @@ class hpglEncoder: y = y2 + (y2 - y1) / self.getLength(x1, y1, x2, y2, False) * offset return [x, y] - def processOffset(self, cmd, posX, posY): + def processOffset(self, cmd, posX, posY, pen): # calculate offset correction (or dont) if self.toolOffset == 0.0 or self.dryRun: - self.storePoint(cmd, posX, posY) + self.storePoint(cmd, posX, posY, pen) else: # insert data into cache self.vData.pop(0) - self.vData.insert(3, [cmd, posX, posY]) + self.vData.insert(3, [cmd, posX, posY, pen]) # decide if enough data is availabe - if self.vData[2][1] != -1.0: - if self.vData[1][1] == -1.0: - self.storePoint(self.vData[2][0], self.vData[2][1], self.vData[2][2]) + if self.vData[2][1] != 'False': + if self.vData[1][1] == 'False': + self.storePoint(self.vData[2][0], self.vData[2][1], self.vData[2][2], self.vData[2][3]) else: # perform tool offset correction (It's a *tad* complicated, if you want to understand it draw the data as lines on paper) if self.vData[2][0] == 'PD': # If the 3rd entry in the cache is a pen down command make the line longer by the tool offset pointThree = self.changeLength(self.vData[1][1], self.vData[1][2], self.vData[2][1], self.vData[2][2], self.toolOffset) - self.storePoint('PD', pointThree[0], pointThree[1]) - elif self.vData[0][1] != -1.0: + self.storePoint('PD', pointThree[0], pointThree[1], self.vData[2][3]) + elif self.vData[0][1] != 'False': # Elif the 1st entry in the cache is filled with data and the 3rd entry is a pen up command shift # the 3rd entry by the current tool offset position according to the 2nd command pointThree = self.changeLength(self.vData[0][1], self.vData[0][2], self.vData[1][1], self.vData[1][2], self.toolOffset) pointThree[0] = self.vData[2][1] - (self.vData[1][1] - pointThree[0]) pointThree[1] = self.vData[2][2] - (self.vData[1][2] - pointThree[1]) - self.storePoint('PU', pointThree[0], pointThree[1]) + self.storePoint('PU', pointThree[0], pointThree[1], self.vData[2][3]) else: # Else just write the 3rd entry pointThree = [self.vData[2][1], self.vData[2][2]] - self.storePoint('PU', pointThree[0], pointThree[1]) + self.storePoint('PU', pointThree[0], pointThree[1], self.vData[2][3]) if self.vData[3][0] == 'PD': # If the 4th entry in the cache is a pen down command guide tool to next line with a circle between the prolonged 3rd and 4th entry if self.getLength(self.vData[2][1], self.vData[2][2], self.vData[3][1], self.vData[3][2]) >= self.toolOffset: @@ -324,16 +330,16 @@ class hpglEncoder: if angleVector >= 0: angle = angleStart + self.toolOffsetFlat while angle < angleStart + angleVector: - self.storePoint('PD', self.vData[2][1] + math.cos(angle) * self.toolOffset, self.vData[2][2] + math.sin(angle) * self.toolOffset) + self.storePoint('PD', self.vData[2][1] + math.cos(angle) * self.toolOffset, self.vData[2][2] + math.sin(angle) * self.toolOffset, self.vData[2][3]) angle += self.toolOffsetFlat else: angle = angleStart - self.toolOffsetFlat while angle > angleStart + angleVector: - self.storePoint('PD', self.vData[2][1] + math.cos(angle) * self.toolOffset, self.vData[2][2] + math.sin(angle) * self.toolOffset) + self.storePoint('PD', self.vData[2][1] + math.cos(angle) * self.toolOffset, self.vData[2][2] + math.sin(angle) * self.toolOffset, self.vData[2][3]) angle -= self.toolOffsetFlat - self.storePoint('PD', pointFour[0], pointFour[1]) + self.storePoint('PD', pointFour[0], pointFour[1], self.vData[3][3]) - def storePoint(self, command, x, y): + def storePoint(self, command, x, y, pen): x = int(round(x)) y = int(round(y)) # skip when no change in movement @@ -357,11 +363,15 @@ class hpglEncoder: x = 0 if y < 0: y = 0 + # select correct pen + if self.lastPen != pen: + self.hpgl += ';SP%d' % pen # do not repeat command - if command == 'PD' and self.lastPoint[0] == 'PD': + if command == 'PD' and self.lastPoint[0] == 'PD' and self.lastPen == pen: self.hpgl += ',%d,%d' % (x, y) else: self.hpgl += ';%s%d,%d' % (command, x, y) + self.lastPen = pen self.lastPoint = [command, x, y] # vim: expandtab shiftwidth=4 tabstop=8 softtabstop=4 fileencoding=utf-8 textwidth=99 \ No newline at end of file diff --git a/share/extensions/hpgl_output.py b/share/extensions/hpgl_output.py index c6713cb65..fc4f248af 100755 --- a/share/extensions/hpgl_output.py +++ b/share/extensions/hpgl_output.py @@ -62,12 +62,12 @@ class HpglOutput(inkex.Effect): type, value, traceback = sys.exc_info() raise ValueError, ("", type, value), traceback # convert raw HPGL to HPGL - hpglInit = 'IN;SP%d' % self.options.pen + hpglInit = 'IN' if self.options.force > 0: hpglInit += ';FS%d' % self.options.force if self.options.speed > 0: hpglInit += ';VS%d' % self.options.speed - self.hpgl = hpglInit + self.hpgl + ';PU0,0;SP0;IN;' + self.hpgl = hpglInit + self.hpgl + ';SP0;PU0,0;IN; ' def output(self): # print to file diff --git a/share/extensions/plotter.py b/share/extensions/plotter.py index 7e24d0824..2e4fd5dd5 100644 --- a/share/extensions/plotter.py +++ b/share/extensions/plotter.py @@ -98,12 +98,12 @@ class Plot(inkex.Effect): def convertToHpgl(self): # convert raw HPGL to HPGL - hpglInit = 'IN;SP%d' % self.options.pen + hpglInit = 'IN' if self.options.force > 0: hpglInit += ';FS%d' % self.options.force if self.options.speed > 0: hpglInit += ';VS%d' % self.options.speed - self.hpgl = hpglInit + self.hpgl + ';PU0,0;SP0;IN; ' + self.hpgl = hpglInit + self.hpgl + ';SP0;PU0,0;IN; ' def convertToDmpl(self): # convert HPGL to DMPL @@ -119,22 +119,23 @@ class Plot(inkex.Effect): # Z = Reset plotter # n,n, = Coordinate pair self.hpgl = self.hpgl.replace(';', ',') + self.hpgl = self.hpgl.replace('SP', 'P') self.hpgl = self.hpgl.replace('PU', 'U') self.hpgl = self.hpgl.replace('PD', 'D') - dmplInit = ';:HAL0P%d' % self.options.pen + dmplInit = ';:HAL0' if self.options.speed > 0: dmplInit += 'V%d' % self.options.speed dmplInit += 'EC1' - self.hpgl = dmplInit + self.hpgl[1:] + ',U0,0,P0Z ' + self.hpgl = dmplInit + self.hpgl[1:] + ',P0,U0,0,Z ' def convertToKNK(self): # convert HPGL to KNK Plotter Language - hpglInit = 'ZG;SP%d' % self.options.pen + hpglInit = 'ZG' if self.options.force > 0: hpglInit += ';FS%d' % self.options.force if self.options.speed > 0: hpglInit += ';VS%d' % self.options.speed - self.hpgl = hpglInit + self.hpgl + ';PU0,0;SP0;@ ' + self.hpgl = hpglInit + self.hpgl + ';SP0;PU0,0;@ ' def sendHpglToSerial(self): # gracefully exit script when pySerial is missing @@ -223,7 +224,7 @@ class Plot(inkex.Effect): inkex.errormsg(' Flatness: ' + str(debugObject.flat) + ' plotter steps') inkex.errormsg(' Tool offset flatness: ' + str(debugObject.toolOffsetFlat) + ' plotter steps') inkex.errormsg("\n" + self.options.commandLanguage + " data:\n") - inkex.errormsg(self.hpgl) + inkex.errormsg(self.options.initCommands + self.hpgl) if __name__ == '__main__': # start extension -- cgit v1.2.3 From a729eeb50789ae7bc4e7f5a0c69f62c50212ab87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20W=C3=BCst?= Date: Fri, 10 Apr 2015 18:55:39 +0200 Subject: added option to set non-standard bytesize, stopbits and parity settings (bzr r14050) --- share/extensions/plotter.inx | 20 +++++++++- share/extensions/plotter.py | 91 +++++++++++++++++++++++++++++++------------- 2 files changed, 84 insertions(+), 27 deletions(-) (limited to 'share') diff --git a/share/extensions/plotter.inx b/share/extensions/plotter.inx index 5a6d8ce06..cc916fe08 100644 --- a/share/extensions/plotter.inx +++ b/share/extensions/plotter.inx @@ -27,7 +27,25 @@ 57600 115200 - + + 8 Bits + 7 Bits + 6 Bits + 5 Bits + + + 1 Bit + 1.5 Bits + 2 Bits + + + None + Even + Odd + Mark + Space + + <_item value="xonxoff">Software (XON/XOFF) <_item value="rtscts">Hardware (RTS/CTS) <_item value="dsrdtrrtscts">Hardware (DSR/DTR + RTS/CTS) diff --git a/share/extensions/plotter.py b/share/extensions/plotter.py index 2e4fd5dd5..c0f180f60 100644 --- a/share/extensions/plotter.py +++ b/share/extensions/plotter.py @@ -34,27 +34,30 @@ class Plot(inkex.Effect): def __init__(self): inkex.Effect.__init__(self) - self.OptionParser.add_option('--tab', action='store', type='string', dest='tab') - self.OptionParser.add_option('--serialPort', action='store', type='string', dest='serialPort', default='COM1', help='Serial port') - self.OptionParser.add_option('--serialBaudRate', action='store', type='string', dest='serialBaudRate', default='9600', help='Serial Baud rate') - self.OptionParser.add_option('--flowControl', action='store', type='string', dest='flowControl', default='0', help='Flow control') - self.OptionParser.add_option('--commandLanguage', action='store', type='string', dest='commandLanguage', default='hpgl', help='Command Language') - self.OptionParser.add_option('--initCommands', action='store', type='string', dest='initCommands', default='', help='Initialization commands') - self.OptionParser.add_option('--resolutionX', action='store', type='float', dest='resolutionX', default=1016.0, help='Resolution X (dpi)') - self.OptionParser.add_option('--resolutionY', action='store', type='float', dest='resolutionY', default=1016.0, help='Resolution Y (dpi)') - self.OptionParser.add_option('--pen', action='store', type='int', dest='pen', default=1, help='Pen number') - self.OptionParser.add_option('--force', action='store', type='int', dest='force', default=24, help='Pen force (g)') - self.OptionParser.add_option('--speed', action='store', type='int', dest='speed', default=20, help='Pen speed (cm/s)') - self.OptionParser.add_option('--orientation', action='store', type='string', dest='orientation', default='90', help='Rotation (Clockwise)') - self.OptionParser.add_option('--mirrorX', action='store', type='inkbool', dest='mirrorX', default='FALSE', help='Mirror X axis') - self.OptionParser.add_option('--mirrorY', action='store', type='inkbool', dest='mirrorY', default='FALSE', help='Mirror Y axis') - self.OptionParser.add_option('--center', action='store', type='inkbool', dest='center', default='FALSE', help='Center zero point') - self.OptionParser.add_option('--overcut', action='store', type='float', dest='overcut', default=1.0, help='Overcut (mm)') - self.OptionParser.add_option('--toolOffset', action='store', type='float', dest='toolOffset', default=0.25, help='Tool offset (mm)') - self.OptionParser.add_option('--precut', action='store', type='inkbool', dest='precut', default='TRUE', help='Use precut') - self.OptionParser.add_option('--flat', action='store', type='float', dest='flat', default=1.2, help='Curve flatness') - self.OptionParser.add_option('--autoAlign', action='store', type='inkbool', dest='autoAlign', default='TRUE', help='Auto align') - self.OptionParser.add_option('--debug', action='store', type='inkbool', dest='debug', default='FALSE', help='Show debug information') + self.OptionParser.add_option('--tab', action='store', type='string', dest='tab') + self.OptionParser.add_option('--serialPort', action='store', type='string', dest='serialPort', default='COM1', help='Serial port') + self.OptionParser.add_option('--serialBaudRate', action='store', type='string', dest='serialBaudRate', default='9600', help='Serial Baud rate') + self.OptionParser.add_option('--serialByteSize', action='store', type='string', dest='serialByteSize', default='eight', help='Serial byte size') + self.OptionParser.add_option('--serialStopBits', action='store', type='string', dest='serialStopBits', default='one', help='Serial stop bits') + self.OptionParser.add_option('--serialParity', action='store', type='string', dest='serialParity', default='none', help='Serial parity') + self.OptionParser.add_option('--serialFlowControl', action='store', type='string', dest='serialFlowControl', default='0', help='Flow control') + self.OptionParser.add_option('--commandLanguage', action='store', type='string', dest='commandLanguage', default='hpgl', help='Command Language') + self.OptionParser.add_option('--initCommands', action='store', type='string', dest='initCommands', default='', help='Initialization commands') + self.OptionParser.add_option('--resolutionX', action='store', type='float', dest='resolutionX', default=1016.0, help='Resolution X (dpi)') + self.OptionParser.add_option('--resolutionY', action='store', type='float', dest='resolutionY', default=1016.0, help='Resolution Y (dpi)') + self.OptionParser.add_option('--pen', action='store', type='int', dest='pen', default=1, help='Pen number') + self.OptionParser.add_option('--force', action='store', type='int', dest='force', default=24, help='Pen force (g)') + self.OptionParser.add_option('--speed', action='store', type='int', dest='speed', default=20, help='Pen speed (cm/s)') + self.OptionParser.add_option('--orientation', action='store', type='string', dest='orientation', default='90', help='Rotation (Clockwise)') + self.OptionParser.add_option('--mirrorX', action='store', type='inkbool', dest='mirrorX', default='FALSE', help='Mirror X axis') + self.OptionParser.add_option('--mirrorY', action='store', type='inkbool', dest='mirrorY', default='FALSE', help='Mirror Y axis') + self.OptionParser.add_option('--center', action='store', type='inkbool', dest='center', default='FALSE', help='Center zero point') + self.OptionParser.add_option('--overcut', action='store', type='float', dest='overcut', default=1.0, help='Overcut (mm)') + self.OptionParser.add_option('--toolOffset', action='store', type='float', dest='toolOffset', default=0.25, help='Tool offset (mm)') + self.OptionParser.add_option('--precut', action='store', type='inkbool', dest='precut', default='TRUE', help='Use precut') + self.OptionParser.add_option('--flat', action='store', type='float', dest='flat', default=1.2, help='Curve flatness') + self.OptionParser.add_option('--autoAlign', action='store', type='inkbool', dest='autoAlign', default='TRUE', help='Auto align') + self.OptionParser.add_option('--debug', action='store', type='inkbool', dest='debug', default='FALSE', help='Show debug information') def effect(self): # get hpgl data @@ -147,17 +150,49 @@ class Plot(inkex.Effect): + "\n2. Extract the \"serial\" subfolder from the zip to the following folder: C:\\[Program files]\\inkscape\\python\\Lib\\" + "\n3. Restart Inkscape.")) return - # send data to plotter + # init serial framework mySerial = serial.Serial() + # set serial port mySerial.port = self.options.serialPort + # set baudrate mySerial.baudrate = self.options.serialBaudRate + # set bytesize + if self.options.serialByteSize == 'five': + mySerial.bytesize = serial.FIVEBITS + if self.options.serialByteSize == 'six': + mySerial.bytesize = serial.SIXBITS + if self.options.serialByteSize == 'seven': + mySerial.bytesize = serial.SEVENBITS + if self.options.serialByteSize == 'eight': + mySerial.bytesize = serial.EIGHTBITS + # set stopbits + if self.options.serialStopBits == 'one': + mySerial.stopbits = serial.STOPBITS_ONE + if self.options.serialStopBits == 'onePointFive': + mySerial.stopbits = serial.STOPBITS_ONE_POINT_FIVE + if self.options.serialStopBits == 'two': + mySerial.stopbits = serial.STOPBITS_TWO + # set parity + if self.options.serialParity == 'none': + mySerial.parity = serial.PARITY_NONE + if self.options.serialParity == 'even': + mySerial.parity = serial.PARITY_EVEN + if self.options.serialParity == 'odd': + mySerial.parity = serial.PARITY_ODD + if self.options.serialParity == 'mark': + mySerial.parity = serial.PARITY_MARK + if self.options.serialParity == 'space': + mySerial.parity = serial.PARITY_SPACE + # set short timeout to avoid locked up interface mySerial.timeout = 0.1 - if self.options.flowControl == 'xonxoff': + # set flow control + if self.options.serialFlowControl == 'xonxoff': mySerial.xonxoff = True - if self.options.flowControl == 'rtscts' or self.options.flowControl == 'dsrdtrrtscts': + if self.options.serialFlowControl == 'rtscts' or self.options.serialFlowControl == 'dsrdtrrtscts': mySerial.rtscts = True - if self.options.flowControl == 'dsrdtrrtscts': + if self.options.serialFlowControl == 'dsrdtrrtscts': mySerial.dsrdtr = True + # try to establish connection try: mySerial.open() except Exception as inst: @@ -167,6 +202,7 @@ class Plot(inkex.Effect): else: type, value, traceback = sys.exc_info() raise ValueError, ('', type, value), traceback + # send data to plotter if self.options.initCommands != '': mySerial.write(self.options.initCommands.decode('string_escape')) mySerial.write(self.hpgl) @@ -178,7 +214,10 @@ class Plot(inkex.Effect): inkex.errormsg("---------------------------------\nDebug information\n---------------------------------\n\nSettings:\n") inkex.errormsg(' Serial Port: ' + self.options.serialPort) inkex.errormsg(' Serial baud rate: ' + self.options.serialBaudRate) - inkex.errormsg(' Flow control: ' + self.options.flowControl) + inkex.errormsg(' Serial byte size: ' + self.options.serialByteSize + ' Bits') + inkex.errormsg(' Serial stop bits: ' + self.options.serialStopBits + ' Bits') + inkex.errormsg(' Serial parity: ' + self.options.serialParity) + inkex.errormsg(' Serial Flow control: ' + self.options.serialFlowControl) inkex.errormsg(' Command language: ' + self.options.commandLanguage) inkex.errormsg(' Initialization commands: ' + self.options.initCommands) inkex.errormsg(' Resolution X (dpi): ' + str(self.options.resolutionX)) -- cgit v1.2.3 From fb014446df14a373bd1a4f8a9bb970ff730b024d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20W=C3=BCst?= Date: Fri, 10 Apr 2015 19:11:00 +0200 Subject: fixed bug: when no tool offset is used uninitialize commands (SP0;PU0,0) are sent twice (bzr r14051) --- share/extensions/hpgl_encoder.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'share') diff --git a/share/extensions/hpgl_encoder.py b/share/extensions/hpgl_encoder.py index 75c5fa889..83b1b7297 100644 --- a/share/extensions/hpgl_encoder.py +++ b/share/extensions/hpgl_encoder.py @@ -177,7 +177,8 @@ class hpglEncoder: # start conversion self.processGroups(self.doc, groupmat) # shift an empty node in in order to process last node in cache - self.processOffset('PU', 0, 0, 0) + if self.toolOffset > 0.0 and not self.dryRun: + self.processOffset('PU', 0, 0, 0) if self.options.debug: return self.hpgl, self else: -- cgit v1.2.3 From d5f4e25e196928fdc80e076432ea486d89abf931 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20W=C3=BCst?= Date: Fri, 10 Apr 2015 20:52:44 +0200 Subject: added info about multiple pen feature in gui (bzr r14055) --- share/extensions/hpgl_output.inx | 14 ++++++++------ share/extensions/plotter.inx | 24 +++++++++++++----------- 2 files changed, 21 insertions(+), 17 deletions(-) (limited to 'share') diff --git a/share/extensions/hpgl_output.inx b/share/extensions/hpgl_output.inx index bfb3e3567..7fa900dc8 100644 --- a/share/extensions/hpgl_output.inx +++ b/share/extensions/hpgl_output.inx @@ -22,14 +22,16 @@ false false - false + false +   + <_param name="multiplePensHelp" type="description">If you want to use multiple pens on your pen plotter create one layer for each pen, name the layers "Pen 1", "Pen 2", etc., and put your drawings in the corresponding layers. This overrules the pen number option above. - 1.00 - 0.25 - true - 1.2 - true + 1.00 + 0.25 + true + 1.2 + true <_param name="settingsHelp" type="description">All these settings depend on the plotter you use, for more information please consult the manual or homepage for your plotter. diff --git a/share/extensions/plotter.inx b/share/extensions/plotter.inx index cc916fe08..17b2ff185 100644 --- a/share/extensions/plotter.inx +++ b/share/extensions/plotter.inx @@ -65,9 +65,9 @@ 1016.0 1016.0 - 1 - 0 - 0 + 1 + 0 + 0 0 90 @@ -76,16 +76,18 @@ false false - false + false +   + <_param name="multiplePensHelp" type="description">If you want to use multiple pens on your pen plotter create one layer for each pen, name the layers "Pen 1", "Pen 2", etc., and put your drawings in the corresponding layers. This overrules the pen number option above. - 1.00 - 0.25 - true - 1.2 - true -   - false + 1.00 + 0.25 + true + 1.2 + true +   + false <_param name="settingsHelp" type="description">All these settings depend on the plotter you use, for more information please consult the manual or homepage for your plotter. -- cgit v1.2.3