2024年12月17日火曜日

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

先の投稿 で書き忘れた事がありましたので、
追記して置きましょう。
同じく、 GIMP Script-Fu Console に関してです。
ちょっと、留意して置くべき事。


ごめんなさい。
書き忘れた事がありました。

GIMP Script-Fu v3 (2) 進め方 1 の追補です。


本体(本関数 処理全容)でも、
付随する小さな関数 でも、
同じ事が言えますが、
Console に貼り付けて実行が可能です。

本体の場合、
引数が多くなり勝ち なので、
引数定義の煩雑さから、
貼り付け Debug する方は 少数派? かも。

  可能ですので、試す価値はあり!。  ;)

参考です。
GUI の Script-Dialog が自動で返す image と drawables とは、
以下の手順で取得が可能です。
尚、変数名は 定義する 関数 に合わせて下さいね。
また、画像 ID は 1 と仮定しましょうか。

以下、Console です。

> (script-fu-use-v3)
()
> (define image 1)
image
> (gimp-image-get-name image)
"Test.xcf"
> (define drawables (gimp-image-get-selected-layers image))
drawables
> drawables
#(10 8 7 4 3)

付随する小さな関数 の 例。
実際には、幾つかの別関数を呼んで、趣旨に沿ったものに変える 前のもの!。、
以下の例示されたコードだけでは 用を足しませんけれど ... 。
  Top Level にある Group の配下のみ除外しているので。
    ( parent -1 の場合が Top Level です。)
  選択されたものが Group 配下のみの場合等、意図を反映出来ないのです。
まぁ、試行錯誤時の サンプル として、例示しましょう。

> (define (copy-vector-without-chilren
         layers
        )
  (script-fu-use-v3)
  (let* (
          (countEach 0)
          (countMax (vector-length layers))
          (lyrEach 0)
          (lyrsList '())
          (lyrsNew #())
          (return #())
        )
    ; Loop                  from Bottom to Top
    (while (>= countMax 1)
      (set! lyrEach (vector-ref layers (- countMax 1)))
      (if (= (gimp-item-get-parent lyrEach) -1)
        (set! lyrsList (cons lyrEach lyrsList))
      )
      (set! countMax (- countMax 1))
    )
    (set! lyrsNew (list->vector lyrsList))
    (set! return lyrsNew)
  )
)
copy-vector-without-chilren
> (define drawables2 (copy-vector-without-chilren drawables))
drawables2
> drawables2
#(10 3)

また、
貼り付け時に、
終端が 改行コード の場合も、
変な表示 に遭遇します。

結果は正常ですが、ちょっと、間誤付きますねぇ。
以下、前の部分は省略しています。


    (set! lyrsNew (list->vector lyrsList))
    (set! return lyrsNew)
  )
)

copy-vector-without-chilren#<EOF>
> (define drawables2 (copy-vector-without-chilren drawables))
drawables2
> drawables2
#(10 3)

定義されたものに #<EOF> がくっついています。


何れにしても、
此の様に、
Console を使って、試行錯誤を繰り返し、
ちゃんとした もの に仕上げて行きます。

無論、先ず第一歩は、
正常に、GUI の 思う場所に Script 項目 が表示される事。
そして、挙動に不備が無いか?、煮詰めて行きます。



0 件のコメント:

コメントを投稿