AutoLISP DCL入門2:ダイアログを作る。

Autolisp

今回は、ユーザーが文字列を入力できるダイアログを、DCLとAutoLISPで作成する方法を紹介します。

ユーザーが入力する部分の「タイル」という基本から押さえておきましょう。


タイルとは?

DCLでは、ダイアログボックスの中に配置される各ユーザーインターフェースの部品(ボタン、入力欄、ラベルなど)を「タイル(tile)」と呼びます。HTMLでいう <input><button> のようなものですね。

🔹 代表的なタイルの種類

タイル名

機能

用途例

edit_box

文字列入力欄

名前、数値など

toggle

ON/OFF切り替え

設定の有効化

list_box

選択肢表示

プリセット選択

button

ボタン動作

実行、閉じるなど

text

ラベル表示

説明文や見出し


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:実行してみよう

  1. inputdlg.dcl を AutoCAD のサポートパスに配置。

  2. inputname.lsp をロード。

  3. コマンドラインで getname と入力して実行。

すると、以下のようなダイアログが表示されます:

入力された名前は、コマンドラインに表示されます。

番外:タイルを横に並べるには row を使う!

DCLでは、複数のタイルを横並びにしたい場合、row というレイアウトコンテナを使います。

 基本構文

inputdlg : dialog {
  label = "横並びの例";
  : row {
    : edit_box {
      key = "name1";
      label = "名前1";
    }
    : edit_box {
      key = "name2";
      label = "名前2";
    }
  }
  ok_cancel;
}

解説

  • : row { ... } の中に複数のタイルを記述すると、横方向に並びます

  • edit_boxbutton など、どんなタイルでも横並びにできます。

  • ok_cancel はダイアログ下部にOK/キャンセルボタンを自動配置。


レイアウト調整の属性

属性名

説明

width

タイルの横幅を指定

width = 20;

fixed_width

幅を固定するかどうか

fixed_width = true;

alignment

左寄せ・中央・右寄せ

alignment = centered;

これらをタイル内に記述することで、横並びの見た目を微調整できます。


まとめ

DCLの「タイル構造」を理解することで、AutoCADに柔軟なUIを追加できるようになります。edit_box で説明しましたが、入力した文字をlispで受け取って計算やkeyに使用したりも発展させることもできます。

コメント

タイトルとURLをコピーしました