Sponsored links

【AutoLISP DCL】ラジオタイル 使用例

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

ラジオタイルを使用して、ラジオボタンで画層を選ぶコマンドを作成します。

Sponsored links

元のコマンド

雲マークを作成し、その画層を変更をするコマンドを使います。
画層変更には3つの選択肢があり、この部分をダイアログボックスにします。

詳しいコマンドの内容はコチラの記事を。

(defun c:test ( / Nm)
   (initget 1 "1 2 3")
   (setq LySel (getkword "画層選択:  [1 Jaga_Rev-# / 2 Jaga-No_Plot / 3 画層変更なし]"))

    (cond
      ((= LySel "1") (setq Nm (strcat "Jaga_Rev-"(getstring "改訂番号:")))    
                  (if (null (tblsearch "layer" Nm)) ; もし画層Nmが無いなら    
                      (command-s "._-LAYER" ; 画層管理コマンド
                                  "_N" Nm ; 新規作成 
                                  "_L" "continuous" Nm ; 線種設定 continuous
                                  "_C" 3 Nm ; 色設定 3 緑
                                  "_P" "P" Nm ; 印刷設定 P印刷
                                  "") ;   
                    );if
      ); LySel 1
      ((= LySel "2") (setq Nm "Jaga-No_Plot")
                  (if (null (tblsearch "layer" Nm)) ; もし画層Nmが無いなら    
                      (command-s "._-LAYER" ; 画層管理コマンド
                                  "_N" Nm ; 新規作成 
                                  "_L" "continuous" Nm ; 線種設定 continuous
                                  "_C" 171 Nm ; 色設定 71
                                  "_P" "N" Nm ; 印刷設定 しない
                                  "") ;   
                    );if
      ); LySel 2
    );cond
      
	  (command-s "._REVCLOUD" "_A" 5 5 "_O" pause "_N")	
    
  (if (/= LySel "3")
        (command-s "._CHANGE"  (entlast) "" "_P" "_LA" Nm "")
  );if
  
(princ));defun

ダイアログボックスにする、画層変更の3つの選択肢の部分はこの2行です。

(initget 1 "1 2 3")
(setq LySel (getkword "画層選択: [1 Jaga_Rev-# / 2 Jaga-No_Plot / 3 画層変更なし]"))

