Files
envi-code/SourceCode/Code2026/PipelineSpecCmd/EReducerDlg.cpp
T
2026-09-28 15:28:50 +08:00

238 lines
6.0 KiB
C++

#include "stdafx.h"
#include "EReducerDlg.h"
#include "afxdialogex.h"
IMPLEMENT_DYNAMIC(CEReducerDlg, CDialog)
CEReducerDlg::CEReducerDlg(CWnd* pParent /*=NULL*/)
: CDialog(CEReducerDlg::IDD, pParent)
{
m_pDb = NULL;
m_pPipeParam = NULL;
}
CEReducerDlg::~CEReducerDlg()
{
}
void CEReducerDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_LISTREDUCER, m_wndListCtrl);
DDX_Control(pDX, IDC_LISTODTHK, m_wndListODThk);
}
BEGIN_MESSAGE_MAP(CEReducerDlg, CDialog)
ON_BN_CLICKED(IDOK, &CEReducerDlg::OnBnClickedOk)
ON_NOTIFY(LVN_ITEMCHANGED, IDC_LISTREDUCER, &CEReducerDlg::OnLvnItemchangedListreducer)
END_MESSAGE_MAP()
void CEReducerDlg::Set(CUIISQLiteServer* pDb,WPipe::PipeParam* pParam,AcGeVector3d& vtDirCur,BOOL bOnlyStandardRec)
{
m_pDb = pDb;
m_pPipeParam = pParam;
}
BOOL CEReducerDlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_wndListCtrl.InsertColumn(0,_T("主管公称直径"),LVCFMT_LEFT,100);
m_wndListCtrl.InsertColumn(1,_T("变径端公称直径"),LVCFMT_LEFT,100);
m_wndListCtrl.InsertColumn(2,_T("长度"),LVCFMT_LEFT,100);
m_wndListCtrl.InsertColumn(3,_T("弯头曲率"), LVCFMT_LEFT, 0);
m_wndListCtrl.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
m_wndListODThk.InsertColumn(0,_T("外径"),LVCFMT_LEFT,80);
m_wndListODThk.InsertColumn(1,_T("壁厚"),LVCFMT_LEFT,60);
m_wndListODThk.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
InitReducer();
return TRUE;
}
void CEReducerDlg::InitReducer()
{
if (m_pDb == NULL) return;
CString sSQL,sSN = m_pPipeParam->szODSn;
if (sSN.IsEmpty())
{
sSQL.Format(_T("select distinct [外径系列] from AecSpecFit where [等级名称]='%s'"), m_pPipeParam->szLevel);
m_pDb->GetSelData(sSQL, sSN);
}
if (sSN.IsEmpty())
{
sSQL.Format(_T("select [公称直径L], [公称直径S], [长度] from [AecRElbowData] where [公称直径L]=%d order by [公称直径L],[公称直径S]"),
(int)(m_pPipeParam->m_dDN + 0.5));
}
else
{
sSQL.Format(_T("select [公称直径L], [公称直径S], [长度] from [AecRElbowData] where [公称直径L]=%d and [外径系列] = '%s' order by [公称直径L],[公称直径S]"),
(int)(m_pPipeParam->m_dDN + 0.5),sSN);
}
CUIIValueTable valTable;
m_pDb->GetSelData(sSQL,valTable);
int nSize = valTable.GetTableLogicSize();
if (nSize == 0)
{
sSQL.Format(_T("select [公称直径L], [公称直径S], [长度] from [AecRElbowData] where [公称直径L]=%d order by [公称直径L],[公称直径S]"),
(int)(m_pPipeParam->m_dDN + 0.5));
m_pDb->GetSelData(sSQL,valTable);
}
nSize = valTable.GetTableLogicSize();
CString sDN1,sDN2,sL,sRR;
CStringArray arVals;
CStringList lstDn2s;
for(int i = 0;i < nSize;i++)
{
arVals.RemoveAll();
valTable.GetValueRecord(i,arVals);
if (arVals.GetSize() >= 3)
{
sDN1 = arVals.GetAt(0);
sDN2 = arVals.GetAt(1);
sL = arVals.GetAt(2);
sRR.Format(_T("%.1f"),2.0 * _ttof(sL) / __max(_ttof(sDN1),_ttof(sDN2)));
if (lstDn2s.Find(sDN2) == NULL)
{
int nItem = m_wndListCtrl.GetItemCount();
m_wndListCtrl.InsertItem(nItem,sDN1);
m_wndListCtrl.SetItemText(nItem,1,sDN2);
m_wndListCtrl.SetItemText(nItem,2,sL);
m_wndListCtrl.SetItemText(nItem, 3, sRR);
lstDn2s.AddTail(sDN2);
}
}
}
if (sSN.IsEmpty())
{
sSQL.Format(_T("select [公称直径S], [公称直径L], [长度] from [AecRElbowData] where [公称直径L]=%d order by [公称直径S],[公称直径L]"),
(int)(m_pPipeParam->m_dDN + 0.5));
}
else
{
sSQL.Format(_T("select [公称直径S], [公称直径L], [长度] from [AecRElbowData] where [公称直径S]=%d and [外径系列] = '%s' order by [公称直径S],[公称直径L]"),
(int)(m_pPipeParam->m_dDN + 0.5), sSN);
}
valTable.RemoveAll();
m_pDb->GetSelData(sSQL,valTable);
nSize = valTable.GetTableLogicSize();
for(i = 0;i < nSize;i++)
{
arVals.RemoveAll();
valTable.GetValueRecord(i,arVals);
if (arVals.GetSize() >= 3)
{
sDN1 = arVals.GetAt(0);
sDN2 = arVals.GetAt(1);
sL = arVals.GetAt(2);
sRR.Format(_T("%.1f"), 2.0 * _ttof(sL) / __max(_ttof(sDN1), _ttof(sDN2)));
if (lstDn2s.Find(sDN1) == NULL)
{
lstDn2s.AddTail(sDN1);
int nItem = m_wndListCtrl.GetItemCount();
m_wndListCtrl.InsertItem(nItem,sDN1);
m_wndListCtrl.SetItemText(nItem,1,sDN2);
m_wndListCtrl.SetItemText(nItem,2,sL);
m_wndListCtrl.SetItemText(nItem, 3, sRR);
}
}
}
m_wndListCtrl.SetItemState(0,LVIS_SELECTED,LVIS_SELECTED);
}
void CEReducerDlg::OnLvnItemchangedListreducer(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
int nItem = pNMLV->iItem;
if (nItem != -1)
{
double dDN = _ttof(m_wndListCtrl.GetItemText(nItem,1));
CString sSQL;
sSQL.Format(_T("select [外径],[壁厚] from AecOD where [公称直径]=%d"),(int)dDN);
m_wndListODThk.DeleteAllItems();
CUIIValueTable table;
m_pDb->GetSelData(sSQL,table);
table.ShowToListCtrl(&m_wndListODThk);
m_wndListODThk.SetItemState(0,LVIS_SELECTED,LVIS_SELECTED);
}
*pResult = 0;
}
void CEReducerDlg::OnBnClickedOk()
{
UpdateData();
POSITION ps = m_wndListCtrl.GetFirstSelectedItemPosition();
int nIntem = m_wndListCtrl.GetNextSelectedItem(ps);
if (nIntem == -1)
{
AfxMessageBox(_T("请选择变径系列!"));
return;
}
ps = m_wndListODThk.GetFirstSelectedItemPosition();
int nIntem2 = m_wndListODThk.GetNextSelectedItem(ps);
if (nIntem2 == -1)
{
AfxMessageBox(_T("请选择变径后续的管子的外径壁厚系列!"));
return;
}
CString sText;
double dDNPre = _ttof(m_wndListCtrl.GetItemText(nIntem,0));
m_pPipeParam->m_dDN = _ttof(m_wndListCtrl.GetItemText(nIntem,1));
m_pPipeParam->m_dInterfaceL3 = _ttof(m_wndListCtrl.GetItemText(nIntem,2));
double dOD = _ttof(m_wndListODThk.GetItemText(nIntem2,0));
double dThk = _ttof(m_wndListODThk.GetItemText(nIntem2,1));
//m_pPipeParam->m_dRRatio = _ttof(m_wndListCtrl.GetItemText(nIntem, 3));
//不变
m_pPipeParam->m_dOD = dOD;
m_pPipeParam->m_dThick = dThk;
switch(m_pPipeParam->m_eD)
{
case WPipe::eDN:
{
m_pPipeParam->m_dD = m_pPipeParam->m_dDN;
break;
}
case WPipe::eOD:
{
m_pPipeParam->m_dD = m_pPipeParam->m_dOD;
break;
}
case WPipe::eID:
{
break;
}
default:
break;
}
EndDialog(IDOK);
}