- pluginsフォルダーにいれて、runコマンドで呼び出す
- macrosフォルダーにいれて、runMacroコマンドで呼び出す
簡単なのはマクロをmacrosフォルダーではなくpluginsフォルダーに置いて、
run(macroName, dialogParameter);
で呼ぶ。この時、呼ばれる側のマクロがDialogを開く設定にしておけば、dialogParameterに必要な引数を渡せば、呼び出される側にパラメータを渡すことができる。dialogParameterの記述方法を知るには、Recorederを使って記録しておけばよい。例えば例として以下のようなマクロを考えてみる。
/*
* add_Test.ijm
*/
Dialog.create("add test");
Dialog.addNumber("a", 1);
Dialog.addNumber("b", 1);
Dialog.show()
a = Dialog.getNumber();
b = Dialog.getNumber();
print("a + b = ", a + b);
このマクロをpluginsフォルダーに保存して、pluginメニューから実行すると、Recorderには以下のように記録される。run("add Test", "a=1 b=1");
このようにDialogを開くようにしておけば、パラメータとして引数を渡すことができる。ちなみにPluginを作る際にもこのテクニックは利用できる。しかし、この方法ではパラメータを与えることはできても受け取ることはできない (returnが使えない)。従って、例えば呼び出す側で
ret = run("add Test", "a=1 b=1");
と書いてもエラーがでる。引数を受け取ることのできるようにするには、runではなくrunMacro(macroName, parameter)で呼び出す。ただし、上記のようにDialogのパラメータとして直接渡すことはできないし、呼び出すとDialogが開いてしまう。そこで、呼び出される側のマクロ (ここではadd_Test.ijm)を次のようにする。
/*
* add_Test.ijm
*/
arg = getArgument();
if (arg == "") {
Dialog.create("add test");
Dialog.addNumber("a", 1);
Dialog.addNumber("b", 1);
Dialog.show()
a = Dialog.getNumber();
b = Dialog.getNumber();
} else {
items = split(arg, ",");
a = parseInt(items[0]);
b = parseInt(items[1]);
}
return toString(a+b);
getArgument()は、このマクロが別のマクロから呼び出された場合、parameterで指定した文字列が入る。そこで、もしこの文字列が空の場合はDialogを開くように設定することで、このマクロ単体でも実行チェックを行うことができる。argにparameterが入っていれば、そこから要素を取り出す。渡すことのできるのは一つの文字列なので、例えば","で各パラメータを区切ってやる。そこから各要素をとりだすために、
items = split(arg, ",");
を行うと、各要素をitems配列に返してくれる。あとは、各要素を取り出してやればよい(数値ならparseIntや parseFloatを使う)。さらに、結果を
return toString(a+b);
で文字列として返してやることができる(マクロの場合のパラメータのやりとりは常に文字列のみ)。こうすれば、呼び出す側で例えばret = runMacro("add_Test.ijm", "1,1");
としてやれば、retに結果を文字列として返すことができる。
まとめると、お手軽なのはpluginsフォルダーに入れる方法だが、後々のことを考えると、runMacroで呼び出せるようにしておいた方がよいと思う。
0 件のコメント:
コメントを投稿