追記して置きましょう。
同じく、 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 件のコメント:
コメントを投稿