201 lines
4.2 KiB
C++
201 lines
4.2 KiB
C++
#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()
|
|
{
|
|
}
|