146 lines
3.2 KiB
C
146 lines
3.2 KiB
C
/*
|
|
MODULE : COL (Intersection & Collision Library)
|
|
AUTHOR : Frederic PHILIPPE
|
|
UBI R&D
|
|
FILE : CollGOUt.h (Geometric object collision)
|
|
*/
|
|
|
|
#ifndef COL_COLLGOUT_H
|
|
#define COL_COLLGOUT_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"
|
|
#include "Box.h"
|
|
#include "Inters.h"
|
|
#include "IntersGO.h"
|
|
#include "OctreeGO.h"
|
|
|
|
/*
|
|
-----------------------------------------------------------------------------
|
|
FUNCTIONS DECLARATION
|
|
-----------------------------------------------------------------------------
|
|
*/
|
|
|
|
#define COL_M_vIntSegTriBoundReject( p_stVertexA, p_stVectAB, p_stVertex1, p_stVertex2, p_stVertex3, xCoord, xMin, xMax )\
|
|
{\
|
|
xMin = p_stVertexA->xCoord;\
|
|
if (*((long *)&(p_stVectAB->xCoord)) < 0L)\
|
|
{\
|
|
xMin += p_stVectAB->xCoord;\
|
|
}\
|
|
\
|
|
FUT_M_vMaxValue3 ( xMax, p_stVertex1->xCoord, p_stVertex2->xCoord, p_stVertex3->xCoord );\
|
|
\
|
|
if ( MTH_M_bLess ( xMax, xMin ) )\
|
|
{\
|
|
return ;\
|
|
}\
|
|
\
|
|
xMax = p_stVertexA->xCoord;\
|
|
if (*((long *)&(p_stVectAB->xCoord)) > 0L)\
|
|
{\
|
|
xMax += p_stVectAB->xCoord;\
|
|
}\
|
|
\
|
|
FUT_M_vMinValue3 ( xMin, p_stVertex1->xCoord, p_stVertex2->xCoord, p_stVertex3->xCoord );\
|
|
\
|
|
if ( MTH_M_bLess ( xMax, xMin ) )\
|
|
{\
|
|
return ;\
|
|
}\
|
|
}
|
|
|
|
#define COL_M_vIntSegSphBoundReject( p_stVertex1, p_stVect12, p_stSphereCenter, xRadius, xCoord, xMin, xMax )\
|
|
{\
|
|
xMin = p_stVertex1->xCoord;\
|
|
if (*((long *)&(p_stVect12->xCoord)) < 0L)\
|
|
{\
|
|
xMin += p_stVect12->xCoord;\
|
|
}\
|
|
\
|
|
xMax = MTH_M_xAdd ( p_stSphereCenter->xCoord, xRadius );\
|
|
\
|
|
if ( MTH_M_bLess ( xMax, xMin ) )\
|
|
{\
|
|
return ;\
|
|
}\
|
|
\
|
|
xMax = p_stVertex1->xCoord;\
|
|
if (*((long *)&(p_stVect12->xCoord)) > 0L)\
|
|
{\
|
|
xMax += p_stVect12->xCoord;\
|
|
}\
|
|
\
|
|
xMin = MTH_M_xSub ( p_stSphereCenter->xCoord, xRadius );\
|
|
\
|
|
if ( MTH_M_bLess ( xMax, xMin ) )\
|
|
{\
|
|
return ;\
|
|
}\
|
|
}
|
|
|
|
#define COL_M_vIntSegCylBoundRejection( p_stVertex1, p_stVect12, p_stVertexA, p_stVectAB, xCoord, xRadius, xMin, xMax )\
|
|
{\
|
|
xMin = p_stVertex1->xCoord;\
|
|
if (*((long *)&(p_stVect12->xCoord)) < 0L)\
|
|
{\
|
|
xMin += p_stVect12->xCoord;\
|
|
}\
|
|
\
|
|
xMax = p_stVertexA->xCoord;\
|
|
if (*((long *)&(p_stVectAB->xCoord)) > 0L)\
|
|
{\
|
|
xMax += p_stVectAB->xCoord;\
|
|
}\
|
|
\
|
|
if ( MTH_M_bLess ( MTH_M_xAdd ( xMax, xRadius ), xMin ) )\
|
|
{\
|
|
return ;\
|
|
}\
|
|
\
|
|
xMax = p_stVertex1->xCoord;\
|
|
if (*((long *)&(p_stVect12->xCoord)) > 0L)\
|
|
{\
|
|
xMax += p_stVect12->xCoord;\
|
|
}\
|
|
\
|
|
xMin = p_stVertexA->xCoord;\
|
|
if (*((long *)&(p_stVectAB->xCoord)) < 0L)\
|
|
{\
|
|
xMin += p_stVectAB->xCoord;\
|
|
}\
|
|
\
|
|
if ( MTH_M_bLess ( xMax, MTH_M_xSub ( xMin, xRadius ) ) )\
|
|
{\
|
|
return ;\
|
|
}\
|
|
}
|
|
|
|
extern CPA_EXPORT ACP_tdxBool COL_fn_bGetSurfaceInGeometricObject ( ACP_tdxHandleOfObject _hGeometricObject );
|
|
|
|
extern CPA_EXPORT ACP_tdxBool COL_fn_bGetSphereAndPointOnlyInGeometricObject ( ACP_tdxHandleOfObject _hGeometricObject );
|
|
|
|
#ifdef __cplusplus
|
|
};
|
|
#endif /* __cplusplus */
|
|
|
|
#endif /* COL_COLLGOUT_H */
|