AutoLISP関数 関数解説

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

ユーザー入力
  • 値や文字列をユーザーに入力させたい
  • 入力する値に選択肢を設けたい
  • AutoLISPでAutoCADに値を入力する方法が知りたい

AutoLISPのプログラムでユーザーに値や文字列を入力させたいけど、やり方が分からずお困りではないでしょうか。入力する値に選択肢を設けて、入力を楽にしたいと思う方も多いはず。

はこ
はこ

私は独学で習得したAutoLISPを活かし、AutoCADを自動化するプログラムを5年以上作成しています。数行で書けるような簡単なプログラムから、1000行以上の少し複雑なプログラムまでさまざまなツールを作成してきました。

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

この記事ではAutoLISPのユーザー入力関数について解説します。ユーザー入力関数の使い方がひと通り分かるため、ユーザーの入力に合わせて動作するプログラムを作れます。

ユーザー入力関数を活用して、ユーザーが使いやすいプログラムの作成に役立ててください。

座標の入力はgetpoint、文字列の入力したいならgetstringを使用します。あらかじめ設定してキーワードの中から選択したい場合はgetkwordを使ってください。

2点間の距離を取得するにはgetdist、数値を取得したいならgetintまたはgetrealを使います。getangleまたはgetorientは角度を取得できます。

AutoLISPのユーザー入力関数8選

input_h2-image1

今回ご紹介するユーザー入力関数は次の8つです。

  • getpoint
  • getstring
  • getkword
  • getint
  • getreal
  • getdist
  • getangle
  • getorient

点座標の取得:getpoint

getpointとはユーザーに図面上から座標を指定させるAutoLISP関数のこと。入力待ちのときに文字列を表示できるため、ユーザーにしてほしいことを伝えられます。あらかじめ基点を設定しておくと、下図のように基点からカーソルの位置まで破線を表示させることもできます。

input_image1-1

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つ指定してください。"))

ユーザー入力関数を活かして使いやすいプログラムを作ろう

input_h2-image-last

今回ご紹介したユーザー入力関数を以下にまとめます。

関数内容
(getpoint [基点] [メッセージ]) ユーザーに図面上から座標を指定させる
(getstring [cr] [メッセージ]) ユーザーに文字列を入力させる
(getkword [メッセージ]) キーワードの中から1つをユーザーに選択させる
(initget [オプション] キーワード) ユーザー入力関数のキーワードを設定する
(getint [メッセージ])
(getreal [メッセージ])
ユーザーに整数または実数の入力を求める
(getdist [基点] [メッセージ]) ユーザーに入力させた2点間の距離を返す
(getangle [基点] [メッセージ])
(getorient [基点] [メッセージ])
ユーザーに入力させた2点と0度方向から角度を算出する

ユーザー入力関数はAutoCADを扱う多くの場面で活躍できます。 上手に活用して作業の効率化に役立ててください。

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

だれでも簡単にAutoCADを自動化

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

-AutoLISP関数, 関数解説