#include "stdafx.h" #include "ChangElDlg.h" #include "ReducerDlg.h" IMPLEMENT_DYNAMIC(CChangElDlg, CDialog) CChangElDlg::CChangElDlg(CWnd* pParent /*=NULL*/) : CDialog(CChangElDlg::IDD, pParent) , m_dCurEl(0) , m_dNewEl(0) , m_dRedElPos(0) , m_bCheckRec(FALSE) , m_bZPipe2DNoDraw(TRUE) { m_pDb = NULL; memset(&m_pipeParam,0,sizeof(WPipe::PipeParam)); } CChangElDlg::~CChangElDlg() { } void CChangElDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Text(pDX, IDC_EDITCUREL, m_dCurEl); DDX_Text(pDX, IDC_EDITNEWEL, m_dNewEl); DDX_Text(pDX, IDC_EDITELPOS, m_dRedElPos); DDX_Check(pDX, IDC_CHECKREC, m_bCheckRec); DDX_Check(pDX, IDC_CHECK1, m_bZPipe2DNoDraw); } BEGIN_MESSAGE_MAP(CChangElDlg, CDialog) ON_BN_CLICKED(IDOK, &CChangElDlg::OnBnClickedOk) ON_BN_CLICKED(IDC_CHECKREC, &CChangElDlg::OnBnClickedCheckrec) ON_STN_CLICKED(IDC_STATIC_PREVIEW, &CChangElDlg::OnStnClickedStaticPreview) END_MESSAGE_MAP() void CChangElDlg::SetCurParam(CUIISQLiteServer* pDb,WPipe::PipeParam* pParam) { m_pDb = pDb; memcpy(&m_pipeParam,pParam,sizeof(WPipe::PipeParam)); memcpy(&m_pipeParamRec,pParam,sizeof(WPipe::PipeParam)); } BOOL CChangElDlg::OnInitDialog() { CDialog::OnInitDialog(); m_dCurEl = m_pipeParam.m_dEl; m_dNewEl = (int)(m_dCurEl + 2000); m_dRedElPos = m_dCurEl + 1000; CheckRadioButton(IDC_RADIOSTA,IDC_RADIOEND,IDC_RADIOSTA); UpdateData(FALSE); return TRUE; } void CChangElDlg::OnBnClickedOk() { UpdateData(); //标高的变化放得下一个弯头 /*double dELX = fabs(m_dNewEl - m_dCurEl); double dMin = m_pipeParam.m_dRRatio * m_pipeParam.m_dDN; if (dELX - dMin < 1.e-6) { AfxMessageBox(_T("标高的变化太小,无法创建立管,无法用弯头连接!")); return; }*/ if (m_bCheckRec) //判断是否加变径 { if (!ReducerIsFitIn()) { return; } } //折算到变径开始点位置 if (m_bCheckRec) { ReducerIsFitIn(TRUE); } m_pipeParam.m_bZPipe2DDraw = !m_bZPipe2DNoDraw; m_pipeParamRec.m_bZPipe2DDraw = !m_bZPipe2DNoDraw; EndDialog(IDOK); } BOOL CChangElDlg::ReducerIsFitIn(BOOL bSettoStartPos) { int nDir = 1.0; if (m_dNewEl - m_dCurEl < 1.e-3) nDir = -1.0; //变径折算到中点标高上 double dEL = 0.0; int nRes = GetCheckedRadioButton(IDC_RADIOSTA,IDC_RADIOEND) - IDC_RADIOSTA; switch(nRes) { case 0://sta { dEL = m_dRedElPos + nDir * m_pipeParamRec.m_dInterfaceL3; if ( ( dEL - __min(m_dCurEl,m_dNewEl) ) > 1.e-6 && ( dEL - __max(m_dCurEl,m_dNewEl) ) < 1.e-6 ) //不在CUREL , NEWEL 之间 { } else { AfxMessageBox(_T("在指定的标高位置插入变径超出了整体设置的新标高!")); return FALSE; } if (bSettoStartPos) { m_dRedElPos = dEL; } break; } case 1://mid { dEL = m_dRedElPos + nDir * m_pipeParamRec.m_dInterfaceL3 * 0.5; if ( ( dEL - __min(m_dCurEl,m_dNewEl) ) > 1.e-6 && ( dEL - __max(m_dCurEl,m_dNewEl) ) < 1.e-6 ) //不在CUREL , NEWEL 之间 { } else { AfxMessageBox(_T("在指定的标高位置插入变径超出了整体设置的新标高!")); return FALSE; } if (bSettoStartPos) { m_dRedElPos -= nDir * m_pipeParamRec.m_dInterfaceL3 * 0.5; } break; } case 2://end { dEL = m_dRedElPos; if ( ( dEL - __min(m_dCurEl,m_dNewEl) ) > 1.e-6 && ( dEL - __max(m_dCurEl,m_dNewEl) ) < 1.e-6 ) //不在CUREL , NEWEL 之间 { } else { AfxMessageBox(_T("在指定的标高位置插入变径超出了整体设置的新标高!")); return FALSE; } if (bSettoStartPos) { m_dRedElPos -= nDir * m_pipeParamRec.m_dInterfaceL3; } break; } default: break; } return TRUE; } void CChangElDlg::OnBnClickedCheckrec() { UpdateData(); if (m_bCheckRec) { AcGeVector3d vt = AcGeVector3d::kZAxis; if (m_dNewEl - m_dCurEl < 1.e-6) vt = -AcGeVector3d::kZAxis; memcpy(&m_pipeParamRec,&m_pipeParam,sizeof(WPipe::PipeParam)); CReducerDlg redDlg; redDlg.Set(m_pDb,&m_pipeParamRec,vt,FALSE); int nRes = redDlg.DoModal(); if (nRes == IDOK) { } else { m_bCheckRec = FALSE; UpdateData( FALSE ); } } else { memcpy(&m_pipeParamRec,&m_pipeParam,sizeof(WPipe::PipeParam)); } } void CChangElDlg::OnStnClickedStaticPreview() { }