www.pudn.com > cad3d.zip > DelaunayTriangulation.h
// DelaunayTriangulation.h: interface for the CDelaunayTriangulation class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_DELAUNAYTRIANGULATION_H__53C1D041_FC6C_11D4_971C_ADBB28725710__INCLUDED_)
#define AFX_DELAUNAYTRIANGULATION_H__53C1D041_FC6C_11D4_971C_ADBB28725710__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "stdInclude.h"
#include "Topology\Generic\LinkedPoly.h"
#include "Topology\Generic\Vertex.h"
#include "Topology\Generic\FacesEdge.h"
class COglRenderer;
class CDtEdge;
class CDtTri;
typedef C3DPoint CDtVertex;
class CDelaunayTriangulation
{
protected:
typedef std::multimap TrisMap;
CDtVertex* m_pVertices;
int m_nVertsCount;
CDtEdge* m_pEdges;
int m_nEdgesCount;
CDtTri* m_pTris;
int m_nTrisCount;
TrisMap m_trisMap;
double m_dLimit;
void Init();
void AddLimitTri();
void LegalizeTri(CDtVertex* pPt, CDtTri* pTri);
void SplitTri(CDtVertex& rPt, CDtTri* pOnTri);
void SplitEdge(CDtVertex&rPt, CDtEdge* pOnEdge);
CDtTri* FindContainingTri(const CDtVertex& rPt, CDtEdge*& pOnEdge);
bool IsLimitVertex(const CDtVertex* pVertex);
bool IsLimitTri(const CDtTri& rTri);
bool IsLimitEdge(const CDtEdge& rEdge);
public:
CDelaunayTriangulation(C3DPoint* pVertices, int nVertsCount);
~CDelaunayTriangulation();
void Perform(const COglRenderer& rRc);
void DrawTris(const COglRenderer& rRc);
void DrawEdges(const COglRenderer& rRc);
};
#endif // !defined(AFX_DELAUNAYTRIANGULATION_H__53C1D041_FC6C_11D4_971C_ADBB28725710__INCLUDED_)