//-------------------------------------------------------------------------------------------------------+ // Copyright (C), 1998-2007, Beijing Tangent Software Co. Ltd. // = FileName : TGRegionEx2D 类 // = Version : ver2.0 // = Author : wlw // = CreateDate : 2002-09-09 // = Description: TGRegionEx2D 定义 // = Maintainers: // //-------------------------------------------------------------------------------------------------------+ #include "StdAfx.h" #include "TGRegionEx2D.h" IMPLEMENT_RUN_TIME_CLASS1(TGRegionEx2D,"TGRegionEx2D",TGRegion2D) TGRegionEx2D::TGRegionEx2D() { curves.AddTail(NULL); } TGRegionEx2D::TGRegionEx2D(TPGeCurve2D*pCurve,bool bCheck) { curves.AddTail(pCurve); if (bCheck) { Normalize(); } } TGRegionEx2D::TGRegionEx2D(const TPGeCurve2D&curve,bool bCheck) { curves.AddTail((TPGeCurve2D*)curve.Clone()); if (bCheck) { Normalize(); } } TGRegionEx2D::TGRegionEx2D(TGObjectList&oList,bool bCheck) { for (oList.MoveToFirst();!oList.IsOut();oList.MoveToNext()) { curves.AddTail((TPGeCurve2D*)oList.FetchCur()); } if (bCheck) { Normalize(); } } TGRegionEx2D::TGRegionEx2D(const TGRegionEx2D&face) { for (long i = 0;iClone())); } else { curves.AddTail(NULL); } } } TGRegionEx2D::TGRegionEx2D(const TGRegion2D&face) { for (long i = 0;iClone())); } else { curves.AddTail(NULL); } } } TGRegionEx2D::~TGRegionEx2D() { } void TGRegionEx2D::ClearHole() { while(curves.GetLength()>1) { curves.DelTail(); } } void TGRegionEx2D::SetOutline(TPGeCurve2D*pCurve,bool bCheck) { if (pCurve != NULL && bCheck && pCurve->IsClosed() && pCurve->IsClockwise()) { pCurve->Reverse(); } if (curves[0] != NULL) { delete curves[0]; } curves[0] = pCurve; } bool TGRegionEx2D::AppendHole(TPGeCurve2D*pCurve,bool bCheck) { if (bCheck) { if (!IsAllowBoundaryInter()) { TGObjectList oList; for (long i = 0;iIntersect(*pCurve,oList)) { delete pCurve; return false; } } } if (pCurve->IsClosed() && pCurve->IsClockwise()) { pCurve->Reverse(); } if (!IsInclude(TGRegionEx2D(*pCurve,false))) { delete pCurve; return false; } pCurve->Reverse(); } else if (!pCurve->IsClosed()) { pCurve->Reverse(); } curves.AddTail(pCurve); return true; } TPGeCurve2D* TGRegionEx2D::GetBoundary(long i) const { return curves.GetAt(i); } long TGRegionEx2D::GetBoundaryNum() const { return curves.GetLength(); } TGObject* TGRegionEx2D::Clone() const { return new TGRegionEx2D(*this); } void TGRegionEx2D::DelHole(long i) { curves.Del(i+1); } TPGeCurve2D* TGRegionEx2D::FetchHole(long i) { return curves.Fetch(i+1); } void TGRegionEx2D::Reset() { curves.Clear(); }