284 lines
9.4 KiB
C++
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 |