留意点と言うか、気になった点を書こうと思います。
先と同様に、基本的な事が分かっている方が対象です。
Console に関して、書きます。
此の投稿は、既に、GIMP Script-Fu の経験がある方が対象です。
ある程度は書ける方が、新しい Script-Fu v3 で書く事を前提とします。
普通は、Script-Fu を書く場合、
先ずは Console で試す事が多いと思います。
其処で、 留意点を書いて置きます。
では、先の雛形 に 以下の記述 があるのに気付きましたか?。
(script-fu-use-v3)
此れは Script-Fu で v3 API を使いますと言う宣言です。
そう、 従前のもの は v2 でした。
同じコマンド(関数 GIMP Procedure)を使っても、
一部 で戻り値の形式が変わっています。
(car ... ) が必要で無くなりました と説明されていた アレ です。
でも、実際に、Console で試して見ると、
あれぇ? 変わって無いじゃん! と思うかも知れません。
此れって、実は、 大きな 落とし穴 に繋がります。
試しても試しても、原因が分ら無い どうどう巡り に陥る可能性があるのです。
現在は! ですけれど。
将来、
ある程度、GIMP も 版 を重ねて、従前の v2 API 廃止 に移行すれば、
話は変わって来る筈です。
後方支援、後方互換性、故の 留意点 ですね。
理由は、Default の Console は v2 API で動いている のです!。
ですから、
v3 API を宣言した Script 内部 と、
試すであろう Console の挙動とは、
API 違い になって、
例えば、Console 上で試して OK なので コードに入れたら、エラーを吐く!、
何て事になるのです。
詰まる処、
Console でも、 (script-fu-use-v3) {Enter] すれば OK !。
同じ様に、
Script 内で、複数の define 宣言で 関数 を作る場合も、
冒頭に、(script-fu-use-v3) 記述をお忘れ無く。
此れは、親から呼ばれる場合には、
親が use-v3 宣言してあり、子も引き継ぐ筈ですから、不要なのですが、
もし、Console で お試し or DEBUG するとなると、
落とし穴になる可能性が大 です。
冗長ですが、書いて置く方が 無難 でしょう。
無論、 GIMP の 関数 が無い、
汎用的な Scheme のみの コードでしたら、
v2 でも v3 でも、恐らく、同じ挙動でしょうから、
use-v3 宣言を書く必要はありません。
では、実際に、Console で。
> (define img 1)
img
> (gimp-image-get-selected-drawables img)
(#(22 20 19 16 15))
> (script-fu-use-v3)
()
> (gimp-image-get-selected-drawables img)
#(22 20 19 16 15)
> (script-fu-use-v2)
()
> (gimp-image-get-selected-drawables img)
(#(22 20 19 16 15))
v2 と v3 との違いがお分かりでしょうか?。
繰り返しになりますが、
多くの項目で car が不要になった と説明されていたのが、此れ です。
混在すると、思わぬ結果を引いて来るのですね。
ご注意、ご注意!。 ;)
なので、Console を開いたら忘れずに、
(script-fu-use-v3) または (script-fu-use-v2) を宣言する癖を。
転ばぬ前の杖! ですね。
因みに、
Script-Fu v3 の Dialog で定義不要となった image と drawables ですが、
image は Script が呼ばれた 画像 ID を、
drawables は 選択されたもの(複数可)を、
返すのですが、
drawables は gimp-image-get-selected-drawables の答えと同じで、、
v3 なら #(id1 id2 ... ) の vector 配列 です。 上述参照。
此れ等は Group 内も展開された状態で取得します。
[2024/12/17] 追記
最後に書いた件、実際の例示を含めて 投稿 にします。
0 件のコメント:
コメントを投稿