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

88 lines
3.8 KiB
C++

//------------------------------------------------------------------------+
// Copyright (C), 1998-2011, Beijing Tangent Software Co. Ltd.
// = FileName : TGGeVisibilityPoly2D类
// = Version : ver1.0
// = Author : xlc
// = CreateDate : 2011-04-13
// = Description: 具有可见性属性的poly2d类声明
// = Maintainers:
//
//------------------------------------------------------------------------+
#ifndef _TGGEVISIBILITYPOLY2D_H_
#define _TGGEVISIBILITYPOLY2D_H_
#ifndef _TGGEPOLY2D_H_
#include "TGGePoly2D.h"
#endif
#ifdef _TDPTRLIST_H_
#include "TDPtrList.h"
#endif
class TARCH_EXP TGGeVisibilityPoly2D : public TGGePoly2D
{
public:
TGGeVisibilityPoly2D();
TGGeVisibilityPoly2D(const TGGeVisibilityPoly2D & src);
virtual ~TGGeVisibilityPoly2D();
virtual void Reset();
virtual bool SetAcDbCurve(AcDbCurve* pCurve);
// 获取索引nIndex对应的线段
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();
// 删除重复点,当bUnionCurve为真时,合并可见性相同的共线的直线或共圆的弧
virtual int Compress(bool bUnionCurve = true);
// 根据可见性,整体绘制对象,并设置其图层
virtual int Make(LPCTSTR szLay = NULL) const;
// 根据可见性,将各段分别绘制,并设置其图层
virtual int MakeSegments(LPCTSTR szLay = NULL) const;
// 根据可见性,绘制索引nIndex所在线段,并设置其图层
virtual int MakeSegment(int nIndex, LPCTSTR szLay = NULL) const;
virtual void TransformBy(const AcGeMatrix3d &mat);
// 删除索引对应的顶点,凸度值,可见性
virtual void RemoveNode(long nIndex);
// nIndex为点链表的索引,当nIndex < Length() - 1 时 将点pt插入到索引nIndex之后,并设置其凸度值dBulge和可见性eVal;
// 否则直接将点插入链表末尾,并设置其凸度值dBulge和可见性eVal
virtual void InsertNodeAt(int nIndex, const TADSGePoint3d &pt, double dBulge = 0.0, AcDb::Visibility eVal = AcDb::kVisible);
// 当ptOn为线上的点时,进行以下处理:1.ptOn为线的顶点时,直接修改该点的可见性;2.ptOn不为线的顶点时,将点插入到对象中,并设置其可见性
virtual void InsertNodeAt(const TADSGePoint3d &ptOn, AcDb::Visibility eVal = AcDb::kVisible);
// 设置两点间线段的可见性(两点必须都在线上)
void InsertNodeAt(const TADSGePoint3d &ptOn1, const TADSGePoint3d &ptOn2,AcDb::Visibility eVal = AcDb::kInvisible);
// 添加顶点,设置其凸度值和可见性
virtual void AppendNode(const TADSGePoint3d &pt, ads_real dBulge = 0.0, AcDb::Visibility eVal = AcDb::kVisible);
TGGeVisibilityPoly2D& operator = (const TGGeVisibilityPoly2D &src);
// add by xlc on 110427 获得poly离pt点近的一端指向poly内的方向
bool GetIDirection(AcGePoint3d pt, double& dDir);
// 设置整体的可见性
void SetVisible(AcDb::Visibility dNewVal);
// 根据索引nIndex,设置某一段线的可见性
void SetVisibleAt(int nIndex, AcDb::Visibility dNewVal);
// 当ptOn为对象的顶点时,设置其所在线段的可见性
void SetVisibleAt(const TADSGePoint3d& ptOn, AcDb::Visibility dNewVal);
// 设置索引范围nFrom至nTo的线段的可见性(nFrom <= nTo)
void SetVisibleAt(int nFrom, int nTo, AcDb::Visibility dNewVal);
AcDb::Visibility GetVisibleAt(int nIndex)const;
AcDb::Visibility GetVisibleAt(const TADSGePoint3d& ptOn)const;
int SetVisibilities( TDPtrList<AcDb::Visibility> &arnVisibility );
int GetVisibilities( TDPtrList<AcDb::Visibility> &arnVisibility );
TDPtrList<AcDb::Visibility>& GetVisibilities();
private:
TDPtrList<AcDb::Visibility> m_arnVisibility;
};
#endif