スクリプトのメモ

使用環境はGentoo Linuxinkscape-0.46。

まずはスクリプトの動作について。

1.
起動時に
~/.inkscape/extensions/*.inx
を読み込んでEffectsメニューに登録する。


2.
登録されたメニューを実行すると

$ python rect.py --id=rect2383 /tmp/ink_ext_XXXXXX.svgT8W5WU

という感じでキックされる。
最後の引数がテンポラリのsvg入力ファイルで、途中の引数は--hoge=fuga形式のオプションが続く。


3.
引数最後のsvgを読み込んで処理して標準出力に吐き出す。

pythonでinkex.pyを使う雛形

#!/usr/bin/env python 
import sys
sys.path.append('/usr/share/inkscape/extensions')
import inkex
import simplestyle

class Pai(inkex.Effect):
  def __init__(self):
    inkex.Effect.__init__(self)

  def effect(self):
    pass

e = Pai()
e.affect()

affectがコールされると引数最後のsvgを読み込んでxmlとしてパースしてself.documentにセット。
effectをコール。
self.documentを再度xmlとして標準出力に吐き出すという一連の動作をする。

とりえあず四角を描くスクリプトを作る

事前に空っぽの画像ファイルと四角だけを描いたファイルをinkscapeで作成して保存。
差分を見る.

$ diff empty.svg rect.svg 
16c16
<    sodipodi:docname="empty.svg"
---
>    sodipodi:docname="rect.svg"
62c62,70
<      id="layer1" />
---
>      id="layer1">
>     <rect
>        style="fill:#0000ff;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
>        id="rect2423"
>        width="314.28571"
>        height="268.57144"
>        x="180"
>        y="238.07646" />
>   </g>

配下にを作る。

  def effect(self):
    rect=inkex.etree.SubElement(self.current_layer, 'rect')
    rect.set('style', simplestyle.formatStyle({
      'stroke':'#000000'
    }))
    rect.set('width', str(100))
    rect.set('height', str(150))
    rect.set('x', str(0))
    rect.set('y', str(0))

雛形のeffectメソッドを改造する。
一応黒い四角が出現した。