Added line collision calculation to cBoundingBox.
This commit is contained in:
parent
b12d2edb4e
commit
5fccd67bad
@ -1,6 +1,6 @@
|
||||
/*
|
||||
** Lua binding: AllToLua
|
||||
** Generated automatically by tolua++-1.0.92 on 09/01/13 12:24:41.
|
||||
** Generated automatically by tolua++-1.0.92 on 09/01/13 19:03:24.
|
||||
*/
|
||||
|
||||
#ifndef __cplusplus
|
||||
@ -20233,6 +20233,24 @@ static int tolua_set_Vector3f_z(lua_State* tolua_S)
|
||||
}
|
||||
#endif //#ifndef TOLUA_DISABLE
|
||||
|
||||
/* get function: EPS of class Vector3d */
|
||||
#ifndef TOLUA_DISABLE_tolua_get_Vector3d_EPS
|
||||
static int tolua_get_Vector3d_EPS(lua_State* tolua_S)
|
||||
{
|
||||
tolua_pushnumber(tolua_S,(lua_Number)Vector3d::EPS);
|
||||
return 1;
|
||||
}
|
||||
#endif //#ifndef TOLUA_DISABLE
|
||||
|
||||
/* get function: NO_INTERSECTION of class Vector3d */
|
||||
#ifndef TOLUA_DISABLE_tolua_get_Vector3d_NO_INTERSECTION
|
||||
static int tolua_get_Vector3d_NO_INTERSECTION(lua_State* tolua_S)
|
||||
{
|
||||
tolua_pushnumber(tolua_S,(lua_Number)Vector3d::NO_INTERSECTION);
|
||||
return 1;
|
||||
}
|
||||
#endif //#ifndef TOLUA_DISABLE
|
||||
|
||||
/* method: new of class Vector3d */
|
||||
#ifndef TOLUA_DISABLE_tolua_AllToLua_Vector3d_new00
|
||||
static int tolua_AllToLua_Vector3d_new00(lua_State* tolua_S)
|
||||
@ -20731,6 +20749,114 @@ static int tolua_AllToLua_Vector3d_Cross00(lua_State* tolua_S)
|
||||
}
|
||||
#endif //#ifndef TOLUA_DISABLE
|
||||
|
||||
/* method: LineCoeffToXYPlane of class Vector3d */
|
||||
#ifndef TOLUA_DISABLE_tolua_AllToLua_Vector3d_LineCoeffToXYPlane00
|
||||
static int tolua_AllToLua_Vector3d_LineCoeffToXYPlane00(lua_State* tolua_S)
|
||||
{
|
||||
#ifndef TOLUA_RELEASE
|
||||
tolua_Error tolua_err;
|
||||
if (
|
||||
!tolua_isusertype(tolua_S,1,"const Vector3d",0,&tolua_err) ||
|
||||
(tolua_isvaluenil(tolua_S,2,&tolua_err) || !tolua_isusertype(tolua_S,2,"const Vector3d",0,&tolua_err)) ||
|
||||
!tolua_isnumber(tolua_S,3,0,&tolua_err) ||
|
||||
!tolua_isnoobj(tolua_S,4,&tolua_err)
|
||||
)
|
||||
goto tolua_lerror;
|
||||
else
|
||||
#endif
|
||||
{
|
||||
const Vector3d* self = (const Vector3d*) tolua_tousertype(tolua_S,1,0);
|
||||
const Vector3d* a_OtherEnd = ((const Vector3d*) tolua_tousertype(tolua_S,2,0));
|
||||
double a_Z = ((double) tolua_tonumber(tolua_S,3,0));
|
||||
#ifndef TOLUA_RELEASE
|
||||
if (!self) tolua_error(tolua_S,"invalid 'self' in function 'LineCoeffToXYPlane'", NULL);
|
||||
#endif
|
||||
{
|
||||
double tolua_ret = (double) self->LineCoeffToXYPlane(*a_OtherEnd,a_Z);
|
||||
tolua_pushnumber(tolua_S,(lua_Number)tolua_ret);
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
#ifndef TOLUA_RELEASE
|
||||
tolua_lerror:
|
||||
tolua_error(tolua_S,"#ferror in function 'LineCoeffToXYPlane'.",&tolua_err);
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
#endif //#ifndef TOLUA_DISABLE
|
||||
|
||||
/* method: LineCoeffToXZPlane of class Vector3d */
|
||||
#ifndef TOLUA_DISABLE_tolua_AllToLua_Vector3d_LineCoeffToXZPlane00
|
||||
static int tolua_AllToLua_Vector3d_LineCoeffToXZPlane00(lua_State* tolua_S)
|
||||
{
|
||||
#ifndef TOLUA_RELEASE
|
||||
tolua_Error tolua_err;
|
||||
if (
|
||||
!tolua_isusertype(tolua_S,1,"const Vector3d",0,&tolua_err) ||
|
||||
(tolua_isvaluenil(tolua_S,2,&tolua_err) || !tolua_isusertype(tolua_S,2,"const Vector3d",0,&tolua_err)) ||
|
||||
!tolua_isnumber(tolua_S,3,0,&tolua_err) ||
|
||||
!tolua_isnoobj(tolua_S,4,&tolua_err)
|
||||
)
|
||||
goto tolua_lerror;
|
||||
else
|
||||
#endif
|
||||
{
|
||||
const Vector3d* self = (const Vector3d*) tolua_tousertype(tolua_S,1,0);
|
||||
const Vector3d* a_OtherEnd = ((const Vector3d*) tolua_tousertype(tolua_S,2,0));
|
||||
double a_Y = ((double) tolua_tonumber(tolua_S,3,0));
|
||||
#ifndef TOLUA_RELEASE
|
||||
if (!self) tolua_error(tolua_S,"invalid 'self' in function 'LineCoeffToXZPlane'", NULL);
|
||||
#endif
|
||||
{
|
||||
double tolua_ret = (double) self->LineCoeffToXZPlane(*a_OtherEnd,a_Y);
|
||||
tolua_pushnumber(tolua_S,(lua_Number)tolua_ret);
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
#ifndef TOLUA_RELEASE
|
||||
tolua_lerror:
|
||||
tolua_error(tolua_S,"#ferror in function 'LineCoeffToXZPlane'.",&tolua_err);
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
#endif //#ifndef TOLUA_DISABLE
|
||||
|
||||
/* method: LineCoeffToYZPlane of class Vector3d */
|
||||
#ifndef TOLUA_DISABLE_tolua_AllToLua_Vector3d_LineCoeffToYZPlane00
|
||||
static int tolua_AllToLua_Vector3d_LineCoeffToYZPlane00(lua_State* tolua_S)
|
||||
{
|
||||
#ifndef TOLUA_RELEASE
|
||||
tolua_Error tolua_err;
|
||||
if (
|
||||
!tolua_isusertype(tolua_S,1,"const Vector3d",0,&tolua_err) ||
|
||||
(tolua_isvaluenil(tolua_S,2,&tolua_err) || !tolua_isusertype(tolua_S,2,"const Vector3d",0,&tolua_err)) ||
|
||||
!tolua_isnumber(tolua_S,3,0,&tolua_err) ||
|
||||
!tolua_isnoobj(tolua_S,4,&tolua_err)
|
||||
)
|
||||
goto tolua_lerror;
|
||||
else
|
||||
#endif
|
||||
{
|
||||
const Vector3d* self = (const Vector3d*) tolua_tousertype(tolua_S,1,0);
|
||||
const Vector3d* a_OtherEnd = ((const Vector3d*) tolua_tousertype(tolua_S,2,0));
|
||||
double a_X = ((double) tolua_tonumber(tolua_S,3,0));
|
||||
#ifndef TOLUA_RELEASE
|
||||
if (!self) tolua_error(tolua_S,"invalid 'self' in function 'LineCoeffToYZPlane'", NULL);
|
||||
#endif
|
||||
{
|
||||
double tolua_ret = (double) self->LineCoeffToYZPlane(*a_OtherEnd,a_X);
|
||||
tolua_pushnumber(tolua_S,(lua_Number)tolua_ret);
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
#ifndef TOLUA_RELEASE
|
||||
tolua_lerror:
|
||||
tolua_error(tolua_S,"#ferror in function 'LineCoeffToYZPlane'.",&tolua_err);
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
#endif //#ifndef TOLUA_DISABLE
|
||||
|
||||
/* method: Equals of class Vector3d */
|
||||
#ifndef TOLUA_DISABLE_tolua_AllToLua_Vector3d_Equals00
|
||||
static int tolua_AllToLua_Vector3d_Equals00(lua_State* tolua_S)
|
||||
@ -22878,6 +23004,147 @@ tolua_lerror:
|
||||
}
|
||||
#endif //#ifndef TOLUA_DISABLE
|
||||
|
||||
/* method: IsInside of class cBoundingBox */
|
||||
#ifndef TOLUA_DISABLE_tolua_AllToLua_cBoundingBox_IsInside04
|
||||
static int tolua_AllToLua_cBoundingBox_IsInside04(lua_State* tolua_S)
|
||||
{
|
||||
tolua_Error tolua_err;
|
||||
if (
|
||||
!tolua_isusertable(tolua_S,1,"cBoundingBox",0,&tolua_err) ||
|
||||
(tolua_isvaluenil(tolua_S,2,&tolua_err) || !tolua_isusertype(tolua_S,2,"const Vector3d",0,&tolua_err)) ||
|
||||
(tolua_isvaluenil(tolua_S,3,&tolua_err) || !tolua_isusertype(tolua_S,3,"const Vector3d",0,&tolua_err)) ||
|
||||
(tolua_isvaluenil(tolua_S,4,&tolua_err) || !tolua_isusertype(tolua_S,4,"const Vector3d",0,&tolua_err)) ||
|
||||
!tolua_isnoobj(tolua_S,5,&tolua_err)
|
||||
)
|
||||
goto tolua_lerror;
|
||||
else
|
||||
{
|
||||
const Vector3d* a_Min = ((const Vector3d*) tolua_tousertype(tolua_S,2,0));
|
||||
const Vector3d* a_Max = ((const Vector3d*) tolua_tousertype(tolua_S,3,0));
|
||||
const Vector3d* a_Point = ((const Vector3d*) tolua_tousertype(tolua_S,4,0));
|
||||
{
|
||||
bool tolua_ret = (bool) cBoundingBox::IsInside(*a_Min,*a_Max,*a_Point);
|
||||
tolua_pushboolean(tolua_S,(bool)tolua_ret);
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
tolua_lerror:
|
||||
return tolua_AllToLua_cBoundingBox_IsInside03(tolua_S);
|
||||
}
|
||||
#endif //#ifndef TOLUA_DISABLE
|
||||
|
||||
/* method: IsInside of class cBoundingBox */
|
||||
#ifndef TOLUA_DISABLE_tolua_AllToLua_cBoundingBox_IsInside05
|
||||
static int tolua_AllToLua_cBoundingBox_IsInside05(lua_State* tolua_S)
|
||||
{
|
||||
tolua_Error tolua_err;
|
||||
if (
|
||||
!tolua_isusertable(tolua_S,1,"cBoundingBox",0,&tolua_err) ||
|
||||
(tolua_isvaluenil(tolua_S,2,&tolua_err) || !tolua_isusertype(tolua_S,2,"const Vector3d",0,&tolua_err)) ||
|
||||
(tolua_isvaluenil(tolua_S,3,&tolua_err) || !tolua_isusertype(tolua_S,3,"const Vector3d",0,&tolua_err)) ||
|
||||
!tolua_isnumber(tolua_S,4,0,&tolua_err) ||
|
||||
!tolua_isnumber(tolua_S,5,0,&tolua_err) ||
|
||||
!tolua_isnumber(tolua_S,6,0,&tolua_err) ||
|
||||
!tolua_isnoobj(tolua_S,7,&tolua_err)
|
||||
)
|
||||
goto tolua_lerror;
|
||||
else
|
||||
{
|
||||
const Vector3d* a_Min = ((const Vector3d*) tolua_tousertype(tolua_S,2,0));
|
||||
const Vector3d* a_Max = ((const Vector3d*) tolua_tousertype(tolua_S,3,0));
|
||||
double a_X = ((double) tolua_tonumber(tolua_S,4,0));
|
||||
double a_Y = ((double) tolua_tonumber(tolua_S,5,0));
|
||||
double a_Z = ((double) tolua_tonumber(tolua_S,6,0));
|
||||
{
|
||||
bool tolua_ret = (bool) cBoundingBox::IsInside(*a_Min,*a_Max,a_X,a_Y,a_Z);
|
||||
tolua_pushboolean(tolua_S,(bool)tolua_ret);
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
tolua_lerror:
|
||||
return tolua_AllToLua_cBoundingBox_IsInside04(tolua_S);
|
||||
}
|
||||
#endif //#ifndef TOLUA_DISABLE
|
||||
|
||||
/* method: CalcLineIntersection of class cBoundingBox */
|
||||
#ifndef TOLUA_DISABLE_tolua_AllToLua_cBoundingBox_CalcLineIntersection00
|
||||
static int tolua_AllToLua_cBoundingBox_CalcLineIntersection00(lua_State* tolua_S)
|
||||
{
|
||||
#ifndef TOLUA_RELEASE
|
||||
tolua_Error tolua_err;
|
||||
if (
|
||||
!tolua_isusertype(tolua_S,1,"cBoundingBox",0,&tolua_err) ||
|
||||
(tolua_isvaluenil(tolua_S,2,&tolua_err) || !tolua_isusertype(tolua_S,2,"const Vector3d",0,&tolua_err)) ||
|
||||
(tolua_isvaluenil(tolua_S,3,&tolua_err) || !tolua_isusertype(tolua_S,3,"const Vector3d",0,&tolua_err)) ||
|
||||
!tolua_isnumber(tolua_S,4,0,&tolua_err) ||
|
||||
!tolua_isnumber(tolua_S,5,0,&tolua_err) ||
|
||||
!tolua_isnoobj(tolua_S,6,&tolua_err)
|
||||
)
|
||||
goto tolua_lerror;
|
||||
else
|
||||
#endif
|
||||
{
|
||||
cBoundingBox* self = (cBoundingBox*) tolua_tousertype(tolua_S,1,0);
|
||||
const Vector3d* a_Line1 = ((const Vector3d*) tolua_tousertype(tolua_S,2,0));
|
||||
const Vector3d* a_Line2 = ((const Vector3d*) tolua_tousertype(tolua_S,3,0));
|
||||
double a_LineCoeff = ((double) tolua_tonumber(tolua_S,4,0));
|
||||
char a_Face = ((char) tolua_tonumber(tolua_S,5,0));
|
||||
#ifndef TOLUA_RELEASE
|
||||
if (!self) tolua_error(tolua_S,"invalid 'self' in function 'CalcLineIntersection'", NULL);
|
||||
#endif
|
||||
{
|
||||
bool tolua_ret = (bool) self->CalcLineIntersection(*a_Line1,*a_Line2,a_LineCoeff,a_Face);
|
||||
tolua_pushboolean(tolua_S,(bool)tolua_ret);
|
||||
tolua_pushnumber(tolua_S,(lua_Number)a_LineCoeff);
|
||||
tolua_pushnumber(tolua_S,(lua_Number)a_Face);
|
||||
}
|
||||
}
|
||||
return 3;
|
||||
#ifndef TOLUA_RELEASE
|
||||
tolua_lerror:
|
||||
tolua_error(tolua_S,"#ferror in function 'CalcLineIntersection'.",&tolua_err);
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
#endif //#ifndef TOLUA_DISABLE
|
||||
|
||||
/* method: CalcLineIntersection of class cBoundingBox */
|
||||
#ifndef TOLUA_DISABLE_tolua_AllToLua_cBoundingBox_CalcLineIntersection01
|
||||
static int tolua_AllToLua_cBoundingBox_CalcLineIntersection01(lua_State* tolua_S)
|
||||
{
|
||||
tolua_Error tolua_err;
|
||||
if (
|
||||
!tolua_isusertable(tolua_S,1,"cBoundingBox",0,&tolua_err) ||
|
||||
(tolua_isvaluenil(tolua_S,2,&tolua_err) || !tolua_isusertype(tolua_S,2,"const Vector3d",0,&tolua_err)) ||
|
||||
(tolua_isvaluenil(tolua_S,3,&tolua_err) || !tolua_isusertype(tolua_S,3,"const Vector3d",0,&tolua_err)) ||
|
||||
(tolua_isvaluenil(tolua_S,4,&tolua_err) || !tolua_isusertype(tolua_S,4,"const Vector3d",0,&tolua_err)) ||
|
||||
(tolua_isvaluenil(tolua_S,5,&tolua_err) || !tolua_isusertype(tolua_S,5,"const Vector3d",0,&tolua_err)) ||
|
||||
!tolua_isnumber(tolua_S,6,0,&tolua_err) ||
|
||||
!tolua_isnumber(tolua_S,7,0,&tolua_err) ||
|
||||
!tolua_isnoobj(tolua_S,8,&tolua_err)
|
||||
)
|
||||
goto tolua_lerror;
|
||||
else
|
||||
{
|
||||
const Vector3d* a_Min = ((const Vector3d*) tolua_tousertype(tolua_S,2,0));
|
||||
const Vector3d* a_Max = ((const Vector3d*) tolua_tousertype(tolua_S,3,0));
|
||||
const Vector3d* a_Line1 = ((const Vector3d*) tolua_tousertype(tolua_S,4,0));
|
||||
const Vector3d* a_Line2 = ((const Vector3d*) tolua_tousertype(tolua_S,5,0));
|
||||
double a_LineCoeff = ((double) tolua_tonumber(tolua_S,6,0));
|
||||
char a_Face = ((char) tolua_tonumber(tolua_S,7,0));
|
||||
{
|
||||
bool tolua_ret = (bool) cBoundingBox::CalcLineIntersection(*a_Min,*a_Max,*a_Line1,*a_Line2,a_LineCoeff,a_Face);
|
||||
tolua_pushboolean(tolua_S,(bool)tolua_ret);
|
||||
tolua_pushnumber(tolua_S,(lua_Number)a_LineCoeff);
|
||||
tolua_pushnumber(tolua_S,(lua_Number)a_Face);
|
||||
}
|
||||
}
|
||||
return 3;
|
||||
tolua_lerror:
|
||||
return tolua_AllToLua_cBoundingBox_CalcLineIntersection00(tolua_S);
|
||||
}
|
||||
#endif //#ifndef TOLUA_DISABLE
|
||||
|
||||
/* method: new of class cTracer */
|
||||
#ifndef TOLUA_DISABLE_tolua_AllToLua_cTracer_new00
|
||||
static int tolua_AllToLua_cTracer_new00(lua_State* tolua_S)
|
||||
@ -28895,6 +29162,12 @@ TOLUA_API int tolua_AllToLua_open (lua_State* tolua_S)
|
||||
tolua_array(tolua_S,"g_BlockRequiresSpecialTool",tolua_get_AllToLua_g_BlockRequiresSpecialTool,tolua_set_AllToLua_g_BlockRequiresSpecialTool);
|
||||
tolua_array(tolua_S,"g_BlockIsSolid",tolua_get_AllToLua_g_BlockIsSolid,tolua_set_AllToLua_g_BlockIsSolid);
|
||||
tolua_constant(tolua_S,"BLOCK_FACE_NONE",BLOCK_FACE_NONE);
|
||||
tolua_constant(tolua_S,"BLOCK_FACE_XM",BLOCK_FACE_XM);
|
||||
tolua_constant(tolua_S,"BLOCK_FACE_XP",BLOCK_FACE_XP);
|
||||
tolua_constant(tolua_S,"BLOCK_FACE_YM",BLOCK_FACE_YM);
|
||||
tolua_constant(tolua_S,"BLOCK_FACE_YP",BLOCK_FACE_YP);
|
||||
tolua_constant(tolua_S,"BLOCK_FACE_ZM",BLOCK_FACE_ZM);
|
||||
tolua_constant(tolua_S,"BLOCK_FACE_ZP",BLOCK_FACE_ZP);
|
||||
tolua_constant(tolua_S,"BLOCK_FACE_BOTTOM",BLOCK_FACE_BOTTOM);
|
||||
tolua_constant(tolua_S,"BLOCK_FACE_TOP",BLOCK_FACE_TOP);
|
||||
tolua_constant(tolua_S,"BLOCK_FACE_NORTH",BLOCK_FACE_NORTH);
|
||||
@ -29799,6 +30072,8 @@ TOLUA_API int tolua_AllToLua_open (lua_State* tolua_S)
|
||||
tolua_cclass(tolua_S,"Vector3d","Vector3d","",NULL);
|
||||
#endif
|
||||
tolua_beginmodule(tolua_S,"Vector3d");
|
||||
tolua_variable(tolua_S,"EPS",tolua_get_Vector3d_EPS,NULL);
|
||||
tolua_variable(tolua_S,"NO_INTERSECTION",tolua_get_Vector3d_NO_INTERSECTION,NULL);
|
||||
tolua_function(tolua_S,"new",tolua_AllToLua_Vector3d_new00);
|
||||
tolua_function(tolua_S,"new_local",tolua_AllToLua_Vector3d_new00_local);
|
||||
tolua_function(tolua_S,".call",tolua_AllToLua_Vector3d_new00_local);
|
||||
@ -29819,6 +30094,9 @@ TOLUA_API int tolua_AllToLua_open (lua_State* tolua_S)
|
||||
tolua_function(tolua_S,"SqrLength",tolua_AllToLua_Vector3d_SqrLength00);
|
||||
tolua_function(tolua_S,"Dot",tolua_AllToLua_Vector3d_Dot00);
|
||||
tolua_function(tolua_S,"Cross",tolua_AllToLua_Vector3d_Cross00);
|
||||
tolua_function(tolua_S,"LineCoeffToXYPlane",tolua_AllToLua_Vector3d_LineCoeffToXYPlane00);
|
||||
tolua_function(tolua_S,"LineCoeffToXZPlane",tolua_AllToLua_Vector3d_LineCoeffToXZPlane00);
|
||||
tolua_function(tolua_S,"LineCoeffToYZPlane",tolua_AllToLua_Vector3d_LineCoeffToYZPlane00);
|
||||
tolua_function(tolua_S,"Equals",tolua_AllToLua_Vector3d_Equals00);
|
||||
tolua_function(tolua_S,".add",tolua_AllToLua_Vector3d__add00);
|
||||
tolua_function(tolua_S,".add",tolua_AllToLua_Vector3d__add01);
|
||||
@ -29918,6 +30196,10 @@ TOLUA_API int tolua_AllToLua_open (lua_State* tolua_S)
|
||||
tolua_function(tolua_S,"IsInside",tolua_AllToLua_cBoundingBox_IsInside01);
|
||||
tolua_function(tolua_S,"IsInside",tolua_AllToLua_cBoundingBox_IsInside02);
|
||||
tolua_function(tolua_S,"IsInside",tolua_AllToLua_cBoundingBox_IsInside03);
|
||||
tolua_function(tolua_S,"IsInside",tolua_AllToLua_cBoundingBox_IsInside04);
|
||||
tolua_function(tolua_S,"IsInside",tolua_AllToLua_cBoundingBox_IsInside05);
|
||||
tolua_function(tolua_S,"CalcLineIntersection",tolua_AllToLua_cBoundingBox_CalcLineIntersection00);
|
||||
tolua_function(tolua_S,"CalcLineIntersection",tolua_AllToLua_cBoundingBox_CalcLineIntersection01);
|
||||
tolua_endmodule(tolua_S);
|
||||
#ifdef __cplusplus
|
||||
tolua_cclass(tolua_S,"cTracer","cTracer","",tolua_collect_cTracer);
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
** Lua binding: AllToLua
|
||||
** Generated automatically by tolua++-1.0.92 on 09/01/13 12:24:42.
|
||||
** Generated automatically by tolua++-1.0.92 on 09/01/13 19:03:25.
|
||||
*/
|
||||
|
||||
/* Exported function */
|
||||
|
@ -5,6 +5,7 @@
|
||||
|
||||
#include "Globals.h"
|
||||
#include "BoundingBox.h"
|
||||
#include "Defines.h"
|
||||
|
||||
|
||||
|
||||
@ -123,11 +124,7 @@ cBoundingBox cBoundingBox::Union(const cBoundingBox & a_Other)
|
||||
|
||||
bool cBoundingBox::IsInside(const Vector3d & a_Point)
|
||||
{
|
||||
return (
|
||||
((a_Point.x >= m_Min.x) && (a_Point.x < m_Max.x)) &&
|
||||
((a_Point.y >= m_Min.y) && (a_Point.y < m_Max.y)) &&
|
||||
((a_Point.z >= m_Min.z) && (a_Point.z < m_Max.z))
|
||||
);
|
||||
return IsInside(m_Min, m_Max, a_Point);
|
||||
}
|
||||
|
||||
|
||||
@ -136,11 +133,7 @@ bool cBoundingBox::IsInside(const Vector3d & a_Point)
|
||||
|
||||
bool cBoundingBox::IsInside(double a_X, double a_Y,double a_Z)
|
||||
{
|
||||
return (
|
||||
((a_X >= m_Min.x) && (a_X < m_Max.x)) &&
|
||||
((a_Y >= m_Min.y) && (a_Y < m_Max.y)) &&
|
||||
((a_Z >= m_Min.z) && (a_Z < m_Max.z))
|
||||
);
|
||||
return IsInside(m_Min, m_Max, a_X, a_Y, a_Z);
|
||||
}
|
||||
|
||||
|
||||
@ -167,6 +160,107 @@ bool cBoundingBox::IsInside(const Vector3d & a_Min, const Vector3d & a_Max)
|
||||
|
||||
|
||||
|
||||
bool cBoundingBox::IsInside(const Vector3d & a_Min, const Vector3d & a_Max, const Vector3d & a_Point)
|
||||
{
|
||||
return (
|
||||
((a_Point.x >= a_Min.x) && (a_Point.x < a_Max.x)) &&
|
||||
((a_Point.y >= a_Min.y) && (a_Point.y < a_Max.y)) &&
|
||||
((a_Point.z >= a_Min.z) && (a_Point.z < a_Max.z))
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
bool cBoundingBox::IsInside(const Vector3d & a_Min, const Vector3d & a_Max, double a_X, double a_Y, double a_Z)
|
||||
{
|
||||
return (
|
||||
((a_X >= a_Min.x) && (a_X < a_Max.x)) &&
|
||||
((a_Y >= a_Min.y) && (a_Y < a_Max.y)) &&
|
||||
((a_Z >= a_Min.z) && (a_Z < a_Max.z))
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
bool cBoundingBox::CalcLineIntersection(const Vector3d & a_Line1, const Vector3d & a_Line2, double & a_LineCoeff, char & a_Face)
|
||||
{
|
||||
return CalcLineIntersection(m_Min, m_Max, a_Line1, a_Line2, a_LineCoeff, a_Face);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
bool cBoundingBox::CalcLineIntersection(const Vector3d & a_Min, const Vector3d & a_Max, const Vector3d & a_Line1, const Vector3d & a_Line2, double & a_LineCoeff, char & a_Face)
|
||||
{
|
||||
char Face = 0;
|
||||
double Coeff = Vector3d::NO_INTERSECTION;
|
||||
|
||||
// Check each individual bbox face for intersection with the line, remember the one with the lowest coeff
|
||||
double c = a_Line1.LineCoeffToXYPlane(a_Line2, a_Min.z);
|
||||
if (c < Coeff)
|
||||
{
|
||||
Face = (a_Line1.z > a_Line2.z) ? BLOCK_FACE_ZP : BLOCK_FACE_ZM;
|
||||
Coeff = c;
|
||||
}
|
||||
c = a_Line1.LineCoeffToXYPlane(a_Line2, a_Max.z);
|
||||
if (c < Coeff)
|
||||
{
|
||||
Face = (a_Line1.z > a_Line2.z) ? BLOCK_FACE_ZP : BLOCK_FACE_ZM;
|
||||
Coeff = c;
|
||||
}
|
||||
c = a_Line1.LineCoeffToXZPlane(a_Line2, a_Min.y);
|
||||
if (c < Coeff)
|
||||
{
|
||||
Face = (a_Line1.y > a_Line2.y) ? BLOCK_FACE_YP : BLOCK_FACE_YM;
|
||||
Coeff = c;
|
||||
}
|
||||
c = a_Line1.LineCoeffToXZPlane(a_Line2, a_Max.y);
|
||||
if (c < Coeff)
|
||||
{
|
||||
Face = (a_Line1.y > a_Line2.y) ? BLOCK_FACE_YP : BLOCK_FACE_YM;
|
||||
Coeff = c;
|
||||
}
|
||||
c = a_Line1.LineCoeffToYZPlane(a_Line2, a_Min.x);
|
||||
if (c < Coeff)
|
||||
{
|
||||
Face = (a_Line1.x > a_Line2.x) ? BLOCK_FACE_XP : BLOCK_FACE_XM;
|
||||
Coeff = c;
|
||||
}
|
||||
c = a_Line1.LineCoeffToYZPlane(a_Line2, a_Max.x);
|
||||
if (c < Coeff)
|
||||
{
|
||||
Face = (a_Line1.x > a_Line2.x) ? BLOCK_FACE_XP : BLOCK_FACE_XM;
|
||||
Coeff = c;
|
||||
}
|
||||
|
||||
if (Coeff >= Vector3d::NO_INTERSECTION)
|
||||
{
|
||||
// There has been no intersection
|
||||
return false;
|
||||
}
|
||||
|
||||
Vector3d Intersection = a_Line1 + (a_Line2 - a_Line1) * Coeff;
|
||||
if (!IsInside(a_Min, a_Max, Intersection))
|
||||
{
|
||||
// The line intersects with the individual wall planes, but not within this bounding box
|
||||
return false;
|
||||
}
|
||||
|
||||
// True intersection, return all the values:
|
||||
a_LineCoeff = Coeff;
|
||||
a_Face = Face;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
bool cBoundingBox::Intersect(const cBoundingBox & a_Other, cBoundingBox & a_Intersection)
|
||||
{
|
||||
a_Intersection.m_Min.x = std::max(m_Min.x, a_Other.m_Min.x);
|
||||
|
@ -51,6 +51,22 @@ public:
|
||||
/// Returns true if a boundingbox specified by a_Min and a_Max is inside this bounding box
|
||||
bool IsInside(const Vector3d & a_Min, const Vector3d & a_Max);
|
||||
|
||||
/// Returns true if the specified point is inside the bounding box specified by its min/max corners
|
||||
static bool IsInside(const Vector3d & a_Min, const Vector3d & a_Max, const Vector3d & a_Point);
|
||||
|
||||
/// Returns true if the specified point is inside the bounding box specified by its min/max corners
|
||||
static bool IsInside(const Vector3d & a_Min, const Vector3d & a_Max, double a_X, double a_Y, double a_Z);
|
||||
|
||||
/** Returns true if this bounding box is intersected by the line specified by its two points
|
||||
Also calculates the distance along the line in which the intersection occurs (0 .. 1)
|
||||
*/
|
||||
bool CalcLineIntersection(const Vector3d & a_Line1, const Vector3d & a_Line2, double & a_LineCoeff, char & a_Face);
|
||||
|
||||
/** Returns true if the specified bounding box is intersected by the line specified by its two points
|
||||
Also calculates the distance along the line in which the intersection occurs (0 .. 1) and the face hit (BLOCK_FACE_ constants)
|
||||
*/
|
||||
static bool CalcLineIntersection(const Vector3d & a_Min, const Vector3d & a_Max, const Vector3d & a_Line1, const Vector3d & a_Line2, double & a_LineCoeff, char & a_Face);
|
||||
|
||||
// tolua_end
|
||||
|
||||
/// Calculates the intersection of the two bounding boxes; returns true if nonempty
|
||||
|
@ -8,16 +8,70 @@
|
||||
|
||||
|
||||
|
||||
Vector3d::Vector3d(const Vector3f & v )
|
||||
: x( v.x )
|
||||
, y( v.y )
|
||||
, z( v.z )
|
||||
const double Vector3d::EPS = 0.000001; ///< The max difference between two coords for which the coords are assumed equal
|
||||
const double Vector3d::NO_INTERSECTION = 1e70; ///< Return value of LineCoeffToPlane() if the line is parallel to the plane
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Vector3d::Vector3d(const Vector3f & v) :
|
||||
x(v.x),
|
||||
y(v.y),
|
||||
z(v.z)
|
||||
{
|
||||
}
|
||||
|
||||
Vector3d::Vector3d(const Vector3f * v )
|
||||
: x( v->x )
|
||||
, y( v->y )
|
||||
, z( v->z )
|
||||
|
||||
|
||||
|
||||
|
||||
Vector3d::Vector3d(const Vector3f * v) :
|
||||
x(v->x),
|
||||
y(v->y),
|
||||
z(v->z)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
double Vector3d::LineCoeffToXYPlane(const Vector3d & a_OtherEnd, double a_Z) const
|
||||
{
|
||||
if (abs(z - a_OtherEnd.z) < EPS)
|
||||
{
|
||||
return NO_INTERSECTION;
|
||||
}
|
||||
return (a_Z - z) / (a_OtherEnd.z - z);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
double Vector3d::LineCoeffToXZPlane(const Vector3d & a_OtherEnd, double a_Y) const
|
||||
{
|
||||
if (abs(y - a_OtherEnd.y) < EPS)
|
||||
{
|
||||
return NO_INTERSECTION;
|
||||
}
|
||||
return (a_Y - y) / (a_OtherEnd.y - y);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
double Vector3d::LineCoeffToYZPlane(const Vector3d & a_OtherEnd, double a_X) const
|
||||
{
|
||||
if (abs(x - a_OtherEnd.x) < EPS)
|
||||
{
|
||||
return NO_INTERSECTION;
|
||||
}
|
||||
return (a_X - x) / (a_OtherEnd.x - x);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -3,26 +3,54 @@
|
||||
#include <math.h>
|
||||
|
||||
class Vector3f;
|
||||
class Vector3d // tolua_export
|
||||
{ // tolua_export
|
||||
public: // tolua_export
|
||||
|
||||
|
||||
|
||||
// tolua_begin
|
||||
|
||||
class Vector3d
|
||||
{
|
||||
public:
|
||||
static const double EPS; ///< The max difference between two coords for which the coords are assumed equal
|
||||
static const double NO_INTERSECTION; ///< Return value of LineCoeffToPlane() if the line is parallel to the plane
|
||||
|
||||
// convert from float
|
||||
Vector3d(const Vector3f & v ); // tolua_export
|
||||
Vector3d(const Vector3f * v ); // tolua_export
|
||||
Vector3d(const Vector3f & v);
|
||||
Vector3d(const Vector3f * v);
|
||||
|
||||
Vector3d() : x(0), y(0), z(0) {} // tolua_export
|
||||
Vector3d(double a_x, double a_y, double a_z) : x(a_x), y(a_y), z(a_z) {} // tolua_export
|
||||
Vector3d() : x(0), y(0), z(0) {}
|
||||
Vector3d(double a_x, double a_y, double a_z) : x(a_x), y(a_y), z(a_z) {}
|
||||
|
||||
inline void Set(double a_x, double a_y, double a_z) { x = a_x, y = a_y, z = a_z; } // tolua_export
|
||||
inline void Normalize() { double l = 1.0f / Length(); x *= l; y *= l; z *= l; } // tolua_export
|
||||
inline Vector3d NormalizeCopy() { double l = 1.0f / Length(); return Vector3d( x * l, y * l, z * l ); } // tolua_export
|
||||
inline void NormalizeCopy(Vector3d & a_V) { double l = 1.0f / Length(); a_V.Set(x*l, y*l, z*l ); } // tolua_export
|
||||
inline double Length() const { return (double)sqrt( x * x + y * y + z * z ); } // tolua_export
|
||||
inline double SqrLength() const { return x * x + y * y + z * z; } // tolua_export
|
||||
inline double Dot( const Vector3d & a_V ) const { return x * a_V.x + y * a_V.y + z * a_V.z; } // tolua_export
|
||||
inline Vector3d Cross( const Vector3d & v ) const { return Vector3d( y * v.z - z * v.y, z * v.x - x * v.z, x * v.y - y * v.x ); } // tolua_export
|
||||
inline void Set(double a_x, double a_y, double a_z) { x = a_x, y = a_y, z = a_z; }
|
||||
inline void Normalize() { double l = 1.0f / Length(); x *= l; y *= l; z *= l; }
|
||||
inline Vector3d NormalizeCopy() { double l = 1.0f / Length(); return Vector3d( x * l, y * l, z * l ); }
|
||||
inline void NormalizeCopy(Vector3d & a_V) { double l = 1.0f / Length(); a_V.Set(x*l, y*l, z*l ); }
|
||||
inline double Length() const { return (double)sqrt( x * x + y * y + z * z ); }
|
||||
inline double SqrLength() const { return x * x + y * y + z * z; }
|
||||
inline double Dot( const Vector3d & a_V ) const { return x * a_V.x + y * a_V.y + z * a_V.z; }
|
||||
inline Vector3d Cross( const Vector3d & v ) const { return Vector3d( y * v.z - z * v.y, z * v.x - x * v.z, x * v.y - y * v.x ); }
|
||||
|
||||
inline bool Equals( const Vector3d & v ) const { return (x == v.x && y == v.y && z == v.z ); } // tolua_export
|
||||
/** Returns the coefficient for the (a_OtherEnd - this) line to reach the specified Z coord
|
||||
The result satisfies the following equation:
|
||||
(*this + Result * (a_OtherEnd - *this)).z = a_Z
|
||||
*/
|
||||
double LineCoeffToXYPlane(const Vector3d & a_OtherEnd, double a_Z) const;
|
||||
|
||||
/** Returns the coefficient for the (a_OtherEnd - this) line to reach the specified Y coord
|
||||
The result satisfies the following equation:
|
||||
(*this + Result * (a_OtherEnd - *this)).y = a_Y
|
||||
*/
|
||||
double LineCoeffToXZPlane(const Vector3d & a_OtherEnd, double a_Y) const;
|
||||
|
||||
/** Returns the coefficient for the (a_OtherEnd - this) line to reach the specified X coord
|
||||
The result satisfies the following equation:
|
||||
(*this + Result * (a_OtherEnd - *this)).x = a_X
|
||||
*/
|
||||
double LineCoeffToYZPlane(const Vector3d & a_OtherEnd, double a_X) const;
|
||||
|
||||
inline bool Equals(const Vector3d & v) const { return ((x == v.x) && (y == v.y) && (z == v.z)); }
|
||||
|
||||
// tolua_end
|
||||
|
||||
void operator += ( const Vector3d& a_V ) { x += a_V.x; y += a_V.y; z += a_V.z; }
|
||||
void operator += ( Vector3d* a_V ) { x += a_V->x; y += a_V->y; z += a_V->z; }
|
||||
@ -30,14 +58,21 @@ public: // tolua_export
|
||||
void operator -= ( Vector3d* a_V ) { x -= a_V->x; y -= a_V->y; z -= a_V->z; }
|
||||
void operator *= ( double a_f ) { x *= a_f; y *= a_f; z *= a_f; }
|
||||
|
||||
Vector3d operator + (const Vector3d & v2) const { return Vector3d(x + v2.x, y + v2.y, z + v2.z ); } // tolua_export
|
||||
Vector3d operator + (const Vector3d * v2) const { return Vector3d(x + v2->x, y + v2->y, z + v2->z ); } // tolua_export
|
||||
Vector3d operator - (const Vector3d & v2) const { return Vector3d(x - v2.x, y - v2.y, z - v2.z ); } // tolua_export
|
||||
Vector3d operator - (const Vector3d * v2) const { return Vector3d(x - v2->x, y - v2->y, z - v2->z ); } // tolua_export
|
||||
Vector3d operator * (const double f) const { return Vector3d(x * f, y * f, z * f ); } // tolua_export
|
||||
Vector3d operator * (const Vector3d & v2) const { return Vector3d(x * v2.x, y * v2.y, z * v2.z ); } // tolua_export
|
||||
Vector3d operator / (const double f) const { return Vector3d(x / f, y / f, z / f ); } // tolua_export
|
||||
// tolua_begin
|
||||
|
||||
Vector3d operator + (const Vector3d & v2) const { return Vector3d(x + v2.x, y + v2.y, z + v2.z ); }
|
||||
Vector3d operator + (const Vector3d * v2) const { return Vector3d(x + v2->x, y + v2->y, z + v2->z ); }
|
||||
Vector3d operator - (const Vector3d & v2) const { return Vector3d(x - v2.x, y - v2.y, z - v2.z ); }
|
||||
Vector3d operator - (const Vector3d * v2) const { return Vector3d(x - v2->x, y - v2->y, z - v2->z ); }
|
||||
Vector3d operator * (const double f) const { return Vector3d(x * f, y * f, z * f ); }
|
||||
Vector3d operator * (const Vector3d & v2) const { return Vector3d(x * v2.x, y * v2.y, z * v2.z ); }
|
||||
Vector3d operator / (const double f) const { return Vector3d(x / f, y / f, z / f ); }
|
||||
|
||||
double x, y, z;
|
||||
} ;
|
||||
|
||||
// tolua_end
|
||||
|
||||
|
||||
|
||||
double x, y, z; // tolua_export
|
||||
|
||||
};// tolua_export
|
||||
|
Loading…
Reference in New Issue
Block a user