//------------------------------------------------------------------------+ // 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 &arnVisibility ); int GetVisibilities( TDPtrList &arnVisibility ); TDPtrList& GetVisibilities(); private: TDPtrList m_arnVisibility; }; #endif