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_EXTENSIONS_SHAPE_H
00032 #define PX_PHYSICS_EXTENSIONS_SHAPE_H
00033
00037 #include "PxPhysXConfig.h"
00038
00039 #include "PxShape.h"
00040 #include "PxRigidActor.h"
00041 #include "geometry/PxGeometryQuery.h"
00042
00043 #if !PX_DOXYGEN
00044 namespace physx
00045 {
00046 #endif
00047
00054 class PxShapeExt
00055 {
00056 public:
00065 static PX_INLINE PxTransform getGlobalPose(const PxShape& shape, const PxRigidActor& actor)
00066 {
00067 return actor.getGlobalPose() * shape.getLocalPose();
00068 }
00069
00085 static PX_INLINE PxU32 raycast(const PxShape& shape, const PxRigidActor& actor,
00086 const PxVec3& rayOrigin, const PxVec3& rayDir, PxReal maxDist, PxHitFlags hitFlags,
00087 PxU32 maxHits, PxRaycastHit* rayHits)
00088 {
00089 return PxGeometryQuery::raycast(
00090 rayOrigin, rayDir, shape.getGeometry().any(), getGlobalPose(shape, actor), maxDist, hitFlags, maxHits, rayHits);
00091 }
00092
00104 static PX_INLINE bool overlap(const PxShape& shape, const PxRigidActor& actor,
00105 const PxGeometry& otherGeom, const PxTransform& otherGeomPose)
00106 {
00107 return PxGeometryQuery::overlap(shape.getGeometry().any(), getGlobalPose(shape, actor), otherGeom, otherGeomPose);
00108 }
00109
00127 static PX_INLINE bool sweep(const PxShape& shape, const PxRigidActor& actor,
00128 const PxVec3& unitDir, const PxReal distance, const PxGeometry& otherGeom, const PxTransform& otherGeomPose,
00129 PxSweepHit& sweepHit, PxHitFlags hitFlags)
00130 {
00131 return PxGeometryQuery::sweep(unitDir, distance, otherGeom, otherGeomPose, shape.getGeometry().any(), getGlobalPose(shape, actor), sweepHit, hitFlags);
00132 }
00133
00134
00146 static PX_INLINE PxBounds3 getWorldBounds(const PxShape& shape, const PxRigidActor& actor, float inflation=1.01f)
00147 {
00148 return PxGeometryQuery::getWorldBounds(shape.getGeometry().any(), getGlobalPose(shape, actor), inflation);
00149 }
00150
00151 };
00152
00153 #if !PX_DOXYGEN
00154 }
00155 #endif
00156
00158 #endif