Files
envi-code/SourceCode/Code2026/tg_shs/inc/geo/TGGePoly2D.h
T
gjm 164968b62e chore
把非utf8-bom编码的cpp/h文件改为 utf8 bom 编码, msvc识别utf8编码时,如果不是bom格式的,会使用当前cp_oem来解码.
2026-10-04 00:04:20 +08:00

231 lines
6.1 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
//-----------------------------------------------------------------------------+
// Copyright (C), 1998-2007, Beijing Tangent Software Co. Ltd.
// = FileName : TGGePoly2D
// = Version : ver2.0
// = Author : wlw
// = CreateDate : 2002-09-09
// = Description: TGGePoly2D类声明
// = Maintainers:
//
//-----------------------------------------------------------------------------+
#ifndef _TGGEPOLY2D_H_
#define _TGGEPOLY2D_H_
#ifndef _TENTITYSET_H_
#include "TEntitySet.h"
#endif
#ifndef _TGGELINE_H_
#include "TGGeLine.h"
#endif
#ifndef _TGGEARC_H_
#include "TGGeArc.h"
#endif
#ifndef _TGGECURVESEGMENT_H_
#include "TGGeCurveSegment.h"
#endif
/*
#ifndef _TGGEDIRECTIONCURVE_H_
#include "TGGeDirectionCurve.h"
#endif
*/
#ifndef _TADSGEPOINT3D_H_
#include "TADSGePoint3d.h"
#endif
#ifndef _TGGEPOLY_H_
#include "TGGePoly.h"
#endif
#ifndef _TDPTRLIST_H_
#include "TDPtrList.h"
#endif
#ifndef _TADSGEPOINTLIST_H_
#include "TADSGePointList.h"
#endif
class TGGePoly3D;
class TGGeCurveSegment;
class TGGeDirectionCurve;
class GEOAPI TGGePoly2D : public TADSGePointList, public TGGeCurve
{
public:
TGGePoly2D();
TGGePoly2D(const TEntitySet& entPline);
TGGePoly2D(int nflg);
TGGePoly2D(const TGGePoly2D & src);
virtual ~TGGePoly2D();
virtual bool IsKindOf(TEntityId entType) const;
virtual TEntityId Type() const;
// add by xlc on 110413
virtual double GetLength()const; //曲线长度
virtual double Area() const;
virtual void Reset();
virtual bool SetAcDbCurve(AcDbCurve* pCurve);
virtual AcDbCurve* AsAcDbCurve()const;
virtual AcDbRegion *AsRegion() const;
virtual void CopyFrom(const TGGeEntity* pSrc);
virtual int Nth(int nIndex, TGGeLine &xline, TGGeArc &xarc, AcDb::Visibility *pVal = NULL) const;
virtual int Nth(int nIndex, TGGeCurveSegment & cvCurve, AcDb::Visibility *pVal = NULL) const;
virtual int Nth(int nIndex, TGGeDirectionCurve &curve, AcDb::Visibility *pVal = NULL) const;
virtual int Reverse();
virtual int Compress(bool bUnionCurve = true);
virtual int Make(LPCTSTR szLay = NULL) const;
virtual int MakeSegments(LPCTSTR szLay = NULL) const;
virtual int MakeSegment(int nIndex, LPCTSTR szLay = NULL) const;
virtual void TransformBy(const AcGeMatrix3d &mat);
virtual void RemoveNode(long nIndex);
virtual void InsertNodeAt(int nIndex, const TADSGePoint3d &pt, double dBulge = 0.0, AcDb::Visibility eVal = AcDb::kVisible);
virtual void InsertNodeAt(const TADSGePoint3d &ptOn, AcDb::Visibility eVal = AcDb::kVisible);
virtual void AppendNode(const TADSGePoint3d &pt, ads_real dBulge = 0.0, AcDb::Visibility eVal = AcDb::kVisible);
int operator ! () const;
TGGePoly2D& operator = (const TGGePoly2D &src);
void SetFlag(int nFlag);
int GetFlag() const;
void AppendBugle(ads_real dBugle);
void RemoveBugle(int nIndex);
double GetBulge(int nIndex) const;
void SetBulge(int nIndex, double dBugle);
int SetBulges(const TDPtrList<double>& ardbulges);
int GetBulges(TDPtrList<double>& ardbulges);
TDPtrList<double>& GetBulges();
ads_real Distance3d(int nIndex) const;
ads_real Distance3d() const;
ads_real Distance2d(int nIndex) const;
ads_real Distance2d() const;
// 求路径面积有正负之分,不闭合时为路径与X轴之间的区域面积,正负无实际意义
// 闭合时,路径围成的面积,为正表示曲线是顺时针方向的
ads_real PathArea() const;
double PathDistance2d(TADSGePoint3d ptHit) const;
//是否自交
BOOL IsSelfIntersect() const;
int IsValid(int nIndex) const;
int IsClosed() const;
bool SetClosed();
int HasArcSegment() const;
int TotalSegments() const;
int Polar2d(ads_real dis, TADSGePoint3d &ptRes, ads_real *dDrt = NULL) const;
int Polar3d(ads_real dis, TADSGePoint3d &ptRes, TVector3D & vt) const;
//取得封闭PLINE内的一点或外的一点
TADSGePoint3d GetPoint(int nIOFlag, ads_real dist);
TADSGePoint3d GetInsidePoint();
int AppendSegment(const TGGeCurveSegment &cvCurve, int bMinus = 0, int bFinal = 0);
// 消除路径的重合点,bUnionCurve为true时合并共线点
// 路径偏移,各段分别偏移,再求交点,构成偏移线
int Offset(ads_real nDist, TGGePoly2D &destPoly) const;
// 路径偏移,各顶点计算偏移,再求顶点的圆心角(弧段),构成偏移线
int QuickOffset(ads_real nDist, TGGePoly2D &destPoly) const;
int MapToPolygon1(TGGePoly &pts, double dDeviation);
int MapToPolygon(TGGePoly &pts, int nCirDiv = 30);
resbuf *Fence(int nCirDiv = 30);
resbuf *Polygon(int nCirDiv = 30);
int AsOpenPoly1(TGGePoly &pts, double dDeviation) const;
int AsOpenPoly(TGGePoly &pts, int nCirDiv = 30) const;
//离散化
void Disperse1(TGGePoly2D &polydestPoly, double dDeviation) const;
void Disperse(TGGePoly2D &polydestPoly, int nCirDiv = 30) const;
int CreatePface(int cirDivSegs, const TCHAR *szLay = NULL);
int GetExtend(ads_point lowPt, ads_point upPt) const;
//返回值nRet,
//nRet>0时表示的是输入点在第几个顶点上
//nRet<0时|nRet|表示的是输入点在第几条边上
//nRet=0表示不在线上
int HitTestOnCurve(const TADSGePoint3d &ptTest, double dTol = TchGeLib::_DIST_SNAP) const;
void SetPointListAt(int nIndex, const TADSGePoint3d& pt);
TADSGePoint3d* GetPointListAt(int nIndex);
const TADSGePoint3d& GetPointListAt(int nIndex) const;
void RemovePointListAt(int nIndex);
void AppendPointListAt(TADSGePoint3d* pPt);
TGGePoly3D PlaneToWcs(const AcGeVector3d& normal)const;
bool IsRegionInclude(const TGGePoly2D& poly)const;
bool IsRegionOverlap(const TGGePoly2D& poly)const;
public:
int m_nFlag;
TDPtrList<double> m_ardbulges;
};
/*
inline int TGGePoly2D::operator !() const
{
return (Length() < 2 ? 1 : 0);
}
inline int TGGePoly2D::IsValid(int nIndex) const
{
int nLen = Length();
if (nIndex < 0 || nIndex >= nLen)
{
return 0;
}
if (!(GetFlag() & 1) && nIndex == nLen - 1)
{
return 0;
}
return 1;
}
inline int TGGePoly2D::IsClosed() const
{
return ((GetFlag() & 0x01) ? 1 : 0);
}
inline int TGGePoly2D::TotalSegments() const
{
int nLen = Length();
return (GetFlag() & 1) ? nLen : nLen - 1;
}
inline double TGGePoly2D::Area() const
{
return fabs(PathArea());
}
*/
#endif