//-------------------------------------------------------------------------------------------------------+ // 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 &lstMesh) { TDualPtrList 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<MoveToFirst();!pMesh->IsOut();pMesh->MoveToNext()) { TGMeshEdge *pEdge = pMesh->GetCurData(); if(pEdge->m_pMesh1 == this) { pEdge->m_pMesh1 = pMesh; } else { pEdge->m_pMesh2 = pMesh; } } lstMesh<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; }