00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef __rdActuator_h__
00010 #define __rdActuator_h__
00011
00012 #include <rdObject.h>
00013 #include "rdModel.h"
00014
00015
00016
00017
00025 class RDSIMULATION_API rdActuator : public rdObject
00026 {
00027
00028
00029
00030
00031 public:
00032 static const double LARGE;
00033 static const int NAME_LENGTH;
00034 static const char DEFAULT_NAME[];
00035 static const char PROP_MAXFORCE[];
00036 static const char PROP_MINFORCE[];
00037
00038 protected:
00040 rdModel *_model;
00041
00043 int _nx;
00045 char **_xNames;
00046
00048 int _ny;
00050 char **_yNames;
00051
00055 int _nyp;
00057 char **_ypNames;
00058
00060 bool _appliesForce;
00062 double _force;
00064 double _speed;
00065
00067 double _maxForce;
00069 double _minForce;
00070
00071
00072
00073
00074
00075
00076
00077
00078 public:
00079 rdActuator(int aNX,int aNY,int aNYP);
00080 rdActuator(int aNX,int aNY,int aNYP,IDOM_Element *aElement);
00081 rdActuator(const rdActuator &aActuator);
00082 virtual ~rdActuator();
00083 virtual rdActuator* copy() const = 0;
00084 virtual rdActuator* copy(IDOM_Element *aElement) const = 0;
00085 private:
00086 void setNull();
00087 void constructControls();
00088 void constructStates();
00089 void constructPseudoStates();
00090
00091
00092
00093
00094 public:
00095 rdActuator& operator=(const rdActuator &aActuator);
00096
00097
00098
00099
00100 protected:
00101 void setControlName(int aIndex,const char *aName);
00102 void setStateName(int aIndex,const char *aName);
00103 void setPseudoStateName(int aIndex,const char *aName);
00104 public:
00105
00106 void setModel(rdModel *aModel);
00107 rdModel* getModel() const;
00108
00109 int getNX() const;
00110 const char* getControlName(int aIndex) const;
00111 virtual void setControls(const double aX[]);
00112 virtual void getControls(double rX[]) const;
00113
00114 int getNY() const;
00115 const char* getStateName(int aIndex) const;
00116 virtual void setStates(const double aY[]);
00117 virtual void getStates(double rY[]) const;
00118
00119 int getNYP() const;
00120 const char* getPseudoStateName(int aIndex) const;
00121 virtual void setPseudoStates(const double aY[]);
00122 virtual void getPseudoStates(double rY[]) const;
00123
00124 bool getAppliesForce() const;
00125 void setForce(double aForce);
00126 double getForce() const;
00127
00128 double getSpeed() const;
00129
00130 double getPower() const;
00131
00132 void setMaxForce(double aMax);
00133 double getMaxForce() const;
00134
00135 void setMinForce(double aMin);
00136 double getMinForce() const;
00137
00138
00139
00140
00141 virtual void promoteControlsToStates(const double aX[],double aDT);
00142 virtual void computeActuation() = 0;
00143 virtual void computeStateDerivatives(double rDYDT[]);
00144 virtual void updatePseudoStates();
00145
00146
00147
00148
00149 virtual void apply() = 0;
00150
00151
00152
00153
00154 virtual bool check() const;
00155
00156
00157
00158
00159 virtual void updateObject(bool aDeep=true);
00160 virtual void updateNode(bool aDeep=true);
00161 virtual void generateNode(IDOM_Element *aParent);
00162 void updateData();
00163
00164
00165 };
00166
00167
00168
00169 #endif // __rdActuator_h__
00170
00171