Creo Elements/Direct Model Manager カスタマイズガイド > その他のカスタマイズ > Creo Elements/Direct Modeling または Creo Elements/Direct Drafting 用のコマンドプロセッサ
Creo Elements/Direct Modeling または Creo Elements/Direct Drafting 用のコマンドプロセッサ
Creo Elements/Direct Modeling または Creo Elements/Direct Drafting によって呼び出される新規のコマンドを Creo Elements/Direct Model Manager または Creo Elements/Direct Drawing Manager に登録できます。カスタム コマンド プロセッサは以下のように動作します。
1. 起動時に XML 設定ファイルが読み込まれると、コマンド プロセッサ クラスが登録されます。
2. Creo Elements/Direct Modeling または Creo Elements/Direct Drafting からコマンドを受け取ると、processCommand メソッドが適切なコマンドプロセッサオブジェクト上に呼び出されます。
コマンド プロセッサを作成するには
コマンド プロセッサを作成するには、以下の手順に従ってください。
1. カスタム XML 設定ファイルに1. コマンドプロセッサの追加を行います。
2. OSDCommandHandler または ME10CommandHandler インターフェイスを実装する2. コマンドプロセッサクラスの作成を行います。
1. コマンドプロセッサの追加
カスタム XML 設定ファイルにコマンド プロセッサを追加します。以下のタグと値を、<Handlers> セクションに追加します。
<OSDHandler>MY-COMMAND-HANDLER
<Implementation>com.mydomain.datamgmt.integration.command.osd.myCommandHandler</Implementation> </OSDHandler>
ここでは、コマンドが要求されたときに Creo Elements/Direct Modeling または Creo Elements/Direct Drafting が呼び出すオブジェクトを指定しています。上記の例のコマンド名およびプロセッサの値を、ご使用のコマンド名およびプロセッサの値に置き換えてください。
* 
wmconf.xml は絶対に変更しないでください。カスタム設定は必ずカスタム設定ファイルに追加してください。
2. コマンドプロセッサクラスの作成
カスタムコマンドプロセッサでは、OSDCommandHandler インターフェイス (Creo Elements/Direct Model Manager の場合) または ME10CommandHandler インターフェイス (Creo Elements/Direct Drawing Manager の場合) を実装する必要があります。
いずれの場合も、クラスコンストラクタは runInSeparateThread および ignoreUIEventsWhileRunning という 2 つのブール値を持つスーパーを呼び出します。オペレーションに対してこれらの値が正しく設定されていない場合、Creo Elements/Direct Modeling (または Creo Elements/Direct Drafting) および Creo Elements/Direct Model Manager (または Creo Elements/Direct Drawing Manager) がハングしてユーザの作業内容が失われるため、この 2 つの値は重要です。
runInSeparateThread の値は、コマンドプロセッサを、呼び出しスレッドと新規スレッドのどちらで実行するかを決定します。コマンドプロセッサが呼び出しスレッドで実行される (値が false に設定されている) 場合、Creo Elements/Direct Modeling または Creo Elements/Direct Drafting は、呼び出しが実行されている間、ほかのオペレーションをすべてブロックします。コマンドプロセッサから Creo Elements/Direct Modeling または Creo Elements/Direct Drafting に値を返す必要がある場合は、呼び出しスレッドを使用してください。
また、コマンドプロセッサを新規スレッドで実行することもできます (runInSeparateThread 値を true に設定)。プロセッサで Creo Elements/Direct Modeling または Creo Elements/Direct Drafting の機能を呼び出す必要がある場合は、新規スレッドで実行する必要があります。たとえば、操作中にモデルを開く場合は、コマンドを新規スレッドで実行する必要があります。このような場合、新規スレッドを使用しないと、Creo Elements/Direct Modeling は Java 側からの呼び出しをブロックし、両方のアプリケーションがハングします。ただし、呼び出しを新規スレッドで実行する場合、Creo Elements/Direct Modeling または Creo Elements/Direct Drafting に値を返すことができません。
ignoreUIEventsWhileRunning の値は、コマンドの処理中にユーザインターフェイス (UI) の更新を行うかどうかを決定します。プロセッサによって多数のデータを開く、閉じる、または処理する場合には、この値を true に設定する必要があります。値を false に設定すると、コマンドの処理中に UI は更新されず、processCommand メソッドの完了時に、ブロックされていたベントが処理されます。
コマンドプロセッサに対してのこれらの値の設定方法が分からない場合は、runInSeparateThreadfalse に、ignoreUIEventsWhileRunningtrue に設定してから、新規のコマンドをテストしてください。クラスコンストラクタは以下のようになります。
public myCommandProcessor() {
super(false, true);
}
また、コマンドプロセッサクラスにも processCommand メソッドを含める必要があります。このメソッドは、コマンドが Creo Elements/Direct Modeling または Creo Elements/Direct Drafting で呼び出されたときに呼び出されます。コマンドを実行する Java コードは、このメソッドに追加します。メソッドのパラメータは文字列のリストであり、メソッドからは「T」または「nil」が返されます。
processCommand メソッドは次のようになります。
public String processCommand(java.util.List parameters) throws WMException {
String myParameters = removeQuotes((String)parameters.get(0));
// Your code goes here
return "T";
}
上記の例でわかるとおり、LISP で使用されていた引用符の削除が必要となります。また、返される値も表示されています。これは、Creo Elements/Direct Modeling または Creo Elements/Direct Drafting で使用可能になります。「T」は LISP の T ではなく、文字列の T として表される点に注意してください。
3. 起動時の呼び出し
Creo Elements/Direct Model Manager または Creo Elements/Direct Drawing Manager の起動時にコマンドプロセッサを呼び出すには、Creo Elements/Direct Model Manager または Creo Elements/Direct Drawing Manager のスタートアップカスタマイズファイルに LISP/マクロコードを追加する必要があります。このファイルは以下の場所にあります。
C:\Program Files\PTC\Creo Elements\Direct Modeling 20.7\personality\sd_customize\ModelManager\mm_customize
または
WMDT_DIR\aips\me10\startup\cust.m
Creo Elements/Direct Modeling の LISP 呼び出しは次のようになります。
(modelmanager::mm-send-cmd "COMMAND-NAME 'arg1' 'arg2'")
* 
ELID、システム ID、パス、またはファイル名などの単純な文字列 (最長 15 文字、特殊文字を含まない) のみ、引数として指定できます。二重引用符または一重引用符を引数に含めないでください。複雑な文字列はファイルに保存して、そのファイル名を引数として指定することができます。
Creo Elements/Direct Drafting の場合:
DWG_MGMT_SEND_COMMAND "COMMAND-NAME 'arg1' 'arg2'"
4. CAD アプリケーションの呼び出し
Creo Elements/Direct Model Manager には次のものを使用してください。
String rtn = com.osm.datamgmt.DataManager.getInstance().getSolidDesigner(). execute( "(LISP)");
rtn は LISP 戻り値で、Java 文字列に変換されます。
Creo Elements/Direct Drawing Manager には次のものを使用してください。
com.osm.datamgmt.DataManager.getInstance().getME10().executeCommand("ME10 MACRO");
特定の Creo Elements/Direct Annotation オブジェクトはありません。Creo Elements/Direct Annotation へのコマンドは Creo Elements/Direct Modeling 経由で処理されるため、Creo Elements/Direct Model Manager 用の例を使用してください。Creo Elements/Direct Annotation でマクロコードを実行する必要がある場合は、以下のような呼び出しを使用してください。
com.osm.datamgmt.DataManager.getInstance().getSolidDesigner(). execute("(docu-cmd 'macro call')");
* 
Creo Elements/Direct Annotation と Creo Elements/Direct Model Manager を統合するためのカスタマイズファイルは am_mm_customize で、Creo Elements/Direct Annotation と Desktop または Design Data Management を統合するためのカスタマイズファイルは am_wm_customize です。カスタマイズファイルの詳細については、Creo Elements/Direct Modeling ヘルプを参照してください。
これは役に立ちましたか?