DCL関数 入門編

ダイアログでユーザーの入力を楽にしよう!DCLを覚えるメリット3選|表示方法も解説

dcl-merit_eyecatch
  • ユーザーの入力ミスを減らしたい
  • オリジナルのダイアログを表示させたい
  • AutoCADのDCLについて知りたい

AutoLISPのプログラムを実行するときに、値の入力がめんどくさいと感じたことはないでしょうか。コマンドラインへのメッセージだけではどんな値を入力してほしいか伝えにくいため、ユーザーの入力ミスにお困りの方も多いはず。

はこ
はこ

私はAutoLISPを独学で習得し、業務に役立つプログラムの作成を5年以上続けています。数行の簡単なプログラムから1000行以上の複雑なものまで、さまざまなプログラムを作成してきました。

そもそもAutoLISPってなに?という方はこちらの記事をご覧ください。
>>AutoCADユーザー必見【AutoLISPを覚えるべきメリット5選】デメリットも解説

当記事ではダイアログが作成できるプログラミング言語「DCL」を覚えるメリットについて解説します。

ダイアログのレイアウトや動作を自由に設定できるため、ユーザーに入力してほしい値が視覚的にわかりやすくなります。手動で入力するのはめんどくさい値もクリック1つで済むので、入力ミスを減らすことも。

ユーザーの負担を減らして作業効率を上げたい方はぜひ最後までお読みください。

DCLとはダイアログを作成するプログラム言語

dcl-merit_image1

DCL(Dialog Control Language)とはオリジナルのダイアログを作成できるプログラミング言語のこと。ダイアログのレイアウト(見た目)を自由に設定できます。

ダイアログ(ダイアログボックス)

何かを入力させたりメッセージを確認させたりするときに、プログラムの処理の途中で一時的に開かれる小さい画面のこと。
>>ダイアログとは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

ユーザーが見つけやすい位置にボタンを配置したり、チェックボックスの状態によって特定の項目を入力禁止にしたり、ユーザーの入力をサポートできます。

ただし、ダイアログを操作したときの動作はAutoLISPでコントロールするため、DCLを使いこなすためにはAutoLISPの基礎知識が欠かせません。

AutoLISPの基礎を身に付けたい方はこちらの記事をご覧ください。
>>AutoLISP初心者が最初に覚えるべき関数6選|AutoCADを無料で自動化

DCLはAutoLISPと組み合わせることで、ユーザーの操作を楽にしてくれる優秀なプログラミング言語です。

DCLを覚えるメリット3選

dcl-merit_image2

DCLを覚えるメリットは主に次の3つです。

  • 入力ミスが減る
  • 自由に機能を拡張できる
  • 作成したダイアログを再利用できる

入力ミスが減る

DCLを覚える一番のメリットは入力ミスや不適切な値の入力を減らせること。ダイアログを活用するとコマンドラインへの入力よりも直感的に入力できたり、入力に制限をかけたりできます。

以下のように、入力する文字列をリストボックスから選択させることができます。

dcl-merit_image2-1

ダイアログに配置されるボタンやリストボックスは「タイル」と呼ばれます。タイルを配置する方法についてはこちらの記事をご覧ください。
>>DCLでダイアログボックスにタイルを表示しよう!【AutoCAD】

はこ
はこ

DCLで作成したダイアログはユーザーの負担を減らしてくれます。

ユーザーが自由に機能を拡張できる

DCLで作成するダイアログは、dclファイルを書き換えることで自由に機能を拡張できます。

dclファイル

編集ボックスやボタンなど、ダイアログに配置する項目のサイズやレイアウトの情報が書かれたファイルのこと。(拡張子は「.dcl」)AutoLISPのプログラムが書かれているlspファイルから呼び出して使用する。

たとえば、以下のような編集ボックスが1つだけのダイアログがあったとします。

dcl-merit_image2-2

上記のダイアログにテキストボックスを1つ追加する場合、dclファイルは次のようになります。

test_dcl1:dialog
{
  label = "編集ボックス";

  :edit_box
  {
    label = "ラベル1";
    key = "edit1";
    width = 20;
  }
 :edit_box
  {
    label = "ラベル2";
    key = "edit2";
    width = 20;
  }
  ok_cancel;
}
はこ
はこ

