67 lines
1.8 KiB
Python
67 lines
1.8 KiB
Python
import sys, os, shutil
|
|
from lib import util
|
|
from . import effect, inkscape
|
|
|
|
|
|
def _unfuck_svg_document(temp_svg_path):
|
|
"""
|
|
Unfucks an SVG document so is can be processed by the better_dxf_export plugin (or what's left of it).
|
|
"""
|
|
|
|
command_line = inkscape.InkscapeCommandLine(temp_svg_path)
|
|
layers = command_line.layers
|
|
|
|
command_line.apply_to_document('LayerUnlockAll', 'LayerShowAll')
|
|
|
|
layer_copies = []
|
|
|
|
for i in layers:
|
|
layer_copy = command_line.duplicate_layer(i)
|
|
layer_copies.append(layer_copy)
|
|
|
|
command_line.apply_to_layer_content(layer_copy, 'ObjectToPath')
|
|
command_line.apply_to_layer_content(layer_copy, 'SelectionUnGroup')
|
|
|
|
if not i.use_paths:
|
|
command_line.apply_to_layer_content(layer_copy, 'StrokeToPath')
|
|
command_line.apply_to_layer_content(layer_copy, 'SelectionUnion')
|
|
|
|
for original, copy in zip(layers, layer_copies):
|
|
command_line.clear_layer(original)
|
|
command_line.move_content(copy, original)
|
|
command_line.delete_layer(copy)
|
|
|
|
command_line.apply_to_document('FileSave', 'FileClose', 'FileQuit')
|
|
|
|
command_line.run()
|
|
|
|
|
|
def main(in_path, out_path):
|
|
_, out_suffix = os.path.splitext(out_path)
|
|
|
|
with util.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_effect = effect.ExportEffect()
|
|
export_effect.affect(args = [temp_svg_path], output = False)
|
|
|
|
with open(out_path, 'w') as file:
|
|
if out_suffix == '.dxf':
|
|
export_effect.write_dxf(file)
|
|
elif out_suffix == '.asy':
|
|
export_effect.write_asy(file)
|
|
else:
|
|
raise Exception('Unknown file type: {}'.format(out_suffix))
|
|
|
|
|
|
try:
|
|
main(*sys.argv[1:])
|
|
except util.UserError as e:
|
|
print 'Error:', e
|
|
sys.exit(1)
|
|
except KeyboardInterrupt:
|
|
sys.exit(2)
|