AutoLISP入門 関数紹介

AutoCADに情報を取り込もう!AutoLISPのユーザー入力関数を解説

ユーザー入力

今回の記事ではAutoLISPのユーザー入力関数について解説していきます。

ユーザー入力関数は数値や文字列など様々な情報をユーザーに入力させて、AutoCADに取り込むことができる関数です。

ユーザーに対して動作を求めるオリジナルのコマンドを作成できるようになります。

より使い勝手のいいコマンドを作成するうえで重要な関数ですので、ぜひご覧ください。

AutoCADに情報を取り込もう!AutoLISPのユーザー入力関数を解説

user-input

点座標の取得:getpoint

getpointはユーザーへ点の指定を求めて、その座標を返す関数です。

点が指定されるまで入力待ち状態になり、あらかじめ座標を指定するとその点からラバーバンドを表示させることができます。

入力待ち状態のときにユーザーへのメッセージを表示することも可能です。

getpointの書式

(getpoint [座標] [メッセージ]) ※[]内は省略可能

引数内容
座標指定した座標からラバーハンドを表示できる。
メッセージ入力待ちの時にコマンドラインへ表示する文字列。
返り値内容
座標ユーザーが選択した点の座標(リスト)。

getpointの使用例

;ユーザーが取得した点を中心に円を作成する
(setq center (getpoint "円の中心を選択してください。"))
(command "circle" center "D" 10)

作図のコマンドに関してはこちらの記事をご覧ください。
関連記事:作図が楽になる!AutoLISPでの作図コマンド使用方法を解説

文字列の取得:getstring

getstringはユーザーに文字列の入力を求め、その文字列を返す関数です。

最大文字数は132文字でこれを超える場合は頭の132文字だけが返ります。

フラグにnil以外を指定すると空白(Space)の入力を許可することが可能です。

getstringの書式

(getstring [フラグ] [メッセージ]) ※[]内は省略可能

引数内容
フラグnil以外を指定すると、空白の入力が許可される。
省略またはnilを指定した場合は、Spaceキーを押すと関数が終了する。
メッセージ入力待ちの時にコマンドラインへ表示する文字列。
返り値内容
文字列ユーザーが入力した文字列。
最大文字数は132文字で、これを超えるときは最初の132文字が返る。

getstringの使用例

;ユーザーの名前を取得して変数に格納する。空白の入力は許可。
(setq user (getstring T "ユーザー名を入力してください。"))

空白の入力を許可する場合、フラグはTでなくても数値や文字列でも問題ありません。

キーワードの取得:getkword

getkwordはユーザーの入力に対し、あらかじめ設定されたキーワードを返す関数です。

実行するには必ず直前でキーワードを設定する必要があり、後述するinitgetを使用することでキーワードの設定ができます。

getkwordの書式

(getkword [メッセージ]) ※[]内は省略可能

引数内容
メッセージ入力待ちの時にコマンドラインへ表示する文字列。
返り値内容
文字列入力に対応するキーワードの文字列が返る。
nilEnterの入力が禁止されていない場合にかぎり、Enterを押すとnilが返る。

getkwordの使用例

;ユーザーにキーワードの入力を求める
(initget "1 2 3 4 5")
(setq kw (getkword "月曜⇒1/火曜⇒2/水曜⇒3/木曜⇒4/金曜⇒5 \n"))

メッセージの文末に「\n」を入れると改行できるので、入力値が分かりやすくなります。

キーワードの設定:initget

initgetはユーザー入力関数のキーワードを設定する関数です。

キーワードとして使用できるのは半角英数字とハイフンの文字列のみで、各キーワードは1つ以上のスペースで区切ります。

入力が必要な箇所のみ大文字にすることで短縮入力もできて、キーワードを"Lisp"とすると"L"だけの入力で済みます。

initgetの書式

(initget [オプション] キーワード) ※[]内は省略可能

引数内容
オプションユーザーの入力を制御する整数。下記の値を足し合わせて自由に設定できる。
1:Enterのみの入力禁止
2:ゼロの入力禁止
4:負の値入力禁止
8:現在の図面範囲外の点の入力を許可
32:ラバーハンドとボックスを破線表示
64:getdist関数へのZ座標の入力禁止
キーワード一連のキーワードを表す文字列。各キーワードは1つ以上の空白で区切る。
返り値内容
nilinitgetはnilを返す。

initgetの使用例

