22 #ifndef __NDG_CONVEXHULL_4D__
23 #define __NDG_CONVEXHULL_4D__
25 #include "ndCoreStdafx.h"
31 #include "ndQuaternion.h"
74 void Init (
const ndConvexHull4dVector*
const points, ndInt32 v0, ndInt32 v1, ndInt32 v2, ndInt32 v3);
78 ndInt32 GetMark()
const {
return m_mark; }
79 void SetMark(ndInt32 mark) { m_mark = mark; }
82 ndTetrahedrumFace m_faces[4];
101 D_CORE_API
ndConvexHull4d(
const ndFloat64*
const vertexCloud, ndInt32 strideInBytes, ndInt32 count, ndFloat64 distTol);
104 ndInt32 GetVertexCount()
const;
105 ndInt32 GetVertexIndex(ndInt32 i)
const;
112 void Save (
const char*
const filename)
const;
117 void BuildHull (
const ndFloat64*
const vertexCloud, ndInt32 strideInBytes, ndInt32 count, ndFloat64 distTol);
119 virtual ndInt32 AddVertex (
const ndBigVector& vertex);
120 virtual ndInt32 InitVertexArray(
ndConvexHull4dVector*
const points,
const ndFloat64*
const vertexCloud, ndInt32 strideInBytes, ndInt32 count,
void*
const memoryPool, ndInt32 maxMemSize);
122 virtual ndNode* AddFace (ndInt32 i0, ndInt32 i1, ndInt32 i2, ndInt32 i3);
123 virtual void DeleteFace (ndNode*
const node);
127 void InsertNewVertex(ndInt32 vertexIndex, ndNode*
const frontFace,
ndTempList& deletedFaces,
ndTempList& newFaces);
131 void LinkSibling (ndNode* node0, ndNode* node1)
const;
154 inline ndInt32 ndConvexHull4d::IncMark ()
160 inline ndInt32 ndConvexHull4d::GetVertexCount()
const
165 inline ndInt32 ndConvexHull4d::GetVertexIndex(ndInt32 index)
const
167 ndAssert (index >= 0);
168 ndAssert (index < m_count);
169 return m_points[index].m_index;
173 inline const ndBigVector& ndConvexHull4d::GetVertex(ndInt32 index)
const
175 ndAssert (index >= 0);
176 ndAssert (index < m_count);
177 return m_points[index];
187 return tetra->GetTetraVolume (&m_points[0]);