Hi all,
here are some tips you can use from my experience on working on an inkscape extension:
1. Calling one extension from another: --------------------------------------
This is the recipe I used in Python to call one extension from another:
import subprocess
def id_arg(my_id): return '--id=' + my_id
with_perspective_applied_text = subprocess.check_output( ['python', '/usr/share/inkscape/extensions/perspective.py', id_arg(main_path_id()), id_arg(pers_e.get_path_id()), pers_e.calc_out_fn() ] )
main_path_id() and pers_e.get_path_id() are the IDs passed to the extension as selections and pers_e.calc_out_fn() contains the path to where the intermediate SVG was written.
This can be done securely by doing:
temp_dir = tempfile.mkdtemp()
def temp_svg_fn(basename): global temp_dir return join(temp_dir, basename + '.svg')
2. Output from inkex.Effect to a file. ------------------------------------------
The following class that inherits from inkex.Effect writes to a temporary file instead of to STDOUT.
[QUOTE]
class GenericAddPathEffect(inkex.Effect):
def __init__(self, basename): self.basename = basename inkex.Effect.__init__(self)
def effect(self): draw_generic_style_path(self.get_path_name(), self.get_path_id(), self.current_layer, self.calc_d_s() )
def calc_out_fn(self): return temp_svg_fn(self.basename)
def write_to_temp(self, input_fn): self.affect(args=[input_fn], output=False) with open(self.calc_out_fn(), 'w') as fh: self.document.write(fh)
return
[/QUOTE]
Customise it to your heart's content. (Note that the passing of parameters is a little counter-intuitive now - I'm planning to fix it).
3. Adding a gradient: ---------------------
You can add a gradient by manipulating the <defs section in the file. See:
[QUOTE]
class StyleEffect(GenericAddPathEffect): def effect(self): self.xpathSingle(u'svg:defs').insert(0, inkex.etree.XML('''<svg:linearGradient xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" id="bk2hp_grad"> <stop style="stop-color:#0000ff;stop-opacity:1" offset="0" id="b2h_0" /> <stop style="stop-color:#00deff;stop-opacity:1" offset="0.4" id="b2h_1" /> <stop style="stop-color:#00deff;stop-opacity:1" offset="0.6" id="b2h_2" /> <stop style="stop-color:#0000ff;stop-opacity:1" offset="1" id="b2h_3" /> </svg:linearGradient>''') ) self.xpathSingle(u'svg:defs').insert(1, inkex.etree.XML('''<svg:linearGradient xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="bk2hp_grad_rot" gradientTransform="rotate(90)" xlink:href="#bk2hp_grad" />''') ) self.xpathSingle(u'//*[@id="' + main_path_id() + '"]').set( 'style', simplestyle.formatStyle({ 'stroke': '#888888', 'stroke-width': '1pt', 'fill': 'url(#bk2hp_grad_rot)', } ))
[/QUOTE]
==========================
Regards,
Shlomi Fish