ObjectDataType

説明

SimpleDataTypeを継承します。

ObjectDataTypeクラスは、ノードのオブジェクトデータを表すクラスです。ツリー内で、オブジェクトデータを持つすべてのノードには、ObjectDataTypeのインスタンスが関連付けられています。これはFlexsimObjectの親クラスで、すべてのライブラリオブジェクトはこのクラスを継承します。

このクラスのオブジェクトは、エンジンにより認識される事前定義の属性ノードを、イベントハンドラのいくつかの属性も含めて使用できます。また、「変数」サブノードに含まれる変数も定義できます。このクラスは通常、ごく基本的なオブジェクトの作成に使用されます。

直接の子クラス

クラス説明
FlexsimObjectすべてのライブラリオブジェクトの親クラス

実装

仮想メソッド

メソッド説明
void bindVariables(void) オブジェクトの変数属性ツリー内のノードを、直接アクセスできるようにバインドします。

属性のバインド

属性ノードが存在する場合、エンジンによって使用されます。属性は、ビューのパラメータ(alignbottommarginやbeveltypeなど)、イベント(OnClickやOnListenなど)、その他多くのオプションを処理します。属性の完全なリストは、FlexSimの[ヘルプ] > [属性のヒント]にあります。エンジンは、ObjectDataTypeのどのノードに含まれている属性でも認識し、使用します。

エンジンによって属性として使用されるノードは、下の図に示すように、青色の名前で表示されます。「spatialx」属性には、オブジェクトのXの場所が含まれています。

ObjectDataTypeクラスには、すべての属性へのメンバーポインターが用意されています。使用頻度の少ない属性へのポインターの一部は、メモリを節約するため必要に応じて割り当てられますが、必要な場合は自動的に提供されます。ObjectDataTypeクラスの簡略化した表現は次のようになります。

「node_b_」プレフィックスは、これがツリーノードへの参照であることを示し、「b」は「base」クラス、すなわちObjectDataTypeクラスの一部であることを意味します。このタイプのオブジェクトがツリーに作成されるとき、その属性がすべてバインドされます。すなわち、ツリーに表示されるそれぞれの属性について、ツリー内のノードを直接ポイントするメンバーポインターが存在します。これによりエンジンは、毎回ツリーを検索しなくても、属性ノードにアクセスできます。この種類のメンバーポインターは、多くの場合「高速ポインター」と呼ばれます。

たとえば、空白のノードを考えます。そのノードにオブジェクトデータを追加すると、エンジンにObjectDataTypeのインスタンスが作成され、ツリー内のノードはそのインスタンスをポイントします。次に、ツリー内のオブジェクトに「spatialx」というノードを追加し、そのオブジェクト属性を再バインドすると、エンジンは一致するメンバーポインターを「spatialx」ノードのアドレスに割り当てます。「spatialx」ノードは、独自のデータ5.00をポイントします。

属性を検索し、ポインターを割り当てるロジックは、ObjectDataTypeクラスに用意されています。

bindVariables()

bindVariables()メソッドは、クラスに追加するカスタムのクラスメンバーにバインドします。モデルとともに保存されるメンバーをクラスに追加する場合、そのメンバーを変数としてbindVariables()でバインドする必要があります。対応する変数ノードが、オブジェクトの変数ツリーに格納されます。

バインド関数データタイプ
bindVariable(double& varName)doublebindVariable(length) - doubleの長さを、クラスの変数としてバインドします。
bindVariable(treenode& varName)treenodebindVariable(myVarNode) - myVarNodeをクイックアクセスノードとして、オブジェクトの変数ツリーにバインドします。NodeListArrayクラスにはツリーノードとキャスト演算子があるため、このメソッドはNodeListArraysをバインドするためにも使用可能なことに注意してください。
bindVariable(NodeRef& varName)NodeRefbindVariable(myNodeRef) - 結合ポインターデータを持ち、モード内で他のノードをポイント可能な変数をバインドします。
bindVariable(ObjRef& varName)ObjRefbindVariable(myObjRef) - myObjRefを変数として、オブジェクトをポイントしている結合ポイントデータとバインドします。
bindVariable(ByteBlock& varName)ByteBlockbindVariable(myStr) - 変数を文字列(ByteBlock)データとバインドします。

イベントの処理

エンジンは、オブジェクトの属性ノードに含まれているコードを実行することで、特定のイベントの発生をオブジェクトに通知します。たとえば、ユーザーが正投影ビューでオブジェクトをクリックしたときにコードを実行するには、オブジェクト(またはオブジェクトのクラス)の属性ツリーにOnClickという名前のテキスト属性を追加し、Flexscript/C++/DLLとして切り替えてから、ノードのテキストにコードを記述します。ユーザーがオブジェクトをクリックすると、エンジンはそのオブジェクトにOnClick属性が存在するかどうかをチェックし、存在するならそのノードを実行します。

この基本的なロジックシーケンスは、OnReset、OnReceive、OnSend、OnTimerEvent、OnDrawなど、すべてのオブジェクトイベントにも適用されます。

イベントの発生時にメンバー関数を実行するには、次の操作を行う必要があります。

  1. ツリーにイベントノードを作成します。
  2. ノードをC++に切り替えます。
  3. o(MyObjectType, c).myFunction([param1, param2...]);のようなコードを挿入します。
  4. o()マクロは、ノードcからタイプMyObjectTypeのオブジェクトへの参照を取得し、そのインスタンスのmyFunction()を呼び出します。
  5. プロジェクトをコンパイルします。

これにより、エンジンはそのノードに関連付けられているメンバー関数を実行するようになります。