Java を使用するカスタマイズコードの作成について
PTC Creo Schematics で提供されている Java パッケージを使用することで、カスタマイズコードを作成できます。
• rsdesigner.design
• rsdesigner.component
• rsdesigner.uiextension
アプリケーションとの通信のためにカスタマイズされた Java クラスで使用されるメソッドは、Java Gateway と呼ばれます。
上記 Java パッケージで提供されているアプリケーションプログラマインタフェース (API) については、PTC Creo Schematics API Guide に記載されています。
Java パッケージの使用
Java パッケージを使用していくつかの操作を実行できます。
• 以下の方法で、カレント設計オブジェクトを取得してパラメータを照会したり、以下のメソッドを使用してオブジェクトのリストを取得したりする。
◦ クラス別にオブジェクトのセットを要求する。
◦ Design.select() メソッドを使用し、パラメータと条件リストを設定する。カスタマイズの度合いを高くするために事前フィルタおよび事後フィルタのメソッドを使用できます。
• ユーザー定義のラベルおよびレポート関数を使用して限定的な情報を返す。
• ユーザー定義の関数を使用して派生パラメータの値を計算する。
• カスタマイズコードに Swing オブジェクトを追加することによって、レポートの結果とさらに対話するためのフォームとダイアログボックスを作成します。
• 加工品のパラメータを、その加工品がオブジェクトに対して設定されるときに変更する。
• コンポーネントとファイバー間を接続するかどうか制御する。
ユーザー定義のメソッドは、目的に応じて以下のいずれかの方法で使用できます。
• カスタマイズされた Java ボタンから
• ラベルから
• レポートから
• 派生パラメータから
• 加工品がインスタンス化されたとき
• PropertySet への変更を確認するとき
• エンドキャップを作成する前に
• 接続を作成したあとに
スレッドセーフティ
スレッドセーフティを実現するには、一度に 1 つのスレッドだけが Java Gateway にアクセス可能となるように、Java Gateway へのすべての呼び出しを同期化および監視します。したがって、一度に 1 つのスレッドだけがシステムにアクセスできます。
|
ユーザーは、またはトレイルファイルでは、Java Gateway への呼び出しの間に設計を閉じることができるので、設計オブジェクトが無効になる場合があります。この制約を回避するには、Design.getSynchronizeObject() メソッドを使用します。Design.getSynchronizeObject() メソッドは同期化が可能なオブジェクトを返し、Java Gateway への呼び出しの次のセットが 1 つの単位として確実に実行されるようにします。
|
たとえば、以下のコードではキーワード synchronized が使用されています。これを使用することによって、カレント設計オブジェクト取得の操作と、そのオブジェクトについての照会がほかのスレッド (またはユーザー) からの対話なしに 1 つの単位として実行されるようになります。
synchronized (Design.getSynchronizeObject ())
{
/*
we need to synchronize on the VM because we (or a
trail file!) may end up closing the design between
the obtaining of the design and looping
over the elements in the design
*/
//we need the design object so we can then get
//the list of blocks
//System.out.println ("get the design class");
Design design = Design.getCurrentDesign ();
Iterator selectResults = design.select ( …);
//work through the results of the select query
while (selectResults.hasNext ())
{
//perform some actions on the result
}
}