command-s (AutoLISP)

AutoCAD コマンドと指定された入力を実行します。

サポートされているプラットフォーム: Windows および Mac OS

構文と要素

(command-s [cmdname [arguments ...]])
cmdname

タイプ: 文字列

実行するコマンドの名前です。

arguments

タイプ: 整数、実数、文字列、リスト

実行するコマンドに指定するコマンド入力です。

command 関数の arguments 引数には、文字列、実数、整数、座標値を指定することができ、これらは実行するコマンドのプロンプト シーケンスの要求によって決まります。空の文字列("")は、キーボードで[Enter]を押すのと同じです。

戻り値

タイプ: nil

指定された引数を使用してコマンドを実行すると、関数から nil が返されます。関数が正常に完了しなかったときは、*error* が返されます。

注意

詳細については、このトピックの後の方のセクションを参照してください。

次の例は、AutoCAD の CIRCLE[円]コマンドを実行し、直径が 2.75 の円を作成する方法を示しています。

Command: (command-s "._circle" "5,4" "_d" 2.75)
nil

次の例は、円の中心点を入力するように求めるプロンプトをユーザに表示する方法を示しています。

Command: (setq cPt (getpoint "\nSpecify center point: "))
(5.0 4.0 0.0)

Command: (command-s "._circle" cPt "_d" 2.75)
nil

次に、command-s 関数を使用したユーザ入力のプロンプトの不適切な使用例を示します。

Command: (command-s "._circle" (getpoint "\nSpecify center point: ") "_d" 2.75)

command 関数との違い

command-s 関数は command 関数のバリエーションの 1 つであり、コマンド トークンのコンテンツにいくつか制限がありますが、command よりも高速であり、内部ロジックが違うので *error* ハンドラで使用できます。

コマンド トークンは、command-s 関数に用意されている 1 つの引数です。コマンド トークンには、文字列、実数、整数、点、図形名、一覧などを指定できます。次の例には、AutoCAD の LINE[線分]コマンドと 3 つのコマンド トークンを示します。

(command-s "._line" "0,0" "5,7" "")

「-s」サフィックスは、指定したコマンド トークンの「サブルーチン」の実行を表します。このフォームでは、AutoCAD は AutoLISP から直接呼び出され、指定したコマンド トークンは、メインのドキュメント コマンド プロセッサとは異なる一時コマンド プロセッサで処理されて戻り、一時コマンド プロセッサは終了します。実行するコマンドは、同じ command-s 関数で開始し、完了する必要があります。

一方、command 関数は、指定したコマンド トークンの「コルーチン」を実行した状態のままになります。このとき、AutoLISP は 1 つずつトークンを評価し、結果を AutoCAD に送信して戻り、AutoCAD がそのトークンを処理できるようにします。次に、AutoCAD は AutoLISP を呼び出し、AutoLISP は進行中の式の評価を再開します。このロジック フローでは、後続のトークン式で、前のトークン処理の結果を AutoCAD にクエリーして、使用することができます。

まとめると、「コルーチン」形式のコマンド トークン処理は機能の点でより強力ですが、実行中にのみ使用できるという制約があります。「サブルーチン」形式のコマンド トークン処理はより幅広い状況で使用できますが、すべてのコマンド トークンは事前に処理され、実際の実行は対話的ではありません。コマンド トークンのセットが同じ場合、command-s 関数の方が大幅に高速になります。

既知の考慮事項

command-s 関数を使用する場合、次の点を考慮する必要があります。

注意: command-s 関数は command 関数と似ていますが、AutoLISP 式を入力するときに進行中の AutoCAD コマンドがある場合、U または UNDO を使用してシステムの状態をロール バックするときは注意が必要です。この場合、UNDO を実行すると、進行中のコマンドが失敗したり、AutoCAD が異常終了する可能性があります。

*error* ハンドラ

*error* ハンドラで command 関数を使用する場合、次の方法を使用してカスタムの *error* ハンドラの定義方法を変更してみてください。