hpgl_decoder.py revision 7cc5285e0a99d8e121e75abfdfea3474dcd6a86d
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof KosińskiCopyright (C) 2013 Sebastian Wüst, sebi@timewaster.de
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof KosińskiThis program is free software; you can redistribute it and/or modify
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof Kosińskiit under the terms of the GNU General Public License as published by
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof Kosińskithe Free Software Foundation; either version 2 of the License, or
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof Kosiński(at your option) any later version.
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof KosińskiThis program is distributed in the hope that it will be useful,
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof Kosińskibut WITHOUT ANY WARRANTY; without even the implied warranty of
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof KosińskiMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof KosińskiGNU General Public License for more details.
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof KosińskiYou should have received a copy of the GNU General Public License
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof Kosińskialong with this program; if not, write to the Free Software
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof KosińskiFoundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof Kosiński# standard libraries
7128efb0d57297be0fbe4ef91c30fff5d1f94006Jon A. Cruz# local library
7128efb0d57297be0fbe4ef91c30fff5d1f94006Jon A. Cruz# TODO: Unittests
7128efb0d57297be0fbe4ef91c30fff5d1f94006Jon A. Cruz "resolutionX":float
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof Kosiński "resolutionY":float
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof Kosiński "showMovements":bool
7128efb0d57297be0fbe4ef91c30fff5d1f94006Jon A. Cruz self.scaleX = options.resolutionX / 90.0 # dots/inch to dots/pixels
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof Kosiński self.scaleY = options.resolutionY / 90.0 # dots/inch to dots/pixels
16e7cf17a1bc8bb0d79dfa6adc4f75b843fb6d16Krzysztof Kosiński # prepare document
16e7cf17a1bc8bb0d79dfa6adc4f75b843fb6d16Krzysztof Kosiński self.doc = inkex.etree.parse(StringIO('<svg xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" width="%s" height="%s"></svg>' %
16e7cf17a1bc8bb0d79dfa6adc4f75b843fb6d16Krzysztof Kosiński (self.options.docWidth, self.options.docHeight)))
7128efb0d57297be0fbe4ef91c30fff5d1f94006Jon A. Cruz self.layers[0] = inkex.etree.SubElement(self.doc.getroot(), 'g', {inkex.addNS('groupmode', 'inkscape'): 'layer', inkex.addNS('label', 'inkscape'): self.textMovements})
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof Kosiński oldCoordinates = (0.0, self.options.docHeight)
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof Kosiński # if Initialize command, ignore
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof Kosiński # if Select Pen command
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof Kosiński # if Pen Up command
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof Kosiński if self.options.showMovements and i != len(hpglData) - 1:
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof Kosiński path += ' L %f,%f' % self.getParameters(command[2:])
a4030d5ca449e7e384bc699cd249ee704faaeab0Chris Morgan path = 'M %f,%f' % self.getParameters(command[2:])
oldCoordinates = (float(parameter[-2]) / self.scaleX, self.options.docHeight - float(parameter[-1]) / self.scaleX)
{inkex.addNS('groupmode', 'inkscape'): 'layer', inkex.addNS('label', 'inkscape'): self.textPenNumber + layerNumber})
inkex.etree.SubElement(self.layers[layerNumber], 'path', {'d': path, 'style': 'stroke:#' + lineColor + '; stroke-width:0.4; fill:none;'})