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

Inkscapeの自作エクステンション(フィル設定)

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

 ここでは「選択したオブジェクトのフィルを緑色(固定)に変更する」というシンプルな自作エクステンションを少しいじって、ダイアログ上で「#FF0000」のようなRGB値を設定するとフィルをその色に変更してくれるエクステンションを作ってみました。

 ポイントは「Extension Definition ファイル」で定義した<param>要素への入力値をPythonプログラム側で受け取るところです。EffectExcetionオブジェクトの「options」という変数に入力値がセットされているので、それを参照します。

 「options」変数はPythonの標準モジュールである「argparse」に含まれる「Namespace」というクラスのオブジェクト(Namespaceオブジェクト)です。Namespaceオブジェクトはいろんな名前や型のパラメータを記憶するために使われるオブジェクトらしく、パラメータ名と同じ名前の変数が自動的に追加されていて、その変数の値にパラメータ値がセットされているので、それを参照してパラメータ値に応じた処理を書きます。

 例えば、「text_1」という名前の入力フィールドをExtension Definition ファイル」で定義して、Pythonプログラム側では「options.text_1」という名前の変数でその値を参照します。

 まずExtension Definition ファイル」は次のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
  <name>フィル設定ダイアログ</name>
  <id>com.blogspot.inkscape-memorandum.フィル設定ダイアログ</id>
  <param name="text_1" type="string"
    gui-text="フィルのRGB値">#FF0000</param>
  
  <effect>
    <effects-menu>
      <submenu name="◆◆ 自作 ◆◆"/>
    </effects-menu>
  </effect>
  <script>
    <command location="inx" interpreter="python">フィル設定ダイアログ(コード).py</command>
  </script>
</inkscape-extension>

 最初にダイアログが表示されたときにあらかじめ入力された状態にしたい文字列をparam要素の値として書いておきます。

 この「Extension Definition ファイル」を読み込んで、メニューから「フィル設定ダイアログ」を選ぶと次のようなダイアログが表示されます。

 次にPythonプログラムはこうなります。

import inkex
class FillDialogExtension(inkex.extensions.EffectExtension):
    
    def add_arguments(self, pars):
        pars.add_argument('--text_1', type=str, default='#000000')
    def effect(self):
        for elem in self.svg.selection:
            # フィルに'text_1'の入力値をセット
            elem.style['fill'] = self.options.text_1  

if __name__ == '__main__':  # エクステンションはここから実行される
    FillDialogExtension().run()

 add_argument()を呼ぶときにデフォルト値として'#000000'を指定しているので、ダイアログの入力フィールドに何も入力していない場合はフィルが黒になります。

 これを実行して、適当にRGB値を入力し、例えばライブプレビューにチェックを入れるとそのRGB値がフィルにセットされます。