#include "stdafx.h" #include "SFPXLTDlg.h" #include "EarThwormDef.h" #include "CoreTools.h" #include "uihistory.h" #include "AecDbParaLlelStair.h" IMPLEMENT_DYNAMIC(CSFPXLTDlg, CDialog) CSFPXLTDlg::CSFPXLTDlg(CWnd *pParent /*=NULL*/) : CDialog(CSFPXLTDlg::IDD, pParent) , m_sH(_T("3000")) , m_nSteepS(20) , m_nSteepsS(15) , m_dSteepH(150) , m_dSteepW(270) , m_nSSteeps(5) , m_dStairTW(5000) , m_dStairSW(1200) , m_dStairMW(2400) , m_dWell(100) , m_bLBeam(FALSE) , m_bRBeam(FALSE) , m_nUpSide(0) , m_nRestShape(0) , m_nSteepAlign(0) , m_nFloorShow(1) , m_bDimUpstair(TRUE) , m_bOutSideHRail(FALSE) , m_bOutSideRail(FALSE) , m_bInsideRail(TRUE) , m_dBarH(900) , m_dBarSw(60) , m_dBarSide(10) , m_dZGarExt(60) , m_dGarExt(60) , m_dBomEl(0) , m_sGarMat(_T("柚木")) , m_dRestPtW(1200) , m_dSbThick(100) , m_dStiffnW(100) , m_dStiffnH(100) , m_dBarSh(60) , m_dRailSw(30) , m_dRailSh(30) , m_sBarMat(_T("不锈钢管")) , m_nSteepMs(5) , m_nRailCirSec(FALSE) { GET_CACHE(CSFPXLTDlg , %s%s%s%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f , &m_sH , &m_sGarMat , &m_sBarMat , &m_nSSteeps , &m_nSteepsS , &m_nSteepS , &m_nUpSide , &m_nRestShape , &m_nSteepAlign , &m_nFloorShow , &m_nSteepMs , &m_nRailCirSec , &m_bDimUpstair , &m_bOutSideHRail , &m_bOutSideRail , &m_bInsideRail , &m_bLBeam , &m_bRBeam , &m_dSteepH , &m_dSteepW , &m_dStairTW , &m_dStairSW , &m_dStairMW , &m_dWell , &m_dBarH , &m_dBarSw , &m_dBarSide , &m_dZGarExt , &m_dGarExt , &m_dBomEl , &m_dRestPtW , &m_dSbThick , &m_dStiffnW , &m_dStiffnH , &m_dBarSh , &m_dRailSw , &m_dRailSh); } CSFPXLTDlg::~CSFPXLTDlg() { } void CSFPXLTDlg::DoDataExchange(CDataExchange *pDX) { CDialog::DoDataExchange(pDX); DDX_Text(pDX, IDC_EDIT1, m_sH); DDX_Text(pDX, IDC_EDIT2, m_nSteepS); DDX_Text(pDX, IDC_EDIT6, m_dSteepH); DDX_Text(pDX, IDC_EDIT10, m_dSteepW); DDX_Text(pDX, IDC_EDIT24, m_nSSteeps); DDX_Text(pDX, IDC_EDIT11, m_dStairTW); DDX_Text(pDX, IDC_EDIT15, m_dStairSW); DDX_Text(pDX, IDC_EDIT16, m_dStairMW); DDX_Text(pDX, IDC_EDIT17, m_dWell); DDX_Check(pDX, IDC_CHECK1, m_bLBeam); DDX_Check(pDX, IDC_CHECK2, m_bRBeam); DDX_Radio(pDX, IDC_RADIO1, m_nUpSide); DDX_Radio(pDX, IDC_RADIO3, m_nRestShape); DDX_Radio(pDX, IDC_RADIO6, m_nSteepAlign); DDX_Radio(pDX, IDC_RADIO10, m_nFloorShow); DDX_Check(pDX, IDC_CHECK8, m_bDimUpstair); DDX_Check(pDX, IDC_CHECK6, m_bOutSideHRail); DDX_Check(pDX, IDC_CHECK9, m_bOutSideRail); DDX_Check(pDX, IDC_CHECK13, m_bInsideRail); DDX_Text(pDX, IDC_EDIT3, m_nSteepsS); DDX_Text(pDX, IDC_EDIT18, m_dBarH); DDX_Text(pDX, IDC_EDIT19, m_dBarSw); DDX_Text(pDX, IDC_EDIT25, m_dBarSh); DDX_Text(pDX, IDC_EDIT20, m_dBarSide); DDX_Text(pDX, IDC_EDIT22, m_dZGarExt); DDX_Text(pDX, IDC_EDIT23, m_dGarExt); DDX_Text(pDX, IDC_EDIT40, m_dBomEl); DDX_CBString(pDX, IDC_COMBO4, m_sGarMat); DDX_Text(pDX, IDC_EDIT4, m_dRestPtW); DDX_Text(pDX, IDC_EDIT33, m_dSbThick); DDX_Text(pDX, IDC_EDIT31, m_dStiffnW); DDX_Text(pDX, IDC_EDIT32, m_dStiffnH); DDX_Text(pDX, IDC_EDIT30, m_dRailSw); DDX_Text(pDX, IDC_EDIT28, m_dRailSh); DDX_CBString(pDX, IDC_COMBO6, m_sBarMat); DDX_Text(pDX, IDC_EDIT26, m_nSteepMs); DDX_Check(pDX, IDC_CHECK14, m_nRailCirSec); } BEGIN_MESSAGE_MAP(CSFPXLTDlg, CDialog) ON_BN_CLICKED(IDOK, &CSFPXLTDlg::OnBnClickedOk) ON_EN_CHANGE(IDC_EDIT1, &CSFPXLTDlg::OnEnChangeEdit1) ON_EN_CHANGE(IDC_EDIT3, &CSFPXLTDlg::OnEnChangeEdit3) ON_EN_CHANGE(IDC_EDIT26, &CSFPXLTDlg::OnEnChangeEdit26) ON_EN_CHANGE(IDC_EDIT6, &CSFPXLTDlg::OnEnChangeEdit6) END_MESSAGE_MAP() BOOL CSFPXLTDlg::OnInitDialog() { CDialog::OnInitDialog(); // 子类化控件对象 if (!m_wndViewCtrl.SubclassDlgItem(IDC_STATIC_FRM, this)) { return FALSE; } //PreView2d(); PreView3d(); UpdateData(FALSE); return TRUE; } //H void CSFPXLTDlg::OnEnChangeEdit1() { UpdateData(); int nSteps = (int)(_ttof(m_sH) / m_dSteepH + 0.5) - (m_nSteepMs + m_nSteepsS); m_nSteepMs += nSteps / 2; m_nSteepsS += (nSteps - nSteps / 2); m_nSteepS = m_nSteepMs + m_nSteepsS; UpdateData(FALSE); } //steps1 void CSFPXLTDlg::OnEnChangeEdit3() { UpdateData(); double dH = (m_nSteepMs + m_nSteepsS) * m_dSteepH; m_sH.Format(_T("%.1f"), dH); m_nSteepS = m_nSteepMs + m_nSteepsS; UpdateData(FALSE); } //steps2 void CSFPXLTDlg::OnEnChangeEdit26() { UpdateData(); double dH = (m_nSteepMs + m_nSteepsS) * m_dSteepH; m_sH.Format(_T("%.1f"), dH); m_nSteepS = m_nSteepMs + m_nSteepsS; UpdateData(FALSE); } //steph void CSFPXLTDlg::OnEnChangeEdit6() { UpdateData(); double dH = (m_nSteepMs + m_nSteepsS) * m_dSteepH; m_sH.Format(_T("%.1f"), dH); UpdateData(FALSE); } void CSFPXLTDlg::OnBnClickedOk() { UpdateData(); SET_CACHE(CSFPXLTDlg , %s%s%s%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f , m_sH , m_sGarMat , m_sBarMat , m_nSSteeps , m_nSteepsS , m_nSteepS , m_nUpSide , m_nRestShape , m_nSteepAlign , m_nFloorShow , m_nSteepMs , m_nRailCirSec , m_bDimUpstair , m_bOutSideHRail , m_bOutSideRail , m_bInsideRail , m_bLBeam , m_bRBeam , m_dSteepH , m_dSteepW , m_dStairTW , m_dStairSW , m_dStairMW , m_dWell , m_dBarH , m_dBarSw , m_dBarSide , m_dZGarExt , m_dGarExt , m_dBomEl , m_dRestPtW , m_dSbThick , m_dStiffnW , m_dStiffnH , m_dBarSh , m_dRailSw , m_dRailSh ); CDialog:: OnOK(); } bool CSFPXLTDlg::GetSFPXStair(SFPXStair &data) const { data.dH = _ttof(m_sH); //楼梯高度 data.nSteepS = m_nSteepS; //踏步总数 data.dSteepH = m_dSteepH; //踏步高度 data.dSteepW = m_dSteepW; //踏步宽度 data.nSteepsS= m_nSteepsS; //边梯步数 data.dStairTW= m_dStairTW; //梯间宽度 data.dStairSW= m_dStairSW; //边梯宽度 data.dStairMW= m_dStairMW; //中梯段宽 data.nSSteeps = m_nSSteeps; //剖切步数 data.nSteepMs = m_nSteepMs; //中梯步数 data.dWell = m_dWell; //井宽 100 国标 data.bLBeam = m_bLBeam; //内边梁 data.bRBeam = m_bRBeam; //外边梁 data.nUpSide = m_nUpSide; //上梯位置 data.nSteepAlign = m_nSteepAlign; //踏步取齐 data.nFloorShow = m_nFloorShow; //层显示类型 data.bDimUpstair = m_bDimUpstair; //标注上楼方向 //平台参数 data.nRestShape = m_nRestShape; //休息平台形状 data.dRestPtW = m_dRestPtW; //休息平台宽 data.dStiffnW = m_dStiffnW; //加强筋宽 钢梯无效 data.dStiffnH = m_dStiffnH; //加强筋高 钢梯无效 data.dSbThick = m_dSbThick; //平台板厚 data.bOutSideHRail = m_bOutSideHRail;//有外侧扶手 data.bOutSideRail = m_bOutSideRail; //有外侧栏杆 data.bInsideRail = m_bInsideRail; //有内侧栏杆 data.dBomEl = m_dBomEl; //楼梯底部标高 //扶手护栏 data.dBarH = m_dBarH; //扶手高度 data.dGarSize[0] = m_dBarSw; data.dGarSize[1] = m_dBarSw; data.dGarExt = m_dGarExt; //转角扶手伸出 60 默认 data.dZGarExt= m_dZGarExt; //层间伸出 60 默认 data.nGShape = 1; //截面类型0 Rect 1 C _tcscpy(data.szGarMat,m_sGarMat); //材质 data.dBarSp = 60; //护栏间距 预留 data.dBarSize[0] = m_dRailSw; //护栏截面尺寸 data.dBarSize[1] = m_dRailSh; data.dBarSide = m_dBarSide; //扶手距边 data.nBShape = m_nRailCirSec; //护栏截面类型0 Rect 1 C _tcscpy(data.szBarMat, m_sBarMat); //材质 return true; } void CSFPXLTDlg::SetSFPXStair(const SFPXStair& data) { //data.dH = _ttof(m_sH); //楼梯高度 m_nSteepS = data.nSteepS; //踏步总数 m_dSteepH = data.dSteepH; //踏步高度 m_dSteepW = data.dSteepW; //踏步宽度 m_nSteepsS = data.nSteepsS; //边梯步数 m_dStairTW = data.dStairTW; //梯间宽度 m_dStairSW = data.dStairSW; //边梯宽度 m_dStairMW = data.dStairMW; //中梯段宽 m_nSSteeps = data.nSSteeps; //剖切步数 m_nSteepMs = data.nSteepMs; //中梯步数 m_dWell = data.dWell; //井宽 100 国标 m_bLBeam = data.bLBeam; //内边梁 m_bRBeam = data.bRBeam; //外边梁 m_nUpSide = data.nUpSide; //上梯位置 m_nSteepAlign = data.nSteepAlign; //踏步取齐 m_nFloorShow = data.nFloorShow; //层显示类型 m_bDimUpstair = data.bDimUpstair; //标注上楼方向 //平台参数 m_nRestShape = data.nRestShape; //休息平台形状 m_dRestPtW = data.dRestPtW; //休息平台宽 m_dStiffnW = data.dStiffnW; //加强筋宽 钢梯无效 m_dStiffnH = data.dStiffnH; //加强筋高 钢梯无效 m_dSbThick = data.dSbThick; //平台板厚 m_bOutSideHRail = data.bOutSideHRail;//有外侧扶手 m_bOutSideRail = data.bOutSideRail; //有外侧栏杆 m_bInsideRail = data.bInsideRail; //有内侧栏杆 m_dBomEl = data.dBomEl; //楼梯底部标高 //扶手护栏 m_dBarH = data.dBarH; //扶手高度 m_dBarSw = data.dGarSize[0]; m_dBarSw = data.dGarSize[1]; m_dGarExt = data.dGarExt; //转角扶手伸出 60 默认 m_dZGarExt = data.dZGarExt; //层间伸出 60 默认 //data.nGShape = 1; //截面类型0 Rect 1 C //_tcscpy(data.szGarMat, m_sGarMat); //材质 //data.dBarSp = 60; //护栏间距 预留 m_dRailSw = data.dBarSize[0]; //护栏截面尺寸 m_dRailSh = data.dBarSize[1]; m_dBarSide = data.dBarSide; //扶手距边 m_nRailCirSec = data.nBShape; //护栏截面类型0 Rect 1 C //_tcscpy(data.szBarMat, m_sBarMat); //材质 return; } void CSFPXLTDlg::PreView2d() { AcDbObjectId idLayStair = KTSetting::InitLayer(_T("LAY_CSTAIR"), true); AecDbParaLlelStair* pStair = new AecDbParaLlelStair; SFPXStair data; ::memset(&data, 0, sizeof(SFPXStair)); GetSFPXStair(data); pStair->setLayer(idLayStair); pStair->SetSFPXStair(data); pStair->SetSection(data.dBarSize[0], 0.0); AcDbLine ln; ln.setStartPoint(AcGePoint3d::kOrigin); ln.setEndPoint(AcGePoint3d::kOrigin + AcGeVector3d::kYAxis * 100); CoreTools::CloneAndAddToModelSpace(&ln); pStair->SetBaseCurve(&ln); pStair->GetSpecialtyData()->SetAt(KEY_2DSTYLE, 0); m_wndViewCtrl.clearAll(); m_wndViewCtrl.init(true); m_wndViewCtrl.SetOrbitFlag(OBF_PAN | OBF_ZOOM | OBF_COTE); AcDbExtents ext; pStair->getGeomExtents(ext); m_wndViewCtrl.InitFromCurrentView2D(ext, true); m_wndViewCtrl.Add(pStair); pStair->close(); m_wndViewCtrl.view()->invalidate(); m_wndViewCtrl.Invalidate(); m_wndViewCtrl.RedrawWindow(); } void CSFPXLTDlg::PreView3d() { AcDbObjectId idLayStair = KTSetting::InitLayer(_T("LAY_CSTAIR"), true); AecDbParaLlelStair* pStair = new AecDbParaLlelStair; SFPXStair data; ::memset(&data, 0, sizeof(SFPXStair)); GetSFPXStair(data); pStair->setLayer(idLayStair); pStair->SetSFPXStair(data); pStair->SetSection(data.dBarSize[0], 0.0); AcDbLine ln; ln.setStartPoint(AcGePoint3d::kOrigin); ln.setEndPoint(AcGePoint3d::kOrigin + AcGeVector3d::kYAxis * 100); CoreTools::CloneAndAddToModelSpace(&ln); pStair->SetBaseCurve(&ln); pStair->GetSpecialtyData()->SetAt(KEY_2DSTYLE, 0); m_wndViewCtrl.clearAll(); m_wndViewCtrl.init(true); m_wndViewCtrl.SetOrbitFlag(OBF_PAN | OBF_ZOOM | OBF_COTE); AcDbExtents ext; pStair->getGeomExtents(ext); m_wndViewCtrl.InitFromCurrentView3D(ext, true); m_wndViewCtrl.Add(pStair); pStair->close(); m_wndViewCtrl.view()->invalidate(); m_wndViewCtrl.Invalidate(); m_wndViewCtrl.RedrawWindow(); }