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) | double | bindVariable(length) - doubleの長さを、クラスの変数としてバインドします。 |
bindVariable(treenode& varName) | treenode | bindVariable(myVarNode) - myVarNodeをクイックアクセスノードとして、オブジェクトの変数ツリーにバインドします。NodeListArrayクラスにはツリーノードとキャスト演算子があるため、このメソッドはNodeListArraysをバインドするためにも使用可能なことに注意してください。 |
bindVariable(NodeRef& varName) | NodeRef | bindVariable(myNodeRef) - 結合ポインターデータを持ち、モード内で他のノードをポイント可能な変数をバインドします。 |
bindVariable(ObjRef& varName) | ObjRef | bindVariable(myObjRef) - myObjRefを変数として、オブジェクトをポイントしている結合ポイントデータとバインドします。 |
bindVariable(ByteBlock& varName) | ByteBlock | bindVariable(myStr) - 変数を文字列(ByteBlock)データとバインドします。 |
イベントの処理
エンジンは、オブジェクトの属性ノードに含まれているコードを実行することで、特定のイベントの発生をオブジェクトに通知します。たとえば、ユーザーが正投影ビューでオブジェクトをクリックしたときにコードを実行するには、オブジェクト(またはオブジェクトのクラス)の属性ツリーにOnClickという名前のテキスト属性を追加し、Flexscript/C++/DLLとして切り替えてから、ノードのテキストにコードを記述します。ユーザーがオブジェクトをクリックすると、エンジンはそのオブジェクトにOnClick属性が存在するかどうかをチェックし、存在するならそのノードを実行します。
この基本的なロジックシーケンスは、OnReset、OnReceive、OnSend、OnTimerEvent、OnDrawなど、すべてのオブジェクトイベントにも適用されます。
イベントの発生時にメンバー関数を実行するには、次の操作を行う必要があります。
- ツリーにイベントノードを作成します。
- ノードをC++に切り替えます。
- o(MyObjectType, c).myFunction([param1, param2...]);のようなコードを挿入します。
- プロジェクトをコンパイルします。
これにより、エンジンはそのノードに関連付けられているメンバー関数を実行するようになります。