関数 action_tile を使うと、タイルが選択/編集されたときにしたいアクションのAutoLISPプログラムと紐づけできます。
AutoLISP関数 action_tile
関数 action_tile は、ダイアログボックスを定義するときに、タイルと関数を紐づけできます。
(action_tile "キー" "(関数)")
引数は、紐づけしたいタイルと、関数名です。
ここでは、”(関数名)” と、文字列にして設定します。
例)ラジオボタン選択で画像変更
ラジオボタンにアクションを加えて、ラジオボタンで選択されたオプションによって、画像を変更するダイアログボックスを作成します。
表示させるスライドを3枚用意し、SLIDE-A SLIDE-B SLIDE-C という名前で、サポートファイルの検索パス内のフォルダに保存してください。
スライドの作り方についてはコチラを。
ラジオボタンと画像表示についてはコチラの記事にあります。
DCL
Test_Action:dialog {label= "Image Dialog Box";
:image {key="IMG"; height=10; width=10; color = 250;}
:radio_column { key="ABC";
:radio_button{ label=" Option A"; key="SLIDE-A";}
:radio_button{ label=" Option B"; key="SLIDE-B";}
:radio_button{ label=" Option C"; key="SLIDE-C";}
}
ok_cancel;
}
今回の関数 action_tile を使う場合は、AutolISP側でアクションを加えるので、DCL側では表示したいボタンを並べるだけです。
DCLは、以下のAutoLISPプログラムで呼び出すので、JagaDCL.dclという名前で、サポートファイルの検索パス内のフォルダに保存してください。
AutoLISP
(defun c:test (/ dcl_id Act)
(setq dcl_id (load_dialog "JagaDCL.dcl")) ;
(if (not (new_dialog "Test_Action" dcl_id))
(progn
(princ "***ダイアログボックスが見つかりません***")
(exit)
));if
;-----------------------------------------------------------
(set_tile "ABC" "SLIDE-A")
(start_image "IMG")
(slide_image 0 0 (dimx_tile "IMG")(dimy_tile "IMG") "SLIDE-A")
(end_image)
(action_tile "ABC" "(JagaImageAction)")
;-----------------------------------------------------------
(action_tile "accept" "(done_dialog 1)")
(action_tile "cancel" "(done_dialog 0)")
;-----------------------------------------------------------
(setq Act (start_dialog))
(unload_dialog dcl_id)
;-----------------------------------------------------------
;----------------------------------------------------------
(princ));defun
;=================================
;=================================
;=================================
(defun JagaImageAction ( / Sld )
(setq Sld (get_tile "ABC"))
(start_image "IMG")
(fill_image 0 0 (dimx_tile "IMG") (dimy_tile "IMG") 250)
(slide_image 0 0 (dimx_tile "IMG")(dimy_tile "IMG") Sld)
(end_image)
);d
AutoLISP の説明
(set_tile “ABC” “SLIDE-A”)
“ABC” はラジオボタンのキーです。
各ラジオボタンのキーは SLIDE-A SLIDE-B SLIDE-C です。
とりあえず初期値として、ダイアログボックスが開いたときはSLIDE-Aを選択した状態にします。
(start_image “IMG”)
(slide_image 0 0 (dimx_tile “IMG”)(dimy_tile “IMG”) “SLIDE-A”)
(end_image)
ラジオボタンの初期値をAにしたので、表示させる画像も、”SLIDE-A” に設定します。
(action_tile “ABC” “(JagaImageAction)”)
ここで、ラジオボタンにアクションを付けています。
ラジオボタンのキー “ABC” と自作関数 JagaImageAction を紐づけしました。
これで、ラジオボタン”ABC”を編集する度に、自作関数 JagaImageAction が実行されます。
それでは、JagaImageAction の中身も見ていきましょう。
(setq Sld (get_tile “ABC”))
まず、get_tile を使って、ラジオボタン”ABC” の値を得ます。
値は、選択されたボタンのキー(SLIDE-A SLIDE-B SLIDE-C)です。
(fill_image 0 0 (dimx_tile “IMG”) (dimy_tile “IMG”) 250)
fill_image は、画像タイルを塗りつぶす関数です
画像を設定すると、現在設定されている画像の上にそのまま表示されるので、一旦塗りつぶします。
250は色番号です。
AutoCADで設定してある背景色を使いたい場合は-2を入れて下さい。
(slide_image 0 0 (dimx_tile “IMG”)(dimy_tile “IMG”) Sld)
ボタンのキーとスライド名を同じにしたので、この値をそのままスライド名として設定できます。
これで、ラジオボタンを選択するたびに、上の画像が切り替わります。
まとめ
- action_tileは、ダイアログボックスのタイルにアクションを加えるAutoLISP関数。
- キーと実行したい関数名を紐づけする。
- DCLのタイル属性 action で紐づけする方法もある。
参考記事
今回は、AutoLISP側でアクションを付けましたが、DCLのタイル属性でアクションを加える方法もあります。こちらの記事では両方紹介しています。
Comments