| | |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | #include "Wm4FoundationPCH.h" |
| | #include "Wm4ConvexHull.h" |
| |
|
| | namespace Wm4 |
| | { |
| | |
| | template <class Real> |
| | ConvexHull<Real>::ConvexHull (int iVertexQuantity, Real fEpsilon, bool bOwner, |
| | Query::Type eQueryType) |
| | { |
| | assert(iVertexQuantity > 0 && fEpsilon >= (Real)0.0); |
| |
|
| | m_eQueryType = eQueryType; |
| | m_iVertexQuantity = iVertexQuantity; |
| | m_iDimension = 0; |
| | m_iSimplexQuantity = 0; |
| | m_aiIndex = nullptr; |
| | m_fEpsilon = fEpsilon; |
| | m_bOwner = bOwner; |
| | } |
| | |
| | template <class Real> |
| | ConvexHull<Real>::~ConvexHull () |
| | { |
| | WM4_DELETE[] m_aiIndex; |
| | } |
| | |
| | template <class Real> |
| | int ConvexHull<Real>::GetQueryType () const |
| | { |
| | return m_eQueryType; |
| | } |
| | |
| | template <class Real> |
| | int ConvexHull<Real>::GetVertexQuantity () const |
| | { |
| | return m_iVertexQuantity; |
| | } |
| | |
| | template <class Real> |
| | Real ConvexHull<Real>::GetEpsilon () const |
| | { |
| | return m_fEpsilon; |
| | } |
| | |
| | template <class Real> |
| | bool ConvexHull<Real>::GetOwner () const |
| | { |
| | return m_bOwner; |
| | } |
| | |
| | template <class Real> |
| | int ConvexHull<Real>::GetDimension () const |
| | { |
| | return m_iDimension; |
| | } |
| | |
| | template <class Real> |
| | int ConvexHull<Real>::GetSimplexQuantity () const |
| | { |
| | return m_iSimplexQuantity; |
| | } |
| | |
| | template <class Real> |
| | const int* ConvexHull<Real>::GetIndices () const |
| | { |
| | return m_aiIndex; |
| | } |
| | |
| | template <class Real> |
| | bool ConvexHull<Real>::Load (FILE* pkIFile) |
| | { |
| | WM4_DELETE[] m_aiIndex; |
| |
|
| | |
| | int iQueryType; |
| | System::Read4le(pkIFile,1,&iQueryType); |
| | m_eQueryType = (Query::Type)iQueryType; |
| | System::Read4le(pkIFile,1,&m_iVertexQuantity); |
| | System::Read4le(pkIFile,1,&m_iDimension); |
| | System::Read4le(pkIFile,1,&m_iSimplexQuantity); |
| | System::Read4le(pkIFile,1,&m_fEpsilon); |
| |
|
| | |
| | int iIQuantity; |
| | System::Read4le(pkIFile,1,&iIQuantity); |
| | if (1 <= m_iDimension && m_iDimension <= 3) |
| | { |
| | assert(iIQuantity == (m_iDimension+1)*m_iSimplexQuantity); |
| | m_aiIndex = WM4_NEW int[iIQuantity]; |
| | System::Read4le(pkIFile,iIQuantity,m_aiIndex); |
| | return true; |
| | } |
| |
|
| | m_aiIndex = nullptr; |
| | return m_iDimension == 0; |
| | } |
| | |
| | template <class Real> |
| | bool ConvexHull<Real>::Save (FILE* pkOFile) const |
| | { |
| | |
| | int iQueryType = (int)m_eQueryType; |
| | System::Write4le(pkOFile,1,&iQueryType); |
| | System::Write4le(pkOFile,1,&m_iVertexQuantity); |
| | System::Write4le(pkOFile,1,&m_iDimension); |
| | System::Write4le(pkOFile,1,&m_iSimplexQuantity); |
| | System::Write4le(pkOFile,1,&m_fEpsilon); |
| |
|
| | |
| | |
| |
|
| | |
| | int iIQuantity; |
| | if (1 <= m_iDimension && m_iDimension <= 3) |
| | { |
| | iIQuantity = (m_iDimension+1)*m_iSimplexQuantity; |
| | System::Write4le(pkOFile,1,&iIQuantity); |
| | System::Write4le(pkOFile,iIQuantity,m_aiIndex); |
| | return true; |
| | } |
| |
|
| | iIQuantity = 0; |
| | System::Write4le(pkOFile,1,&iIQuantity); |
| | return m_iDimension == 0; |
| | } |
| | |
| |
|
| | |
| | |
| | |
| | template WM4_FOUNDATION_ITEM |
| | class ConvexHull<float>; |
| |
|
| | template WM4_FOUNDATION_ITEM |
| | class ConvexHull<double>; |
| | |
| | } |
| |
|