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
00032 #define PX_PHYSICS_NX_ARTICULATION
00033
00036 #include "PxArticulationBase.h"
00037
00038
00039 #if !PX_DOXYGEN
00040 namespace physx
00041 {
00042 #endif
00043
00044 class PxArticulationLink;
00045
00053 class PxArticulationDriveCache
00054 {
00055 protected:
00056 PxArticulationDriveCache();
00057 };
00058
00059
00071 #if PX_VC
00072 #pragma warning(push)
00073 #pragma warning(disable : 4435)
00074 #endif
00075
00076 class PxArticulation : public PxArticulationBase
00077 {
00078 public:
00079
00080 virtual void release() = 0;
00081
00094 virtual void setMaxProjectionIterations(PxU32 iterations) = 0;
00095
00104 virtual PxU32 getMaxProjectionIterations() const = 0;
00105
00117 virtual void setSeparationTolerance(PxReal tolerance) = 0;
00118
00127 virtual PxReal getSeparationTolerance() const = 0;
00128
00129
00142 virtual void setInternalDriveIterations(PxU32 iterations) = 0;
00143
00152 virtual PxU32 getInternalDriveIterations() const = 0;
00153
00154
00168 virtual void setExternalDriveIterations(PxU32 iterations) = 0;
00169
00178 virtual PxU32 getExternalDriveIterations() const = 0;
00179
00194 virtual PxArticulationDriveCache*
00195 createDriveCache(PxReal compliance, PxU32 driveIterations) const = 0;
00196
00197
00210 virtual void updateDriveCache(PxArticulationDriveCache& driveCache,
00211 PxReal compliance,
00212 PxU32 driveIterations) const = 0;
00213
00221 virtual void releaseDriveCache(PxArticulationDriveCache& driveCache) const = 0;
00222
00236 virtual void applyImpulse(PxArticulationLink* link,
00237 const PxArticulationDriveCache& driveCache,
00238 const PxVec3& linearImpulse,
00239 const PxVec3& angularImpulse) = 0;
00240
00258 virtual void computeImpulseResponse(PxArticulationLink*link,
00259 PxVec3& linearResponse,
00260 PxVec3& angularResponse,
00261 const PxArticulationDriveCache& driveCache,
00262 const PxVec3& linearImpulse,
00263 const PxVec3& angularImpulse) const = 0;
00264
00265 protected:
00266 PX_INLINE PxArticulation(PxType concreteType, PxBaseFlags baseFlags) : PxArticulationBase(concreteType, baseFlags){}
00267 PX_INLINE PxArticulation(PxBaseFlags baseFlags) : PxArticulationBase(baseFlags){}
00268 virtual ~PxArticulation() {}
00269
00270 };
00271
00272 #if PX_VC
00273 #pragma warning(pop)
00274 #endif
00275
00276 #if !PX_DOXYGEN
00277 }
00278 #endif
00279
00281 #endif