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

129 lines
2.4 KiB
C++

//-------------------------------------------------------------------------------------------------------+
// Copyright (C), 1998-2007, Beijing Tangent Software Co. Ltd.
// = FileName : TGMesh3D 类
// = Version : ver2.0
// = Author : wlw
// = CreateDate : 2002-09-09
// = Description: TGMesh3D 定义
// = Maintainers:
//
//-------------------------------------------------------------------------------------------------------+
#include "StdAfx.h"
#include "TGMesh3D.h"
#include "TGMCurve3D.h"
#include "TPGeCurve3D.h"
TGMesh3D::~TGMesh3D()
{
}
bool TGMesh3D::operator>(const TGMesh3D&)const
{
return false;
}
bool TGMesh3D::operator<(const TGMesh3D&)const
{
return false;
}
TPGeCurve3D* TGMesh3D::CreateCurve()
{
if(GetLength() == 1)
{
return new TGMCurve3D(*GetAt(0)->GetCurve());
}
TGMCurve3D* pCurve = new TGMCurve3D;
const TGMeshNode3D*pStartNode;
const TGMeshEdge3D*pEdge0 = GetAt(0);
if(pEdge0->m_pMesh1 == this)
{
pStartNode = pEdge0->GetNode(1);
}
else
{
pStartNode = pEdge0->GetNode(2);
}
for(MoveToFirst();!IsOut();MoveToNext())
{
TPGeCurve3D* pSeg = (TPGeCurve3D*)(GetCurData()->GetCurve()->Clone());
if(GetCurData()->GetNode(1) != pStartNode)
{
pSeg->Reverse();
pStartNode = GetCurData()->GetNode(1);
}
else
{
pStartNode = GetCurData()->GetNode(2);
}
pCurve->AddTail(pSeg);
}
return pCurve;
}
void TGMesh3D::ExplodeSelfCross(TPDList<TGMesh3D> &lstMesh)
{
TDualPtrList<const TGMeshNode3D*> lstNode;
const TGMeshNode3D*pStartNode;
const TGMeshEdge3D*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
{
TGMesh3D tail;
SplitAtCur(tail);
TGMesh3D *pMesh = new TGMesh3D;
SplitAt(index,*pMesh);
for(pMesh->MoveToFirst();!pMesh->IsOut();pMesh->MoveToNext())
{
TGMeshEdge3D *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);
}
}
}