00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #ifndef PX_CONTACTJOINT_H
00031 #define PX_CONTACTJOINT_H
00032
00033 #include "extensions/PxJoint.h"
00034
00035 #if !PX_DOXYGEN
00036 namespace physx
00037 {
00038 #endif
00039
00040 class PxContactJoint;
00041
00053 PxContactJoint* PxContactJointCreate(PxPhysics& physics, PxRigidActor* actor0, const PxTransform& localFrame0, PxRigidActor* actor1, const PxTransform& localFrame1);
00054
00061 struct PxJacobianRow
00062 {
00063 PxVec3 linear0;
00064 PxVec3 linear1;
00065 PxVec3 angular0;
00066 PxVec3 angular1;
00067
00068 PxJacobianRow(){}
00069
00070 PxJacobianRow(const PxVec3& lin0, const PxVec3& lin1, const PxVec3& ang0, const PxVec3& ang1) :
00071 linear0(lin0), linear1(lin1), angular0(ang0), angular1(ang1)
00072 {
00073
00074 }
00075
00076 void operator *= (const PxReal scale)
00077 {
00078 linear0 *= scale;
00079 linear1 *= scale;
00080 angular0 *= scale;
00081 angular1 *= scale;
00082 }
00083
00084 PxJacobianRow operator * (const PxReal scale) const
00085 {
00086 return PxJacobianRow(linear0*scale, linear1*scale, angular0*scale, angular1*scale);
00087 }
00088 };
00089
00095 class PxContactJoint : public PxJoint
00096 {
00097 public:
00098
00102 virtual void setContact(const PxVec3& contact) = 0;
00103
00107 virtual void setContactNormal(const PxVec3& contactNormal) = 0;
00108
00112 virtual void setPenetration(const PxReal penetration) = 0;
00113
00117 virtual PxVec3 getContact() const = 0;
00118
00122 virtual PxVec3 getContactNormal() const = 0;
00123
00127 virtual PxReal getPenetration() const = 0;
00128
00129 virtual PxReal getResititution() const = 0;
00130 virtual void setResititution(const PxReal resititution) = 0;
00131 virtual PxReal getBounceThreshold() const = 0;
00132 virtual void setBounceThreshold(const PxReal bounceThreshold) = 0;
00133
00137 virtual const char* getConcreteTypeName() const { return "PxContactJoint"; }
00138
00139 virtual void computeJacobians(PxJacobianRow* jacobian) const = 0;
00140 virtual PxU32 getNbJacobianRows() const = 0;
00141
00142 protected:
00143
00144
00148 PX_INLINE PxContactJoint(PxType concreteType, PxBaseFlags baseFlags) : PxJoint(concreteType, baseFlags) {}
00149
00153 PX_INLINE PxContactJoint(PxBaseFlags baseFlags) : PxJoint(baseFlags) {}
00154
00158 virtual bool isKindOf(const char* name) const { return !::strcmp("PxContactJoint", name) || PxJoint::isKindOf(name); }
00159
00160
00161 };
00162
00163 #if !PX_DOXYGEN
00164 }
00165 #endif
00166
00167
00168 #endif