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_PHYSICS_NX_CONSTRAINT
00031 #define PX_PHYSICS_NX_CONSTRAINT
00032
00037 #include "PxPhysXConfig.h"
00038 #include "PxConstraintDesc.h"
00039 #include "common/PxBase.h"
00040
00041 #if !PX_DOXYGEN
00042 namespace physx
00043 {
00044 #endif
00045
00046 class PxRigidActor;
00047 class PxScene;
00048 class PxConstraintConnector;
00049
00062 struct PxConstraintFlag
00063 {
00064 enum Enum
00065 {
00066 eBROKEN = 1<<0,
00067 ePROJECT_TO_ACTOR0 = 1<<1,
00068 ePROJECT_TO_ACTOR1 = 1<<2,
00069 ePROJECTION = ePROJECT_TO_ACTOR0 | ePROJECT_TO_ACTOR1,
00070 eCOLLISION_ENABLED = 1<<3,
00071 eVISUALIZATION = 1<<4,
00072 eDRIVE_LIMITS_ARE_FORCES = 1<<5,
00073 eIMPROVED_SLERP = 1<<7,
00074 eDISABLE_PREPROCESSING = 1<<8,
00075 eENABLE_EXTENDED_LIMITS = 1<<9,
00076 eGPU_COMPATIBLE = 1<<10
00077 };
00078 };
00079
00085 typedef PxFlags<PxConstraintFlag::Enum, PxU16> PxConstraintFlags;
00086 PX_FLAGS_OPERATORS(PxConstraintFlag::Enum, PxU16)
00087
00088 struct PxConstraintShaderTable
00089 {
00090 enum
00091 {
00092 eMAX_SOLVERPRPEP_DATASIZE=400
00093 };
00094
00095 PxConstraintSolverPrep solverPrep;
00096 PxConstraintProject project;
00097 PxConstraintVisualize visualize;
00098 PxConstraintFlag::Enum flag;
00099 };
00100
00101
00108 class PxConstraint : public PxBase
00109 {
00110 public:
00111
00119 virtual void release() = 0;
00120
00128 virtual PxScene* getScene() const = 0;
00129
00138 virtual void getActors(PxRigidActor*& actor0, PxRigidActor*& actor1) const = 0;
00139
00148 virtual void setActors(PxRigidActor* actor0, PxRigidActor* actor1) = 0;
00149
00153 virtual void markDirty() = 0;
00154
00164 virtual void setFlags(PxConstraintFlags flags) = 0;
00165
00172 virtual PxConstraintFlags getFlags() const = 0;
00173
00182 virtual void setFlag(PxConstraintFlag::Enum flag, bool value) = 0;
00183
00190 virtual void getForce(PxVec3& linear, PxVec3& angular) const = 0;
00191
00201 virtual bool isValid() const = 0;
00202
00211 virtual void setBreakForce(PxReal linear, PxReal angular) = 0;
00212
00219 virtual void getBreakForce(PxReal& linear, PxReal& angular) const = 0;
00220
00233 virtual void setMinResponseThreshold(PxReal threshold) = 0;
00234
00240 virtual PxReal getMinResponseThreshold() const = 0;
00241
00252 virtual void* getExternalReference(PxU32& typeID) = 0;
00253
00262 virtual void setConstraintFunctions(PxConstraintConnector& connector,
00263 const PxConstraintShaderTable& shaders) = 0;
00264
00265 virtual const char* getConcreteTypeName() const { return "PxConstraint"; }
00266
00267 protected:
00268 PX_INLINE PxConstraint(PxType concreteType, PxBaseFlags baseFlags) : PxBase(concreteType, baseFlags) {}
00269 PX_INLINE PxConstraint(PxBaseFlags baseFlags) : PxBase(baseFlags) {}
00270 virtual ~PxConstraint() {}
00271 virtual bool isKindOf(const char* name) const { return !::strcmp("PxConstraint", name) || PxBase::isKindOf(name); }
00272
00273 };
00274
00275 #if !PX_DOXYGEN
00276 }
00277 #endif
00278
00280 #endif