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_PHYSICS_NX_ARTICULATION_JOINT
00032 #define PX_PHYSICS_NX_ARTICULATION_JOINT
00033
00036 #include "PxPhysXConfig.h"
00037 #include "common/PxBase.h"
00038
00039 #if !PX_DOXYGEN
00040 namespace physx
00041 {
00042 #endif
00043
00044 class PxArticulationJointImpl;
00045
00059 struct PxArticulationJointDriveType
00060 {
00061 enum Enum
00062 {
00063 eNONE = 0,
00064 eTARGET = 1,
00065 eERROR = 2,
00066 eTARGETVELOCITY = 3
00067 };
00068 };
00069
00070 struct PxArticulationAxis
00071 {
00072 enum Enum
00073 {
00074 eTWIST = 0,
00075 eSWING1 = 1,
00076 eSWING2 = 2,
00077 eX = 3,
00078 eY = 4,
00079 eZ = 5,
00080 eCOUNT = 6
00081 };
00082 };
00083
00084 PX_FLAGS_OPERATORS(PxArticulationAxis::Enum, PxU8)
00085
00086 struct PxArticulationMotion
00087 {
00088 enum Enum
00089 {
00090 eLOCKED = 0,
00091 eLIMITED = 1,
00092 eFREE = 2
00093 };
00094 };
00095
00096 typedef PxFlags<PxArticulationMotion::Enum, PxU8> PxArticulationMotions;
00097 PX_FLAGS_OPERATORS(PxArticulationMotion::Enum, PxU8)
00098
00099 struct PxArticulationJointType
00100 {
00101 enum Enum
00102 {
00103 ePRISMATIC = 0,
00104 eREVOLUTE = 1,
00105 eSPHERICAL = 2,
00106 eFIX = 3
00107 };
00108 };
00109
00110
00111 class PxArticulationJointBase : public PxBase
00112 {
00113 public:
00119 virtual PxArticulationLink& getParentArticulationLink() const = 0;
00120
00130 virtual void setParentPose(const PxTransform& pose) = 0;
00131
00140 virtual PxTransform getParentPose() const = 0;
00141
00147 virtual PxArticulationLink& getChildArticulationLink() const = 0;
00148
00149
00159 virtual void setChildPose(const PxTransform& pose) = 0;
00160
00168 virtual PxTransform getChildPose() const = 0;
00169
00170 virtual PxArticulationJointImpl* getImpl() = 0;
00171 virtual const PxArticulationJointImpl* getImpl() const = 0;
00172
00173 virtual ~PxArticulationJointBase() {}
00174
00175 private:
00176 protected:
00177 PX_INLINE PxArticulationJointBase(PxType concreteType, PxBaseFlags baseFlags) : PxBase(concreteType, baseFlags) {}
00178 PX_INLINE PxArticulationJointBase(PxBaseFlags baseFlags) : PxBase(baseFlags) {}
00179
00180 virtual bool isKindOf(const char* name) const { return !::strcmp("PxArticulationJointBase", name) || PxBase::isKindOf(name); }
00181 };
00182
00183
00184
00194 class PxArticulationJoint : public PxArticulationJointBase
00195 {
00196 public:
00197
00210 virtual void setTargetOrientation(const PxQuat& orientation) = 0;
00211
00219 virtual PxQuat getTargetOrientation() const = 0;
00220
00231 virtual void setTargetVelocity(const PxVec3& velocity) = 0;
00232
00240 virtual PxVec3 getTargetVelocity() const = 0;
00241
00242
00251 virtual void setDriveType(PxArticulationJointDriveType::Enum driveType) = 0;
00252
00260 virtual PxArticulationJointDriveType::Enum
00261 getDriveType() const = 0;
00262
00263
00264
00278 virtual void setStiffness(PxReal spring) = 0;
00279
00287 virtual PxReal getStiffness() const = 0;
00288
00289
00303 virtual void setDamping(PxReal damping) = 0;
00304
00311 virtual PxReal getDamping() const = 0;
00312
00332 virtual void setInternalCompliance(PxReal compliance) = 0;
00333
00334
00342 virtual PxReal getInternalCompliance() const = 0;
00343
00363 virtual void setExternalCompliance(PxReal compliance) = 0;
00364
00372 virtual PxReal getExternalCompliance() const = 0;
00373
00374
00375
00389 virtual void setSwingLimit(PxReal zLimit, PxReal yLimit) = 0;
00390
00391
00402 virtual void getSwingLimit(PxReal& zLimit, PxReal& yLimit) const = 0;
00403
00404
00405
00412 virtual void setTangentialStiffness(PxReal spring) = 0;
00413
00414
00422 virtual PxReal getTangentialStiffness() const = 0;
00423
00424
00431 virtual void setTangentialDamping(PxReal damping) = 0;
00432
00433
00441 virtual PxReal getTangentialDamping() const = 0;
00442
00443
00455 virtual void setSwingLimitContactDistance(PxReal contactDistance) = 0;
00456
00457
00465 virtual PxReal getSwingLimitContactDistance() const = 0;
00466
00467
00468
00477 virtual void setSwingLimitEnabled(bool enabled) = 0;
00478
00487 virtual bool getSwingLimitEnabled() const = 0;
00488
00489
00502 virtual void setTwistLimit(PxReal lower, PxReal upper) = 0;
00503
00513 virtual void getTwistLimit(PxReal &lower, PxReal &upper) const = 0;
00514
00523 virtual void setTwistLimitEnabled(bool enabled) = 0;
00524
00533 virtual bool getTwistLimitEnabled() const = 0;
00534
00535
00547 virtual void setTwistLimitContactDistance(PxReal contactDistance) = 0;
00548
00549
00557 virtual PxReal getTwistLimitContactDistance() const = 0;
00558
00559 virtual const char* getConcreteTypeName() const { return "PxArticulationJoint"; }
00560
00561 protected:
00562 PX_INLINE PxArticulationJoint(PxType concreteType, PxBaseFlags baseFlags) : PxArticulationJointBase(concreteType, baseFlags) {}
00563 PX_INLINE PxArticulationJoint(PxBaseFlags baseFlags) : PxArticulationJointBase(baseFlags) {}
00564 virtual ~PxArticulationJoint() {}
00565 virtual bool isKindOf(const char* name) const { return !::strcmp("PxArticulationJoint", name) || PxArticulationJointBase::isKindOf(name); }
00566 };
00567
00568 #if !PX_DOXYGEN
00569 }
00570 #endif
00571
00573 #endif