11~16行目が追加した編集ボックスに関する内容です。

編集ボックスが追加されたダイアログの見た目は以下のとおり。

dcl-merit_image2-3

編集ボックスを横並びにしたい場合はレイアウトの設定が必要です。DCLでダイアログのレイアウトを操作する方法についてはこちらの記事をご覧ください。
>>ダイアログボックスのレイアウトをDCLで変更しよう!【AutoCAD】

ダイアログを自由にデザインできるのはDCLの大きな魅力です。

作成したダイアログを再利用できる

DCLで作成したダイアログはさまざまなAutoLISPプログラムで再利用できます。

ダイアログの見た目を操作するファイル(dclファイル)と動作を決めるファイル(lspファイル)は分かれています。呼び出すdclファイル次第で表示するダイアログを自由に選ぶことも。

たとえば、次のように表示させる値がそれぞれ異なっていても、動作に問題がなければ同じダイアログを使えます。

dcl-merit_image2-4
dcl-merit_image2-5

一度作成したダイアログを何度も使いまわすことで、ダイアログを作成する手間が短縮できます。

DCLで作成したダイアログの表示方法

dcl-merit_image3

DCLで作成したダイアログを表示する手順は以下のとおりです。

  1. dclファイルを作成する
  2. lspファイルにダイアログを呼び出すプログラムを追加する
  3. lspファイルをロードしてプログラムを実行する

dclファイルを作成する

テキストファイルの拡張子を「.dcl」に変えて保存すると、dclファイルが作成できます。メモ帳などのテキストエディタでもかまいませんが、ここではAutoCADの「Visual LISP エディタ」を使った作成方法を解説します。

Visual LISP エディタの詳細についてはこちらの記事をご覧ください。
>>【入門】AutoLISP開発をはじめよう!Visual LISP エディタの使い方

Visual LISP エディタは「管理」タブ→「Visual LISP エディタ」から起動できます。

dcl-merit_image4-1

Visual LISP エディタを起動したら「新しいファイルを作成」のアイコンをクリックして、プログラムを書き込む画面を表示しましょう。

dcl-merit_image4-2

以下のプログラムをコピペし、ファイル名を「test.dcl」として保存してください。

はこ
はこ

「ファイル」→「名前を付けて保存」から保存できます。

test1:dialog
{
  key = "title";
  label = "";
  :column
  {
    fixed_width = true;
    :row
    {
      :text
      {
      	label = "挿入するブロック";
      	key = "text1";
      	width = 10;
      	fixed_width = true;
      }
      :popup_list
      {
      	key = "block_sel";
      	width = 15;
      	fixed_width = true;
      }
    }
    :list_box
    {
      label = "挿入する画層を選択";
      key = "layer_sel";
      multiple_select = false;
      width = 42;
      fixed_width = true;
    }
  }
  ok_cancel;
}
dcl-merit_image4-3
はこ
はこ

ファイルの種類は「DCL ソース ファイル」を選択します。

lspファイルにダイアログを操作するプログラムを追加する

ダイアログを表示して操作するためには、呼び出すダイアログとその動作をlspファイルに追加しておく必要があります。

前述したdclファイルを呼び出して操作できるAutoLISPのプログラムを以下に用意しました。新規ファイルにコピペし、拡張子を「.lsp」として保存してください。

