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_)