3つの選択肢
[1 Jaga_Rev-# / 2 Jaga-No_Plot / 3 画層変更なし]
から選択された値を変数LySel に入れる処理にラジオボタンを使います。

DCL

作成するダイアログボックスの見た目

DCL

Test_Radio :dialog
      {label = "Layer"; 
//--------------------------------------------------------  
          :radio_column{ key="LySel"; 
            :radio_button{ label=" Jaga_Rev-#"; key="1";}
            :radio_button{ label=" Jaga-No_Plot"; key="2";}
            :radio_button{ label=" Do not Change"; key="3";}
		      }
 //--------------------------------------------------------   
        ok_cancel;
      }

DCL の説明

:radio_column{ key="LySel";

キー名LySelのラジオ列を定義します。

:radio_button{ label=" Jaga_Rev-#"; key="1";}
:radio_button{ label=" Jaga-No_Plot"; key="2";}
:radio_button{ label=" Do not Change"; key="3";}

ラジオ列の中に、3つのラジオボタンを入れ、それぞれキー名 “1” “2””3″としました。

選択されたボタンのキーが、ラジオ列(LySel) の値になります。

AutoLISP

ダイアログボックス部分

まずは、このダイアログボックスを表示し、値を受け取って閉じるまでの部分です。

(defun c:test ( / dcl_id Act )

   (setq dcl_id (load_dialog "JagaDCL.dcl"))
   
      (if (not (new_dialog "Test_Radio" dcl_id))
	      (progn
            (princ "***ダイアログボックスが見つかりません***")
            (exit)
      ));progn if 
  
          ;-----------------------------------------------------------
  	        (set_tile "LySel" "1")
          ;-----------------------------------------------------------
            (action_tile "accept" "(Test_GetVar)(done_dialog 1)")
            (action_tile "cancel" "(done_dialog 0)")
          ;-----------------------------------------------------------
            (setq Act (start_dialog))
            (unload_dialog dcl_id)
          ;-----------------------------------------------------------
            (cond 
              ((= Act 0) (princ "ユーザーキャンセル"))
              ((= Act 1) (cloud LySel))
            );cond
          ;----------------------------------------------------------				
(princ))

;===========================================
(defun Test_GetVar ()
	(setq LySel (get_tile "LySel"))
)
(set_tile "LySel" "1")

ダイアログボックスを開いたときにとりあえずオプション1を選択しておきます。

(action_tile "accept" "(Test_GetVar)(done_dialog 1)")

“accept” はOKボタンのキーです。OKが押されたら、自作関数Test_GetVarを実行し、ダイアログボックスをを閉じ、閉じるときの戻り値を1に設定します。

(defun Test_GetVar ()
(setq RadioTest (get_tile "LySel"))
)

OKが押されたときに実行される自作関数Test_GetVarです。
get_tileで、キー”LySel”のタイルから値を得て、変数 LySelに値を入れます

(cond
   ((= Act 0) (princ "ユーザーキャンセル"))
   ((= Act 1) (Cloud LySel))
);cond

条件式 cond を使い、

Actに入ったダイアログボックスの戻り値が 0 (キャンセルボタンで終了)なら、 ユーザーキャンセルとコマンドラインに表示。
Act に入ったダイアログボックスの戻り値が1 (OKボタンで終了)なら、下記の自作関数Cloud に引数として変数LySelに入った値を渡して実行します。

 処理実行部分

ダイアログボックスから値を受け取って、実際に処理する部分です。

値を受け取ってからは、元のコマンドを同じです。
コマンドの内容は上記であげた記事を参考にしてください。

(defun Cloud (LySel / Nm)

    (cond
      ((= LySel "1") (setq Nm (strcat "Jaga_Rev-"(getstring "改訂番号:")))    
                  (if (null (tblsearch "layer" Nm)) ; もし画層Nmが無いなら    
                      (command-s "._-LAYER" ; 画層管理コマンド
                                  "_N" Nm ; 新規作成 
                                  "_L" "continuous" Nm ; 線種設定 continuous
                                  "_C" 3 Nm ; 色設定 3 緑
                                  "_P" "P" Nm ; 印刷設定 P印刷
                                  "") ;   
                    );if
      ); LySel 1
      ((= LySel "2") (setq Nm "Jaga-No_Plot")
                  (if (null (tblsearch "layer" Nm)) ; もし画層Nmが無いなら    
                      (command-s "._-LAYER" ; 画層管理コマンド
                                  "_N" Nm ; 新規作成 
                                  "_L" "continuous" Nm ; 線種設定 continuous
                                  "_C" 171 Nm ; 色設定 71
                                  "_P" "N" Nm ; 印刷設定 しない
                                  "") ;   
                    );if
      ); LySel 2
    );cond
      
	  (command-s "._REVCLOUD" "_A" 5 5 "_O" pause "_N")	
    
  (if (/= LySel "3")
        (command-s "._CHANGE"  (entlast) "" "_P" "_LA" Nm "")
  );if
  
(princ));defun

たった2行のコードが、こんなに長くなるの⁈

とお思いかもしれません。このコマンドならダイアログボックスにするよりも、getkwordの選択肢の方が楽だし使い勝手もいいかもしれません。

もし、ユーザー入力部分が複数ある場合は、何度もコマンドラインに出てくるよりは、ダイアログボックスの方が選択できる要素が一覧できて便利です。

例えばこのコマンドなら、改訂番号、円弧の長さ、画層の選択、この3つをユーザー入力したいとなれば、ダイアログボックスの方が使いやすいかなと思います。

改訂番号、円弧の長さ、画層の選択のダイアログボックスを付けて、画層がフリーズ非表示になっていたときも想定したこのコマンドのサンプルも、後日記事にしたいと思います。

まとめ

  • ラジオタイルは、列(行)タイルradio_column (row) とボタンタイルradio_buttonタイルで形成されている。
  • 複数の選択肢の中から、1つだけを選ぶ項目に使う。

Comments