88 lines
3.5 KiB
C++
88 lines
3.5 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 |