Files
envi-code/SourceCode/Code2026/tg_shs/inc/subgeo/TGPolygonEx2D.h
T
2026-09-28 15:28:50 +08:00

97 lines
2.5 KiB
C++

//-------------------------------------------------------------------------------------------------------+
// 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<TGMLine2D> hole;
};
#endif