#ifndef __DBSLOPE_H #define __DBSLOPE_H //反应器基类 class TReactor { public: TReactor(); TReactor(const TReactor& src); ~TReactor(); protected: DList m_lstReactor; public: virtual BOOL IsValid() const; BOOL HasReactor() const; BOOL IsExist(const AcDbObjectId& objId); void GetReactors(DList& lstReactorId) const; void GetReactors(AcDbObjectIdArray& arReactorId) const; void SetReactors(const DList& 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 m_subSlopes; //内部的斜坡等高线 public: TSlope():XPoly2D(1) {} public: void ResetAll(); BOOL IsValid() const; void GetPolys(DList &lstPoly) const; void ProcessSlope(DList &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 &) 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