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
00031 #ifndef PX_REVOLUTEJOINT_H
00032 #define PX_REVOLUTEJOINT_H
00033
00037 #include "extensions/PxJoint.h"
00038 #include "extensions/PxJointLimit.h"
00039
00040 #if !PX_DOXYGEN
00041 namespace physx
00042 {
00043 #endif
00044
00045 class PxRevoluteJoint;
00046
00059 PxRevoluteJoint* PxRevoluteJointCreate(PxPhysics& physics,
00060 PxRigidActor* actor0, const PxTransform& localFrame0,
00061 PxRigidActor* actor1, const PxTransform& localFrame1);
00062
00063
00070 struct PxRevoluteJointFlag
00071 {
00072 enum Enum
00073 {
00074 eLIMIT_ENABLED = 1<<0,
00075 eDRIVE_ENABLED = 1<<1,
00076 eDRIVE_FREESPIN = 1<<2
00077 };
00078 };
00079
00080 typedef PxFlags<PxRevoluteJointFlag::Enum, PxU16> PxRevoluteJointFlags;
00081 PX_FLAGS_OPERATORS(PxRevoluteJointFlag::Enum, PxU16)
00082
00083
00084
00107 class PxRevoluteJoint : public PxJoint
00108 {
00109 public:
00110
00114 virtual PxReal getAngle() const = 0;
00115
00116
00120 virtual PxReal getVelocity() const = 0;
00121
00135 virtual void setLimit(const PxJointAngularLimitPair& limits) = 0;
00136
00144 virtual PxJointAngularLimitPair getLimit() const = 0;
00145
00146
00147
00167 virtual void setDriveVelocity(PxReal velocity) = 0;
00168
00176 virtual PxReal getDriveVelocity() const = 0;
00177
00178
00191 virtual void setDriveForceLimit(PxReal limit) = 0;
00192
00200 virtual PxReal getDriveForceLimit() const = 0;
00201
00202
00216 virtual void setDriveGearRatio(PxReal ratio) = 0;
00217
00225 virtual PxReal getDriveGearRatio() const = 0;
00226
00227
00238 virtual void setRevoluteJointFlags(PxRevoluteJointFlags flags) = 0;
00239
00249 virtual void setRevoluteJointFlag(PxRevoluteJointFlag::Enum flag, bool value) = 0;
00250
00259 virtual PxRevoluteJointFlags getRevoluteJointFlags(void) const = 0;
00260
00280 virtual void setProjectionLinearTolerance(PxReal tolerance) = 0;
00281
00282
00291 virtual PxReal getProjectionLinearTolerance() const = 0;
00292
00312 virtual void setProjectionAngularTolerance(PxReal tolerance) = 0;
00313
00322 virtual PxReal getProjectionAngularTolerance() const = 0;
00323
00327 virtual const char* getConcreteTypeName() const { return "PxRevoluteJoint"; }
00328
00329 protected:
00330
00331
00332
00336 PX_INLINE PxRevoluteJoint(PxType concreteType, PxBaseFlags baseFlags) : PxJoint(concreteType, baseFlags) {}
00337
00341 PX_INLINE PxRevoluteJoint(PxBaseFlags baseFlags) : PxJoint(baseFlags) {}
00342
00346 virtual bool isKindOf(const char* name) const { return !::strcmp("PxRevoluteJoint", name) || PxJoint::isKindOf(name); }
00347
00348
00349 };
00350
00351 #if !PX_DOXYGEN
00352 }
00353 #endif
00354
00356 #endif