キーワード対応の入力関数
以降の入力関数で、目的のデータタイプ以外の文字列の戻り値は、直前のinitget 関数で指定されたキーワードです。また、目的のデータタイプに沿わない入力があった場合は、入力関数が自動的に「そのようなオプションキーワードはありません。」「整数値を入力してください」「数値を入力してください」などと表示し、再度ユーザーに入力を求めます。また、initget 関数の bits 引数で 1 が指定されていた場合も、空入力が禁止されるため、必要ならば再度ユーザーに入力を求めます。しかしどのような場合でも ESC キーが押された場合は、エラーが発生します。
キーワード・数値
AutoLISP関数 |
---|
(getkword [msg]) |
msg:文字列 |
ユーザーがキーワードを入力するまで待機し、入力されたキーワードを返します。 |
戻り値:文字列 |
AutoLISP関数 |
---|
(getint [msg]) |
msg:文字列 |
ユーザーが整数を入力するまで待機し、入力された整数を返します。 |
戻り値:整数、または文字列 |
AutoLISP関数 |
---|
(getreal [msg]) |
msg:文字列 |
ユーザーが実数を入力するまで待機し、入力された実数を返します。 |
戻り値:実数、または文字列 |
getkword 関数 getint 関数 getreal 関数は、それぞれキーワード、整数、実数をユーザーから受け取ります。
msg 引数には、ユーザーに表示するプロンプトを指定します。省略された場合は、何も表示されません。
一般的な使い方は以下のとおりです。ハイライト部分が入力関数の戻り値です。
コマンド: (initget 1 "Ok Cancel")(getkword "¥n実行しますか?[Ok/Cancel]:")⏎
実行しますか?[Ok/Cancel]:c⏎
"Cancel"
コマンド: (initget 1)(getint "¥n回数を入力:")⏎
回数を入力:3⏎
3
コマンド: (initget 1)(getreal "¥n半径を入力:")⏎
半径を入力:10⏎
10.0
座標
AutoLISP関数 |
---|
(getpoint [pt] [msg]) |
pt:リスト msg:文字列 |
ユーザーが点を入力するまで待機し、入力された点を返します。 |
戻り値:リスト、または文字列 |
AutoLISP関数 |
---|
(getcorner pt [msg]) |
pt:リスト msg:文字列 |
ユーザーが長方形の2番目のコーナーを入力するまで待機します。 |
戻り値:リスト、または文字列 |
getpoint 関数と getcorner 関数はユーザーがクリックした点の UCS に基づく座標を返します。ユーザーは直接キーボードから座標を入力することも出来ます。
pt 引数は点の座標を表すリストで、getcorner 関数では省略できませんが、指定された場合は、getpoint 関数では pt 座標からマウスカーソルの位置までラバーバンドが引かれます。getcorner 関数では、pt 座標とマウスカーソル位置を対角線とする長方形のラバーバンドが引かれます。
msg 引数には、ユーザーに表示するプロンプトを指定します。省略された場合は、何も表示されません。
一般的な使い方は以下のとおりです。ハイライト部分が入力関数の戻り値です。
コマンド: (initget 1)(getpoint '(0.0 0.0 0.0) "¥n点を指定:")⏎
点を指定:(2951.14 2579.24 0.0)
コマンド: (initget 1)(getcorner '(0.0 0.0 0.0) "¥nもう一方のコーナーを指定:")⏎
もう一方のコーナーを指定:(4221.59 3794.92 0.0)
距離
AutoLISP関数 |
---|
(getdist [pt] [msg]) |
pt:リスト msg:文字列 |
ユーザーが距離を入力するまで待機します。 |
戻り値:実数、または文字列 |
getdist 関数はユーザーから距離の数値を受け取ります。ユーザーはキーボードから直接数値を入力する以外に、マウスカーソルで 2 点を指定することで、その間の距離を指定することが出来ます。
pt 引数は点の座標を表すリストで、指定された場合は距離指定の 1 点目を意味し、pt 座標からマウスカーソルの位置までラバーバンドが引かれます。
msg 引数には、ユーザーに表示するプロンプトを指定します。原則、省略された場合は、何も表示されませんが、pt 引数が省略された場合、1 点目は何も表示されませんが、2 点目の際には「2 点目を指定:」と自動で表示されます。
一般的な使い方は以下のとおりです。ハイライト部分が入力関数の戻り値です。
コマンド: (initget 1)(getdist "¥n距離を指定:")⏎
距離を指定: 2 点目を指定: 3880.69
コマンド:(initget 1)(getdist '(0.0 0.0 0.0) "¥n距離を指定:")⏎
距離を指定:6875.37
角度
AutoLISP関数 |
---|
(getorient [pt] [msg]) |
pt:リスト msg:文字列 |
ユーザーが角度を入力するまで待機し、入力された角度を返します。 |
戻り値:実数、または文字列 |
AutoLISP関数 |
---|
(getangle [pt] [msg]) |
pt:リスト msg:文字列 |
ユーザーが角度を入力するまで待機し、入力された角度を返します。 |
戻り値:実数、または文字列 |
getorient 関数と getangle 関数は、ユーザーからの角度を表す実数を受け取ります。ユーザーはキーボードから直接 360° を一周とする角度を入力する以外に、マウスカーソルで 2 点を指定することで、線分の角度を指定することが出来ます。戻り値の角度はいずれも 2π を 360°とするラジアン単位に変換されます。
pt 引数は点の座標を表すリストで、指定された場合は角度指定の 1 点目を意味し、pt 座標からマウスカーソルの位置までラバーバンドが引かれます。
msg 引数には、ユーザーに表示するプロンプトを指定します。原則、省略された場合は、何も表示されませんが、pt 引数が省略された場合、1 点目は何も表示されませんが、2 点目の際には「2 点目を指定:」と自動で表示されます。
一般的な使い方は以下のとおりです。ハイライト部分が入力関数の戻り値です。
コマンド: (initget 1)(getorient "¥n角度を指定:")
角度を指定: 2 点目を指定: 0.700368
コマンド: (initget 1)(getorient '(0.0 0.0 0.0) "¥n角度を指定:")
角度を指定:0.599486
getorient 関数と getangle 関数の異なる点は、マウスカーソルで指定する場合、getorient 関数の場合は線分の角度が UCS の X 軸から反時計回りを正とした角度が返るのに対し、getangle 関数の場合は、UCS の X 軸から加えることのシステム変数 ANGBASE の方向を角度の 0 とし、そこからの反時計回りを正とした角度を返します。
システム変数 ANGBASE
タイプ: | 実数型 | 保存先: | 図面 | 初期値: | 0.0 |
角度の基準を、現在の UCS のX軸からの角度を設定します。【コマンドライン】でアクセスする場合は度の単位となり、AutoLISP からgetvar 関数等でアクセスした場合は、ラジアン単位の数値となります。
ユーザーが直接キーボードから角度を指定した場合は、getorient 関数の場合は ANGBASE + 入力値 が、getangle 関数の場合は入力値が角度として返ります。また、キーボード入力の場合は、角度の方向がシステム変数 ANGDIR により自動で変換されます。そのため、ユーザーが何かの事情で時計回りを正としていて、それを前提とした角度を入力した時でも、自動変換によってプログラム側は反時計回りを正とする前提としてよいことになります。
システム変数 ANGDIR
タイプ: | 整数型 | 保存先: | 図面 | 初期値: | 0 |
正の角度の方向を設定します。
0 | 反時計回り |
1 | 時計回り |
二つの関数の差異をまとめますと、UCS の X 軸からの絶対的な角度を得たい場合は、getorient 関数を使用します。この際、ユーザーがシステム変数 ANGBASEを 0.0 から変更していた場合、キーボードからの入力は ANGBASE により補正を受けます。一方、システム変数 ANGBASEの方向を基準とする相対的な角度を得たい場合は、getangle 関数を使用します。ユーザーがキーボードから入力した値も、 ANGBASEの方向からの相対的な角度となります。

システム変数 LASTPOINT
タイプ: | 3D 点 | 保存先: | なし | 初期値: | 0.00, 0.00, 0.00 |
「最後の点」が、現在の空間の UCS 座標で格納されます。AutoCAD ユーザーがコマンドを使って作図をする際は自動で更新されていき、オブジェクトスナップの垂線や接線といった二点を必要とするスナップの情報として使われます。またダイレクトインプットによる @ を使った相対入力の基点として使われます。
get~ 系の関数で座標や距離・角度を得るもので 1 点目を引数で与えるものは、与えた 1 点目が一時的に LASTPOINT の値として使われます。ただし、get~ 系の関数によるユーザーがクリックした座標は LASTPOINT に自動的には反映されません。引数で与えた 1 点目もLASTPOINT の値とはならず以前のままとなります。必要ならば、プログラムでシステム変数 LASTPOINT の値を更新します。
図形
AutoLISP関数 |
---|
(entsel [msg]) |
msg:文字列 |
図形を1つ選択するようユーザーに要求します。 |
戻り値:【図形名】、または文字列 |
entsel 関数は、ユーザーに図形をマウスカーソルで一つ選択するように要求します。他のキーワード対応の入力関数と異なる場合は、initget 関数の bits 引数で「何も入力しないでEnterキーを押すことを禁止」が効きません。つまり、ユーザーが何もない場所をクリックしてしまったり、ENTER キーを押した場合は nil が返ります。キーワードは initget 関数で指定できます。entsel 関数のキーワードは、initget 関数で指定していなくても"Last"を直前に選択した図形を再度選択というキーワードで使用できます。
msg 引数には、ユーザーに表示するプロンプトを指定します。省略された場合は、ここも他のキーワード対応入力関数と異なる点ですが、「図形を選択:」と自動的に表示されます。
戻り値は、選択した【図形名】とユーザーがクリックした点を含んだリストです。選択できなければ nil を返します。
一般的な使い方は以下のとおりです。ハイライト部分が入力関数の戻り値です。
コマンド: (entsel)⏎
図形を選択: (<図形名: 7ffff706140> (57.8217 48.781 0.0))
コマンド: (entsel "図形を選択 [直前(L)]:")⏎
図形を選択 [直前(L)]:l⏎
(<図形名: 7ffff706140> (0.0 0.0 0.0))
AutoLISP関数 |
---|
(nentselp [msg] [pt]) |
msg:文字列 pt:リスト |
図形または複合図形に含まれる従属図形を選択します。 |
戻り値:【図形名】、または文字列 |
nentselp 関数は entsel 関数と使い方や注意点は同じです。加えて、pt 引数を指定すれば、ユーザーのクリックに代わって、その座標の図形をプログラムから選択できます。
entsel 関数と大きく異なる点は、選択された図形が複合図形の場合は、その構成要素である従属図形が選択されます。逆に言いますと entsel 関数で複合図形を選んだ場合は従属図形ではなく大本の複合図形そのものが選択されます。複合図形とは、ブロック参照や 2D ポリライン、 3D ポリラインといったもので、図面データベース内で複数の【図形名】からなる一連で表されているものです。なお、ライトウェイトポリラインやスプラインは複合図形ではありません。そして、従属図形とは、ブロック参照の場合はブロックに含まれる個々の図形、2D ポリラインや 3D ポリラインの場合は、その一つの頂点となります。
戻り値は、entsel 関数と上位互換のあるリストです。通常の図形の場合は、entsel 関数と同様のものが返ります。2D ポリラインや 3D ポリラインの場合は、【図形名】がポリラインそのものではなく頂点を指すものとなりますが、その戻り値の形式は同じです。ブロック参照の場合は、次のような拡張されたリストが返ります。
(430.891 -73.3072 0.0) ; クリックした点
( (1.0 0.0 0.0 157.006) ; MCS 変換マトリックス
(0.0 1.0 0.0 -75.9877)
(0.0 0.0 1.0 0.0)
(0.0 0.0 0.0 1.0)
)
( <図形名: 7ffff7063b0> ; ネストしたブロックのリスト
<図形名: 7ffff706410>
)
)
一番目と二番目の要素は、entsel 関数のものと同じです。
三番目の要素は、選択した図形の座標を WCS に座標変換する MCS の変換マトリックスです。変換マトリックスについては稿を改めて説明します。
四番目は、入れ子になったブロック構造を意味しており、選択図形が含まれるブロック定義の【図形名】が最初に、そして、さらにその外側でブロックを含むものがあれば次に加えられていきます。ネストしていないブロックであれば、ここは当該ブロックだけを含む要素が 1 つのリストです。