//-------------------------------------------------------------------------------------------------------+ // Copyright (C), 1998-2007, Beijing Tangent Software Co. Ltd. // = FileName : TGPolygonEx2D 类 // = Version : ver2.0 // = Author : wlw // = CreateDate : 2002-09-09 // = Description: TGPolygonEx2D 声明 可有洞的多边形平面联通域 // = Maintainers: // //-------------------------------------------------------------------------------------------------------+ #ifndef _TGPOLYGONEX2D_H_ #define _TGPOLYGONEX2D_H_ #ifndef _TGPOLYGON2D_H_ #include "TGPolygon2D.h" #endif #ifndef _TGREGION2D_H_ #include "TGRegion2D.h" #endif #ifndef _TPDLIST_H_ #include "TPDList.h" #endif #ifndef _TGMLINE2D_H_ #include "TGMLine2D.h" #endif #ifndef _TGOBJECTLIST_H_ #include "TGObjectList.h" #endif #ifndef _TPGEGLINE2D_H_ #include "TPGeGLine2D.h" #endif #ifndef _TPGECURVE2D_H_ #include "TPGeCurve2D.h" #endif class GEOAPI TGPolygonEx2D : public TGPolygon2D { DECLARE_RUN_TIME_CLASS(TGPolygonEx2D) public: //contruct TGPolygonEx2D(long vertexNum = 0); //检查是否逆时针方向曲线 TGPolygonEx2D(const TGMLine2D&ml,bool bCheck=true); TGPolygonEx2D(const TGPolygonEx2D&poly); TGPolygonEx2D(const TGPolygon2D&poly); virtual ~TGPolygonEx2D(); //override TGRegion2D virtual long GetBoundaryNum() const; virtual bool Inter(const TGRegion2D&face,TGObjectList&res) const; virtual void SubtractBy(const TGRegion2D&face,TGObjectList&res) const; virtual void CutBy(const TPGeCurve2D&curve,TGObjectList&left,TGObjectList&right) const; virtual TGRegion2D* Union(const TGRegion2D&face) const; virtual TPGeCurve2D* GetBoundary(long i) const; //override TGObject virtual bool IsValid() const; virtual TGObject* Clone() const; //分解为TGPolygon2D virtual bool Explode(TGObjectList&oList) const; //edit //检查有效性,如果不成功,内部自动释放pMl bool AppendHole(TGMLine2D*pMl,bool bCheck=true); void ClearHole(); void DelHole(long i); TGMLine2D* FetchHole(long i); TGMLine2D& Hole(long i) const; //operate bool Inter(const TGPolygon2D&poly,TGObjectList&res) const; bool Inter(const TGPolygonEx2D&poly,TGObjectList&res) const; TGRegion2D* Union(const TGPolygon2D&poly) const; TGRegion2D* Union(const TGPolygonEx2D&poly) const; void SubtractBy(const TGPolygon2D&poly,TGObjectList&res) const; void SubtractBy(const TGPolygonEx2D&poly,TGObjectList&res) const; //只适用于边界线之间无交情况 void QuickCutBy(const TPGeGLine2D&line,TGObjectList&left,TGObjectList&right) const; protected: TPDList hole; }; #endif