Sponsored links

【AutoLISP DCL】タイルにアクションを加える 関数 action_tile

Sponsored links
ダイアログボックス
Sponsored links

関数 action_tile を使うと、タイルが選択/編集されたときにしたいアクションのAutoLISPプログラムと紐づけできます。

Sponsored links

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