Inkscapeダイアログボックスからパラメータを受け取るには?

inkscape-user-parameter.png

.inxにて

dependencyタグとeffectタグの間にparamタグを入れます

<param name="linewidth" type="string" _gui-text="Line Width">10</param>

基本的に数値だろうと何だろうと文字列で受け取ります

<?xml version="1.0" encoding="UTF-8"?>
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
  <_name>ストリップライン</_name>
  <id>miffy.sora.stripline</id>
  <dependency type="executable" location="extensions">StripLine.py</dependency>
  <param name="linewidth" type="string" _gui-text="Line Width">10</param>
  <effect>
    <object-type>all</object-type>
    <effects-menu>
       <submenu _name="ストリップライン"/>
    </effects-menu>
  </effect>
  <script>
    <command reldir="extensions" interpreter="python">StripLine.py</command>
  </script>
</inkscape-extension>

.pyにて

エフェクトのメイン関数の最初の方に次のように記述します

class StripLineEffect(inkex.Effect):
    def __init__(self):
        inkex.Effect.__init__(self)
        #ユーザーから受け取ったパラメータの読み込み
        self.OptionParser.add_option("-f", "--linewidth",
                        action="store", type="string",
                        dest="linewidth", default="10",
                        help=u"線の太さ")

これをやった以降は

self.options.linewidth

でパラメータを利用することが出来ます。

OptionParser.add_optionとは?

add_option()関数はOptionインスタンスを生成する関数らしい。

引数の意味

action

inkscapeで.inxファイルから読み取る時は毎回storeが呼ばれていますが、これはどういう意味かというと
store=「オプションの引数を保存する」actionを行うという意味です。

type

変数の型を指定します。本来floatとかintとかが可能なのですが、inkscapeではどうやらstringしか受け付けない様子
string 文字列
choice ドロップダウンメニュー

dest

保存先です。inxファイルを通じてとってきた変数を.pyの中でなんという変数名で使うか、です。
ここでつけた名前を実際使うとき

self.options.destでつけた名前

という風になります。

default

デフォルト値を指定します

help

ヘルプテキストを書くことができます

ドロップダウンメニュー

options.png
<param name="diagram-type" type="enum" _gui-text="Type of diagram:">
        <_item value="Voronoi">Voronoi Diagram</_item>
        <_item value="Delaunay">Delaunay Triangulation</_item>
        <_item value="Both">Voronoi and Delaunay</_item>
      </param>

python側のコード
self.OptionParser.add_option(
            '--diagram-type',
            action='store',
            type='choice', choices=['Voronoi', 'Delaunay', 'Both'],
            default='Voronoi',
            dest='diagramType',
            help='Defines the type of the diagram')

実際にpython内で変数を使うとき
self.options.diagramType=="Voronoi"#Voronoiが選ばれたかどうか判定

数値のパラメータ

addnodes.png
<param name="max" type="float" min="0.1" max="10000.0" _gui-text="Maximum segment length (px):">10.0</param>
 <param name="segments" type="int" min="1" max="1000" _gui-text="Number of segments:">2</param>

サポートサイト Wikidot.com