/* MODULE : COL (Intersection & Collision Library) AUTHOR : Frederic PHILIPPE UBI R&D FILE : Box.h (Box utils) */ #ifndef COL_BOX_H #define COL_BOX_H #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "cpa_expt.h" /* For Global declaration in C files : */ #ifdef COL_GLOBALS #define COL_EXTERN extern #else /* !COL_GLOBALS */ #define COL_EXTERN #endif /* !COL_GLOBALS */ /* ----------------------------------------------------------------------------- INCLUDES FILES ----------------------------------------------------------------------------- */ #include "Futil.h" /* ----------------------------------------------------------------------------- CONSTANT DECLARATION ----------------------------------------------------------------------------- */ #define COL_C_xXMinYMinZMin 0 #define COL_C_xXMinYMinZMax 1 #define COL_C_xXMinYMaxZMin 2 #define COL_C_xXMinYMaxZMax 3 #define COL_C_xXMaxYMinZMin 4 #define COL_C_xXMaxYMinZMax 5 #define COL_C_xXMaxYMaxZMin 6 #define COL_C_xXMaxYMaxZMax 7 #define COL_C_xNbVerticesPerBox 8 #define COL_C_xXMin 0 #define COL_C_xXMax 1 #define COL_C_xYMin 2 #define COL_C_xYMax 3 #define COL_C_xZMin 4 #define COL_C_xZMax 5 #define COL_C_ulNullMask 0x00 #define COL_C_ulXMinMask 0x01 #define COL_C_ulXMaxMask 0x02 #define COL_C_ulYMinMask 0x04 #define COL_C_ulYMaxMask 0x08 #define COL_C_ulZMinMask 0x10 #define COL_C_ulZMaxMask 0x20 #define COL_C_ulAllPMask 0x3F #define COL_C_ulFullMask 0x3F #define COL_C_ulXMinInvMask 0x3E #define COL_C_ulXMaxInvMask 0x3D #define COL_C_ulYMinInvMask 0x3B #define COL_C_ulYMaxInvMask 0x37 #define COL_C_ulZMinInvMask 0x2F #define COL_C_ulZMaxInvMask 0x1F #define COL_C_xNbSidesPerBox 6 #define COL_C_xYMinZMin 0 #define COL_C_xYMinZMax 1 #define COL_C_xYMaxZMin 2 #define COL_C_xYMaxZMax 3 #define COL_C_xXMinZMin 4 #define COL_C_xXMinZMax 5 #define COL_C_xXMaxZMin 6 #define COL_C_xXMaxZMax 7 #define COL_C_xXMinYMin 8 #define COL_C_xXMinYMax 9 #define COL_C_xXMaxYMin 10 #define COL_C_xXMaxYMax 11 #define COL_C_xNbEdgesPerBox 12 /* ----------------------------------------------------------------------------- TYPES DEFINITION ----------------------------------------------------------------------------- */ typedef MTH3D_tdstVector COL_tda8st8VerticesBox[COL_C_xNbVerticesPerBox]; /* ----------------------------------------------------------------------------- GLOBAL VARIABLE DECLARATION ----------------------------------------------------------------------------- */ extern MTH3D_tdstVector COL_g_a6_stBoxSidesNormal[COL_C_xNbSidesPerBox]; extern GEO_tdstDoubledIndex COL_g_a12_stBoxEdges[COL_C_xNbEdgesPerBox]; extern unsigned long COL_g_a6_ulBoxSideMask[COL_C_xNbSidesPerBox]; extern unsigned long COL_g_a6_ulBoxSideInvMask[COL_C_xNbSidesPerBox]; /* ----------------------------------------------------------------------------- FUNCTIONS DECLARATION ----------------------------------------------------------------------------- */ extern CPA_EXPORT void COL_fn_vMinMaxBox2VerticesBox ( COL_tda8st8VerticesBox a8_stBoxDest, MTH3D_tdstVector *p_stMinPoint, MTH3D_tdstVector *p_stMaxPoint ); extern CPA_EXPORT void COL_fn_vComputeBoundingBoxOfVertices ( MTH3D_tdstVector *p_stMinPoint, MTH3D_tdstVector *p_stMaxPoint, ACP_tdxIndex xNbVertices, MTH3D_tdstVector *d_stListOfVertices ); extern CPA_EXPORT void COL_fn_vComputeBoundingBoxOfVerticesBoxes ( MTH3D_tdstVector *p_stMinPoint, MTH3D_tdstVector *p_stMaxPoint, COL_tda8st8VerticesBox a8_stBox1, COL_tda8st8VerticesBox a8_stBox2 ); extern CPA_EXPORT void COL_fn_vComputeBoundingBoxOfBoxes ( MTH3D_tdstVector *p_stMinBounding, MTH3D_tdstVector *p_stMaxBounding, MTH3D_tdstVector *p_stMinPoint1, MTH3D_tdstVector *p_stMaxPoint1, MTH3D_tdstVector *p_stMinPoint2, MTH3D_tdstVector *p_stMaxPoint2 ); extern CPA_EXPORT void COL_fn_vComputeBoundingSphereOfBox ( MTH3D_tdstVector *p_stSphereCenter, MTH_tdxReal *p_xSphereRadius, MTH3D_tdstVector *p_stMinPoint, MTH3D_tdstVector *p_stMaxPoint ); extern CPA_EXPORT void COL_fn_vComputeBoundingBoxOfSphere ( MTH3D_tdstVector *p_stMinBounding, MTH3D_tdstVector *p_stMaxBounding, MTH3D_tdstVector *p_stSphereCenter, MTH_tdxReal xSphereRadius ); extern CPA_EXPORT void COL_fn_vComputeBoundingBoxOfSpheres ( MTH3D_tdstVector *p_stMinBounding, MTH3D_tdstVector *p_stMaxBounding, MTH3D_tdstVector *p_stSphereCenter1, MTH_tdxReal xSphereRadius1, MTH3D_tdstVector *p_stSphereCenter2, MTH_tdxReal xSphereRadius2 ); extern CPA_EXPORT void COL_fn_vComputeBoundingBoxOfSphereAndBox ( MTH3D_tdstVector *p_stMinBounding, MTH3D_tdstVector *p_stMaxBounding, MTH3D_tdstVector *p_stSphereCenter, MTH_tdxReal xSphereRadius, MTH3D_tdstVector *p_stMinPoint, MTH3D_tdstVector *p_stMaxPoint ); extern CPA_EXPORT void COL_fn_vComputeBoundingBoxOfGeometricObject ( MTH3D_tdstVector *p_stMinPoint, MTH3D_tdstVector *p_stMaxPoint, GEO_tdstGeometricObject *p_stGeomObj ); /* ANNECY MT 25/02/98 {*/ extern CPA_EXPORT void COL_fn_vComputeBoundingBoxOfSpheresWithSameRadius ( MTH3D_tdstVector *p_stMinBounding, MTH3D_tdstVector *p_stMaxBounding, MTH3D_tdstVector *p_stSphereCenter1, MTH3D_tdstVector *p_stSphereCenter2, MTH_tdxReal xSphereRadius ); extern CPA_EXPORT void COL_fn_vUpdateBoundingBoxOfSpheresWithSameRadius ( MTH3D_tdstVector *p_stMinBounding, MTH3D_tdstVector *p_stMaxBounding, MTH3D_tdstVector *p_stSphereCenter1, MTH3D_tdstVector *p_stSphereCenter2, MTH_tdxReal xSphereRadius ); extern CPA_EXPORT void COL_fn_vUpdateBoundingBoxOfSpheres ( MTH3D_tdstVector *p_stMinBounding, MTH3D_tdstVector *p_stMaxBounding, MTH3D_tdstVector *p_stSphereCenter1, MTH_tdxReal xSphereRadius1, MTH3D_tdstVector *p_stSphereCenter2, MTH_tdxReal xSphereRadius2 ); extern CPA_EXPORT ACP_tdxBool COL_fn_bDetectCollisionBetweenTwoParallelBoxes(MTH3D_tdstVector * _p_stFirstBoxMaxPoint, MTH3D_tdstVector * _p_stFirstBoxMinPoint, MTH3D_tdstVector * _p_stSecondBoxMaxPoint, MTH3D_tdstVector * _p_stSecondBoxMinPoint); /* END ANNECY MT }*/ #ifdef __cplusplus }; #endif /* __cplusplus */ #endif /* COL_BOX_H */