コマンド定義(.NET)

コマンドを定義するときは、CommandMethod 属性を使用します。CommandMethod 属性には、定義するコマンドのグローバル名として使用する文字列値を指定します。グローバル コマンド名と共に、CommandMethod 属性には次の値を指定できます。

次の表では、コマンドの動作を定義するために使用できるフラグの一覧を示します。

列挙値 説明
ActionMacro コマンドはアクション レコーダでアクションとして記録できます。
Defun コマンドは LISP 関数として呼び出すことができます。したがって、acedGetArgs() を使用してLISP から引数を取得したり、acedRetXxx() 関数を使用して LISP に値を返すことができます。このフラグは、Visual LISP エンジンによってのみ設定することができます。
DocExclusiveLock コマンドが呼び出されると、ドキュメントは排他的にロックされます。
DocReadLock コマンドが呼び出されると、ドキュメントは読み込み専用になります。
Interruptible ユーザ入力を要求するとき、コマンドは中断できます。
Modal 他のコマンドがアクティブな間はコマンドを呼び出せません。
NoActionRecording コマンドはアクション レコーダでアクションとして記録できません。
NoBlockEditor コマンドは、ブロック エディタでは使用できません。
NoHistory コマンドは、最終コマンド反復履歴リストに追加されません。
NoInferConstraint コマンドは、推測拘束時に使用することはできません。
NoInternalLock ドキュメントは、内部的にロックできません。
NoMultiple コマンドは、コマンド マクロの一部としてアスタリスク(*)で始まる場合は、複数の動作をサポートしません。
NoNewStack コマンドは、スタック上に新しい項目を作成しません。
NoOEM コマンドは、AutoCAD OEM からアクセスできません。
NoPaperSpace コマンドはペーパー空間では使用できません。
NoPerspective コマンドは、PERSPECTIVE が 1 に設定されている場合は使用できません。
NoTileMode コマンドは TILEMODE が 1 に設定されている場合は使用できません。
NoUndoMarker コマンドは元に戻す操作のためのマーカーをサポートしていません。これは、このデータベースを修正しないコマンドに対するもので、元に戻す操作用のファイルには含まれません。
Redraw 事前選択セットまたはグリップ セットを取得するとき、それらはクリアされません。
Session コマンドは、現在のドキュメント コンテキストではなくアプリケーションのコンテキストで実行されます。
TempShowDynDimension コマンドは、図形が選択されたときに、ダイナミック寸法を一時的に表示することができます。
Transparent 他のコマンドがアクティブな間もコマンドを使用できます。
Undefined コマンドは、グローバル名によってのみ使用できます。
UsePickSet 事前選択セットが取得されるとクリアされます。

インスタンスおよびスタティック コマンド メソッド

コマンド メソッドは、インスタンス メソッドまたはスタティック メソッドとして宣言できます。スタティック コマンド メソッドは、C# では static キーワードを使用して宣言され、VB .NET では Shared キーワードを使用して宣言されます。インスタンス コマンド メソッドは、static キーワードや Shared キーワードを使用しては宣言されないパブリック クラス メンバーです。

インスタンス コマンド メソッドの場合、メソッドのエンクロージング タイプは、開いたドキュメントごとに別々にインスタンス化されます。これは、各ドキュメントがコマンドのインスタンス データのプライベート コピーを取得することを意味します。したがって、ユーザがドキュメントを切り替えたときに、ドキュメント固有のデータを上書きする危険はありません。インスタンス メソッドがデータをグローバルに共有する必要がある場合、static または Shared メンバー変数を宣言することによって共有できるようにすることができます。

スタティック コマンド メソッドの場合、マネージ ラッパー ランタイム モジュールはエンクロージング タイプをインスタンス化する必要はありません。ドキュメントのコンテキストに関係なく、メソッドのデータの単一コピーが使用されます。スタティック コマンドは、通常、ドキュメントごとのデータを使用せず、MDI モードに関して特別な考慮を必要としません。

インスタンス メソッドとスタティック メソッドは、特殊な要件に対処するためにコマンド フラグとともに定義することができます。たとえば、インスタンス メソッドは、CommandFlags.Session フラグを設定する属性を使用して宣言できます。つまり、このコマンドはアプリケーションの実行コンテキストで実行しますが、ドキュメントごとのデータも保持します。AutoCAD のこのようなコマンドの例は、PROPERTIES[オブジェクト プロパティ管理]コマンドです。

同じように、スタティック メソッドは、CommandFlags.Session フラグなしで宣言できます。この組み合わせは、ドキュメントのコンテキストで実行し、ドキュメントごとのデータを維持する必要がないコマンドに有用です。

コマンドを定義するための構文

CheckForPickfirstSelection という名前のコマンドを定義する CommandMethod 属性の作成方法を次に示します。属性はコマンド フラグ UsePickSet も使用して、コマンドが開始される前に選択されているオブジェクトをコマンドが使用できることを示します。

VB.NET

<CommandMethod("CheckForPickfirstSelection", CommandFlags.UsePickSet)> _
Public Sub CheckForPickfirstSelection()
 . . .
End Sub

C#

[CommandMethod("CheckForPickfirstSelection", CommandFlags.UsePickSet)]
public static void CheckForPickfirstSelection()
{
 . . .
}

VB.NET の + 演算子または C# の | 演算子を使用して、複数のフラグの使用を指定できます。

VB.NET

<CommandMethod("CheckForPickfirstSelection", CommandFlags.UsePickSet + _
                                             CommandFlags.NoBlockEditor)> _
Public Sub CheckForPickfirstSelection()
 . . .
End Sub

C#

[CommandMethod("CheckForPickfirstSelection", CommandFlags.UsePickSet |
                                             CommandFlags.NoBlockEditor)]
public static void CheckForPickfirstSelection()
{
 . . .
}