こんな方に向けた記事です
- 編集ボックスやリストボックスなどのタイルから現在値を取得したい
- タイルを選択したときの動作を設定したい
こんにちは!はこです。
AutoLISPを独学し、5年以上業務で使用しています。
今回の記事ではDCLのタイル処理関数について解説していきます。
AutoLISPとDCLを組み合わせることで特定のタイルから現在の値を取得したり、タイルを選択したときの動作を設定することが可能です。
ダイアログボックスを活用してAutoCADの作業を効率化するためには、タイルの扱い方を知ることが必要不可欠ですのでぜひご覧ください。
ちなみにダイアログボックスに表示できるタイルについてはこちらの記事で解説しています。
関連記事:DCLでダイアログボックスにタイルを表示しよう!【AutoCAD】
タイルを使いこなそう!DCLのタイル処理関数を解説【AutoCAD】
今回ご紹介するタイル処理関数は次の4つです。
ご紹介する関数 | 書式 |
set_tile | (set_tile キー 値) |
get_tile | (get_tile キー) |
mode_tile | (mode_tile キー 値) |
action_tile | (action_tile キー 動作内容) |
順番に解説してきます。
タイルに値を設定 set_tile
set_tileの特徴は?
- タイルに値を設定できる
- 設定する値は文字列として記述する
「set_tile」は編集ボックスやラジオボタンなどのタイルに値を設定する関数です。
dclファイル側で定義したキーからタイルを参照します。設定する値が文字列以外であっても文字列として記述してください。
set_tileの使い方は?
構文
- (set_tile キー 値)
引数
- キー
- 値を設定したいタイルのキーを文字列として("を両端に付ける)記述します。
- 値
- タイルに設定するキーを文字列として記述します。
set_tileの使用例
編集ボックスを表示するダイアログボックスを例に説明します。
コマンドラインに「test」と入力して表示される編集ボックスには「autolisp」という文字列が入っています。これはlspファイル側の「set_tile」で引数として「autolisp」を記述しているためです。
dclファイル側で初期値として「value」に「hako」が記述されていますが、lspファイル側で「set_tile」の値に上書きされます。
(defun c:test (/ dcl-file dcl-id)
(setq dcl_file "test-tile.dcl")
(setq dcl_id (load_dialog dcl_file))
(new_dialog "test_tile" dcl_id)
(set_tile "edit_box" "autolisp")
(start_dialog)
(unload_dialog dcl_id)
)
test_tile:dialog {
label = "set_tile";
:edit_box {
label = "edit";
key = "edit_box";
value = "hako";
}
ok_cancel;
}
タイルの値を取得 get_tile
get_tileの特徴は?
- タイルの現在値を取得できる
- 取得する値は文字列
「get_tile」はタイルから現在の値を取得する関数です。
「set_tile」と同様にdclファイル側で定義したキーからタイルを参照します。取得する値はすべて文字列なので注意してください。
get_tileの使い方は?
構文
- (set_tile キー)
引数
- キー
- 値を取得したいタイルのキーを文字列として("を両端に付ける)記述します。
返り値
- 文字列
- タイルの現在値を文字列で返します。
get_tileの使用例
OKまたはキャンセルをすると編集ボックスの値が整数として表示されるダイアログボックスになっています。dclファイル側の「value」に「20」と記述していますので、編集ボックスの初期値は「20」です。
ダイアログボックスがユーザー入力に切り替わる前に編集ボックスの初期値を変数strに格納して、この値を整数にします。そのため、編集ボックスの値を変更してからOKをしても表示される数値は「20」です。
(defun c:test (/ dcl-file dcl-id str)
(setq dcl_file "test-tile.dcl")
(setq dcl_id (load_dialog dcl_file))
(new_dialog "test_tile" dcl_id)
(setq str (get_tile "edit_box"))
(start_dialog)
(unload_dialog dcl_id)
(print (atoi str))
(princ)
)
test_tile:dialog {
label = "set_tile";
:edit_box {
label = "edit";
key = "edit_box";
value = "20";
}
ok_cancel;
}
タイルのモードを設定 mode_tile
mode_tileの特徴は?
- タイルのモードを設定できる
- 設定するモードの値は数値
「mode_tile」はタイルのモードを設定できる関数です。
タイルを使用禁止にしたり、逆に使用可能にしたりとそれぞれのモードに割り当てられている数値を指定することでモードを変更することができます。
mode_tileの使い方は?
構文
- (mode_tile キー 値)
引数
- キー
- モードを設定したいタイルのキーを文字列として("を両端に付ける)記述します。
- 値
- モードに対応した数値を記述します。各数値の内容は下の表をご覧ください。
mode_tileの値 | 内容 |
0 | タイルを使用可能にします |
1 | タイルを使用禁止にします |
2 | タイルにフォーカスします |
3 | 編集ボックスの内容を選択します |
4 | イメージタイルのハイライト表示の オンオフの切り替えます |
mode_tileの使用例
モードが「1」(タイルの使用禁止)の状態の編集ボックスがダイアログボックスで表示されます。
使用禁止というのは編集ボックスが灰色になって選択ができない状態のことです。
(defun c:test (/ dcl-file dcl-id str)
(setq dcl_file "test-tile.dcl")
(setq dcl_id (load_dialog dcl_file))
(new_dialog "test_tile" dcl_id)
(mode_tile "edit_box" 1)
(start_dialog)
(unload_dialog dcl_id)
)
test_tile:dialog {
label = "set_tile";
:edit_box {
label = "edit";
key = "edit_box";
value = "20";
}
ok_cancel;
}
タイルを選択したときの動作 action_tile
action_tileの特徴は?
- タイルを選択したときの動作が設定できる
- 動作内容はすべて文字列として記述する必要がある
「action_tile」はタイルを選択したときの動作を設定する関数です。
編集ボックスに値を入力したらその値を変数へ格納する、ボタンを押したらリストボックスを更新するなど様々な動作を設定することができます。
ただし、動作内容はすべて文字列にする必要があるので記述が少し面倒です。
そこで、文字列を結合する「strcat」を使用して複数行の式を1つの文字列にまとめたり、動作の一部を関数化して記述することでプログラムの見た目とメンテナンス性を確保します。
action_tileの使い方は?
構文
- (action_tile キー 動作内容)
引数
- キー
- 動作を設定したいタイルのキーを文字列として("を両端に付ける)記述します。
- 動作内容
- タイルを選択したときの動作を記述します。内容はすべて文字列として記述する必要があります。
action_tileの使用例
ダイアログボックスを表示した時点では編集ボックスに初期値の「20」が入っていますが、編集ボックスをクリックしてEnterキーを押すと「5000」と上書きされて使用禁止の状態になります。
(defun c:test (/ dcl-file dcl-id str)
(setq dcl_file "test-tile.dcl")
(setq dcl_id (load_dialog dcl_file))
(new_dialog "test_tile" dcl_id)
(action_tile "edit_box"
(strcat
"(set_tile \"edit_box\" \"5000\")"
"(mode_tile \"edit_box\" 1)"
)
)
(start_dialog)
(unload_dialog dcl_id)
)
test_tile:dialog {
label = "set_tile";
:edit_box {
label = "edit";
key = "edit_box";
value = "20";
}
ok_cancel;
}
まとめ
今回はタイルの機能について解説してきました。
ダイアログボックスを作成する上でタイルの機能を考えるのが一番おもしろいところです。この楽しさを感じていただけたら幸いです。
関数 | 書式 | 内容 |
set_tile | (set_tile キー 値) | タイルに値を設定できる |
get_tile | (get_tile キー) | タイルの値を取得できる |
mode_tile | (mode_tile キー 値) | タイルのモードを設定できる |
action_tile | (action_tile キー 動作内容) | タイルを選択したときの 動作が設定できる |
記事の内容やAutoLISP、DCLのことでよく分からないところがあるようでしたらコメントやメールでお気軽にご連絡ください!
お待ちしております。
プログラミングをもっと学びたい方におすすめ
AutoLISPをより理解しやすくするためには他のプログラミング言語を覚えることをおすすめします。こちらの記事ではおすすめのオンラインプログラミングスクールを紹介していますのでぜひご覧ください。
関連記事:学習目的別にご紹介!おすすめオンラインプログラミングスクール3選
無料体験もできるオンラインプログラミングスクールです!