112 lines
3.9 KiB
C++
112 lines
3.9 KiB
C++
#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<XLine> 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<XLine>& lstLine,
|
|
const BOOL bRemoveSame=TRUE);//可任意的直线链表
|
|
const XPointList& GetMonoNode() const;
|
|
const XPointList& GetMultiNode() const;
|
|
const DList<XLine>& 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<TObjInfoUnit> &) 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 |