2024年12月11日水曜日

GIMP Script-Fu v3 (2) 進め方 1

さて、先の雛形 にコードを埋めて行く訳ですが、
留意点と言うか、気になった点を書こうと思います。
先と同様に、基本的な事が分かっている方が対象です。
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 件のコメント:

コメントを投稿