97 lines
2.5 KiB
C++
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
|