お絵描きソフトInkscape(インクスケープ)の使い方を初級レベルから上級レベルまで広く紹介しています。
情報追加のリクエストや分かりにくい点があれば下のCONTACTフォームからどうぞ。

Inkscapeの自作エクステンション(ログ出力)

 Inkscapeでエクステンションを自作する方法を試してみました。

 ここではエクステンションの実行ログを出力するコードを書いてみました。いろんな方法があると思いますが、シンプルにprint関数を使ってみました。print関数で出力先として「stderr」を指定すると、そこに出力した文字列をInkscapeがダイアログに表示してくれます。

 次のようなコードを書きます。

import inkex
import sys # sysというパッケージをインポートする
class OriginalExtension(inkex.extensions.EffectExtension):
    def add_arguments(self, pars):
        pass 
    def effect(self): 
        for elem in self.svg.selection:
            print(elem, file=sys.stderr) 
            elem.style['fill'] = '#00ff00' 
if __name__ == '__main__': 
    OriginalExtension().run()

 

 「stderr」という変数は「sys」というパッケージの中で定義されているので、「sys」をインポートするimport文を追加しています。

 このエクステンションを実行すると、エクステンションの実行結果が画面に反映される直前に次のようなダイアログが表示されて、そこにprint関数で出力した文字列が表示されます。

 print関数の出力対象は「elem」という変数ですが、この変数の型(クラス)が分かりません。出力される文字列はそのクラスの__str__()というメソッドが返す文字列らしい(print関数がそうしている)のですが、クラスが分からないので、どういう処理になっているのか分かってません。

 ちなみにprint関数を呼び出す代わりに「self.debug(elem)」と書いてもログ出力できます。これは親クラスのEffectExceptionに定義されているメソッドらしいですが、実行すると次のようにこのエクステンション自身の名前と一緒にダイアログに表示されます。