#pragma once #include "aecdbentitybase.h" #include "AecDbObjXDataMap.h" #ifdef EARTHWORM_EXPORT #define DLLIMPEXP __declspec(dllexport) #else #define DLLIMPEXP __declspec(dllimport) #endif typedef struct DormerParam { enum DormerType { kSLOPE_TRIANGLE=0, //三角坡 kSLOPE_TWO=1, //双坡 kSLOPE_THREE=2, //三坡 kSLOPE_TRAPEZIA=3, //梯形坡 kSLOPE_FLAT=4, //平顶窗 }; //基本数据 DormerType m_dormerType;//老虎窗类型 double m_dWallHeight; double m_dWallWidth; double m_dWallThickness;//墙 double m_dWindowHeight; double m_dWindowWidth; //窗 double m_dSlopeGrade; double m_dSlopeHeight; double m_dSlopeThickness;//坡 double m_dExtendEaves; double m_dExtendHill; //伸出长度 //图层 TCHAR m_sz3DRoof[MAX_PATH];//顶层 TCHAR m_sz3DFloor[MAX_PATH];//底层 TCHAR m_sz3DWall[MAX_PATH];//侧墙层 TCHAR m_sz3DEaves[MAX_PATH];//檐层 TCHAR m_sz3DGlass[MAX_PATH];//玻璃层 TCHAR m_sz3DWindow[MAX_PATH];//眼窗层 }DORMERPARAM; class DLLIMPEXP AecDbXDormerWindow : public AecDbEntityBase { public: ACRX_DECLARE_MEMBERS(AecDbXDormerWindow); protected: static Adesk::UInt32 kCurrentVersionNumber; public: AecDbXDormerWindow(void); ~AecDbXDormerWindow(void); public: //老虎窗基点 void SetDormerBase(const AcGePoint3d& ptBase); AcGePoint3d GetDormerBase() const; //老虎窗方向 void SetDormerDir(const AcGeVector3d& vtDormerDir); AcGeVector3d GetDormerDir() const; //老虎窗参数 void SetDormerPar(const DormerParam& dormerPar); bool GetDormerPar(DormerParam& dormerPar) const; //显示窗户 void ShowWindow(BOOL bShow=TRUE); BOOL IsShowWindow() const; //老虎窗类型 LPCTSTR GetDormerType() const; public: virtual void subList() const; virtual Acad::ErrorStatus copyFrom(const AcRxObject* pSrc); virtual Acad::ErrorStatus subTransformBy(const AcGeMatrix3d& xform); virtual Acad::ErrorStatus subGetGripPoints (AcGePoint3dArray& gripPoints,AcDbIntArray& osnapModes,AcDbIntArray& geomIds) const; virtual Acad::ErrorStatus subGetGripPoints( AcDbGripDataPtrArray& grips, const double curViewUnitSize, const int gripSize, const AcGeVector3d& curViewDir, const int bitflags) const; virtual Acad::ErrorStatus subMoveGripPointsAt(const AcDbVoidPtrArray& appData, const AcGeVector3d& offset, const int bitflags); virtual Acad::ErrorStatus subMoveGripPointsAt(const AcDbIntArray& indices,const AcGeVector3d& offset); virtual Acad::ErrorStatus subGetStretchPoints(AcGePoint3dArray& stretchPoints) const; virtual Acad::ErrorStatus subMoveStretchPointsAt(const AcDbIntArray& indices,const AcGeVector3d& offset); 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; protected: virtual Acad::ErrorStatus Draw2d(AcGiDraw &dc) const; virtual Acad::ErrorStatus Draw3d(AcGiDraw &dc) const; Acad::ErrorStatus DrawLabel(AcGiDraw &dc,LPCTSTR pszLab) const; CString GetLabel() const; Acad::ErrorStatus DrawEntsToSolid(AcGiDraw& dc,AcDbVoidPtrArray& arEntPtrs) const; public: //专业数据 和绘制设置 virtual AecDbObjXDataMap* GetSpecialtyData(AcDb::OpenMode bMode = AcDb::kForWrite); virtual const AecDbObjXDataMap* GetSpecialtyData() const; protected: BOOL IsValid() const; protected: //专业数据 AecDbObjXDataMap m_mapSpecXData;//序列化 private: //夹点数据 void* m_pXDormerWindowImpl;//实现类 };