Files
envi-code/SourceCode/Code2026/tg_shs/shs_subgeLib/TGMesh.cpp
T
gjm 164968b62e chore
把非utf8-bom编码的cpp/h文件改为 utf8 bom 编码, msvc识别utf8编码时,如果不是bom格式的,会使用当前cp_oem来解码.
2026-10-04 00:04:20 +08:00

126 lines
2.3 KiB
C++

//-------------------------------------------------------------------------------------------------------+
// Copyright (C), 1998-2007, Beijing Tangent Software Co. Ltd.
// = FileName : TGMesh 类
// = Version : ver2.0
// = Author : wlw
// = CreateDate : 2002-09-09
// = Description: TGMesh 定义
// = Maintainers:
//
//-------------------------------------------------------------------------------------------------------+
#include "StdAfx.h"
#include "TGMesh.h"
#include "TGMCurve2D.h"
TGMesh::~TGMesh()
{
}
bool TGMesh::operator>(const TGMesh&)const
{
return false;
}
bool TGMesh::operator<(const TGMesh&)const
{
return false;
}
void TGMesh::ExplodeSelfCross(TPDList<TGMesh> &lstMesh)
{
TDualPtrList<const TGMeshNode*> lstNode;
const TGMeshNode* pStartNode;
const TGMeshEdge* pEdge0 = GetAt(0);
if(pEdge0->m_pMesh1 == this)
{
pStartNode = pEdge0->GetNode(1);
}
else
{
pStartNode = pEdge0->GetNode(2);
}
for(MoveToFirst();!IsOut();MoveToNext())
{
long index = lstNode.Find(pStartNode);
if(index == NOT_FOUND)
{
lstNode<<pStartNode;
}
else
{
TGMesh tail;
SplitAtCur(tail);
TGMesh *pMesh = new TGMesh;
SplitAt(index,*pMesh);
for(pMesh->MoveToFirst();!pMesh->IsOut();pMesh->MoveToNext())
{
TGMeshEdge *pEdge = pMesh->GetCurData();
if(pEdge->m_pMesh1 == this)
{
pEdge->m_pMesh1 = pMesh;
}
else
{
pEdge->m_pMesh2 = pMesh;
}
}
lstMesh<<pMesh;
Conbine(tail);
lstNode.Clear();
ExplodeSelfCross(lstMesh);
break;
}
if(GetCurData()->GetNode(1)!=pStartNode)
{
pStartNode = GetCurData()->GetNode(1);
}
else
{
pStartNode = GetCurData()->GetNode(2);
}
}
}
TPGeCurve2D* TGMesh::CreateCurve()
{
if(GetLength() == 1)
{
return new TGMCurve2D(*GetAt(0)->GetCurve());
}
TGMCurve2D* pCurve = new TGMCurve2D;
const TGMeshNode*pStartNode;
const TGMeshEdge*pEdge0 = GetAt(0);
if(pEdge0->m_pMesh1 == this)
{
pStartNode = pEdge0->GetNode(1);
}
else
{
pStartNode = pEdge0->GetNode(2);
}
for(MoveToFirst();!IsOut();MoveToNext())
{
TPGeCurve2D* pSeg = (TPGeCurve2D*)(GetCurData()->GetCurve()->Clone());
if(GetCurData()->GetNode(1)!=pStartNode)
{
pSeg->Reverse();
pStartNode = GetCurData()->GetNode(1);
}
else
{
pStartNode = GetCurData()->GetNode(2);
}
pCurve->AddTail(pSeg);
}
return pCurve;
}