00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef PHYHINGE_H
00021 #define PHYHINGE_H
00022
00023 #include "worldsimconfig.h"
00024 #include "world.h"
00025 #include "phyobject.h"
00026 #include "wvector.h"
00027 #include "wmatrix.h"
00028 #include "wquaternion.h"
00029 #include "phyjoint.h"
00030
00031 namespace farsa {
00032
00043 class FARSA_WSIM_API PhyHinge : public PhyJoint {
00044 public:
00055 PhyHinge( const wVector& axis, const wVector& centre, real startAngle, PhyObject* parent, PhyObject* child, bool cp=true );
00056
00058 PhyHinge( const wVector& axis, const wVector& centre, PhyObject* parent, PhyObject* child, bool cp=true );
00059
00061 PhyHinge( const wVector& axis, real startAngle, PhyObject* parent, PhyObject* child, bool cp=true );
00062
00064 PhyHinge( const wVector& axis, PhyObject* parent, PhyObject* child, bool cp=true );
00065
00069 PhyHinge( const wVector& axis, const wVector& centre, const wVector& x_axis, PhyObject* parent, PhyObject* child, bool cp=true );
00070
00072 virtual void updateJointInfo();
00073
00075 virtual wVector centre() const;
00076
00077 protected:
00085 wMatrix localMatrixParent;
00087 wMatrix localMatrixChild;
00088
00099 mutable wMatrix globalMatrixParent;
00105 wMatrix globalMatrixChild;
00106
00108 void createPrivateJoint();
00109 virtual void updateJoint( real timestep );
00110
00111 private:
00113 void construct( const wVector& axis, const wVector& centre, real startAngle, PhyObject* parent, PhyObject* child, bool cp );
00114
00115 PhyDOF* dof;
00116
00117 };
00118
00119 }
00120
00121 #endif