#ifndef __DBNETSHELF_H #define __DBNETSHELF_H //*******************// // 网架 // //*******************// //#include "DbEntity.h" class TARCH_EXP TDbNetshelf: public TDbEntity { DECLARE_TENTBASE(); ACRX_DECLARE_MEMBERS(TDbNetshelf); private: const static Adesk::UInt8 g_nVersion; public: TDbNetshelf(); ~TDbNetshelf(); protected: AcDbHardPointerId m_idLayerSphere; //球图层 double m_dRadiusSphere; //球半径 double m_dRadiusPole; //杆半径 BOOL m_bMonoAdded; //单甩节点加球否 DList m_lstPole; //杆 XPointList m_lstMono; //单甩节点 XPointList m_lstMulti; //公用节点 public: //球图层 void SetLayerSphere(AcDbObjectId idLayer); void SetLayerSphere(CString sLayer); AcDbObjectId GetLayerSphere() const; CString GetSphereLayer() const; //主图层 void SetLayer(CString sLayer); CString GetLayer() const; //其他网架参数 void SetRadiusSphere(double dRadius=50); void SetRadiusPole(double dRadius=25); void SetMonoAdded(BOOL bFlag=TRUE);//单甩节点加球否 BOOL IsMonoAdded() const; double GetRadiusSphere() const; double GetRadiusPole() const; //杆和节点(单甩或者公用) void ProcessNetshelf(const DList& lstLine, const BOOL bRemoveSame=TRUE);//可任意的直线链表 const XPointList& GetMonoNode() const; const XPointList& GetMultiNode() const; const DList& GetPole() const; //是否单甩或者公用节点 BOOL IsMonoNode(const XPoint& ptVertex) const; BOOL IsMultiNode(const XPoint& ptVertex) const; BOOL IsExit(const XLine& line) const; //添加或者删除杆 BOOL AddPole(const XLine& line); BOOL DelPole(const XLine& line); public: virtual BOOL IsValid() const; virtual void CopyPropertiesFrom(AcDbEntity *pSrcEntity, unsigned gMatchFlag); // Overriden function from AcDbEntity virtual Acad::ErrorStatus subGetClassID(CLSID* pClsid) const; Acad::ErrorStatus subGetOsnapPoints( AcDb::OsnapMode osnapMode, INT_PTR gsSelectionMark, const AcGePoint3d& ptPick, const AcGePoint3d& lastPoint, const AcGeMatrix3d& viewXform, AcGePoint3dArray& snapPoints, AcDbIntArray& geomIds) const; virtual Acad::ErrorStatus dwgInFields (AcDbDwgFiler*); virtual Acad::ErrorStatus dwgOutFields(AcDbDwgFiler*) const; virtual Acad::ErrorStatus dxfInFields (AcDbDxfFiler*); virtual Acad::ErrorStatus dxfOutFields(AcDbDxfFiler*) const; virtual Acad::ErrorStatus subTransformBy(const AcGeMatrix3d& xform); // drived from TDbEntity virtual bool IsModelEntity() const{return true;} virtual Acad::ErrorStatus ExplodeOrDraw3d(XExplodeDraw &dc) const; virtual Acad::ErrorStatus ExplodeOrDraw2d(XExplodeDraw &dc) const; virtual int GetFirstVersion()const{return 6;}//ok virtual Acad::ErrorStatus subGetGripPoints(AcGePoint3dArray& gripPoints, AcDbIntArray& osnapModes, AcDbIntArray& geomIds) const; virtual Acad::ErrorStatus subMoveGripPointsAt(const AcDbIntArray& indices, const AcGeVector3d& offset); virtual Acad::ErrorStatus GetGripText(int i, CString &cs) const; virtual void GetTips(DList &) const; //取动态属性显示数据 protected: Acad::ErrorStatus MovePoleGripPoints(const XPoint& ptDest, const AcGeVector3d& offset); Acad::ErrorStatus DrawSphere3D(XExplodeDraw &dc) const; Acad::ErrorStatus DrawPole3D(XExplodeDraw &dc) const; int GetSphereDivNum() const;//球分弧段数 int GetPoleDivNum() const;//杆分弧段数 BOOL GetSphereMesh(XPoint*& pPtArray,const XPoint& ptCenter, const int nLat,const int nLong) const; BOOL GetPoleMesh(XPoint*& pPtArray,const XLine& line,const int nCol) const; void RegulateNode(const XPoint& ptDest);//调整节点 //增加删除节点(自动进行单甩和公用节点的转换) void AddNode(const XPoint& ptNode); void DelNode(const XPoint& ptNode); }; #endif