diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 18:24:48 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 18:24:48 +0000 |
commit | cca66b9ec4e494c1d919bff0f71a820d8afab1fa (patch) | |
tree | 146f39ded1c938019e1ed42d30923c2ac9e86789 /share/extensions/plotter.py | |
parent | Initial commit. (diff) | |
download | inkscape-upstream.tar.xz inkscape-upstream.zip |
Adding upstream version 1.2.2.upstream/1.2.2upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'share/extensions/plotter.py')
-rwxr-xr-x | share/extensions/plotter.py | 162 |
1 files changed, 162 insertions, 0 deletions
diff --git a/share/extensions/plotter.py b/share/extensions/plotter.py new file mode 100755 index 0000000..25d4c43 --- /dev/null +++ b/share/extensions/plotter.py @@ -0,0 +1,162 @@ +#!/usr/bin/env python +# coding=utf-8 +# +# Copyright (C) 2013 <Public Domain> +# 2018 Martin Owens <doctormo@gmail.com> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# + +import inkex +from inkex.ports import Serial +from inkex.localization import inkex_gettext as _ + +import hpgl_encoder + + +class Plot(inkex.EffectExtension): + """Generate a plot in HPGL output""" + + def add_arguments(self, pars): + pars.add_argument("--tab") + pars.add_argument( + "--parallelPort", default="/dev/usb/lp2", help="Parallel port" + ) + pars.add_argument("--serialPort", default="COM1", help="Serial port") + pars.add_argument("--serialBaudRate", default="9600", help="Serial Baud rate") + pars.add_argument("--serialByteSize", default="eight", help="Serial byte size") + pars.add_argument("--serialStopBits", default="one", help="Serial stop bits") + pars.add_argument("--serialParity", default="none", help="Serial parity") + pars.add_argument("--serialFlowControl", default="xonxoff", help="Flow control") + pars.add_argument( + "--resolutionX", type=float, default=1016.0, help="Resolution X (dpi)" + ) + pars.add_argument( + "--resolutionY", type=float, default=1016.0, help="Resolution Y (dpi)" + ) + pars.add_argument("--pen", type=int, default=1, help="Pen number") + pars.add_argument("--force", type=int, default=0, help="Pen force (g)") + pars.add_argument("--speed", type=int, default=0, help="Pen speed (cm/s)") + pars.add_argument("--orientation", default="0", help="Rotation (Clockwise)") + pars.add_argument( + "--mirrorX", type=inkex.Boolean, default=False, help="Mirror X axis" + ) + pars.add_argument( + "--mirrorY", type=inkex.Boolean, default=False, help="Mirror Y axis" + ) + pars.add_argument( + "--center", type=inkex.Boolean, default=False, help="Center zero point" + ) + pars.add_argument("--overcut", type=float, default=1.0, help="Overcut (mm)") + pars.add_argument( + "--precut", type=inkex.Boolean, default=True, help="Use precut" + ) + pars.add_argument("--flat", type=float, default=1.2, help="Curve flatness") + pars.add_argument( + "--autoAlign", type=inkex.Boolean, default=True, help="Auto align" + ) + pars.add_argument( + "--toolOffset", + type=float, + default=0.25, + help="Tool (Knife) offset correction (mm)", + ) + pars.add_argument( + "--portType", + type=self.arg_method("to"), + default=self.to_serial, + dest="to_port", + help="Port type", + ) + pars.add_argument( + "--commandLanguage", + type=self.arg_method("convert"), + default=self.convert_hpgl, + dest="to_language", + help="Command Language Filter", + ) + + def effect(self): + # get hpgl data + encoder = hpgl_encoder.hpglEncoder(self) + try: + self.options.to_port(self.options.to_language(encoder.getHpgl())) + except hpgl_encoder.NoPathError: + raise inkex.AbortExtension( + _("No paths where found. Please convert objects to paths.") + ) + + def convert_hpgl(self, hpgl): + """Convert raw HPGL to HPGL""" + init = "IN" + # if self.options.force > 0: + # init += ';FS%d' % self.options.force + # if self.options.speed > 0: + # init += ';VS%d' % self.options.speed + return init + hpgl + ";PU0,0;SP0;IN; " + + def convert_dmpl(self, hpgl): + """Convert HPGL to DMPL""" + # ;: = Initialise plotter + # H = Home position + # A = Absolute pen positioning + # Ln = Line type + # Pn = Pen select + # Vn = velocity + # ECn = Coordinate addressing, 1: 0.001 inch, 5: 0.005 inch, M: 0.1 mm + # D = Pen down + # U = Pen up + # Z = Reset plotter + # n,n, = Coordinate pair + hpgl = hpgl.replace(";", ",") + hpgl = hpgl.replace("SP", "P") + hpgl = hpgl.replace("PU", "U") + hpgl = hpgl.replace("PD", "D") + init = ";:HAL0" + if self.options.speed > 0: + init += "V%d" % self.options.speed + init += "EC1" + return init + hpgl[1:] + ",P0,U0,0,Z " + + def convert_knk(self, hpgl): + """Convert HPGL to KNK Plotter Language""" + init = "ZG" + # if self.options.force > 0: + # init += ';FS%d' % self.options.force + # if self.options.speed > 0: + # init += ';VS%d' % self.options.speed + return init + hpgl + ";SP0;PU0,0;@ " + + def to_parallel(self, hpgl): + """Output to hgpl to a parallel port""" + port = open(self.options.parallelPort, "wb") + port.write(hpgl.encode("utf8")) + port.close() + + def to_serial(self, hpgl): + """Output to hgpl to a serial port""" + with Serial( + self.options.serialPort, + baud=self.options.serialBaudRate, + stop=self.options.serialStopBits, + size=self.options.serialByteSize, + flow=self.options.serialFlowControl, + parity=self.options.serialParity, + ) as comx: + comx.write(hpgl.encode("utf8")) + + +if __name__ == "__main__": + Plot().run() |