00001
00002
00003
00004
00005
00006
00007 #ifndef __suTrackObjectSet_h__
00008 #define __suTrackObjectSet_h__
00009
00010
00011 #include "suTrackControllerDLL.h"
00012 #include <rdTools.h>
00013 #include <rdArray.h>
00014 #include <rdObjectArray.h>
00015 #include <rdModel.h>
00016 #include "suTrackObject.h"
00017
00018
00019
00020 #ifndef UNIX
00021 template class SUTRACKCONTROLLER_API rdArray<double>;
00022 #endif
00023
00024
00025
00026
00033 class SUTRACKCONTROLLER_API suTrackObjectSet : public rdObjectArray
00034 {
00035
00036
00037
00038
00039 private:
00041 static rdObjectArray _ObjectTypes;
00042 protected:
00044 rdObjectArray _defaultObjects;
00046 rdModel *_model;
00048 rdArray<double> _pErrLast;
00050 rdArray<double> _pErr;
00052 rdArray<double> _vErrLast;
00054 rdArray<double> _vErr;
00056 rdArray<double> _w;
00058 rdArray<double> _aDes;
00060 rdArray<double> _a;
00061
00062
00063
00064
00065
00066
00067
00068 public:
00069 suTrackObjectSet();
00070 suTrackObjectSet(const char *aFileName);
00071 virtual ~suTrackObjectSet();
00072 private:
00073 void setNull();
00074 void constructDefaultObjects();
00075
00076
00077
00078
00079 public:
00080
00081 suTrackObject* appendTrackObject(suTrackObject *aObject);
00082 suTrackObject* setTrackObject(int aIndex,suTrackObject *aObject);
00083 suTrackObject* getTrackObject(int aIndex) const;
00084
00085 void setModel(rdModel *aModel);
00086 rdModel* getModel() const;
00087
00088 void setFunctions(rdFunctionSet &aFuncSet);
00089 void setFunctionsForVelocity(rdFunctionSet &aFuncSet);
00090 void setFunctionsForAcceleration(rdFunctionSet &aFuncSet);
00091
00092 rdArray<double>& getPositionErrorsLast();
00093 rdArray<double>& getPositionErrors();
00094 rdArray<double>& getVelocityErrorsLast();
00095 rdArray<double>& getVelocityErrors();
00096
00097 rdArray<double>& getWeights();
00098
00099 rdArray<double>& getDesiredAccelerations();
00100
00101 rdArray<double>& getAccelerations();
00102
00103
00104
00105
00106 void recordErrorsAsLastErrors();
00107 void computeErrors(double aT);
00108 void computeDesiredAccelerations(double aT);
00109 void computeAccelerations();
00110
00111
00112
00113
00114 static void RegisterType(const suTrackObject &aObject);
00115
00116
00117
00118
00119 void updateObject(bool aDeep=true);
00120 void updateNode(bool aDeep=true);
00121 void generateNode(IDOM_Element *aParent);
00122
00123
00124 };
00125
00126
00127
00128 #endif // __suTrackObjectSet_h__
00129
00130