(defun c:test1
       (
	      /
	      blkname blkdata blklst layname laydata laylst set_block
	      sellayer dcl_id c_layer c_layer1 chkdia pt1
	     )

  ;;;ブロック名のリストを作成する
  (setq blkdata (tblnext "BLOCK" T))
  (while blkdata
    (setq blkname (cdr (assoc 2 blkdata)))
    (setq blklst (append blklst (list blkname)))
    (setq blkdata (tblnext "BLOCK"))
  )

  ;;;画層名のリストを作成する
  (setq laydata (tblnext "LAYER" T))
  (while laydata
    (setq layname (cdr (assoc 2 laydata)))
    (setq laylst (append laylst (list layname)))
    (setq laydata (tblnext "LAYER"))
  )
  
  ;;;ダイアログで選択した値を取得する
  (defun SaveTileVal()
    (setq sel_block (nth (atoi (get_tile "block_sel")) blklst))
    (setq sel_layer (nth (atoi (get_tile "layer_sel")) laylst))
  )
  
 ;;;ダイアログを表示する準備
  (setq dcl_id (load_dialog "test1.dcl"))
  (new_dialog "test1" dcl_id)

  ;;;現在層を取得してタイトルに表示する
  (setq c_layer (getvar "clayer"))
  (setq c_layer1 (strcat "現在の画層は<" c_layer ">です。"))
  (set_tile "title" c_layer1)

 ;;;ポップアップリストにブロック名のリストを流し込む
  (start_list "block_sel" 3)
  (mapcar 'add_list blklst)
  (end_list)

  ;;;リストボックスに画層名のリストを流し込む
  (start_list "layer_sel" 3)
  (mapcar 'add_list laylst)
  (end_list)

  ;;;OK,キャンセルボタンを押したときの動作
  (action_tile "accept" "(SaveTileVal)(done_dialog 1)")
  (action_tile "cancel" "(done_dialog 0)")

  ;;;ダイアログを終了する準備
  (setq chkdia (start_dialog))
  (unload_dialog dcl_id)

  ;;;OKボタンが押された場合はブロックを挿入する
  (if (= chkdia 1)
    (if sel_block
      (progn
     (setvar "clayer" sel_layer)
        (setq pt1 (getpoint "\n挿入位置を指定してください。"))
        (command "-insert" sel_block pt1 "" "" "")
        (setvar "clayer" c_layer)
      )
    )
  )
)
dcl-merit_image4-4
はこ
はこ

ファイルの種類で「LISP ソース ファイル」を選択すると拡張子が「.LSP」に変わります。

lspファイルをロードしてプログラムを実行する

上記で作成したlspファイルを図面上にドラッグしてロードしましょう。

オプションの「ファイル」→「信頼できる場所」にlspファイルが保存されている場所が登録されていない場合、以下のようなメッセージが出ます。今回はお試しなので「1回ロードする」を押してください。

dcl-merit_image4-5

コマンドラインに「test」と入力すると、ロードしたプログラムが実行されて以下のようなダイアログが表示されます。

dcl-merit_image3-1

ポップアップリストからブロック名、リストボックスから画層名を選択して「OK」ボタンを押してください。ブロックを挿入する位置の入力を求められて、選択したブロックが対象の画層に挿入されます。

ダイアログの動作を変更したい場合はタイルの処理関数を使ってください。タイルの処理関数についてはこちらの記事で解説しています。
>>タイルを使いこなそう!DCLのタイル処理関数を解説【AutoCAD】

DCLを覚えてユーザーが楽できるプログラムを作ろう

dcl-merit_image-last

今回ご紹介した内容を以下にまとめます。

DCL(Dialog Control Language)
オリジナルのダイアログを作成できるプログラミング言語。レイアウト(見た目)を自由に設定できる
dclファイル
編集ボックスやボタンなど、ダイアログに配置する項目のサイズや位置の情報が書かれたファイルのこと。拡張子は「.dcl」

DCLを覚えるメリットは次の3つです。

  • 入力ミスが減る
  • ユーザーが自由に機能を拡張できる
  • 作成したダイアログを再利用できる

DCLで作成したダイアログはユーザーの作業効率を上げてくれます。ユーザーが楽をできるプログラムの作成に役立ててください。

AutoLISPの基礎を書籍で学びたい方には「AutoCAD 自動化攻略読本」がおすすめ。初心者向けに解説されており、AutoLISP以外の自動化方法も学べるお得な一冊。とにかくAutoCADで楽をしたい方はぜひご覧ください。

>>【AutoLISPの教科書】AutoCAD自動化攻略読本のメリット5選|おすすめ活用法も解説

AutoCADが楽になるプログラムを作成します AutoCADを効率化して面倒な作業から解放されましょう!

-DCL関数, 入門編