00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef __DOP_FullPathData_h__
00019 #define __DOP_FullPathData_h__
00020
00021 #include "DOP_API.h"
00022 #include <UT/UT_RefArray.h>
00023 #include <UT/UT_String.h>
00024 #include <OP/OP_Node.h>
00025 #include "DOP_Engine.h"
00026
00027 class UT_WorkBuffer;
00028 class UT_StringArray;
00029 class SIM_Data;
00030 class SIM_Object;
00031 class SIM_ConstObjectArray;
00032 class SIM_SDF;
00033 class OP_GlobContext;
00034 class DOP_Parent;
00035 class DOP_SimulationChangeSink;
00036
00037 class DOP_API DOP_FullPathData
00038 {
00039 public:
00040 DOP_FullPathData()
00041 {
00042 myNode = 0;
00043 myParent = 0;
00044 myRootData = 0;
00045 myData = 0;
00046 myDataName = "";
00047 }
00048 DOP_FullPathData(const DOP_FullPathData &src)
00049 {
00050 *this = src;
00051 }
00052 ~DOP_FullPathData()
00053 {
00054 }
00055
00056 const SIM_Position *getBestPosition() const
00057 {
00058 const SIM_Position *position = 0;
00059 const SIM_Object *obj;
00060
00061
00062 obj = SIM_DATA_CASTCONST(myRootData, SIM_Object);
00063
00064
00065 if( myData )
00066 position = SIM_DATA_CASTCONST(myData,
00067 SIM_Position);
00068
00069 if( !position && obj && obj == myData )
00070 position = obj->getPosition();
00071
00072 if( !position && obj &&
00073 SIM_DATA_CASTCONST(myData, SIM_Geometry) )
00074 position = obj->
00075 getPositionForGeometry(myDataName);
00076
00077 if (!position && obj &&
00078 SIM_DATA_CASTCONST(myData, SIM_SDF))
00079 {
00080 UT_String geopath, sdfname;
00081 myDataName.splitPath(geopath, sdfname);
00082 position = obj->
00083 getPositionForGeometry(geopath);
00084 }
00085
00086 return position;
00087 }
00088
00089 bool operator==(const DOP_FullPathData &cmp)
00090 {
00091 return ((myNode == cmp.myNode) &&
00092 (myParent == cmp.myParent) &&
00093 (myRootData == cmp.myRootData) &&
00094 (myData == cmp.myData) &&
00095 (myDataName == cmp.myDataName));
00096 }
00097
00098 const DOP_FullPathData &operator=(const DOP_FullPathData &src)
00099 {
00100 myNode = src.myNode;
00101 myParent = src.myParent;
00102 myRootData = src.myRootData;
00103 myData = src.myData;
00104 myDataName.harden(src.myDataName);
00105
00106 return *this;
00107 }
00108
00109 void clear()
00110 {
00111 myNode = 0;
00112 myParent = 0;
00113 myRootData = 0;
00114 myData = 0;
00115 myDataName = "";
00116 }
00117
00118 OP_Node *myNode;
00119 const DOP_Parent *myParent;
00120 const SIM_RootData *myRootData;
00121 const SIM_Data *myData;
00122 UT_String myDataName;
00123 };
00124
00125 class DOP_API DOP_FullPathDataArray : public UT_RefArray<DOP_FullPathData>
00126 {
00127 public:
00128 DOP_FullPathDataArray();
00129 virtual ~DOP_FullPathDataArray();
00130
00131 void buildFromPaths(const UT_StringArray &paths);
00132 void getObjectArray(SIM_ConstObjectArray &objects) const;
00133 void getObjectString(UT_WorkBuffer &buffer) const;
00134 };
00135
00136 DOP_API bool DOPfindDataFromPath(const char *path,
00137 DOP_FullPathData &fulldata,
00138 fpreal time, OP_Node *relativetonode = 0,
00139 bool dopparentisenough = false);
00140 DOP_API bool DOPfindAllDataFromPath(const char *path,
00141 DOP_FullPathDataArray &fulldata,
00142 fpreal time, OP_Node *relativetonode = 0,
00143 bool dopparentisenough = false);
00144 DOP_API void DOPglobPathAndFindAllData(const char *path,
00145 DOP_FullPathDataArray &fulldata,
00146 OP_NodeList &nodatadopnets,
00147 fpreal time, OP_Node *relativetonode = 0,
00148 OP_GlobContext *context = 0);
00149
00150
00151
00152
00153
00154
00155
00156
00157 DOP_API SIM_Time DOPsetBestTime(DOP_Parent *dopparent, SIM_Time time);
00158
00159 #endif
00160