diff options
| author | Jabier Arraiza Cenoz <jabier.arraiza@marker.es> | 2013-11-12 01:42:33 +0000 |
|---|---|---|
| committer | Jabiertxof <jtx@jtx.marker.es> | 2013-11-12 01:42:33 +0000 |
| commit | f8fff50ab6adb853dfc82fbad7f87223efe4fdb9 (patch) | |
| tree | 8d9abddf9df2dc90d81e1b6bf0d7a9315ecd707a | |
| parent | Update to trunk (diff) | |
| parent | Fix bug in SPSwitch. (diff) | |
| download | inkscape-f8fff50ab6adb853dfc82fbad7f87223efe4fdb9.tar.gz inkscape-f8fff50ab6adb853dfc82fbad7f87223efe4fdb9.zip | |
Update to trunk
(bzr r11950.1.197)
| -rw-r--r-- | po/POTFILES.in | 48 | ||||
| -rwxr-xr-x | share/extensions/cubicsuperpath.py | 4 | ||||
| -rw-r--r-- | share/extensions/hpgl_decoder.py | 13 | ||||
| -rw-r--r-- | share/extensions/hpgl_encoder.py | 63 | ||||
| -rw-r--r-- | share/extensions/hpgl_input.py | 14 | ||||
| -rwxr-xr-x | share/extensions/hpgl_output.py | 10 | ||||
| -rw-r--r-- | share/extensions/plotter.inx | 10 | ||||
| -rw-r--r-- | share/extensions/plotter.py | 84 | ||||
| -rw-r--r-- | src/display/nr-filter-image.cpp | 4 | ||||
| -rw-r--r-- | src/sp-item-group.h | 2 | ||||
| -rw-r--r-- | src/sp-switch.cpp | 1 | ||||
| -rw-r--r-- | src/sp-switch.h | 2 |
12 files changed, 146 insertions, 109 deletions
diff --git a/po/POTFILES.in b/po/POTFILES.in index 2844d6faa..de1496034 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -1,16 +1,13 @@ # List of source files containing translatable strings. # Please keep this file sorted alphabetically. -# Generated by ./generate_POTFILES.sh at nie, 1 wrz 2013, 17:32:54 CEST +# Generated by ./generate_POTFILES.sh at Mo 11. Nov 22:57:25 CET 2013 [encoding: UTF-8] inkscape.desktop.in share/filters/filters.svg.h share/palettes/palettes.h share/patterns/patterns.svg.h -src/arc-context.cpp -src/box3d-context.cpp src/box3d.cpp src/color-profile.cpp -src/connector-context.cpp src/context-fns.cpp src/desktop.cpp src/desktop-events.cpp @@ -18,11 +15,6 @@ src/display/canvas-axonomgrid.cpp src/display/canvas-grid.cpp src/display/snap-indicator.cpp src/document.cpp -src/draw-context.cpp -src/dropper-context.cpp -src/dyna-draw-context.cpp -src/eraser-context.cpp -src/event-context.cpp src/event-log.cpp src/extension/dependency.cpp src/extension/effect.cpp @@ -115,9 +107,7 @@ src/extension/prefdialog.cpp src/extension/system.cpp src/file.cpp src/filter-enums.cpp -src/flood-context.cpp src/gradient-chemistry.cpp -src/gradient-context.cpp src/gradient-drag.cpp src/inkscape.cpp src/interface.cpp @@ -183,22 +173,16 @@ src/live_effects/parameter/random.cpp src/live_effects/parameter/text.cpp src/live_effects/parameter/unit.cpp src/live_effects/parameter/vector.cpp -src/lpe-tool-context.cpp src/main-cmdlineact.cpp src/main.cpp src/menus-skeleton.h -src/mesh-context.cpp src/object-edit.cpp src/path-chemistry.cpp -src/pencil-context.cpp -src/pen-context.cpp src/persp3d.cpp src/preferences.cpp src/preferences-skeleton.h src/rdf.cpp -src/rect-context.cpp src/resource-manager.cpp -src/select-context.cpp src/selection-chemistry.cpp src/selection-describer.cpp src/seltrans.cpp @@ -210,7 +194,6 @@ src/sp-flowregion.cpp src/sp-flowtext.cpp src/sp-guide.cpp src/sp-image.cpp -src/spiral-context.cpp src/sp-item.cpp src/sp-item-group.cpp src/sp-line.cpp @@ -221,7 +204,6 @@ src/sp-offset.cpp src/sp-path.cpp src/sp-polygon.cpp src/sp-polyline.cpp -src/spray-context.cpp src/sp-rect.cpp src/sp-spiral.cpp src/sp-star.cpp @@ -230,14 +212,11 @@ src/sp-text.cpp src/sp-tref.cpp src/sp-tspan.cpp src/sp-use.cpp -src/star-context.cpp src/text-chemistry.cpp -src/text-context.cpp src/text-editing.cpp src/tools-switch.cpp src/trace/potrace/inkscape-potrace.cpp src/trace/trace.cpp -src/tweak-context.cpp src/ui/clipboard.cpp src/ui/dialog/aboutbox.cpp src/ui/dialog/align-and-distribute.cpp @@ -287,8 +266,29 @@ src/ui/dialog/xml-tree.cpp src/ui/tool/curve-drag-point.cpp src/ui/tool/multi-path-manipulator.cpp src/ui/tool/node.cpp -src/ui/tool/node-tool.cpp src/ui/tool/path-manipulator.cpp +src/ui/tools/arc-tool.cpp +src/ui/tools/box3d-tool.cpp +src/ui/tools/calligraphic-tool.cpp +src/ui/tools/connector-tool.cpp +src/ui/tools/dropper-tool.cpp +src/ui/tools/eraser-tool.cpp +src/ui/tools/flood-tool.cpp +src/ui/tools/freehand-base.cpp +src/ui/tools/gradient-tool.cpp +src/ui/tools/lpe-tool.cpp +src/ui/tools/mesh-tool.cpp +src/ui/tools/node-tool.cpp +src/ui/tools/pencil-tool.cpp +src/ui/tools/pen-tool.cpp +src/ui/tools/rect-tool.cpp +src/ui/tools/select-tool.cpp +src/ui/tools/spiral-tool.cpp +src/ui/tools/spray-tool.cpp +src/ui/tools/star-tool.cpp +src/ui/tools/text-tool.cpp +src/ui/tools/tool-base.cpp +src/ui/tools/tweak-tool.cpp src/ui/tool/transform-handle-set.cpp src/ui/widget/combo-enums.h src/ui/widget/entity-entry.cpp @@ -365,6 +365,7 @@ share/extensions/generate_voronoi.py share/extensions/gimp_xcf.py share/extensions/guides_creator.py share/extensions/guillotine.py +share/extensions/hpgl_decoder.py share/extensions/hpgl_input.py share/extensions/hpgl_output.py share/extensions/inkex.py @@ -442,6 +443,7 @@ share/extensions/wireframe_sphere.py [type: gettext/xml] share/extensions/edge3d.inx [type: gettext/xml] share/extensions/embedimage.inx [type: gettext/xml] share/extensions/embedselectedimages.inx +[type: gettext/xml] share/extensions/empty_page.inx [type: gettext/xml] share/extensions/eps_input.inx [type: gettext/xml] share/extensions/eqtexsvg.inx [type: gettext/xml] share/extensions/export_gimp_palette.inx diff --git a/share/extensions/cubicsuperpath.py b/share/extensions/cubicsuperpath.py index da46f8080..925efdb04 100755 --- a/share/extensions/cubicsuperpath.py +++ b/share/extensions/cubicsuperpath.py @@ -46,8 +46,8 @@ def ArcToPath(p1,params): rx,ry,teta,longflag,sweepflag,x2,y2=params[:] teta = teta*pi/180.0 B=[x2,y2] - if rx==0 or ry==0: - return([[A,A,A],[B,B,B]]) + if rx==0 or ry==0 or A==B: + return([[A[:],A[:],A[:]],[B[:],B[:],B[:]]]) mat=matprod((rotmat(teta),[[1/rx,0],[0,1/ry]],rotmat(-teta))) applymat(mat, A) applymat(mat, B) diff --git a/share/extensions/hpgl_decoder.py b/share/extensions/hpgl_decoder.py index 870775cb2..0af2d5f5f 100644 --- a/share/extensions/hpgl_decoder.py +++ b/share/extensions/hpgl_decoder.py @@ -38,17 +38,18 @@ class hpglDecoder: self.options = options self.scaleX = options.resolutionX / 90.0 # dots/inch to dots/pixels self.scaleY = options.resolutionY / 90.0 # dots/inch to dots/pixels - self.warnings = [] + self.warning = '' + self.textMovements = _("Movements") + self.textPenNumber = _("Pen #") def getSvg(self): - # parse hpgl data # prepare document self.doc = inkex.etree.parse(StringIO('<svg xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" width="%s" height="%s"></svg>' % (self.options.docWidth, self.options.docHeight))) actualLayer = 0 self.layers = {} if self.options.showMovements: - self.layers[0] = inkex.etree.SubElement(self.doc.getroot(), 'g', {inkex.addNS('groupmode', 'inkscape'): 'layer', inkex.addNS('label', 'inkscape'): 'Movements'}) + self.layers[0] = inkex.etree.SubElement(self.doc.getroot(), 'g', {inkex.addNS('groupmode', 'inkscape'): 'layer', inkex.addNS('label', 'inkscape'): self.textMovements}) # parse paths hpglData = self.hpglString.split(';') if len(hpglData) < 3: @@ -89,14 +90,14 @@ class hpglDecoder: parameterString = ','.join(parameter) path += ' L %s' % parameterString else: - self.warnings.append('UNKNOWN_COMMANDS') + self.warning = 'UNKNOWN_COMMANDS' if ' L ' in path: self.addPathToLayer(path, actualLayer) - return (self.doc, self.warnings) + return (self.doc, self.warning) def createLayer(self, layerNumber): self.layers[layerNumber] = inkex.etree.SubElement(self.doc.getroot(), 'g', - {inkex.addNS('groupmode', 'inkscape'): 'layer', inkex.addNS('label', 'inkscape'): 'Drawing Pen ' + layerNumber}) + {inkex.addNS('groupmode', 'inkscape'): 'layer', inkex.addNS('label', 'inkscape'): self.textPenNumber + layerNumber}) def addPathToLayer(self, path, layerNumber): lineColor = '000000' diff --git a/share/extensions/hpgl_encoder.py b/share/extensions/hpgl_encoder.py index 90d2734be..7623751b6 100644 --- a/share/extensions/hpgl_encoder.py +++ b/share/extensions/hpgl_encoder.py @@ -88,10 +88,10 @@ class hpglEncoder: def getHpgl(self): # dryRun to find edges - self.groupmat = [[[self.mirrorX * self.scaleX * self.viewBoxTransformX, 0.0, 0.0], [0.0, self.mirrorY * self.scaleY * self.viewBoxTransformY, 0.0]]] - self.groupmat[0] = simpletransform.composeTransform(self.groupmat[0], simpletransform.parseTransform('rotate(' + self.options.orientation + ')')) + 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.process_group(self.doc, self.groupmat) + self.process_groups(self.doc, groupmat) if self.divergenceX == 'False' or self.divergenceY == 'False' or self.sizeX == 'False' or self.sizeY == 'False': raise Exception('NO_PATHS') # live run @@ -102,9 +102,9 @@ class hpglEncoder: elif self.options.useToolOffset: self.options.offsetX += self.options.toolOffset self.options.offsetY += self.options.toolOffset - self.groupmat = [[[self.mirrorX * self.scaleX * self.viewBoxTransformX, 0.0, - self.divergenceX + self.options.offsetX], - [0.0, self.mirrorY * self.scaleY * self.viewBoxTransformY, - self.divergenceY + self.options.offsetY]]] - self.groupmat[0] = simpletransform.composeTransform(self.groupmat[0], simpletransform.parseTransform('rotate(' + self.options.orientation + ')')) + groupmat = [[self.mirrorX * self.scaleX * self.viewBoxTransformX, 0.0, - self.divergenceX + self.options.offsetX], + [0.0, self.mirrorY * self.scaleY * self.viewBoxTransformY, - self.divergenceY + self.options.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]] # store first hpgl commands self.hpgl = 'IN;SP%d' % self.options.pen @@ -113,32 +113,49 @@ class hpglEncoder: self.calcOffset('PU', 0, 0) self.calcOffset('PD', 0, self.options.toolOffset * 8) # start conversion - self.process_group(self.doc, self.groupmat) + self.process_groups(self.doc, groupmat) # shift an empty node in in order to process last node in cache self.calcOffset('PU', 0, 0) # add return to zero point self.hpgl += ';PU0,0;' return self.hpgl - def process_group(self, group, groupmat): - # process groups + def process_groups(self, doc, groupmat): + # flatten groups to avoid recursion + 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)]) + doc = '' + hasGroups = True + while hasGroups: + hasGroups = False + for i, elm in enumerate(paths): + if paths[i][0] == inkex.addNS('g', 'svg') and self.isGroupVisible(paths[i][1]): + 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[i][0] = '' + for node in paths: + if node[0] == inkex.addNS('path', 'svg'): + self.process_path(node[1], node[2]) + + def mergeTransform(self, doc, matrix): + # get and merge two matrixes into one + trans = doc.get('transform') + if trans: + return simpletransform.composeTransform(matrix, simpletransform.parseTransform(trans)) + else: + return matrix + + def isGroupVisible(self, group): style = group.get('style') if style: style = simplestyle.parseStyle(style) - if style.has_key('display'): - if style['display'] == 'none': - return - trans = group.get('transform') - if trans: - groupmat.append(simpletransform.composeTransform(groupmat[-1], simpletransform.parseTransform(trans))) - for node in group: - if node.tag == inkex.addNS('path', 'svg'): - self.process_path(node, groupmat[-1]) - if node.tag == inkex.addNS('g', 'svg'): - # TODO: Remove recursion - self.process_group(node, groupmat) - if trans: - groupmat.pop() + if 'display' in style and style['display'] == 'none': + return False + return True def process_path(self, node, mat): # process path diff --git a/share/extensions/hpgl_input.py b/share/extensions/hpgl_input.py index d1d46c76f..93dd5a6c2 100644 --- a/share/extensions/hpgl_input.py +++ b/share/extensions/hpgl_input.py @@ -53,18 +53,20 @@ hpglString = ';'.join(hpglString) myHpglDecoder = hpgl_decoder.hpglDecoder(hpglString, options) try: doc, warnings = myHpglDecoder.getSvg() - # issue warning if unknown commands where found - if 'UNKNOWN_COMMANDS' in warnings: - inkex.errormsg(_("The HPGL data contained unknown (unsupported) commands, there is a possibility that the drawing is missing some content.")) - # deliver document to inkscape - doc.write(inkex.sys.stdout) except Exception as inst: if inst.args[0] == 'NO_HPGL_DATA': # issue error if no hpgl data found inkex.errormsg(_("No HPGL data found.")) - print 1 + exit(1) else: type, value, traceback = sys.exc_info() raise ValueError, ("", type, value), traceback +# issue warning if unknown commands where found +if 'UNKNOWN_COMMANDS' in warnings: + inkex.errormsg(_("The HPGL data contained unknown (unsupported) commands, there is a possibility that the drawing is missing some content.")) + +# deliver document to inkscape +doc.write(inkex.sys.stdout) + # 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 c5fec0ec8..93be82980 100755 --- a/share/extensions/hpgl_output.py +++ b/share/extensions/hpgl_output.py @@ -35,7 +35,7 @@ class MyEffect(inkex.Effect): 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('--orientation', action='store', type='string', dest='orientation', default='90', help='orientation') + 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') @@ -57,18 +57,18 @@ class MyEffect(inkex.Effect): if inst.args[0] == 'NO_PATHS': # issue error if no paths found inkex.errormsg(_("No paths where found. Please convert all objects you want to save into paths.")) - self.hpgl = 1 + self.hpgl = '' + return else: type, value, traceback = sys.exc_info() raise ValueError, ("", type, value), traceback def output(self): # print to file - print self.hpgl + if self.hpgl != '': + print self.hpgl if __name__ == '__main__': - # Raise recursion limit to avoid exceptions on big documents - sys.setrecursionlimit(20000) # start extension e = MyEffect() e.affect() diff --git a/share/extensions/plotter.inx b/share/extensions/plotter.inx index 526ab1bd3..49bcf837e 100644 --- a/share/extensions/plotter.inx +++ b/share/extensions/plotter.inx @@ -26,11 +26,15 @@ <option value="57600">57600</option> <option value="115200">115200</option> </param> - <param name="flowControl" type="optiongroup" appearance="minimal" _gui-text="Flow control" _gui-description="Software / Hardware flow control - Try different settings to find the one that fits your plotter (Default: None)"> - <_option value="">None</_option> + <param name="flowControl" type="optiongroup" appearance="minimal" _gui-text="Flow control" _gui-description="Software / Hardware flow control - Try different settings to find the one that fits your plotter (Default: Software)"> <_option value="xonxoff">Software (XON/XOFF)</_option> <_option value="rtscts">Hardware (RTS/CTS)</_option> <_option value="dsrdtrrtscts">Hardware (DSR/DTR + RTS/CTS)</_option> + <_option value="">None</_option> + </param> + <param name="commandLanguage" type="optiongroup" appearance="minimal" _gui-text="Command Language" _gui-description="The command language to use - Try different settings to find the one that fits your plotter (Default: HPGL)"> + <option value="hpgl">HPGL</option> + <option value="dmpl">DMPL</option> </param> <param name="space" type="description"> </param> <_param name="serialHelp" type="description">This can be a physical serial connection or a USB-to-Serial bridge. Ask your plotter manufacturer for drivers if needed.</_param> @@ -38,7 +42,7 @@ <_param name="hpglNote" type="description">Please note that only the HPGL command language is supported at the moment.</_param> </page> <page name="plotter" _gui-text="Plotter Settings"> - <param name="pen" type="int" min="0" max="10" _gui-text="Pen number" _gui-description="The number of the pen (tool) to use, on most plotters 1 (Standard: '1')">1</param> + <param name="pen" type="int" min="0" max="99" _gui-text="Pen number" _gui-description="The number of the pen (tool) to use, on most plotters 1 (Standard: '1')">1</param> <param name="resolutionX" type="float" min="1.0" max="4096.0" precision="1" _gui-text="Resolution X (dpi)" _gui-description="The amount of steps the cutter moves if it moves for 1 inch on the X axis - Try different settings to find the one that fits your plotter (Default: 1016.0)">1016.0</param> <param name="resolutionY" type="float" min="1.0" max="4096.0" precision="1" _gui-text="Resolution Y (dpi)" _gui-description="The amount of steps the cutter moves if it moves for 1 inch on the Y axis - Try different settings to find the one that fits your plotter (Default: 1016.0)">1016.0</param> <param name="mirrorX" type="boolean" _gui-text="Mirror X-axis" _gui-description="Check this to mirror the X axis (Default: Unchecked)">false</param> diff --git a/share/extensions/plotter.py b/share/extensions/plotter.py index d518de4c9..6cc235228 100644 --- a/share/extensions/plotter.py +++ b/share/extensions/plotter.py @@ -19,6 +19,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ''' # standard library +import re import sys # local libraries import gettext @@ -28,31 +29,31 @@ import inkex inkex.localize() -# TODO: Unittests -# TODO: Material feed after plot, plot rectangles +# TODO: Unittests, Material feed after plot, plot rectangles and circles (convert to paths), maybe interpret layers as pens class MyEffect(inkex.Effect): def __init__(self): inkex.Effect.__init__(self) - self.OptionParser.add_option('--tab', action='store', type='string', dest='tab') - 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('--orientation', action='store', type='string', dest='orientation', default='90', help='orientation') - 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('--flat', action='store', type='float', dest='flat', default=1.2, help='Curve flatness') - self.OptionParser.add_option('--useOvercut', action='store', type='inkbool', dest='useOvercut', default='TRUE', help='Use overcut') - self.OptionParser.add_option('--overcut', action='store', type='float', dest='overcut', default=1.0, help='Overcut (mm)') - self.OptionParser.add_option('--useToolOffset', action='store', type='inkbool', dest='useToolOffset', default='TRUE', help='Correct tool offset') - 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('--offsetX', action='store', type='float', dest='offsetX', default=0.0, help='X offset (mm)') - self.OptionParser.add_option('--offsetY', action='store', type='float', dest='offsetY', default=0.0, help='Y offset (mm)') - 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('--tab', action='store', type='string', dest='tab') + 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('--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('--flat', action='store', type='float', dest='flat', default=1.2, help='Curve flatness') + self.OptionParser.add_option('--useOvercut', action='store', type='inkbool', dest='useOvercut', default='TRUE', help='Use overcut') + self.OptionParser.add_option('--overcut', action='store', type='float', dest='overcut', default=1.0, help='Overcut (mm)') + self.OptionParser.add_option('--useToolOffset', action='store', type='inkbool', dest='useToolOffset', default='TRUE', help='Correct tool offset') + 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('--offsetX', action='store', type='float', dest='offsetX', default=0.0, help='X offset (mm)') + self.OptionParser.add_option('--offsetY', action='store', type='float', dest='offsetY', default=0.0, help='Y offset (mm)') + 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') def effect(self): # gracefully exit script when pySerial is missing @@ -64,7 +65,6 @@ class MyEffect(inkex.Effect): + "\n2. Extract the \"serial\" subfolder from the zip to the following folder: C:\\[Program files]\\inkscape\\python\\Lib\\" + "\n3. Restart Inkscape.")) return - # TODO: Maybe implement DMPL? # get hpgl data myHpglEncoder = hpgl_encoder.hpglEncoder(self) try: @@ -76,7 +76,7 @@ class MyEffect(inkex.Effect): return 1 else: type, value, traceback = sys.exc_info() - raise ValueError, ("", type, value), traceback + raise ValueError, ('', type, value), traceback # TODO: Get preview to work. This requires some work on the C++ side to be able to determine if it is # a preview or a final run. (Remember to set <effect needs-live-preview='false'> to true) ''' @@ -95,32 +95,38 @@ class MyEffect(inkex.Effect): pass else: type, value, traceback = sys.exc_info() - raise ValueError, ("", type, value), traceback + raise ValueError, ('', type, value), traceback ''' + if self.options.commandLanguage == 'dmpl': + # convert HPGL to DMPL + self.hpgl = self.hpgl.replace(';', ',') + self.hpgl = self.hpgl.replace('PU', 'U') + self.hpgl = self.hpgl.replace('PD', 'D') + self.hpgl = re.sub(r'IN,SP([0-9]{1,2}),', r';:HAL0P\1EC1', self.hpgl) + self.hpgl += 'Z' # send data to plotter + mySerial = serial.Serial() + mySerial.port = self.options.serialPort + mySerial.baudrate = self.options.serialBaudRate if self.options.flowControl == 'xonxoff': - mySerial = serial.Serial(port=self.options.serialPort, baudrate=self.options.serialBaudRate, timeout=0.1, writeTimeout=10, xonxoff=True) - elif self.options.flowControl == 'rtscts': - mySerial = serial.Serial(port=self.options.serialPort, baudrate=self.options.serialBaudRate, timeout=0.1, writeTimeout=10, rtscts=True) - elif self.options.flowControl == 'dsrdtrrtscts': - mySerial = serial.Serial(port=self.options.serialPort, baudrate=self.options.serialBaudRate, timeout=0.1, writeTimeout=10, dsrdtr=True, rtscts=True) - else: - mySerial = serial.Serial(port=self.options.serialPort, baudrate=self.options.serialBaudRate, timeout=0.1, writeTimeout=10) + mySerial.xonxoff = True + if self.options.flowControl == 'rtscts' or self.options.flowControl == 'dsrdtrrtscts': + mySerial.rtscts = True + if self.options.flowControl == 'dsrdtrrtscts': + mySerial.dsrdtr = True try: - mySerial.write(self.hpgl) + mySerial.open() except Exception as inst: - if inst.args[0] == 'Write timeout': - inkex.errormsg(_("Could not send data. Please check that your plotter is running, connected and the settings are correct.")) + if 'ould not open port' in inst.args[0]: + inkex.errormsg(_("Could not open port. Please check that your plotter is running, connected and the settings are correct.")) + return else: type, value, traceback = sys.exc_info() - raise ValueError, ("", type, value), traceback - # Read back 2 chars to avoid plotter not plotting last command (I have no idea why this is necessary) - mySerial.read(2) + raise ValueError, ('', type, value), traceback + mySerial.write(self.hpgl) mySerial.close() if __name__ == '__main__': - # Raise recursion limit to avoid exceptions on big documents - sys.setrecursionlimit(20000) # start extension e = MyEffect() e.affect() diff --git a/src/display/nr-filter-image.cpp b/src/display/nr-filter-image.cpp index 4ca4cd07c..92bb9dcaa 100644 --- a/src/display/nr-filter-image.cpp +++ b/src/display/nr-filter-image.cpp @@ -163,6 +163,10 @@ void FilterImage::render_cairo(FilterSlot &slot) broken_ref = false; } + if (broken_ref) { + return; + } + cairo_surface_t *image_surface = image->getSurfaceRaw(); Geom::Rect sa = slot.get_slot_area(); diff --git a/src/sp-item-group.h b/src/sp-item-group.h index deb80a641..2004a72b8 100644 --- a/src/sp-item-group.h +++ b/src/sp-item-group.h @@ -55,7 +55,7 @@ public: void scaleChildItemsRec(Geom::Scale const &sc, Geom::Point const &p); gint getItemCount() const; - void _showChildren (Inkscape::Drawing &drawing, Inkscape::DrawingItem *ai, unsigned int key, unsigned int flags); + virtual void _showChildren (Inkscape::Drawing &drawing, Inkscape::DrawingItem *ai, unsigned int key, unsigned int flags); private: void _updateLayerMode(unsigned int display_key=0); diff --git a/src/sp-switch.cpp b/src/sp-switch.cpp index 5c88d7af8..b4841c0d0 100644 --- a/src/sp-switch.cpp +++ b/src/sp-switch.cpp @@ -40,6 +40,7 @@ SPSwitch::SPSwitch() : SPGroup() { } SPSwitch::~SPSwitch() { + _releaseLastItem(_cached_item); } SPObject *SPSwitch::_evaluateFirst() { diff --git a/src/sp-switch.h b/src/sp-switch.h index 3ccc9e3b7..c35982860 100644 --- a/src/sp-switch.h +++ b/src/sp-switch.h @@ -28,7 +28,7 @@ public: void resetChildEvaluated() { _reevaluate(); } GSList *_childList(bool add_ref, SPObject::Action action); - void _showChildren (Inkscape::Drawing &drawing, Inkscape::DrawingItem *ai, unsigned int key, unsigned int flags); + virtual void _showChildren (Inkscape::Drawing &drawing, Inkscape::DrawingItem *ai, unsigned int key, unsigned int flags); SPObject *_evaluateFirst(); void _reevaluate(bool add_to_arena = false); |
