160 lines
4.9 KiB
C++
160 lines
4.9 KiB
C++
#ifndef __DBSLOPE_H
|
|
#define __DBSLOPE_H
|
|
|
|
//反应器基类
|
|
class TReactor {
|
|
public:
|
|
TReactor();
|
|
TReactor(const TReactor& src);
|
|
~TReactor();
|
|
|
|
protected:
|
|
DList<AcDbSoftPointerId> m_lstReactor;
|
|
|
|
public:
|
|
virtual BOOL IsValid() const;
|
|
BOOL HasReactor() const;
|
|
BOOL IsExist(const AcDbObjectId& objId);
|
|
|
|
void GetReactors(DList<AcDbObjectId>& lstReactorId) const;
|
|
void GetReactors(AcDbObjectIdArray& arReactorId) const;
|
|
void SetReactors(const DList<AcDbObjectId>& lstReactorId);
|
|
void SetReactors(const AcDbObjectIdArray& arReactorId);
|
|
|
|
Acad::ErrorStatus Attach(const AcDbObjectId& objId);
|
|
Acad::ErrorStatus Attach(AcDbObject* pObj);
|
|
Acad::ErrorStatus Detach(const AcDbObjectId& objId);
|
|
Acad::ErrorStatus Detach(AcDbObject* pObj);
|
|
void DetachAll();
|
|
|
|
//设置可见性
|
|
BOOL IsShowReactor() const;
|
|
void ShowReactor(BOOL bShow=FALSE);
|
|
|
|
//删除实体的指定的永久响应
|
|
void RemovePersistentReactor(const AcDbObjectId& objId);
|
|
//当FALSE时,判断实体是否有永久响应,若有不删除
|
|
void EraseReactor(BOOL bEraseAll=FALSE);
|
|
virtual void NewReactor(Adesk::UInt16 color=1){}
|
|
|
|
public:
|
|
void TransformBy(const AcGeMatrix3d xform);
|
|
Acad::ErrorStatus DwgInFields(AcDbDwgFiler *pFiler);
|
|
Acad::ErrorStatus DwgOutFields(AcDbDwgFiler *pFiler) const;
|
|
Acad::ErrorStatus DxfInFields(AcDbDxfFiler *pFiler);
|
|
Acad::ErrorStatus DxfOutFields(AcDbDxfFiler *pFiler) const;
|
|
|
|
};
|
|
|
|
|
|
class TSlope: public XPoly2D {
|
|
public:
|
|
DList<TSlope> m_subSlopes; //内部的斜坡等高线
|
|
public:
|
|
TSlope():XPoly2D(1) {}
|
|
|
|
public:
|
|
void ResetAll();
|
|
BOOL IsValid() const;
|
|
void GetPolys(DList<XPoly2D> &lstPoly) const;
|
|
void ProcessSlope(DList<XPoly2D> &sortedRegions, TSlope *parent=NULL);
|
|
|
|
public:
|
|
Acad::ErrorStatus DwgInFields (AcDbDwgFiler*);
|
|
Acad::ErrorStatus DwgOutFields(AcDbDwgFiler*) const;
|
|
Acad::ErrorStatus ExplodeOrDraw2d(XExplodeDraw &dc) const;
|
|
Acad::ErrorStatus ExplodeOrDraw3d(XExplodeDraw &dc,
|
|
BOOL bSlope=FALSE, int nVertexNum=90) const;
|
|
void TransformBy(const AcGeMatrix3d xform);
|
|
};
|
|
|
|
|
|
//等高线实体(包括斜坡、梯田)
|
|
class TARCH_EXP TDbSlope: public TDbEntity, public TReactor {
|
|
DECLARE_TENTBASE();
|
|
ACRX_DECLARE_MEMBERS(TDbSlope);
|
|
public:
|
|
TDbSlope();
|
|
private:
|
|
const static Adesk::UInt8 g_nVersion;
|
|
|
|
protected:
|
|
Adesk::UInt16 m_nControlFlag;//标志,预留备用
|
|
Adesk::UInt16 m_nVertexNum;//顶点数
|
|
Adesk::UInt16 m_nCMFlag;//显示(二维显示)
|
|
BOOL m_bShowSlope;//1-显示斜坡,0-显示梯田
|
|
BOOL m_bEnableReact;//反应器是否有效
|
|
BOOL m_bTransformBy;
|
|
|
|
public:
|
|
TSlope m_slope;
|
|
|
|
public:
|
|
virtual BOOL IsValid() const;
|
|
virtual bool IsModelEntity() const{return true;}
|
|
|
|
|
|
//截面路径(封闭的)上的顶点数(分段数)
|
|
void SetVertexNum(int nNum=90);
|
|
int GetVertexNum() const;
|
|
|
|
//显示模式:TRUE-显示斜坡,FALSE-显示梯田
|
|
void ShowSlope(BOOL bSlope=TRUE);
|
|
BOOL IsShowSlope() const;
|
|
|
|
//使响应有(无)效
|
|
void EnableReact(BOOL bFlag=TRUE);
|
|
BOOL IsEnableReact() const;
|
|
|
|
//二维显示
|
|
void SetHas2D(BOOL bHas=TRUE);
|
|
BOOL Has2D() const;
|
|
|
|
//使transformBy有无效
|
|
void EnableTransformBy(BOOL bFlag);
|
|
BOOL IsTransformBy() const;
|
|
|
|
Acad::ErrorStatus DrawSlope3d(XExplodeDraw &dc) const;
|
|
|
|
public:
|
|
// Override from AcDbEntity
|
|
virtual Acad::ErrorStatus subGetClassID(CLSID* pClsid) 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);
|
|
virtual 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 subDeepClone(
|
|
AcDbObject* pOwner,
|
|
AcDbObject*& pClonedObject,
|
|
AcDbIdMapping& idMap,
|
|
Adesk::Boolean isPrimary) const;
|
|
virtual Acad::ErrorStatus subErase(Adesk::Boolean bErasing);
|
|
|
|
// Override from TEntityBase
|
|
virtual int GetFirstVersion()const{return 6;}//ok
|
|
virtual void CopyPropertiesFrom(AcDbEntity *pSrcEntity, unsigned gMatchFlag);
|
|
virtual Acad::ErrorStatus ExplodeOrDraw2d(XExplodeDraw &dc) const;
|
|
virtual Acad::ErrorStatus ExplodeOrDraw3d(XExplodeDraw &dc) const;
|
|
virtual void GetTips(DList<TObjInfoUnit> &) const; //取动态属性显示数据
|
|
|
|
// Override from TReactor
|
|
virtual void NewReactor(Adesk::UInt16 color=1);
|
|
// Override from AcDbObject Reactor
|
|
virtual void modified(const AcDbObject* pObj);
|
|
virtual void erased(const AcDbObject* pObj,Adesk::Boolean bErasing=Adesk::kTrue);
|
|
|
|
};
|
|
|
|
void InitDbSlope(BOOL bTrue);
|
|
void CreateSlope();
|
|
|
|
#endif |