Files
envi-code/SourceCode/Code2026/tg_shs/inc/TArch/DbDormer.h
T
2026-09-28 15:28:50 +08:00

284 lines
9.4 KiB
C++

#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<TObjInfoUnit> &) 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<XPoint>& lstVertex) const;
BOOL GetTwoSlopeVertexs(const double dRoofGrade,
DList<XPoint>& lstVertex) const;
BOOL GetThreeSlopeVertexs(const double dRoofGrade,
DList<XPoint>& lstVertex) const;
BOOL GetTrapeziaSlopeVertexs(const double dRoofGrade,
DList<XPoint>& lstVertex) const;
BOOL GetFlatWindowVertexs(const double dRoofGrade,
DList<XPoint>& 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