Files
envi-code/SourceCode/Code2026/tg_shs/shs_subgeLib/TGMeshNode3D.cpp
T
2026-09-28 15:28:50 +08:00

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;
}