#ifndef PX_PHYSICS_GEOMUTILS_PX_GEOMETRY_QUERY
#define PX_PHYSICS_GEOMUTILS_PX_GEOMETRY_QUERY
#define PX_MAX_SWEEP_DISTANCE 1e8f
#include "common/PxPhysXCommonConfig.h"
#include "PxQueryReport.h"
#if !PX_DOXYGEN
namespace physx
{
#endif
class PxGeometry;
struct PxSweepHit;
struct PxRaycastHit;
class PxTriangle;
class PxGeometryQuery
{
public:
PX_PHYSX_COMMON_API static bool sweep(const PxVec3& unitDir,
const PxReal maxDist,
const PxGeometry& geom0,
const PxTransform& pose0,
const PxGeometry& geom1,
const PxTransform& pose1,
PxSweepHit& sweepHit,
PxHitFlags hitFlags = PxHitFlag::eDEFAULT,
const PxReal inflation = 0.f);
PX_PHYSX_COMMON_API static bool overlap(const PxGeometry& geom0, const PxTransform& pose0,
const PxGeometry& geom1, const PxTransform& pose1);
PX_PHYSX_COMMON_API static PxU32 raycast(const PxVec3& origin,
const PxVec3& unitDir,
const PxGeometry& geom,
const PxTransform& pose,
PxReal maxDist,
PxHitFlags hitFlags,
PxU32 maxHits,
PxRaycastHit* PX_RESTRICT rayHits);
PX_PHYSX_COMMON_API static bool computePenetration(PxVec3& direction, PxF32& depth,
const PxGeometry& geom0, const PxTransform& pose0,
const PxGeometry& geom1, const PxTransform& pose1);
PX_PHYSX_COMMON_API static PxReal pointDistance(const PxVec3& point, const PxGeometry& geom, const PxTransform& pose, PxVec3* closestPoint=NULL);
PX_PHYSX_COMMON_API static PxBounds3 getWorldBounds(const PxGeometry& geom, const PxTransform& pose, float inflation=1.01f);
PX_PHYSX_COMMON_API static bool isValid(const PxGeometry& geom);
};
#if !PX_DOXYGEN
}
#endif
#endif