72 lines
2.4 KiB
Python
72 lines
2.4 KiB
Python
from cStringIO import StringIO
|
|
import inkex
|
|
import simplestyle
|
|
|
|
class SliderElectrodes(inkex.Effect):
|
|
def __init__(self):
|
|
inkex.Effect.__init__(self)
|
|
self.OptionParser.add_option("-c", "--count", action="store", type="int", dest="count", default=5, help="Number of electrodes")
|
|
self.OptionParser.add_option("-s", "--spikes", action="store", type="int", dest="spikes", default=5, help="Number of spikes")
|
|
|
|
def genPathString(self, bounds, spikeWidth, first=False, last=False):
|
|
s = StringIO()
|
|
|
|
cx = bounds[0]
|
|
cy = bounds[1]
|
|
stepx = spikeWidth
|
|
stepy = (bounds[3] - bounds[1]) / (2.0 * self.options.spikes)
|
|
|
|
s.write(" M %f, %f " % (bounds[0], bounds[1]))
|
|
|
|
if first:
|
|
s.write(" L %f, %f " % (bounds[0], bounds[3]))
|
|
else:
|
|
for i in range(self.options.spikes):
|
|
s.write(" L %f, %f " % (bounds[0] + stepx, bounds[1] + (2 * i + 1) * stepy))
|
|
s.write(" L %f, %f " % (bounds[0], bounds[1] + (2 * i + 2) * stepy))
|
|
|
|
if last:
|
|
s.write(" L %f, %f " % (bounds[2], bounds[3]))
|
|
s.write(" L %f, %f " % (bounds[2], bounds[1]))
|
|
else:
|
|
s.write(" L %f, %f " % (bounds[2] - stepx, bounds[3]))
|
|
for i in range(self.options.spikes):
|
|
s.write(" L %f, %f " % (bounds[2], bounds[3] - (2 * i + 1) * stepy))
|
|
s.write(" L %f, %f " % (bounds[2] - stepx, bounds[3] - (2 * i + 2) * stepy))
|
|
s.write(" Z ")
|
|
return s.getvalue()
|
|
|
|
def effect(self):
|
|
svg = self.document.getroot()
|
|
width = self.unittouu(self.document.getroot().get('width'))
|
|
height = self.unittouu(self.document.getroot().get('height'))
|
|
|
|
group = inkex.etree.SubElement(self.current_layer, 'g', {
|
|
inkex.addNS('label', 'inkscape') : 'Slider electrodes'
|
|
})
|
|
|
|
style = {
|
|
'stroke' : 'none',
|
|
'fill' : '#000000'
|
|
}
|
|
|
|
eWidth = width / self.options.count
|
|
spikeWidth = 0.6 * eWidth
|
|
|
|
for eid in range(self.options.count):
|
|
if eid == 0:
|
|
path = self.genPathString((eid * eWidth, 0, (eid + 1) * eWidth + 0.4 * spikeWidth, height), spikeWidth, first=True)
|
|
elif eid == self.options.count - 1:
|
|
path = self.genPathString((eid * eWidth - 0.4 * spikeWidth, 0, (eid + 1) * eWidth, height), spikeWidth, last=True)
|
|
else:
|
|
path = self.genPathString((eid * eWidth - 0.4 * spikeWidth, 0, (eid + 1) * eWidth + 0.4 * spikeWidth, height), spikeWidth)
|
|
|
|
e = inkex.etree.SubElement(group, inkex.addNS('path', 'svg'), {
|
|
'style' : simplestyle.formatStyle(style),
|
|
'd' : path
|
|
})
|
|
|
|
if __name__ == '__main__':
|
|
effect = SliderElectrodes()
|
|
effect.affect()
|