#ifndef __DBDORMER_H #define __DBDORMER_H //#include "dbentity.h" //老虎窗(对话框)参数 class TARCH_EXP TDormerPar { public://老虎窗类型:三角坡、双坡、三坡、梯形坡、平顶窗 enum DormerType {SLOPE_TRIANGLE=0,SLOPE_TWO=1, SLOPE_THREE=2,SLOPE_TRAPEZIA=3,SLOPE_FLAT=4,}; public: TDormerPar(); ~TDormerPar(); protected: DormerType m_dormerType;//老虎窗类型 double m_dWallHeight,m_dWallWidth,m_dWallThickness;//墙 double m_dWindowHeight,m_dWindowWidth;//窗 double m_dSlopeGrade,m_dSlopeHeight,m_dSlopeThickness;//坡 double m_dExtendEaves,m_dExtendHill;//伸出长度 public: TDormerPar & operator = (const TDormerPar &src) { m_dormerType=src.m_dormerType; m_dWallHeight=src.m_dWallHeight; m_dWallWidth=src.m_dWallWidth; m_dWallThickness=src.m_dWallThickness; m_dSlopeGrade=src.m_dSlopeGrade; m_dSlopeHeight=src.m_dSlopeHeight; m_dSlopeThickness=src.m_dSlopeThickness; m_dExtendEaves=src.m_dExtendEaves; m_dExtendHill=src.m_dExtendHill; m_dWindowHeight=src.m_dWindowHeight; m_dWindowWidth=src.m_dWindowWidth; return *this; } BOOL IsValid() const; void SetDormerType(DormerType dormerType);//老虎窗类型 void SetWallHeight(double dHeight);//墙 void SetWallWidth(double dWidth); void SetWallThickness(double dThickness); void SetWindowHeight(double dHeight);//窗 void SetWindowWidth(double dWidth); void SetSlopeGrade(double dGrade);//坡 void SetSlopeHeight(double dHeight); void SetSlopeThickness(double dThickness); void SetExtendEaves(double dEaves);//伸出长度 void SetExtendHill(double dHill); DormerType GetDormerType() const; double GetWallHeight() const; double GetWallWidth() const; double GetWallThickness() const; double GetWindowHeight() const; double GetWindowWidth() const; double GetSlopeGrade() const; double GetSlopeHeight() const; double GetSlopeThickness() const; double GetExtendEaves() const; double GetExtendHill() const; }; //老虎窗图层 class TARCH_EXP TDormerLayer { public: TDormerLayer(); ~TDormerLayer(); protected: AcDbObjectId m_id3DRoof; //顶 AcDbObjectId m_id3DFloor; //底 AcDbObjectId m_id3DWall; //墙 AcDbObjectId m_id3DEaves; //檐 AcDbObjectId m_id3DGlass; //玻璃 AcDbObjectId m_id3DWindow; //窗 public: TDormerLayer & operator = (const TDormerLayer &src) { m_id3DRoof=src.m_id3DRoof; m_id3DFloor=src.m_id3DFloor; m_id3DEaves=src.m_id3DEaves; m_id3DWall=src.m_id3DWall; m_id3DGlass=src.m_id3DGlass; m_id3DWindow=src.m_id3DWindow; return *this; } void InitDefaults(); void SetRoof(AcDbObjectId idLayer); void SetFloor(AcDbObjectId idLayer); void SetWall(AcDbObjectId idLayer); void SetEaves(AcDbObjectId idLayer); void SetGlass(AcDbObjectId idLayer); void SetWindow(AcDbObjectId idLayer); void SetRoof(const TCHAR *sName); void SetFloor(const TCHAR *sName); void SetWall(const TCHAR *sName); void SetEaves(const TCHAR *sName); void SetGlass(const TCHAR *sName); void SetWindow(const TCHAR *sName); XString GetRoofName() const; XString GetFloorName() const; XString GetWallName() const; XString GetEavesName() const; XString GetGlassName() const; XString GetWindowName() const; AcDbObjectId GetRoofId() const; AcDbObjectId GetFloorId() const; AcDbObjectId GetWallId() const; AcDbObjectId GetEavesId() const; AcDbObjectId GetGlassId() const; AcDbObjectId GetWindowId() const; }; //老虎窗 class TARCH_EXP TDbDormer: public TDbEntity { DECLARE_TENTBASE(); ACRX_DECLARE_MEMBERS(TDbDormer); private: const static Adesk::UInt8 g_nVersion; public: TDbDormer(); ~TDbDormer(); protected: TDormerLayer m_dormerLayer; //老虎窗图层 TDormerPar m_dormerPar; //老虎窗参数 XVector3D m_vtDormerDir; //老虎窗方向 XPoint m_ptDormerBase; //老虎窗基点 Adesk::Boolean m_bShowWindow; //显示窗户否 // 编号参数 5个 XString m_sLabel; //门窗编号 XPoint m_ptLabel; //编号位置 AcDbHardPointerId m_idTextStyle, m_idLayerText; //文字样式和图层 double m_nTextHeight; //文字转角(WCS),文字高度 public: //老虎窗基点 void SetDormerBase(XPoint ptBase); XPoint GetDormerBase() const; //老虎窗方向 void SetDormerDir(XVector3D vtDormerDir); XVector3D GetDormerDir() const; //老虎窗参数 void SetDormerPar(const TDormerPar& dormerPar); const TDormerPar & GetDormerPar() const; //老虎窗图层 void SetDormerLayer(const TDormerLayer& dormerLayer); const TDormerLayer & GetDormerLayer() const; //显示窗户 void ShowWindow(BOOL bShow=TRUE); BOOL IsShowWindow() const; //老虎窗类型 XString GetDormerType() const; //老虎窗参数的放大和缩小 Acad::ErrorStatus DormerParTransformBy(const AcGeMatrix3d& xform); void DrawLabel(XExplodeDraw &dc, const TCHAR *szLab) const; XPoint GetDefaultLabPos() const; // 文字参数 5 const TCHAR *GetLabel() const { return (const TCHAR *)m_sLabel; } XPoint GetLabelPos() const { return m_ptLabel; } AcDbObjectId GetTextStyle() const { return m_idTextStyle; } AcDbObjectId GetLayerText() const { return m_idLayerText; } double GetTextHeight(BOOL bAsPaperUnit=TRUE) const { double h=m_nTextHeight; if(!bAsPaperUnit) h *= GetPScale(); return h; } // 文字参数 5 void SetLabel(const TCHAR *szLabel) { assertWriteEnabled(); if(szLabel) m_sLabel=szLabel; } void SetLabelPos(XPoint pt){ assertWriteEnabled(); m_ptLabel=XPoint(pt.x, pt.y); } void SetTextStyle(AcDbObjectId idStyle) { assertWriteEnabled(); m_idTextStyle=idStyle; } void SetLayerText(AcDbObjectId idLayer) { assertWriteEnabled(); m_idLayerText=idLayer; } void SetTextHeight(double nHeight, BOOL bAsPaperUnit=TRUE) { assertWriteEnabled(); if(bAsPaperUnit) m_nTextHeight=nHeight; else m_nTextHeight=nHeight/GetPScale(); } public: virtual BOOL IsValid() const; virtual bool IsModelEntity() const{return true;} virtual void CopyPropertiesFrom(AcDbEntity *pSrcEntity, unsigned gMatchFlag); virtual const TCHAR *GetDefaultLayer() const; // 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 int GetFirstVersion()const{return 6;}//ok virtual Acad::ErrorStatus ExplodeOrDraw3d(XExplodeDraw &dc) const; virtual Acad::ErrorStatus ExplodeOrDraw2d(XExplodeDraw &dc) const; //提供插入基点的夹点操作,是基点始终在屋顶平面上 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 &) const; //取动态属性显示数据 virtual long GetSubTextNum()const{return 1;}//ok virtual void SetSubText(long i,CString sText){SetLabel(sText);}//ok // sg add 110224,增加自动编号 virtual CString GetAutoLabel(bool &bAddNum)const; protected: BOOL GetTriangleSlopeVertexs(const double dRoofGrade, DList& lstVertex) const; BOOL GetTwoSlopeVertexs(const double dRoofGrade, DList& lstVertex) const; BOOL GetThreeSlopeVertexs(const double dRoofGrade, DList& lstVertex) const; BOOL GetTrapeziaSlopeVertexs(const double dRoofGrade, DList& lstVertex) const; BOOL GetFlatWindowVertexs(const double dRoofGrade, DList& lstVertex) const; Acad::ErrorStatus DrawTriangleSlope3D(XExplodeDraw &dc, const AcGeMatrix3d &mat,const double dRoofGrade) const; Acad::ErrorStatus DrawTwoSlope3D(XExplodeDraw &dc, const AcGeMatrix3d &mat,const double dRoofGrade) const; Acad::ErrorStatus DrawThreeSlope3D(XExplodeDraw &dc, const AcGeMatrix3d &mat,const double dRoofGrade) const; Acad::ErrorStatus DrawTrapeziaSlope3D(XExplodeDraw &dc, const AcGeMatrix3d &mat,const double dRoofGrade) const; Acad::ErrorStatus DrawFlatWindow3D(XExplodeDraw &dc, const AcGeMatrix3d &mat,const double dRoofGrade) const; Acad::ErrorStatus DrawTriangleSlope2D(XExplodeDraw &dc, const AcGeMatrix3d &mat,const double dRoofGrade) const; Acad::ErrorStatus DrawTwoSlope2D(XExplodeDraw &dc, const AcGeMatrix3d &mat,const double dRoofGrade) const; Acad::ErrorStatus DrawThreeSlope2D(XExplodeDraw &dc, const AcGeMatrix3d &mat,const double dRoofGrade) const; Acad::ErrorStatus DrawTrapeziaSlope2D(XExplodeDraw &dc, const AcGeMatrix3d &mat,const double dRoofGrade) const; Acad::ErrorStatus DrawFlatWindow2D(XExplodeDraw &dc, const AcGeMatrix3d &mat,const double dRoofGrade) const; void DrawWindow(const XPoint& pt1,const XPoint& pt2, const XPoint& pt3,XExplodeDraw &dc) const; void DrawWindow(const XPoint& pt1,const XPoint& pt2, const XPoint& pt3,const XPoint& pt4, XExplodeDraw &dc) const; }; int EditDormer0(AcDbObjectId id); void CreateDormer(); #endif