//-------------------------------------------------------------------------------------------------------+ // 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 &lstMesh) { TDualPtrList 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<MoveToFirst();!pMesh->IsOut();pMesh->MoveToNext()) { TGMeshEdge3D *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); } } }