I needed a way to create many layers at once in inkscape, it support scripting with any language, the .inx
file allow to define input parameters to insert with a GUI, they will be passed to the script as command line arguments
Place the .inx
file and the python script in the inkscape directory
$HOME/.config/inkscape/extensions/create_layers.inx
$HOME/.config/inkscape/extensions/create_layers.py
create_layers.inx
:
<?xml version="1.0" encoding="UTF-8"?>
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<_name>Create Layers</_name>
<id>org.xenogenesi.filter.create_layers</id>
<dependency type="executable" location="extensions">create_layers.py</dependency>
<dependency type="executable" location="extensions">inkex.py</dependency>
<param name="basename" type="string" _gui-text="Base name of the new layer">New Layer {0}</param>
<param name="count" type="string" _gui-text="Number of layers to create">10</param>
<effect>
<object-type>all</object-type>
<effects-menu>
<submenu _name="Layers"/>
</effects-menu>
</effect>
<script>
<command reldir="extensions" interpreter="python">create_layers.py</command>
</script>
</inkscape-extension>
create_layers.py
:
#!/usr/bin/env python
import inkex
class CreateLayersEffect(inkex.Effect):
def __init__(self):
inkex.Effect.__init__(self)
self.OptionParser.add_option('-b', '--basename', action = 'store',
type = 'string', dest = 'basename', default = 'New Layer {0}',
help = 'Base name of the new layer')
self.OptionParser.add_option('-c', '--count', action = 'store',
type = 'string', dest = 'count', default = '10',
help = 'Number of layers to create')
def effect(self):
basename = self.options.basename
count = int(self.options.count)
svg = self.document.getroot()
for i in range(0, count):
layer = inkex.etree.SubElement(svg, 'g')
layer.set(inkex.addNS('label', 'inkscape'), basename.format(i))
layer.set(inkex.addNS('groupmode', 'inkscape'), 'layer')
effect = CreateLayersEffect()
effect.affect()
github.com/xenogenesi/inkscape-pyext (one more extension to create layers for each selected object)
Here some great reference wiki.inkscape/Script_extensions