This repository has been archived on 2023-03-25. You can view files and clone it, but cannot push or open issues or pull requests.
mightyscape-0.92-deprecated/extensions/fablabchemnitz_add_kerf_width_offset.py

88 lines
3.1 KiB
Python
Raw Normal View History

2019-11-14 20:05:10 +01:00
#!/usr/bin/env python
# These two lines are only needed if you don't put the script directly into
# the installation directory
import sys
import simplestyle # will be needed here for styles support
sys.path.append('/usr/share/inkscape/extensions')
# We will use the inkex module with the predefined Effect base class.
import inkex
import fablabchemnitz_metaext
class AddKerf(inkex.Effect):
"""
An Inkscape extension which joins multiple lines in one object and adds
kerf to it.
"""
def __init__(self):
"""
Constructor.
"""
# Call the base class constructor.
inkex.Effect.__init__(self)
# Define string option "--what" with "-w" shortcut and default value "World".
# TODO: better name
self.OptionParser.add_option('-w', '--what', action = 'store',
type = 'float', dest = 'what', default = '0.0',
help = 'Kerf in 1/10 mm.')
def set_appropriate_width(self, kerf_in_mm):
found = False
for _, node in self.selected.iteritems():
if node.tag == inkex.addNS('g', 'svg'):
inkex.error("Can't add kerf to a group, please ungroup first.")
if node.tag == inkex.addNS('path', 'svg'):
style = {'stroke-width': kerf_in_mm, 'fill': 'none',
'stroke':'#000000'}
style = simplestyle.formatStyle(style)
node.set('style', style)
found = True
return found
def effect(self):
"""% mod
Effect behaviour.
"""
# Get script's "--what" option value.
what = self.options.what / 10.
negative_kerf = False
if what < 0.:
what = -what
negative_kerf = True
kerf_in_mm = self.unittouu(str(what) + " mm")
operation_list = ["StrokeToPath", "SelectionUnion",
"SelectionBreakApart", "SelectionUnion", "SelectionBreakApart"]
if negative_kerf:
operation_list[-2] = "SelectionIntersect"
join_ext = fablabchemnitz_metaext.MetaEffect(operation_list)
if not self.set_appropriate_width(kerf_in_mm):
objectify = fablabchemnitz_metaext.MetaEffect(["ObjectToPath"])
objectify.effect(self.document, self.selected, self.doc_ids)
if not self.set_appropriate_width(kerf_in_mm):
inkex.error("Didn't found any selected path, breaking")
return
join_ext.effect(self.document, self.selected, self.doc_ids)
for _, node in self.selected.iteritems():
#inkex.debug("node %s" % inkex.etree.tostring(node))
if node.tag == inkex.addNS('path', 'svg'):
new_width = self.unittouu("0.5mm")
colour = '#ff0000' if negative_kerf else '#000000'
style = {'stroke-width': new_width, 'fill': 'none',
'stroke': colour}
style = simplestyle.formatStyle(style)
node.set('style', style)
# inkex.debug("node %s" % inkex.etree.tostring(node))
# Create effect instance and apply it.
effect = AddKerf()
effect.affect()