@@ -192,6 +192,38 @@ public: | |||||
return false; | return false; | ||||
} | } | ||||
//PushFirst, insert, etc : CRUDE VERSION | |||||
inline void PushFirst(T const &x) | |||||
{ | |||||
ArrayBase<T, ARRAY> tmp; | |||||
tmp.Push(x); | |||||
tmp += *this; | |||||
*this = tmp; | |||||
} | |||||
inline bool PushUniqueFirst(T const &x) | |||||
{ | |||||
int idx = Find(x); | |||||
if (idx == INDEX_NONE) | |||||
{ | |||||
PushFirst(x); | |||||
return true; | |||||
} | |||||
return false; | |||||
} | |||||
inline void Insert(T const &x, int pos) | |||||
{ | |||||
ArrayBase<T, ARRAY> tmp; | |||||
for (int i = 0; i < m_count; i++) | |||||
{ | |||||
if (i == pos) | |||||
tmp.Push(x); | |||||
tmp.Push(m_data[i]); | |||||
} | |||||
*this = tmp; | |||||
} | |||||
inline int Find(T const &x) | inline int Find(T const &x) | ||||
{ | { | ||||
for (int i = 0; i < m_count; ++i) | for (int i = 0; i < m_count; ++i) | ||||
@@ -254,7 +254,7 @@ bool TestRayVsPlane(const TV &ray_p0, const TV &ray_p1, | |||||
float t = (dot(ProjectPointOnPlane(ray_p0, plane_p, plane_n) - ray_p0, plane_n)) / dot(ray_dir, plane_n); | float t = (dot(ProjectPointOnPlane(ray_p0, plane_p, plane_n) - ray_p0, plane_n)) / dot(ray_dir, plane_n); | ||||
if (!test_line_only && (t < -TestEpsilon::Get() || t > 1.0f)) | |||||
if (!test_line_only && (t < -TestEpsilon::Get() || t > 1.f + TestEpsilon::Get())) | |||||
return false; | return false; | ||||
isec_p = ray_p0 + t * ray_dir; | isec_p = ray_p0 + t * ray_dir; | ||||