Files
envi-code/SourceCode/Code2026/Dimension/WellCalcModifyEleDlg.cpp
T
gjm 164968b62e chore
把非utf8-bom编码的cpp/h文件改为 utf8 bom 编码, msvc识别utf8编码时,如果不是bom格式的,会使用当前cp_oem来解码.
2026-10-04 00:04:20 +08:00

479 lines
14 KiB
C++

// 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<CString> &vecDropWell)
{
m_vecDropWell = vecDropWell;
}
void CWellCalcModifyEleDlg::UpdateGrid()
{
m_grid.Clear();
int idx = 0;
if(m_iMode == 0)
{
for(int i=0;i<m_lstWellSys.Length();i++){
if(m_lstWellSys[i]->m_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;i<m_lstFeedWellSys.Length();i++){
if(m_lstFeedWellSys[i]->m_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;i<m_lstWellSys.Length();i++){
if(m_lstWellSys[i]->m_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;i<m_lstFeedWellSys.Length();i++){
if(m_lstFeedWellSys[i]->m_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<CString, double>::iterator itCalc;
ads_name name;
for(int i=0;i<m_lstWellSys.Length();i++)
{
acdbGetAdsName(name, m_lstWellSys[i]->m_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<CString> &vec)
{
vec.clear();
std::map<CString, double>::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<CString>::iterator it;
for(int i=0;i<m_lstWellSys.Length();i++)//遍历井信息,提取出计算产生的跌水井和用户定义的跌水井
{
if(m_lstWellSys[i]->m_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;i<m_lstWellSys.Length();i++){
if(m_lstWellSys[i]->m_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;i<m_lstWellSys.Length();i++)//遍历井信息,清除计算产生的跌水井
{
if(m_lstWellSys[i]->m_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();
}
//////////////////////////////////////////////////////////////////////////////