#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(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); }