;ユーザーにキーワードの入力を求める。Enterの入力は禁止。
(initget 1 "1 2 3 4 5")
(setq kw (getkword "月曜⇒1/火曜⇒2/水曜⇒3/木曜⇒4/金曜⇒5 \n"))

数値の取得:getint / getreal

getintはユーザーに整数の入力を求め、その整数を返す関数です。

実数を入力した場合は再度整数の入力を求められます。

これに対しgetrealはユーザーに数値の入力を求め、その数値を実数で返す関数です。

例えば、10と入力すると10.0として返します。

getint / getrealの書式

(getint [メッセージ]) ※[]内は省略可能

(getreal [メッセージ])  ※[]内は省略可能

引数内容
メッセージ入力待ちの時にコマンドラインへ表示する文字列。
返り値内容
数値getintの場合は入力した整数が返り、getrealのときは入力した実数が返る。

getint / getrealの使用例

;ユーザーが入力した整数を変数numに格納する
(setq num (getint "整数を入力してください。"))

距離の測定:getdist

getdistはユーザーに2つの点の入力を求め、その2点間の距離を実数で返す関数です。

2つの点の1点目は引数としてあらかじめ指定することができます。

getdistの書式

(getdist [座標] [メッセージ])

引数内容
座標距離を測定する2点の1点目。
メッセージ入力待ちの時にコマンドラインへ表示する文字列。
返り値内容
実数指定した2点間の距離を実数で返す。3D点の場合は3D距離が返る。

getdistの使用例

;(0,0)から指定した点までの距離を変数dに格納する
(setq d (getdist (list 0 0) "2点目を入力してください。"))

角度の測定:getangle / getorient

getangleとgetorientはユーザーに2つの点の入力を求め、その2点と0度方向が成す角度を返す関数です。

角度は現在の作図平面で計測されて、単位はラジアン(rad)で返します。

ラジアンとは簡単にいうと角度を円弧の長さで表現したものです。

ちなみにラジアンは次のように定義されます。

円の半径に等しい長さの弧の中心に対する角度=単位円(半径1の円)で,長さが1の弧に対する中心角

ラジアン - 大日本図書

計測に用いる2つの点の1点目は、引数としてあらかじめ指定することも可能です。

getangleはシステム変数「ANGBASE」の設定を0ラジアンとし、反時計回りを正方向とした角度を返します。

これに対しgetorientは「ANGBASE」の設定を無視して右向き(東)を0ラジアンとします。

反時計回りを正方向とした角度を返すところはgetangleと同じです。

getangle / getorientの書式

(getangle [座標] [メッセージ]) ※[]内は省略可能

(getorient [座標] [メッセージ])  ※[]内は省略可能

引数内容
座標角度を測定する2点の1点目。
メッセージ入力待ちの時にコマンドラインへ表示する文字列。
返り値内容
角度指定した2点の角度を返す。単位はラジアン。

getangle / getorientの使用例

;(0,0)と指定した点が成す角度を変数angに格納する
(setq ang (getangle (list 0 0) "2点目を指定してください。"))

;ユーザー指定の2点が成す角度を変数angに格納する
(setq ang (getorient "点を指定してください。"))

まとめ

  • ユーザー入力関数を使うことで様々なデータをAutoCADに取り込める
  • ユーザーへのメッセージを表示できるため人間味のあるプログラムになる
構文内容
(getpoint [座標] [メッセージ])ユーザーへ点の指定を求めて、
その座標を返す。
(getstring [フラグ] [メッセージ])ユーザーに文字列の入力を求めて、
その文字列を返す。
(getkword [メッセージ])ユーザーの入力に対し、
あらかじめ設定されたキーワードを返す。
(initget [オプション] キーワード)ユーザー入力関数のキーワードを設定する。
(getint [メッセージ])ユーザーに整数の入力を求めて、
その整数を返す。
(getreal [メッセージ])ユーザーに数値の入力を求めて、
その数値を実数で返す。
(getdist [座標] [メッセージ])ユーザーに2つの点の入力を求めて、
その2点間の距離を実数で返す。
(getangle [座標] [メッセージ])
(getorient [座標] [メッセージ])
ユーザーに2つの点の入力を求め、
その2点と0度方向が成す角度を返す。

-AutoLISP入門, 関数紹介

独学おすすめ書籍はコチラ
独学おすすめ書籍はコチラ