概要 - AutoCAD のコマンド中にユーザ入力のために一時停止する(AutoLISP)

command 関数で PAUSE シンボルを使用することで、AutoCAD コマンドの実行を中断して、ユーザに入力を要求することができます。

AutoCAD コマンドを実行中に、command に対する引数として、定義済みシンボル PAUSE が現れると、そのコマンドはユーザが直接入力(通常は点の指定またはドラッグ)できるよう一時停止します。これは、メニューで使用される円記号(¥)の入力待ちメカニズムに似ています。

PAUSE シンボルは、1 つの円記号からなる文字列として定義されています。円記号( ¥ )を文字列の中で使用する場合は、その前にもう 1 つ円記号( ¥¥ )を付けなければなりません。

注: PAUSE シンボルの代わりに 2 つの円記号( ¥¥ )を使用することもできます。ただし、2 つの円記号を明示的に使用するのではなく、常に PAUSE シンボルを使用することをお勧めします。また、command 関数がメニュー項目から呼び出されている場合に円記号を使用すると、メニュー項目の読み取りが一時停止します。その結果、AutoLISP の式が部分的にしか評価されなくなります。

たとえば、次のコードは CIRCLE[円]コマンドを開始し、中心点を(5,5)に設定した後で一時停止して、ユーザが円の半径をドラッグできるようにします。次に示すように、ユーザが必要な点を指定(または半径を入力)すると、関数は実行を再開し、(5,5)から(7,5)に線分を描きます。

(command "._circle" "5,5" pause "._line" "5,5" "7,5" "")

コマンドが文字列または属性値の入力を待っているときに PAUSE が現れると、AutoCAD のシステム変数 TEXTEVAL が 0 (ゼロ)以外の場合のみ、AutoCAD は入力待ち状態になります。TEXTEVAL が 0 (ゼロ)の場合は、PAUSE シンボルの文字(単一の円記号)がそのまま使用され、入力待ち状態にはなりません。

command 関数がユーザからの入力を取得するために一時停止しても、関数はまだ実行中であると解釈されます。したがって、ユーザは、別の AutoLISP 式を入力して評価させることはできません。

次のコード例では、ユーザがブロックの挿入点を指定できるようにするために PAUSE シンボルを使用しています。画層 NEW_LAY とブロック MY_BLOCK は、このコードをテストする前に図面に存在している必要があります。

(setq blk "MY_BLOCK")
(setq old_lay (getvar "clayer"))
(command "._-layer" "set" "NEW_LAY" "")
(command "._-insert" blk PAUSE "" "" PAUSE)
(command "._-layer" "set" old_lay "")

上記のコードは、現在の画層を NEW_LAY に設定し、一時停止してユーザがブロック MY_BLOCKの挿入位置(XY の尺度は 1 で挿入)を指定するを待ちます。そして再び一時停止してユーザが回転角度を指定するのを待ちます。この処理の後、現在の画層を直前の画層に戻します。

command 関数で AutoCAD の SELECT[オブジェクト選択]コマンドに対して PAUSE を指定したときに AutoCAD のシステム変数 PICKFIRST がオンに設定されていると、SELECT コマンドはこのコマンドが実行される前に選択されていたオブジェクトを取得し、ユーザがオブジェクトを選択できるように一時停止しません。

注: AutoCAD のDIM[寸法記入]コマンドのサブコマンド RADIUS と DIAMETER では、追加のプロンプトが表示されることがあります。このため、GX-5 (Release 11)より前にこれらのサブコマンドを使用して作成した AutoLISP プログラムは、正しく動作しない可能性があります。

割り込みコマンドを使用する

command 関数が入力待ち状態のときに割り込みコマンドを実行すると、command 関数は一時停止したままになります。したがって、ユーザは command が入力待ち状態の間に 'ZOOM[ズーム]や' PAN[画面移動]を実行することができます。入力待ち状態は、AutoCAD が有効な入力を得て割り込みコマンドが終了するまで続きます。

次のコードは、command 関数が一時停止してユーザが円の半径を指定できるようにしている間に割り込みで ZOOM[ズーム]コマンドを使用した結果を示します。

コマンド: (command "._circle" "5,5" PAUSE "._line" "5,5" "7,5" "")

circle

円の中心点を指定 または [3 点(3P)/2 点(2P)/接、接、半(T)]: 5,5

円の半径を指定 または [直径(D)]: 'zoom

>>窓のコーナーを指定、表示倍率を入力(nX または nXP) または [図面全体(A)/中心点(C)/ダイナミック(D)/オブジェクト範囲(E)/前画面(P)/倍率(S)/窓(W)/選択オブジェクト(O)] <リアル タイム>:

>>終了するには[Esc]か[Enter]を押してください、または右クリックでショートカット メニューを表示します。

CIRCLE コマンドが再開します。

円の半径を指定 または [直径(D)]:

コマンド: line

1 点目を指定: 5,5

次の点を指定 または [元に戻す(U)]: 7,5

次の点を指定 または [元に戻す(U)]:

コマンド: nil

メニューからの入力を受け入れる

command 関数によって PAUSE が使用されているときは、メニューからの入力は一時停止されません。command 関数が入力待ち状態のときにメニュー項目がアクティブな場合、その入力要求にはメニューで応答できます。メニュー項目も一時停止させるには、そのメニュー項目内で円記号(¥)を使用する必要があります。有効な入力を得ると、command 関数とメニュー項目の両方が実行を再開します。