- 値や文字列をユーザーに入力させたい
- 入力する値に選択肢を設けたい
- AutoLISPでAutoCADに値を入力する方法が知りたい
AutoLISPのプログラムでユーザーに値や文字列を入力させたいけど、やり方が分からずお困りではないでしょうか。入力する値に選択肢を設けて、入力を楽にしたいと思う方も多いはず。
私は独学で習得したAutoLISPを活かし、AutoCADを自動化するプログラムを5年以上作成しています。数行で書けるような簡単なプログラムから、1000行以上の少し複雑なプログラムまでさまざまなツールを作成してきました。
そもそもAutoLISPってなに?という方はこちらの記事をご覧ください。
>>AutoCADユーザー必見!【AutoLISPを覚えるべきメリット5選】デメリットも解説
この記事ではAutoLISPのユーザー入力関数について解説します。ユーザー入力関数の使い方がひと通り分かるため、ユーザーの入力に合わせて動作するプログラムを作れます。
ユーザー入力関数を活用して、ユーザーが使いやすいプログラムの作成に役立ててください。
座標の入力はgetpoint、文字列の入力したいならgetstringを使用します。あらかじめ設定してキーワードの中から選択したい場合はgetkwordを使ってください。
2点間の距離を取得するにはgetdist、数値を取得したいならgetintまたはgetrealを使います。getangleまたはgetorientは角度を取得できます。
AutoLISPのユーザー入力関数8選
今回ご紹介するユーザー入力関数は次の8つです。
- getpoint
- getstring
- getkword
- getint
- getreal
- getdist
- getangle
- getorient
点座標の取得:getpoint
getpointとはユーザーに図面上から座標を指定させるAutoLISP関数のこと。入力待ちのときに文字列を表示できるため、ユーザーにしてほしいことを伝えられます。あらかじめ基点を設定しておくと、下図のように基点からカーソルの位置まで破線を表示させることもできます。
getpointの構文と引数
getpointの構文と引数は以下のとおりです。
(getpoint [基点] [メッセージ])
- 基点
- カーソルの位置まで破線を表示させる基準の座標。省略可能
- メッセージ
- 入力待ちのときにユーザーへ表示する文字列。省略可能。
getpointの返り値
getpointの返り値は次のとおりです。
- 入力された座標
- ユーザーが指定した座標をリスト形式のデータで返す
getpointの使用例
以下の使用例ではgetpointで取得した座標を中心とし、circelコマンドによって円を作図します。
(setq center (getpoint "円の中心を選択してください。"))
(command "circle" center "D" 10)
commandとはAutoCADコマンドを実行できるAutoLISP関数です。詳細はこちらの記事をご覧ください。
>>【作図を自動化】コマンドを実行するAutoLISP関数「command」を解説
文字列の取得:getstring
getstringとはユーザーに文字列を入力させるAutoLISP関数です。
数値を入力した場合は、そのまま文字列に変換されます。132文字を超える文字列は最初の132文字だけしか入力できません。与える引数によって、空白の入力を制御できます。
入力待ちのときにユーザーへのメッセージを表示することもできます。
getstringの構文と引数
getstringの構文と引数は次のとおりです。
(getstring [cr] [メッセージ])
- cr
- crがnilでない場合は空白の入力を許可する。nilまたは省略したときは空白の入力を許可しない
- メッセージ
- 入力待ちのときにユーザーへ表示する文字列。省略可能
getstringの返り値
- 入力された文字列
- ユーザーが入力した文字列を返す。何も入力せずにEnterを押した場合はnilが返る
getstringの使用例
ユーザー名の入力を求めて、変数へ格納する例です。引数にTを与えているので、空白が入力の文字としてカウントされます。
(setq user (getstring T "ユーザー名を入力してください。"))
キーワードの取得:getkword
getkwordとはあらかじめ設定されたキーワードの中から、1つのキーワードをユーザーに選択させるAutoLISP関数のこと。長い文字列などを入力する手間が省けるので、非常に便利な関数です。キーワードの設定には「initget」というAutoLISP関数を使います。
initgetの使い方は後ほど解説します。
getkwordの構文と引数
getkwordの構文と引数は以下のとおりです。
(getkword [メッセージ])
- メッセージ
- 入力待ちのときにユーザーへ表示する文字列。省略可能
getkwordの返り値
getkwordの返り値は次のとおりです。
- キーワードの文字列
- initgetで設定したキーワードの文字列が返る。キーワードを選択しなかった場合はnilを返す
getkwordの使用例
以下の例では、曜日に対応した数値の入力をユーザーに求めます。入力された数値は文字列として変数に格納されます。
(initget "1 2 3 4 5")
(setq kw (getkword "月曜⇒1/火曜⇒2/水曜⇒3/木曜⇒4/金曜⇒5 \n"))
\nは改行を表す記号です。
キーワードの設定:initget
initgetはユーザー入力関数のキーワードを設定する関数です。キーワードとして使用できるのは半角英数字とハイフンのみ。各キーワードは1つ以上のスペースで区切ってください。キーワードの前に対応する数値を記述すると入力の制御ができます。
キーワードの1文字を大文字にした場合は短縮入力することも。例えば、キーワードを"liSp"とすると"s"だけの入力で済みます。
initgetの構文と引数
initgetの構文と引数は以下のとおりです。
(initget [オプション] キーワード)
- オプション
- ユーザーの入力を制御する整数。下記の値を足し合わせて自由に設定できる
- 1:Enterのみの入力禁止
2:ゼロの入力禁止
4:負の値入力禁止
8:現在の図面範囲外の点の入力を許可
32:ラバーハンドとボックスを破線表示
64:getdist関数へのZ座標の入力禁止 - キーワード
- 一連のキーワードを表す文字列。各キーワードは1つ以上の空白で区切る
オプションに設定できる整数は他にもいくつかあります。詳細は公式のヘルプをご覧ください。
>>ヘルプ:initget(AutoLISP)
initgetの返り値
initgetの返り値は次のとおりです。
- nil
- initgetの返り値はnilになる
initgetの使用例
getkwordでキーワードを取得する例です。initgetのオプションとして0を与えているため、Enterのみの入力を禁止しています。
(initget 1 "1 2 3 4 5")
(setq kw (getkword "月曜⇒1/火曜⇒2/水曜⇒3/木曜⇒4/金曜⇒5 \n")
数値の取得:getint / getreal
getintとはユーザーに整数の入力を求めるAutoLISP関数のこと。整数以外を入力した場合は再度整数の入力を求めてきます。
getrealはユーザーに実数の入力を求めます。整数を入力したときは実数に変換されるので注意してください。数値以外を入力した場合は再度実数の入力を求めてきます。
getint / getrealの構文と引数
getint / getrealの構文と引数は以下のようになります。
(getint [メッセージ])
(getreal [メッセージ])
- メッセージ
- 入力待ちの時にコマンドラインへ表示する文字列
getint / getrealの返り値
getint / getrealの返り値は次のとおりです。
- 数値
- getintは整数、getrealは実数を返す
getrealで10と入力すると返り値は10.0となります。
getint / getrealの使用例
ユーザーが入力した数値を変数に格納する例です。getintの場合、変数numに格納される数値は必ず整数になります。
(setq num (getint "数値を入力してください。"))
(setq num (getreal "数値を入力してください。"))
距離の測定:getdist
getdistはユーザーに2つの点の入力を求め、その2点間の距離を実数で返すAutoLISP関数です。1点目(基点)は引数としてあらかじめ指定しておくこともできます。
getdistの構文と引数
getdistの構文と引数は以下のとおりです。
(getdist [基点] [メッセージ])
- 基点
- 距離を測定する1点目の座標。省略可能
- メッセージ
- 入力待ちのときにユーザーへ表示する文字列。省略可能
getdistの返り値
getdistの返り値は次のとおりです。
- 距離の実数
- 与えられた2点間の距離を実数で返す
getdistの使用例
基点から指定した座標までの距離を、変数に格納する例です。基点には(0,0)を与えています。
(setq d (getdist (list 0 0) "2点目を入力してください。"))
角度の測定:getangle / getorient
getangle / getorientはユーザーが入力した2つの座標と、0度方向が成す角度を返すAutoLISP関数です。1つ目の座標は引数としてあらかじめ指定しておくことができます。
算出される角度の単位はラジアンなので注意してください。
>>ラジアン - 大日本図書
ラジアンとは簡単にいうと角度を円弧の長さで表現したものです。
getangleとgetorientは0度とする方向が違います。getangleはシステム変数「ANGBASE」の設定を0度とし、反時計回りを正方向とした角度を返します。対してgetorientは「ANGBASE」の設定を無視して東方向(右方向)を0度とします。
システム変数についてはこちらの記事をご覧ください。
>>AutoCADの環境設定をお手軽にカスタマイズ!便利なシステム変数4選
getangle / getorientの構文と引数
getangle / getorientの構文と引数は以下のとおりです。
(getangle [基点] [メッセージ])
(getorient [基点] [メッセージ])
- 基点
- 算出する角度の1点目(中心)。省略可能
- メッセージ
- 入力待ちのときにユーザーへ表示する文字列。省略可能
getangle / getorientの返り値
getangle / getorientの返り値は次のとおりです。
- 角度
- ユーザーが入力した2点間の角度。単位はラジアン
getangle / getorientの使用例
getangle / getorientでユーザーに座標の入力を求めて、算出した角度を変数に格納する例です。getorientの例ではあらかじめ基点を与えているので、ユーザーが入力する座標は1つだけです。
(setq ang (getangle "2つの座標を指定してください。"))
(setq ang (getorient (list 0 0) "座標を1つ指定してください。"))
ユーザー入力関数を活かして使いやすいプログラムを作ろう
今回ご紹介したユーザー入力関数を以下にまとめます。
関数 | 内容 |
(getpoint [基点] [メッセージ]) | ユーザーに図面上から座標を指定させる |
(getstring [cr] [メッセージ]) | ユーザーに文字列を入力させる |
(getkword [メッセージ]) | キーワードの中から1つをユーザーに選択させる |
(initget [オプション] キーワード) | ユーザー入力関数のキーワードを設定する |
(getint [メッセージ]) (getreal [メッセージ]) | ユーザーに整数または実数の入力を求める |
(getdist [基点] [メッセージ]) | ユーザーに入力させた2点間の距離を返す |
(getangle [基点] [メッセージ]) (getorient [基点] [メッセージ]) | ユーザーに入力させた2点と0度方向から角度を算出する |
ユーザー入力関数はAutoCADを扱う多くの場面で活躍できます。 上手に活用して作業の効率化に役立ててください。
AutoLISPを書籍で学びたい方には「AutoCAD 自動化攻略読本」がおすすめ。初心者向けに解説されており、AutoLISP以外の自動化方法も学べるお得な一冊。とにかくAutoCADで楽をしたい方はぜひご覧ください。
だれでも簡単にAutoCADを自動化