00001 // rdSetPoint.h 00002 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 00003 // Copyright 2002 Realistic Dynamics, Inc. 00004 // All rights reserved. 00005 // 00006 // Please do not read, copy, distribute, or use without permission. 00007 // Contact: Frank C. Anderson, fca@RealisticDynamics.com 00008 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 00009 #ifndef __rdSetPoint_h__ 00010 #define __rdSetPoint_h__ 00011 00012 #include <rdModel.h> 00013 #include <rdContactForce.h> 00014 #include "rdActuators.h" 00015 00016 00017 //============================================================================= 00018 //============================================================================= 00027 class RDACTUATORS_API rdSetPoint : public rdContactForce 00028 { 00029 00030 //============================================================================= 00031 // DATA 00032 //============================================================================= 00033 public: 00034 static const char PROP_TANGENTIAL_STIFFNESS[]; 00035 static const char PROP_TANGENTIAL_VISCOSITY[]; 00036 static const char PROP_FRICTION[]; 00037 00038 protected: 00040 double _mu; 00041 00042 //============================================================================= 00043 // METHODS 00044 //============================================================================= 00045 //-------------------------------------------------------------------------- 00046 // CONSTRUCTION 00047 //-------------------------------------------------------------------------- 00048 public: 00049 rdSetPoint(int aBodyA=0,int aBodyB=0,int aNYP=3); 00050 rdSetPoint(IDOM_Element *aElement,int aNYP=3); 00051 rdSetPoint(const rdSetPoint &aContact); 00052 virtual ~rdSetPoint(); 00053 private: 00054 void setNull(); 00055 00056 //-------------------------------------------------------------------------- 00057 // OPERATORS 00058 //-------------------------------------------------------------------------- 00059 public: 00060 rdSetPoint& operator=(const rdSetPoint &aSetPoint); 00061 00062 //-------------------------------------------------------------------------- 00063 // GET AND SET 00064 //-------------------------------------------------------------------------- 00065 // PSEUDOSTATES 00066 virtual void setPseudoStates(const double aYP[]); 00067 virtual void getPseudoStates(double rYP[]) const; 00068 // TANGENTIAL STIFFNESS 00069 void setTangentialStiffness(double aKTP); 00070 double getTangentialStiffness() const; 00071 // TANGENTIAL VISCOSITY 00072 void setTangentialViscosity(double aKTV); 00073 double getTangentialViscosity() const; 00074 // COEFFICIENT OF FRICTION 00075 void setFriction(double aMU); 00076 double getFriction() const; 00077 00078 //-------------------------------------------------------------------------- 00079 // COMPUTATIONS 00080 //-------------------------------------------------------------------------- 00081 virtual void updatePseudoStates(); 00082 00083 //-------------------------------------------------------------------------- 00084 // APPLICATION 00085 //-------------------------------------------------------------------------- 00086 00087 00088 //-------------------------------------------------------------------------- 00089 // CHECK 00090 //-------------------------------------------------------------------------- 00091 virtual bool check() const; 00092 00093 //-------------------------------------------------------------------------- 00094 // UTILITY 00095 //-------------------------------------------------------------------------- 00096 double 00097 computeTangentialForce(double aNormalForce,double rTangentForce[3], 00098 double rDFFric[3]); 00099 bool 00100 computeNewSetPoint(double aTangentForce,double rSetPoint[3]) const; 00101 00102 //-------------------------------------------------------------------------- 00103 // XML 00104 //-------------------------------------------------------------------------- 00105 virtual void updateObject(bool aDeep=true); 00106 virtual void updateNode(bool aDeep=true); 00107 virtual void generateNode(IDOM_Element *aParent); 00108 void updateData(); 00109 00110 //============================================================================= 00111 }; // END of class rdSetPoint 00112 //============================================================================= 00113 //============================================================================= 00114 00115 #endif // __rdSetPoint_h__ 00116 00117
1.3