00001 #ifndef X3DROUTE_H 00002 #define X3DROUTE_H 00003 00004 #include "X3DMemberFunctor.h" 00005 00006 #include <vector> 00007 00008 namespace X3DTK { 00009 namespace X3D { 00010 00011 class Scene; 00012 00013 } 00014 00015 class X3DRoute; 00016 typedef X3DRoute *SFRoute; 00017 typedef std::vector<X3DRoute *> MFRoute; 00018 00019 class X3DRoute 00020 { 00021 public: 00022 static X3DRoute *create(X3DAbstractNode *A, const SFString &a_name, X3DAbstractNode *B, const SFString &b_name); 00023 inline void send() {_b->setValueOf(_bNode, _a->getValueOf(_aNode));}; 00024 static bool remove(X3DRoute *route); 00025 00027 inline X3DAbstractNode *getFromNode() const {return _aNode;}; 00029 inline const SFString &getFromField() const {return _fromField;}; 00031 inline X3DAbstractNode *getToNode() const {return _bNode;}; 00033 inline const SFString &getToField() const {return _toField;}; 00035 static void loadScene(X3D::Scene *S, const MFRoute &routes); 00036 00037 private: 00038 X3DRoute(X3DAbstractNode *A, const SFString &fromField, X3DMemberFunctor *a, X3DAbstractNode *B, const SFString &toField, X3DMemberFunctor *b); 00039 ~X3DRoute(); 00040 00041 X3DAbstractNode *_aNode; 00042 SFString _fromField; 00043 X3DMemberFunctor *_a; 00044 X3DAbstractNode *_bNode; 00045 SFString _toField; 00046 X3DMemberFunctor *_b; 00047 00048 static MFRoute _routes; 00049 }; 00050 00051 } 00052 00053 #endif