今回は、ユーザーが文字列を入力できるダイアログを、DCLとAutoLISPで作成する方法を紹介します。
ユーザーが入力する部分の「タイル」という基本から押さえておきましょう。
タイルとは?
DCLでは、ダイアログボックスの中に配置される各ユーザーインターフェースの部品(ボタン、入力欄、ラベルなど)を「タイル(tile)」と呼びます。HTMLでいう <input>
や <button>
のようなものですね。
🔹 代表的なタイルの種類
タイル名 |
機能 |
用途例 |
---|---|---|
|
文字列入力欄 |
名前、数値など |
|
ON/OFF切り替え |
設定の有効化 |
|
選択肢表示 |
プリセット選択 |
|
ボタン動作 |
実行、閉じるなど |
|
ラベル表示 |
説明文や見出し |
edit_box はタイルの一種
: edit_box {
key = "username";
label = "名前";
value = "";
}
この構文は、ユーザーが文字列を入力できる「入力欄タイル」を定義しています。
-
edit_box
:タイルの種類(入力欄) -
key
:AutoLISP側で値を取得するための識別名 -
label
:入力欄の左に表示されるラベル -
value
:初期値(空欄にしたい場合は""
)
Step 1:DCLファイルを作成する
まずは、ダイアログのUIを定義するDCLファイルを作成します。以下の内容を inputdlg.dcl
という名前で保存してください。
inputdlg : dialog {
label = "名前を入力してください";
: edit_box {
key = "username";
label = "名前";
value = "";
}
ok_cancel;
}
-
inputdlg
:ダイアログの識別名。AutoLISP側で呼び出すときに使います。 -
ok_cancel
:OKとキャンセルボタンを自動で配置します。
Step 2:AutoLISPコードを書く
次に、DCLを呼び出して入力値を取得するAutoLISPコードです。以下を inputname.lsp
として保存し、AutoCADにロードしてください。
(defun C:getname ( / dcl_id result name )
(setq dcl_id (load_dialog "inputdlg.dcl"))
(if (not (new_dialog "inputdlg" dcl_id))
(prompt "DCLの読み込みに失敗しました。")
)
(action_tile "username" "(setq name $value)") ; 入力値を取得
(action_tile "accept" "(done_dialog 1)") ; OKボタン
(action_tile "cancel" "(done_dialog 0)") ; Cancelボタン
(setq result (start_dialog))
(unload_dialog dcl_id)
(if (= result 1)
(princ (strcat "入力された名前: " name))
(princ "キャンセルされました。")
)
(princ)
)
Step 3:実行してみよう
-
inputdlg.dcl
を AutoCAD のサポートパスに配置。 -
inputname.lsp
をロード。 -
コマンドラインで
getname
と入力して実行。
すると、以下のようなダイアログが表示されます:
入力された名前は、コマンドラインに表示されます。
番外:タイルを横に並べるには row を使う!
DCLでは、複数のタイルを横並びにしたい場合、row
というレイアウトコンテナを使います。
基本構文
inputdlg : dialog {
label = "横並びの例";
: row {
: edit_box {
key = "name1";
label = "名前1";
}
: edit_box {
key = "name2";
label = "名前2";
}
}
ok_cancel;
}
解説
-
: row { ... }
の中に複数のタイルを記述すると、横方向に並びます。 -
edit_box
やbutton
など、どんなタイルでも横並びにできます。 -
ok_cancel
はダイアログ下部にOK/キャンセルボタンを自動配置。
レイアウト調整の属性
属性名 |
説明 |
例 |
---|---|---|
|
タイルの横幅を指定 |
|
|
幅を固定するかどうか |
|
|
左寄せ・中央・右寄せ |
|
これらをタイル内に記述することで、横並びの見た目を微調整できます。
まとめ
DCLの「タイル構造」を理解することで、AutoCADに柔軟なUIを追加できるようになります。edit_box
で説明しましたが、入力した文字をlispで受け取って計算やkeyに使用したりも発展させることもできます。
コメント