#pragma once #include "AecDbBDPipeBase.h" #include "define_class_xdata_key.h" #ifdef EARTHWORM_EXPORT #define DLLIMPEXP __declspec(dllexport) #else #define DLLIMPEXP __declspec(dllimport) #endif class DLLIMPEXP AecDbWell: public AecDbBDPipeBase { public: ACRX_DECLARE_MEMBERS(AecDbWell); enum TYPE { eCircle = 0, eRect, }; protected: static Adesk::UInt32 kCurrentVersionNumber; public: AecDbWell(); ~AecDbWell(); virtual Acad::ErrorStatus subExplode(AcDbVoidPtrArray& entitySet) const; virtual void subList() const; virtual Acad::ErrorStatus copyFrom(const AcRxObject* pSrc); virtual Acad::ErrorStatus subTransformBy(const AcGeMatrix3d& xform); virtual Acad::ErrorStatus Draw2d(AcGiDraw &dc) const; virtual Acad::ErrorStatus Draw3d(AcGiDraw &dc) const; virtual Acad::ErrorStatus dwgInFields(AcDbDwgFiler* pFiler); virtual Acad::ErrorStatus dwgOutFields(AcDbDwgFiler* pFiler) const; virtual Acad::ErrorStatus dxfInFields(AcDbDxfFiler* pFiler); virtual Acad::ErrorStatus dxfOutFields(AcDbDxfFiler* pFiler) const; virtual void GetGripText(int nPos, CString& sText); virtual Acad::ErrorStatus subGetGripPoints(AcDbGripDataPtrArray& grips, const double curViewUnitSize, const int gripSize, const AcGeVector3d& curViewDir, const int bitflags) const; virtual Acad::ErrorStatus subGetGripPoints(AcGePoint3dArray &gripPoints, AcDbIntArray &osnapModes, AcDbIntArray &geomIds) const; virtual Acad::ErrorStatus subMoveGripPointsAt(const AcDbIntArray& indices, const AcGeVector3d& offset); virtual SHJson::WValue& ToJson(bool bExprotGeo = true) const; virtual bool ByJson(const SHJson::WValue &v); private: // 生成井主体截面,路径 void initWell(); // 生成井盖 void addCover(); public: // 设置基础几何数据 void SetRectWellData(const AcGePoint3d &ptTop , const double &t , const double &ct , const double &h , const double &l , const double &w); void SetCircleWellData(const AcGePoint3d &ptTop , const double &t , const double &ct , const double &h , const double &d); // 设置与其相连接的管道 void SetPipes(const std::vector &ids); void GetPipes(std::vector &ids); public: // 井类型 方、圆 DEF_XDATA_KEY_FUN(Type, int, _Type_); // 井壁厚 DEF_XDATA_KEY_FUN(Thick, double, _T_); // 井深 DEF_XDATA_KEY_FUN(Height, double, _H_); // 井直径 DEF_XDATA_KEY_FUN(Dia, double, _D_); // 井长 DEF_XDATA_KEY_FUN(L, double, _L_); // 井宽 DEF_XDATA_KEY_FUN(W, double, _W_); // 顶位置 DEF_XDATA_KEY_FUN(TopPt, AcGePoint3d, _TOP_PT_); // 连管数量 DEF_XDATA_KEY(_pipe_count_); // 连管名称n DEF_XDATA_KEY(_pipe_name_); // 井盖厚度 DEF_XDATA_KEY_FUN(CoverThick, double, _well_cover_thick_); // 井编号 DEF_XDATA_KEY_FUN(Name, CString, _well_name_); // 是否显示编号 DEF_XDATA_KEY_FUN(DrawLable, int, _well_draw_lable_); };