// WellCalcModifyEleDlg.cpp : implementation file // #include "stdafx.h" #include "WellCalcModifyEleDlg.h" #include "globalFunc.h" namespace { void SetName(CString &sTemp) { int iIndex = 0; TCHAR szTemp; for (; iIndex < sTemp.GetLength(); iIndex++) { szTemp = sTemp[iIndex]; if (szTemp >= _T('a') && szTemp <= _T('z')) { szTemp -= 32; sTemp.SetAt(iIndex, szTemp); } } } bool CompareName(CString &sTemp, CString &sTemp2) { SetName(sTemp); SetName(sTemp2); if (sTemp.Compare(sTemp2) == 0) { return true; } return false; } } ///////////////////////////////////////////////////////////////////////////// // CWellCalcModifyEleDlg dialog TGridWellEle::TGridWellEle() { } void TGridWellEle::OnCellComboString(WDGridCell&cell,CComboBox&combo) { if(cell.GetColIndex()==5){ combo.AddString(_T("是")); combo.AddString(_T("否")); } } CWellCalcModifyEleDlg::CWellCalcModifyEleDlg(int mode, CWnd* pParent /*=NULL*/) : CDialog(CWellCalcModifyEleDlg::IDD, pParent) { //{{AFX_DATA_INIT(CWellCalcModifyEleDlg) m_sWellSerial = _T(""); //}}AFX_DATA_INIT m_iMode = mode; //0: 雨污系统 1:给水系统 m_bIsEleCalc = false; } void CWellCalcModifyEleDlg::SetDlgType(bool bIsEleCalc) { m_bIsEleCalc = bIsEleCalc; } void CWellCalcModifyEleDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CWellCalcModifyEleDlg) DDX_Text(pDX, IDC_EDIT_WELLSERIAL, m_sWellSerial); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CWellCalcModifyEleDlg, CDialog) //{{AFX_MSG_MAP(CWellCalcModifyEleDlg) ON_BN_CLICKED(IDC_BUTTON_SEARCH, OnBtnSearch) ON_BN_CLICKED(IDC_BTN_CLEAR, OnBtnClearDropWell) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CWellCalcModifyEleDlg message handlers BOOL CWellCalcModifyEleDlg::OnInitDialog() { CDialog::OnInitDialog(); m_grid.Clear(); m_grid.Create(this, IDC_LIST_PIPE); m_grid.FitLastCol(); m_grid.SetNoAppendButton(TRUE); m_grid.SetNoDefaultMenu(true); m_grid.AppendCol(_T("井编号"), 60); m_grid.AppendCol(_T("自然地面标高"), 75); m_grid.AppendCol(_T("井面标高"), 60); m_grid.AppendCol(_T("井半径"), 60); m_grid.AppendCol(_T("沉砂深度mm"), 60); COLORREF color = RGB(255,0,0); m_grid.GetCol(0).SetReadOnly(); m_grid.GetCol(1).SetTextColor(color); m_grid.GetCol(2).SetTextColor(color); m_grid.GetCol(3).SetTextColor(color); m_grid.GetCol(4).SetTextColor(color); if(m_iMode == 0){ m_grid.AppendCol(_T("是否跌水"), 60); m_grid.AppendCol(_T("井底标高"), 80); //增加跌落高度 zxl 2011.11.15 add m_grid.AppendCol(_T("跌落高度"), 60); m_grid.GetCol(7).SetReadOnly(); m_grid.SetColPosFix(); m_grid.SetColFixLength(); m_grid.SetColFixWidth(); //不响应调整列宽度操作 m_grid.SetNoPaste(); m_grid.FitLastCol(); m_grid.GetCol(5).SetComboSel(); //m_grid.GetCol(6).SetTextColor(color); COLORREF color2 = RGB(0,0,255);; m_grid.GetCol(5).SetTextColor(color2); } if (!m_bIsEleCalc)//zxl 2012.01.17 add 标高检查时显示清除跌水井按钮并设置对话框大小 { CWnd *pWnd = GetDlgItem(IDC_BTN_CLEAR); if (pWnd) { pWnd->ShowWindow(SW_HIDE); } } GetDropWellType(); InitDropWellType(); UpdateGrid(); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CWellCalcModifyEleDlg::SetDropWell(std::vector &vecDropWell) { m_vecDropWell = vecDropWell; } void CWellCalcModifyEleDlg::UpdateGrid() { m_grid.Clear(); int idx = 0; if(m_iMode == 0) { for(int i=0;im_bIsWell){ //井 CString sDropHeight = m_lstWellSys[i]->m_csSpare;//增加跌落高度 zxl 2011.11.15 add CString csName1 = m_lstWellSys[i]->m_csName; if(csName1 == _T("")) continue; CString csArea, csAllArea, csFactor, csQ, csTime, csDeepSand; m_grid.AppendRow(); m_grid.GetCell(idx, 0).SetText(csName1); double nEle = m_lstWellSys[i]->m_nUpEle; double nDownEle = m_lstWellSys[i]->m_nDownEle; double nGroundEle = m_lstWellSys[i]->m_nGroundEle; double nWellRadius = m_lstWellSys[i]->m_nWellRadius; double nDeepSand = m_lstWellSys[i]->m_nSpare; CString csWellUpEle, csWellDownEle, csGroundEle, csWellRadius; csWellUpEle.Format(_T("%.3f"), nEle); csWellDownEle.Format(_T("%.3f"), nDownEle); csGroundEle.Format(_T("%.3f"), nGroundEle); csWellRadius.Format(_T("%.2f"), nWellRadius); csDeepSand.Format(_T("%.0f"), nDeepSand); m_grid.GetCell(idx, 1).SetText(csGroundEle); m_grid.GetCell(idx, 2).SetText(csWellUpEle); m_grid.GetCell(idx, 3).SetText(csWellRadius); m_grid.GetCell(idx, 4).SetText(csDeepSand); if(m_iMode == 0){ m_grid.GetCell(idx, 6).SetText(csDeepSand); //if(m_lstWellSys[i]->m_bIsDropWell){ if(m_lstWellSys[i]->m_bIsDropWell && _T("HC") != m_lstWellSys[i]->m_csName){ m_grid.GetCell(idx, 5).SetText(_T("是")); m_grid.GetCell(idx, 6).SetText(csWellDownEle); m_grid.GetCell(idx, 7).SetText(sDropHeight);//增加跌落高度 zxl 2011.11.15 add } else{ m_grid.GetCell(idx, 5).SetText(_T("否")); if(m_lstWellSys[i]->m_nFrondDownEle > -9998){ //支路底标高过底,提醒用户跌水 CString csTmp; csTmp.Format(_T("建议改跌水。%.2f"), m_lstWellSys[i]->m_nFrondDownEle); m_grid.GetCell(idx, 6).SetText(csTmp); } else m_grid.GetCell(idx, 6).SetText(_T("待计算")); } } idx++; } } } else { for(int i=0;im_bIsWell){ //井 CString csName1 = m_lstFeedWellSys[i]->m_csName; if(csName1 == _T("")) continue; CString csArea, csAllArea, csFactor, csQ, csTime, csDeepSand; m_grid.AppendRow(); m_grid.GetCell(idx, 0).SetText(csName1); double nEle = m_lstFeedWellSys[i]->m_nUpEle; double nDownEle = m_lstFeedWellSys[i]->m_nDownEle; double nGroundEle = m_lstFeedWellSys[i]->m_nGroundEle; double nWellRadius = m_lstFeedWellSys[i]->m_nWellRadius; double nDeepSand = m_lstFeedWellSys[i]->m_nSpare; CString csWellUpEle, csWellDownEle, csGroundEle, csWellRadius; csWellUpEle.Format(_T("%.3f"), nEle); csWellDownEle.Format(_T("%.3f"), nDownEle); csGroundEle.Format(_T("%.3f"), nGroundEle); csWellRadius.Format(_T("%.2f"), nWellRadius); csDeepSand.Format(_T("%.0f"), nDeepSand); m_grid.GetCell(idx, 1).SetText(csGroundEle); m_grid.GetCell(idx, 2).SetText(csWellUpEle); m_grid.GetCell(idx, 3).SetText(csWellRadius); m_grid.GetCell(idx, 4).SetText(csDeepSand); idx++; } } } } void CWellCalcModifyEleDlg::OnOK() { UpdateData(TRUE); if(m_iMode == 0){ for(m_grid.MoveToFirst(); !m_grid.IsOut(); m_grid.MoveToNext()){ WDGridRow *pRow = m_grid.CurRow(); CString csName = (LPCTSTR)(*pRow)[0].GetText(); CString csGroundEle = (LPCTSTR)(*pRow)[1].GetText(); CString csUpEle = (LPCTSTR)(*pRow)[2].GetText(); CString csWellRadius = (LPCTSTR)(*pRow)[3].GetText(); CString csDeepSand = (LPCTSTR)(*pRow)[4].GetText(); CString csIsDrop = (LPCTSTR)(*pRow)[5].GetText(); CString csDownEle = (LPCTSTR)(*pRow)[6].GetText(); if(csIsDrop == _T("是") && csDownEle == _T("待计算")){ MessageBox(_T("跌水井要输入井底标高!")); return; } double nDownEle = _tstof(csDownEle); for(int i=0;im_bIsWell && m_lstWellSys[i]->m_csName == csName){ m_lstWellSys[i]->m_nUpEle = _tstof(csUpEle); m_lstWellSys[i]->m_nGroundEle = _tstof(csGroundEle); m_lstWellSys[i]->m_nWellRadius = _tstof(csWellRadius); m_lstWellSys[i]->m_nSpare = _tstof(csDeepSand); if(csIsDrop == _T("是") && fabs(nDownEle) > 0.0001){ m_lstWellSys[i]->m_bIsDropWell = TRUE; m_lstWellSys[i]->m_nDownEle = nDownEle; } else{ m_lstWellSys[i]->m_bIsDropWell = FALSE; m_lstWellSys[i]->m_nDownEle = 0; } break; } } } InitDropWellType(); } else{ for(m_grid.MoveToFirst(); !m_grid.IsOut(); m_grid.MoveToNext()){ WDGridRow *pRow = m_grid.CurRow(); CString csName = (LPCTSTR)(*pRow)[0].GetText(); CString csGroundEle = (LPCTSTR)(*pRow)[1].GetText(); CString csUpEle = (LPCTSTR)(*pRow)[2].GetText(); CString csWellRadius = (LPCTSTR)(*pRow)[3].GetText(); CString csDeepSand = (LPCTSTR)(*pRow)[4].GetText(); for(int i=0;im_bIsWell && m_lstFeedWellSys[i]->m_csName == csName){ m_lstFeedWellSys[i]->m_nUpEle = _tstof(csUpEle); m_lstFeedWellSys[i]->m_nGroundEle = _tstof(csGroundEle); m_lstFeedWellSys[i]->m_nWellRadius = _tstof(csWellRadius); m_lstFeedWellSys[i]->m_nSpare = _tstof(csDeepSand); break; } } } } CDialog::OnOK(); } //重新区分计算产生的跌水井和用户定义的跌水井 void CWellCalcModifyEleDlg::InitDropWellType() { std::map::iterator itCalc; ads_name name; for(int i=0;im_ID); //该跌水井是计算产生的井,比较其标高,标高有变化时定义其为用户自定义跌水井 if(m_lstWellSys[i]->m_bIsWell && m_mapCalc.find(m_lstWellSys[i]->m_csName) != m_mapCalc.end()) { itCalc = m_mapCalc.find(m_lstWellSys[i]->m_csName); double dEleOld = itCalc->second; double dEleNew = m_lstWellSys[i]->m_nDownEle; if (fabs(dEleOld - dEleNew) < 0.001 || fabs(dEleNew - 0.0) < 0.001) { GlobalFunc::WriteXdata(name, _T("DropWellType"), _T("calc")); } else { GlobalFunc::WriteXdata(name, _T("DropWellType"), _T("custom")); m_mapCalc.erase(m_lstWellSys[i]->m_csName); m_mapCustom.insert(std::make_pair(m_lstWellSys[i]->m_csName, m_lstWellSys[i]->m_nDownEle)); } } else if (m_lstWellSys[i]->m_bIsWell && m_mapCustom.find(m_lstWellSys[i]->m_csName) != m_mapCustom.end()) { GlobalFunc::WriteXdata(name, _T("DropWellType"), _T("custom")); } else if (m_lstWellSys[i]->m_bIsDropWell) { GlobalFunc::WriteXdata(name, _T("DropWellType"), _T("custom")); m_mapCustom.insert(std::make_pair(m_lstWellSys[i]->m_csName, m_lstWellSys[i]->m_nDownEle)); } } } //增加查找井编号功能 zxl 2011.11.15 add void CWellCalcModifyEleDlg::OnBtnSearch() { UpdateData(TRUE); m_grid.UnSelect(); CString sName; CString sName2 = m_sWellSerial; int iRow = 0; for(m_grid.MoveToFirst(); !m_grid.IsOut(); m_grid.MoveToNext()) { WDGridRow *pRow = m_grid.CurRow(); sName = (*pRow)[0].GetText(); if (CompareName(sName, sName2)) { m_grid.SelectRow(iRow); return; } iRow ++; } AfxMessageBox(_T("请输入有效的井编号!")); } //设定用户定义跌水井 void CWellCalcModifyEleDlg::GetDropWellByCustom(std::vector &vec) { vec.clear(); std::map::iterator it; for (it = m_mapCustom.begin(); it != m_mapCustom.end(); it++) { vec.push_back(it->first); } } //初始化计算产生的跌水井和用户定义的跌水井 void CWellCalcModifyEleDlg::GetDropWellType() { m_mapCalc.clear(); m_mapCustom.clear(); std::vector::iterator it; for(int i=0;im_bIsWell && m_lstWellSys[i]->m_bIsDropWell) { ads_name name; acdbGetAdsName(name, m_lstWellSys[i]->m_ID); CString sDropWellType = GlobalFunc::ReadXdata(name, _T("DropWellType")); if (!sDropWellType.IsEmpty()) { if (sDropWellType.Compare(_T("calc")) == 0) { m_mapCalc.insert(std::make_pair(m_lstWellSys[i]->m_csName, m_lstWellSys[i]->m_nDownEle)); } else if (sDropWellType.Compare(_T("custom")) == 0) { m_mapCustom.insert(std::make_pair(m_lstWellSys[i]->m_csName, m_lstWellSys[i]->m_nDownEle)); } } else { CString sName = m_lstWellSys[i]->m_csName; it = std::find(m_vecDropWell.begin(), m_vecDropWell.end(), sName); if (it == m_vecDropWell.end())//计算产生的跌水井 { m_mapCalc.insert(std::make_pair(m_lstWellSys[i]->m_csName, m_lstWellSys[i]->m_nDownEle)); } else//用户定义的跌水井 { m_mapCustom.insert(std::make_pair(m_lstWellSys[i]->m_csName, m_lstWellSys[i]->m_nDownEle)); } } } } } void CWellCalcModifyEleDlg::OnBtnClearDropWell() { UpdateData(); //更新列表数据 for(m_grid.MoveToFirst(); !m_grid.IsOut(); m_grid.MoveToNext()) { WDGridRow *pRow = m_grid.CurRow(); CString csName = (LPCTSTR)(*pRow)[0].GetText(); CString csGroundEle = (LPCTSTR)(*pRow)[1].GetText(); CString csUpEle = (LPCTSTR)(*pRow)[2].GetText(); CString csWellRadius = (LPCTSTR)(*pRow)[3].GetText(); CString csDeepSand = (LPCTSTR)(*pRow)[4].GetText(); CString csIsDrop = (LPCTSTR)(*pRow)[5].GetText(); CString csDownEle = (LPCTSTR)(*pRow)[6].GetText(); if(csIsDrop == _T("是") && csDownEle == _T("待计算")){ MessageBox(_T("跌水井要输入井底标高!")); return; } double nDownEle = _tstof(csDownEle); for(int i=0;im_bIsWell && m_lstWellSys[i]->m_csName == csName) { m_lstWellSys[i]->m_nUpEle = _tstof(csUpEle); m_lstWellSys[i]->m_nGroundEle = _tstof(csGroundEle); m_lstWellSys[i]->m_nWellRadius = _tstof(csWellRadius); m_lstWellSys[i]->m_nSpare = _tstof(csDeepSand); if(csIsDrop == _T("是") && fabs(nDownEle) > 0.0001) { m_lstWellSys[i]->m_bIsDropWell = TRUE; m_lstWellSys[i]->m_nDownEle = nDownEle; } else { m_lstWellSys[i]->m_bIsDropWell = FALSE; m_lstWellSys[i]->m_nDownEle = 0; } break; } } } for(int i=0;im_bIsWell && m_lstWellSys[i]->m_bIsDropWell) { ads_name name; acdbGetAdsName(name, m_lstWellSys[i]->m_ID); CString sDropWellType = GlobalFunc::ReadXdata(name, _T("DropWellType")); if (!sDropWellType.IsEmpty()) { if (sDropWellType.Compare(_T("calc")) == 0) { m_lstWellSys[i]->m_bIsDropWell = false; } } } } UpdateGrid(); } //////////////////////////////////////////////////////////////////////////////