From 8e5a1520cd5e901f514c382ad17e77d64727896a Mon Sep 17 00:00:00 2001 From: Michael Schwarz Date: Wed, 10 Dec 2014 22:13:34 +0100 Subject: Moved DXF export scripts to separate directory. --- support/dxf_export/__main__.py | 95 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 support/dxf_export/__main__.py (limited to 'support/dxf_export/__main__.py') diff --git a/support/dxf_export/__main__.py b/support/dxf_export/__main__.py new file mode 100644 index 0000000..ea6c7ad --- /dev/null +++ b/support/dxf_export/__main__.py @@ -0,0 +1,95 @@ +import sys, os, xml.etree.ElementTree, subprocess, tempfile, contextlib, shutil +import better_dxf_outlines + + +@contextlib.contextmanager +def TemporaryDirectory(): + dir = tempfile.mkdtemp() + + try: + yield dir + finally: + shutil.rmtree(dir) + + +def _export_dxf(in_path, out_path): + dxf_export = better_dxf_outlines.MyEffect() + dxf_export.affect(args = [in_path], output = False) + + with open(out_path, 'w') as file: + file.write(dxf_export.dxf) + + +def _get_inkscape_layer_count(svg_path): + document = xml.etree.ElementTree.parse(svg_path) + layers = document.findall( + '{http://www.w3.org/2000/svg}g[@{http://www.inkscape.org/namespaces/inkscape}groupmode="layer"]') + + return len(layers) + + +def _command(args): + process = subprocess.Popen(args) + process.wait() + + assert not process.returncode + + +def _inkscape(svg_path, verbs): + def iter_args(): + yield os.environ['INKSCAPE'] + + for i in verbs: + yield '--verb' + yield i + + yield svg_path + + _command(list(iter_args())) + + +def _unfuck_svg_document(temp_svg_path): + """ + Unfucks an SVG document so is can be processed by the better_dxf_export plugin. + """ + + layers_count = _get_inkscape_layer_count(temp_svg_path) + + def iter_inkscape_verbs(): + yield 'LayerUnlockAll' + yield 'LayerShowAll' + + # Go to the first layer + for _ in range(layers_count): + yield 'LayerPrev' + + for _ in range(layers_count): + yield 'EditSelectAll' + yield 'ObjectToPath' + yield 'EditSelectAll' + yield 'SelectionUnGroup' + yield 'EditSelectAll' + yield 'StrokeToPath' + yield 'EditSelectAll' + yield 'SelectionUnion' + yield 'LayerNext' + + yield 'FileSave' + yield 'FileClose' + yield 'FileQuit' + + _inkscape(temp_svg_path, list(iter_inkscape_verbs())) + + +def main(in_path, out_path): + with TemporaryDirectory() as temp_dir: + temp_svg_path = os.path.join(temp_dir, 'temp.svg') + + shutil.copyfile(in_path, temp_svg_path) + + _unfuck_svg_document(temp_svg_path) + + _export_dxf(temp_svg_path, out_path) + + +main(*sys.argv[1:]) -- cgit From 60b25ad13d0fdee926006bc728b031c4da1fb931 Mon Sep 17 00:00:00 2001 From: Michael Schwarz Date: Wed, 10 Dec 2014 22:18:14 +0100 Subject: Extracted common functions to separate module. --- support/dxf_export/__main__.py | 26 +++++--------------------- 1 file changed, 5 insertions(+), 21 deletions(-) (limited to 'support/dxf_export/__main__.py') diff --git a/support/dxf_export/__main__.py b/support/dxf_export/__main__.py index ea6c7ad..76c2121 100644 --- a/support/dxf_export/__main__.py +++ b/support/dxf_export/__main__.py @@ -1,15 +1,6 @@ -import sys, os, xml.etree.ElementTree, subprocess, tempfile, contextlib, shutil -import better_dxf_outlines - - -@contextlib.contextmanager -def TemporaryDirectory(): - dir = tempfile.mkdtemp() - - try: - yield dir - finally: - shutil.rmtree(dir) +import sys, os, xml.etree.ElementTree, shutil +from lib import util +from . import better_dxf_outlines def _export_dxf(in_path, out_path): @@ -28,13 +19,6 @@ def _get_inkscape_layer_count(svg_path): return len(layers) -def _command(args): - process = subprocess.Popen(args) - process.wait() - - assert not process.returncode - - def _inkscape(svg_path, verbs): def iter_args(): yield os.environ['INKSCAPE'] @@ -45,7 +29,7 @@ def _inkscape(svg_path, verbs): yield svg_path - _command(list(iter_args())) + util.command(list(iter_args())) def _unfuck_svg_document(temp_svg_path): @@ -82,7 +66,7 @@ def _unfuck_svg_document(temp_svg_path): def main(in_path, out_path): - with TemporaryDirectory() as temp_dir: + with util.TemporaryDirectory() as temp_dir: temp_svg_path = os.path.join(temp_dir, 'temp.svg') shutil.copyfile(in_path, temp_svg_path) -- cgit