134 lines
2.3 KiB
C++
134 lines
2.3 KiB
C++
//-------------------------------------------------------------------------------------------------------+
|
|
// Copyright (C), 1998-2007, Beijing Tangent Software Co. Ltd.
|
|
// = FileName : TGMeshNode3D Àà
|
|
// = Version : ver2.0
|
|
// = Author : wlw
|
|
// = CreateDate : 2002-09-09
|
|
// = Description: TGMeshNode3D ¶¨Òå
|
|
// = Maintainers:
|
|
//
|
|
//-------------------------------------------------------------------------------------------------------+
|
|
#include "StdAfx.h"
|
|
#include "TGMeshNode3D.h"
|
|
|
|
TGMeshNode3D::TGMeshNode3D(const TGPoint&pt):TGPoint(pt)
|
|
{
|
|
|
|
}
|
|
|
|
TGMeshNode3D::~TGMeshNode3D()
|
|
{
|
|
Clear();
|
|
}
|
|
|
|
void TGMeshNode3D::AppendEdge(TGMeshEdge3D* pEdge)
|
|
{
|
|
m_lstEdge.AddTail(pEdge);
|
|
}
|
|
|
|
void TGMeshNode3D::Clear()
|
|
{
|
|
TDualPtrList<TGMeshEdge3D*> temp;
|
|
temp.Conbine(m_lstEdge);
|
|
}
|
|
|
|
TGMeshEdge3D* TGMeshNode3D::GetOnlyEdge()
|
|
{
|
|
return m_lstEdge.IsEmpty()?NULL:m_lstEdge[0];
|
|
}
|
|
|
|
void TGMeshNode3D::RemoveEdge(TGMeshEdge3D*pEdge)
|
|
{
|
|
if (m_lstEdge.FindTo(pEdge))
|
|
{
|
|
m_lstEdge.FetchCur();
|
|
}
|
|
}
|
|
|
|
bool TGMeshNode3D::IsEndNode() const
|
|
{
|
|
return m_lstEdge.GetLength() == 1;
|
|
}
|
|
|
|
void TGMeshNode3D::Arrange()
|
|
{
|
|
}
|
|
|
|
TGMeshEdge3D* TGMeshNode3D::FindNextEdge(TGMeshEdge3D* pEdgeFrom)
|
|
{
|
|
if (IsEndNode())
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
m_lstEdge.FindTo(pEdgeFrom);
|
|
m_lstEdge.MoveToNext();
|
|
if (m_lstEdge.IsOut())
|
|
{
|
|
m_lstEdge.MoveToFirst();
|
|
}
|
|
return m_lstEdge.GetCurData();
|
|
}
|
|
|
|
TGMeshEdge3D* TGMeshNode3D::FindPreEdge(TGMeshEdge3D* pEdgeFrom)
|
|
{
|
|
if (IsEndNode())
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
m_lstEdge.FindTo(pEdgeFrom);
|
|
m_lstEdge.MoveToPre();
|
|
if (m_lstEdge.IsOut())
|
|
{
|
|
m_lstEdge.MoveToLast();
|
|
}
|
|
return m_lstEdge.GetCurData();
|
|
}
|
|
|
|
TGMeshEdge3D* TGMeshNode3D::FindNextSDEdge(TGMeshEdge3D* pEdgeFrom)
|
|
{
|
|
if (IsEndNode())
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
m_lstEdge.FindTo(pEdgeFrom);
|
|
|
|
m_lstEdge.MoveToNext();
|
|
if (m_lstEdge.IsOut())
|
|
{
|
|
m_lstEdge.MoveToFirst();
|
|
}
|
|
|
|
TGMeshEdge3D *pEdge = m_lstEdge.GetCurData();
|
|
if (pEdge == pEdgeFrom || pEdge->GetNode(1) != this)
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
return pEdge;
|
|
}
|
|
|
|
TGMeshEdge3D* TGMeshNode3D::FindPreSDEdge(TGMeshEdge3D* pEdgeFrom)
|
|
{
|
|
if (IsEndNode())
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
m_lstEdge.FindTo(pEdgeFrom);
|
|
|
|
m_lstEdge.MoveToPre();
|
|
if (m_lstEdge.IsOut())
|
|
{
|
|
m_lstEdge.MoveToLast();
|
|
}
|
|
|
|
TGMeshEdge3D *pEdge=m_lstEdge.GetCurData();
|
|
if (pEdge == pEdgeFrom || pEdge->GetNode(2) != this)
|
|
{
|
|
return NULL;
|
|
}
|
|
return pEdge;
|
|
} |