diff --git a/extensions/fablabchemnitz/cutoptim/linux/CutOptim b/extensions/fablabchemnitz/cutoptim/CutOptim old mode 100644 new mode 100755 similarity index 100% rename from extensions/fablabchemnitz/cutoptim/linux/CutOptim rename to extensions/fablabchemnitz/cutoptim/CutOptim diff --git a/extensions/fablabchemnitz/cutoptim/windows/CutOptim.exe b/extensions/fablabchemnitz/cutoptim/CutOptim.exe similarity index 100% rename from extensions/fablabchemnitz/cutoptim/windows/CutOptim.exe rename to extensions/fablabchemnitz/cutoptim/CutOptim.exe diff --git a/extensions/fablabchemnitz/cutoptim/cutoptim.py b/extensions/fablabchemnitz/cutoptim/cutoptim.py new file mode 100644 index 00000000..035d7205 --- /dev/null +++ b/extensions/fablabchemnitz/cutoptim/cutoptim.py @@ -0,0 +1,77 @@ +#!/usr/bin/env python3 + +""" +Extension for InkScape 1.0 + +CutOptim OS Wrapper script to make CutOptim work on Windows and Linux systems without duplicating .inx files + +Author: Mario Voigt / FabLab Chemnitz +Mail: mario.voigt@stadtfabrikanten.org +Date: 31.08.2020 +Last patch: 31.08.2020 +License: GNU GPL v3 + +""" + +import inkex +import sys +import os +from lxml import etree + +class CutOptimWrapper(inkex.Effect): + def __init__(self): + inkex.Effect.__init__(self) + args = sys.argv[1:] + for arg in args: + key=arg.split("=")[0] + if len(arg.split("=")) == 2: + value=arg.split("=")[1] + try: + self.arg_parser.add_argument(key, default=key) + except: + pass #ignore duplicate id arg + + def effect(self): + cmd="" + if os.name == "nt": + cutoptim="CutOptim.exe" + else: + cutoptim="./CutOptim" + #inkex.utils.debug(cmd) + cmd += cutoptim + for arg in vars(self.options): + if arg != "output" and arg != "ids" and arg != "selected_nodes": + #inkex.utils.debug(str(arg) + " = " + str(getattr(self.options, arg))) + #fix behaviour of "original" arg which does not correctly gets interpreted if set to false + if arg == "original" and str(getattr(self.options, arg)) == "false": + continue + if arg == "input_file": + cmd += " --file " + str(getattr(self.options, arg)) + else: + cmd += " --" + arg + " " + str(getattr(self.options, arg)) + + if os.name == "nt": + cmd += " --output cutoptim.svg" + else: + cmd += " --output /tmp/cutoptim.svg" + #inkex.utils.debug(str(cmd)) + + # run CutOptim with the parameters provided + with os.popen(cmd, "r") as cutoptim: + result = cutoptim.read() + + # check output existence + try: + stream = open("/tmp/cutoptim.svg", 'r') + except FileNotFoundError as e: + inkex.utils.debug("There was no SVG output generated. Cannot continue") + exit(1) + + # write the generated SVG into InkScape's canvas + p = etree.XMLParser(huge_tree=True) + doc = etree.parse(stream, parser=etree.XMLParser(huge_tree=True)) + stream.close() + doc.write(sys.stdout.buffer) + +if __name__ == '__main__': + CutOptimWrapper().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/cutoptim/linux/fablabchemnitz_cutoptim.inx b/extensions/fablabchemnitz/cutoptim/fablabchemnitz_cutoptim.inx similarity index 96% rename from extensions/fablabchemnitz/cutoptim/linux/fablabchemnitz_cutoptim.inx rename to extensions/fablabchemnitz/cutoptim/fablabchemnitz_cutoptim.inx index 1da10529..11d5601a 100644 --- a/extensions/fablabchemnitz/cutoptim/linux/fablabchemnitz_cutoptim.inx +++ b/extensions/fablabchemnitz/cutoptim/fablabchemnitz_cutoptim.inx @@ -42,6 +42,6 @@ diff --git a/extensions/fablabchemnitz/cutoptim/windows/fablabchemnitz_cutoptim.inx b/extensions/fablabchemnitz/cutoptim/windows/fablabchemnitz_cutoptim.inx deleted file mode 100644 index 40b4ae3d..00000000 --- a/extensions/fablabchemnitz/cutoptim/windows/fablabchemnitz_cutoptim.inx +++ /dev/null @@ -1,47 +0,0 @@ - - - Cutting Optimizer (Nesting) - fablabchemnitz.de.cutoptim - - - - - - - - - - - - - 2.0 - 1000 - 1 - false - - - - - - - - - - - - true - 0 - true - true - - all - - - - - - - -