Files
envi-code/SourceCode/Code2026/tg_shs/shs_outdoor/CalcSheetDlg.cpp
T
2026-09-28 15:28:50 +08:00

1781 lines
53 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// CalcSheetDlg.cpp : implementation file
//
#include "stdafx.h"
//#include <cbclass.h>
#include <DbWell.h>
#include "CalcSheetDlg.h"
#include "RainNewCityDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
//#ifdef _WIN64
#include"TGAs.h"
//#endif
extern SSearchPipeList *GetNextCalcWell(SSearchPipeList *pListAll, SSearchPipeList *pDisadvantage);
extern int GetFirstPipeDnByQ(double nQ, double nN, double &nRetI, double &nRetV);
extern void ImportRainCalcWord(DList<SSearchPipeList> &lstNode, DList<SSearchPipeList> &lstWell, CCalcRainWellDlg &dlg);
extern void DimRainCalcResult(SSearchPipeList *pListAll);
extern void GetOtherWellNode(SSearchPipeList *pListAll, DList<SSearchPipeList> &lstWell);
extern int GetFirstPipeDnByQ2(double nQ, double nN, double nI, double &nRetV);
/////////////////////////////////////////////////////////////////////////////
// CCalcRainWellDlg dialog
TGridRainCalc::TGridRainCalc()
{
AppendCol(_T("起始井"), 40);
AppendCol(_T("终止井"), 40);
AppendCol(_T("管径mm"), 50);
AppendCol(_T("坡度‰"), 55);
AppendCol(_T("管长m"), 50);
AppendCol(_T("汇水面积m2"), 65);
AppendCol(_T("总面积"), 55);
AppendCol(_T("径流"), 40);
AppendCol(_T("重现期"), 38);
AppendCol(_T("汇水时间"), 55);
AppendCol(_T("流速m/s"), 55);
AppendCol(_T("流量L/s"), 55);
AppendCol(_T("暴雨强度"), 60);
// SetColPosFix();
// SetColFixLength();
SetNoPaste();
// FitLastCol();
GetCol(2).SetComboEdit();
GetCol(3).SetComboEdit();
COLORREF color = RGB(255,0,0);
GetCol(2).SetTextColor(color);
GetCol(3).SetTextColor(color);
COLORREF color2 = RGB(0,0,255);;
GetCol(9).SetTextColor(color2);
GetCol(10).SetTextColor(color2);
GetCol(11).SetTextColor(color2);
GetCol(12).SetTextColor(color2);
}
void TGridRainCalc::OnCellComboString(WDGridCell&cell,CComboBox&combo)
{
if(cell.GetColIndex()==2){
combo.AddString(_T("200"));
// combo.AddString(_T("250"));
combo.AddString(_T("300"));
// combo.AddString(_T("350"));
combo.AddString(_T("400"));
// combo.AddString(_T("450"));
combo.AddString(_T("500"));
combo.AddString(_T("600"));
combo.AddString(_T("700"));
combo.AddString(_T("800"));
combo.AddString(_T("900"));
combo.AddString(_T("1000"));
combo.AddString(_T("1100"));
combo.AddString(_T("1200"));
}
else if(cell.GetColIndex()==3){
combo.AddString(_T("1"));
combo.AddString(_T("2"));
combo.AddString(_T("3"));
combo.AddString(_T("4"));
combo.AddString(_T("5"));
combo.AddString(_T("6"));
}
}
void TGridRainCalc::OnBeforeRefresh(WDGridCell&cell)
{
if(cell.GetColIndex()==10)
{
double dV = _tstof(cell.GetText());
if(dV > 4.9999){
CDC&dc=GetDC();
COLORREF color=acedGetRGB(6);
dc.SetTextColor(color);
dc.SetBkMode(TRANSPARENT);
}
else
WDGrid::OnBeforeRefresh(cell);
}
else if(cell.GetColIndex()==12){
CString csQ = cell.GetText().cs();
if(csQ.Find(_T("错误")) > -1)
{
CDC&dc=GetDC();
COLORREF color=acedGetRGB(6);
dc.SetTextColor(color);
dc.SetBkMode(TRANSPARENT);
}
else
WDGrid::OnBeforeRefresh(cell);
// CString csColName = cell.GetCol().GetName();
// if(csColName == _T("泄流量")){
// int iRow = cell.GetRowIndex();
// // WDGrid &grid = cell.GetGrid();
// if(this->IsValidRow(iRow)){
// WDGridRow *pRow =this->rowList.GetAt(iRow);
// WDGridRow row = *pRow;
// CString csQ = row[11].GetText();
// // pRow->
// // (*pRow)[11];
//
// // WDGridRow &row = this->GetRow(iRow);
// // CString csQ = (*pRow)[11].GetText();
//
//// if(_tstof(csQ) < dQ){
//// CDC&dc=GetDC();
//// COLORREF color=acedGetRGB(6);
//// dc.SetTextColor(color);
//// dc.SetBkMode(TRANSPARENT);
//// }
//
//
// }
// WDGridRow &row = grid.GetRow(iRow);
// CString csQ = row[11].GetText();
// if(_tstof(csQ) < dQ){
// CDC&dc=GetDC();
// COLORREF color=acedGetRGB(6);
// dc.SetTextColor(color);
// dc.SetBkMode(TRANSPARENT);
// }
// }
// else
// WDGrid::OnBeforeRefresh(cell);
}
else
WDGrid::OnBeforeRefresh(cell);
}
// zxl 2013.12.31 add
TGridMaterialN::TGridMaterialN()
{
AppendCol(_T("管材"), 73);
AppendCol(_T("粗糙系数"), 47);
SetNoPaste();
GetCol(0).SetReadOnly(true);
SetColPosFix();
SetColFixLength();
SetNoPaste();
FitLastCol();
GetCol(0).SetComboSel();
}
bool IsStrAllNum(CString csText)
{
CString sText = csText.SpanIncluding(_T("0123456789.-e"));
if ((sText.Find(_T("."), 0) == 0 || sText.Find(_T("-"), 0) == 0) && _tstof(csText) == 0)
{
return false;
}
// 小数点可以出现在中间,但只能出现一次
int nIndex = sText.Find(_T("."), 0);
if (nIndex > 0)
{
nIndex = sText.Find(_T("."), ++nIndex);
}
// 负号可以出现在起始处,但只能出现一次
int nIndex2 = sText.Find(_T("-"));
if (nIndex2 == 0)
{
nIndex2 = sText.Find(_T("-"), 1);
}
if (csText == sText && nIndex < 0 && nIndex2 <= 0)// 全是数字
{
return true;
}
else
{
return false;
}
}
bool TGridMaterialN::OnModified(WDGridCell&cell, CString &text)
{
if (cell.GetCol().GetIndex() == 1)
{
double dVal = _tstof(text);
if (dVal <= 0.0 || !IsStrAllNum(text))
{
return false;
}
}
return true;
}
void TGridMaterialN::OnBeforeRefresh(WDGridCell&cell)
{
WDGrid::OnBeforeRefresh(cell);
}
BOOL GetAllCityByProvince(const TCHAR* szProvince, XStringList &lstCity)
{
CodeBase db;
db.read_only = 1;
XString fullFile;
if(!FindFile(_T("raincity.dbf"), fullFile)) {
AfxMessageBox(_T("对不起,没有发现raincity.dbf文件!"));
return TRUE;
}
XDbfTable *pTable = db.Open(fullFile);
if(!pTable)
return TRUE;
CString csTmp, csCity;
XStringList lstProvince;
for(pTable->MoveFirst();!pTable->IsEOF();pTable->MoveNext()){
GET_FIELD(pTable, _T("province"), csTmp);
GET_FIELD(pTable, _T("city"), csCity);
if(_tcsicmp(csTmp, szProvince) == 0 && lstCity.Index(csCity) < 0)
lstCity.Append(tstrnew(csCity));
}
return TRUE;
}
// zxl 2013.12.27 add
double CCalcRainWellDlg::m_nFactor = 0.6;
double CCalcRainWellDlg::m_nP = 1;
double CCalcRainWellDlg::m_dM = 2;
double CCalcRainWellDlg::m_dTime = 15;
CCalcRainWellDlg::CCalcRainWellDlg(CWnd* pParent /*=NULL*/)
: CAcUiDialog(CCalcRainWellDlg::IDD, pParent), m_ssAll(SS_FREE)
{
//{{AFX_DATA_INIT(CCalcRainWellDlg)
m_csA = _T("");
m_csB = _T("");
m_csC = _T("");
m_csN = _T("");
m_csCity = _T("");
m_csProvince = _T("");
m_csN2 = _T("");
//}}AFX_DATA_INIT
m_bCalc = FALSE;
m_bReCalc = FALSE;
}
void CCalcRainWellDlg::DoDataExchange(CDataExchange* pDX)
{
CAcUiDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CCalcRainWellDlg)
DDX_Control(pDX, IDC_LIST_PROVINCE, m_listProvince);
DDX_Control(pDX, IDC_LIST_CITY, m_listCity);
DDX_Text(pDX, IDC_STATIC_A, m_csA);
DDX_Text(pDX, IDC_STATIC_B, m_csB);
DDX_Text(pDX, IDC_STATIC_C, m_csC);
DDX_Text(pDX, IDC_STATIC_N, m_csN);
DDX_Text(pDX, IDC_EDIT_FACTOR, m_nFactor);
DDX_Text(pDX, IDC_EDIT_P, m_nP);
DDX_LBString(pDX, IDC_LIST_CITY, m_csCity);
DDX_LBString(pDX, IDC_LIST_PROVINCE, m_csProvince);
DDX_Text(pDX, IDC_EDIT_M, m_dM);
DDX_Text(pDX, IDC_EDIT_TIME, m_dTime);
DDX_Text(pDX, IDC_STATIC_N2, m_csN2);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CCalcRainWellDlg, CAcUiDialog)
//{{AFX_MSG_MAP(CCalcRainWellDlg)
ON_BN_CLICKED(IDC_BUTTON_CALC, OnButtonCalc)
ON_BN_CLICKED(IDC_BUTTON_WORD, OnButtonWord)
ON_BN_CLICKED(IDC_BUTTON_DIM, OnButtonDim)
ON_BN_CLICKED(IDC_BUTTON_P, OnButtonP)
ON_LBN_SELCHANGE(IDC_LIST_PROVINCE, OnSelchangeListProvince)
ON_LBN_SELCHANGE(IDC_LIST_CITY, OnSelchangeListCity)
ON_BN_CLICKED(IDC_BUTTON_FACTOR, OnButtonFactor)
ON_BN_CLICKED(IDC_BUTTON_NEWCITY, OnButtonNewCity)
ON_BN_CLICKED(IDC_BUTTON_HIDE, OnButtonHide)
ON_BN_CLICKED(IDC_BUTTON_CALC2, OnButtonCalc2)
ON_WM_DESTROY()
ON_WM_PAINT()
ON_BN_CLICKED(IDC_BTN_CALC_TABLE, OnBtnCalcTable)
ON_EN_KILLFOCUS(IDC_EDIT_TIME, OnKillfocusEdtTime)
ON_EN_KILLFOCUS(IDC_EDIT_P, OnKillfocusEdtP)
ON_EN_KILLFOCUS(IDC_EDIT_M, OnKillfocusEdtM)
ON_EN_KILLFOCUS(IDC_EDIT_FACTOR, OnKillfocusEdtFactor)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CCalcRainWellDlg message handlers
BOOL CCalcRainWellDlg::OnInitDialog()
{
CAcUiDialog::OnInitDialog();
XString fullFile;
if(!FindFile(_T("raincity.dbf"), fullFile)) {
MessageBox(_T("对不起,没有发现raincity.dbf文件!"));
return TRUE;
}
CodeBase db;
db.read_only = 1;
XDbfTable *pTable = db.Open(fullFile);
if(!pTable)
return TRUE;
CString csTmp;
XStringList lstProvince;
for(pTable->MoveFirst();!pTable->IsEOF();pTable->MoveNext()){
GET_FIELD(pTable, _T("province"), csTmp);
if(lstProvince.Index(csTmp) < 0 && csTmp != _T(""))
lstProvince.Append(tstrnew(csTmp));
}
for(int i=0;i<lstProvince.Length();i++){
CString csProvince = lstProvince[i];
m_listProvince.AddString(csProvince);
}
CRegProperty regProp(GetRegLocation(), _T("TWTConfig"));
regProp.SetTopRootKey(HKEY_CURRENT_USER);
regProp.GetValue(_T("CurProvince"), m_csProvince);
regProp.GetValue(_T("CurCity"), m_csCity);
UpdateData(FALSE);
OnSelchangeListProvince();
regProp.GetValue(_T("CurCity"), m_csCity);
UpdateData(FALSE);
OnSelchangeListCity();
m_grid.Clear();
m_grid.Create(this, IDC_LIST_PIPE);
// m_grid.FitLastCol();
m_grid.SetNoAppendButton(TRUE);
m_grid.SetNoDefaultMenu(true);
UpdateGrid();
m_gridN.Clear();
m_gridN.Create(this, IDC_LIST_METIRALN);
m_gridN.SetNoAppendButton(TRUE);
m_gridN.SetNoDefaultMenu(true);
std::map<CString, double>::iterator it = m_mapMeratialN.begin();
int idx = 0;
m_gridN.Clear();
for (; it != m_mapMeratialN.end(); it++)
{
m_gridN.AppendRow();
m_gridN.GetCell(idx, 0).SetText(it->first);
CString csN;
csN.Format(_T("%.4f"), it->second);
m_gridN.GetCell(idx, 1).SetText(csN);
idx++;
}
m_wndToolTip.Create(this);
m_wndToolTip.Activate(true);
m_wndToolTip.SetDelayTime(TTDT_INITIAL, 500);
CWnd *pWnd1 = GetDlgItem(IDOK);
CWnd *pWnd2 = GetDlgItem(IDC_BUTTON_CALC);
CWnd *pWnd3 = GetDlgItem(IDC_BUTTON_CALC2);
CWnd *pWnd4 = GetDlgItem(IDC_BUTTON_HIDE);
m_wndToolTip.AddTool(pWnd1, _T("初算,未知管径,未知坡度"));
m_wndToolTip.AddTool(pWnd2, _T("复算,已知管径,已知坡度"));
m_wndToolTip.AddTool(pWnd3, _T("复算,已知坡度,计算管径"));
m_wndToolTip.AddTool(pWnd4, _T("隐藏对话框"));
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CCalcRainWellDlg::OnKillfocusEdtM()
{
CWnd *pWnd = GetDlgItem(IDC_EDIT_M);
if (pWnd != NULL)
{
CString csText;
pWnd->GetWindowText(csText);
double dDouble = _tstof(csText);
if (dDouble <= 0.0 || !IsStrAllNum(csText))
{
UpdateData(FALSE);
}
else
{
UpdateData(TRUE);
}
}
}
void CCalcRainWellDlg::OnKillfocusEdtP()
{
CWnd *pWnd = GetDlgItem(IDC_EDIT_P);
if (pWnd != NULL)
{
CString csText;
pWnd->GetWindowText(csText);
double dDouble = _tstof(csText);
if (dDouble <= 0.0 || !IsStrAllNum(csText))
{
UpdateData(FALSE);
}
else
{
UpdateData(TRUE);
}
}
}
void CCalcRainWellDlg::OnKillfocusEdtFactor()
{
CWnd *pWnd = GetDlgItem(IDC_EDIT_FACTOR);
if (pWnd != NULL)
{
CString csText;
pWnd->GetWindowText(csText);
double dDouble = _tstof(csText);
if (dDouble <= 0.0 || !IsStrAllNum(csText))
{
UpdateData(FALSE);
}
else
{
UpdateData(TRUE);
}
}
}
void CCalcRainWellDlg::OnKillfocusEdtTime()
{
CEdit *pWnd = (CEdit *)GetDlgItem(IDC_EDIT_TIME);
if (pWnd != NULL)
{
CString csText;
pWnd->GetWindowText(csText);
double dDouble = _tstof(csText);
if (dDouble <= 0.0 || !IsStrAllNum(csText))
{
pWnd->SetSel(0, -1);
UpdateData(FALSE);
}
else
{
UpdateData(TRUE);
}
}
}
void CCalcRainWellDlg::OnPaint()
{
CAcUiDialog::OnPaint();
if (m_gridN.IsWindowVisible())
{
m_gridN.SetRedraw(TRUE);
}
}
//把树结构的数据转化为DLIST链表结构
void CCalcRainWellDlg::TransWellListData(SSearchPipeList *pListAll, DList<SRainCalcData> &lstWellSys)
{
SRainCalcData *pList = new SRainCalcData();
pList->m_iDn = pListAll->m_iDn;
if(pListAll->m_iType == 0)
pList->m_bIsWell = FALSE;
else
pList->m_bIsWell = TRUE;
pList->m_csName = pListAll->m_csName;
pList->m_nI = pListAll->m_nI;
pList->m_ID = pListAll->m_ID;
pList->m_nLength = pListAll->m_nLength;
pList->m_nArea = pListAll->m_nDang;
pList->m_nAllArea = pListAll->m_nStartPress;
lstWellSys.Append(pList);
long len = pListAll->m_lstNode.Length();
for(long i=0;i<len;i++){
SSearchPipeList *pList = pListAll->m_lstNode[i];
TransWellListData(pList, lstWellSys);
}
}
//得到下一个计算支路的起点节点 根据流量是否为0且最远
SSearchPipeList *CCalcRainWellDlg::GetNextWell(SSearchPipeList *pListAll, SSearchPipeList *pDisadvantage, DList<SRainCalcData> &lstData)
{
AcDbObjectId id = NULL;
id = pListAll->m_ID;
BOOL bFind = FALSE;
for(int j=0;j<lstData.Length();j++){
if(lstData[j]->m_ID == id){
bFind = TRUE;
break;
}
}
double nCurPipeLength(0);
if(!bFind && pListAll->m_iType == 3){
nCurPipeLength = pListAll->m_nLength;
if(pDisadvantage){
if(nCurPipeLength > pDisadvantage->m_nLength)
pDisadvantage = pListAll;
}
else
pDisadvantage = pListAll; //条件3: 临时节点为空
}
int len = pListAll->m_lstNode.Length();
for(long i=0;i<len;i++){
SSearchPipeList *pList = pListAll->m_lstNode[i];
pDisadvantage = GetNextWell(pList, pDisadvantage, lstData);
}
return pDisadvantage;
}
void CCalcRainWellDlg::UpdateGrid()
{
long iCurRow = m_grid.GetCurRowIndex();
m_grid.Clear();
DList<SRainCalcData> lstData;
SSearchPipeList *pNodeLong = m_pNodeLong;
while(pNodeLong){//主干网
if(pNodeLong->m_iType == 0 || pNodeLong->m_iType == 3 || pNodeLong->m_iType == 1){
SRainCalcData *pList = new SRainCalcData();
pList->m_iDn = pNodeLong->m_iDn;
if(pNodeLong->m_iType == 0)
pList->m_bIsWell = FALSE;
else if(pNodeLong->m_iType == 3 || pNodeLong->m_iType == 1)
pList->m_bIsWell = TRUE;
pList->m_csName = pNodeLong->m_csName;
pList->m_nI = pNodeLong->m_nI;
pList->m_nTime = pNodeLong->m_nLost;
pList->m_nV = pNodeLong->m_nV;
pList->m_nQ = pNodeLong->m_nPipeQ;
pList->m_ID = pNodeLong->m_ID;
pList->m_nFactor = (double)(pNodeLong->m_iNum) / 1000;
pList->m_iP = pNodeLong->m_iSpare;
if(pList->m_nFactor < 0.0001) //没有输入,就按默认走
pList->m_nFactor = m_nFactor;
if(pList->m_iP < 0.0001)
pList->m_iP = (int)m_nP;
pList->m_nLength = pNodeLong->m_nLength;
pList->m_nArea = pNodeLong->m_nDang;
pList->m_nAllArea = pNodeLong->m_nStartPress;
pList->m_dI = pNodeLong->m_nSpare;
lstData.Append(pList);
}
if(pNodeLong->m_pPrevious)
pNodeLong = pNodeLong->m_pPrevious;
else
break;
}
SSearchPipeList *pNodeNext = GetNextWell(m_pListAll, NULL, lstData);
while(pNodeNext){
SSearchPipeList *pNodeLong = pNodeNext;
while(pNodeLong){
BOOL bFind = FALSE;
for(int j=0;j<lstData.Length();j++){
if(lstData[j]->m_ID == pNodeLong->m_ID){
bFind = TRUE;
break;
}
}
if(pNodeLong->m_iType == 0 || pNodeLong->m_iType == 3 || pNodeLong->m_iType == 1){
SRainCalcData *pList = new SRainCalcData();
pList->m_iDn = pNodeLong->m_iDn;
if(pNodeLong->m_iType == 0)
pList->m_bIsWell = FALSE;
else
pList->m_bIsWell = TRUE;
pList->m_csName = pNodeLong->m_csName;
pList->m_nI = pNodeLong->m_nI;
pList->m_nTime = pNodeLong->m_nLost;
pList->m_nV = pNodeLong->m_nV;
pList->m_nQ = pNodeLong->m_nPipeQ;
pList->m_ID = pNodeLong->m_ID;
pList->m_nFactor = (double)(pNodeLong->m_iNum) / 1000;
if(pList->m_nFactor < 0.0001) //没有输入,就按默认走
pList->m_nFactor = m_nFactor;
pList->m_iP = pNodeLong->m_iSpare;
if(pList->m_iP < 0.0001)
pList->m_iP = (int)m_nP;
pList->m_nLength = pNodeLong->m_nLength;
pList->m_nArea = pNodeLong->m_nDang;
pList->m_nAllArea = pNodeLong->m_nStartPress;
pList->m_dI = pNodeLong->m_nSpare;
lstData.Append(pList);
}
if(bFind)
break;
if(pNodeLong->m_pPrevious)
pNodeLong = pNodeLong->m_pPrevious;
else
break;
}
pNodeNext = GetNextWell(m_pListAll, NULL, lstData);
}
m_arRainStom.RemoveAll();
int idx = 0;
bool bInitMap = true;
if (!m_mapMeratialN.empty())
{
bInitMap = false;
}
for(int i=0;i<lstData.Length()-1;i++){
if(lstData[i]->m_bIsWell){ //井
if(i == lstData.Length()-2)
break;
m_grid.AppendRow();
CString csName1 = lstData[i]->m_csName;
CString csName2 = lstData[i+2]->m_csName;
if(csName1 == _T("") && csName2 == _T(""))
continue;
CString csArea, csAllArea, csFactor, csQ, csTime, csP, csI;
m_grid.GetCell(idx, 0).SetText(csName1);
m_grid.GetCell(idx, 1).SetText(csName2);
csArea.Format(_T("%.1f"), lstData[i]->m_nArea);
csTime.Format(_T("%.2f"), lstData[i]->m_nTime);
csQ.Format(_T("%.2f"), lstData[i]->m_nQ);
csAllArea.Format(_T("%.1f"), lstData[i]->m_nAllArea);
csFactor.Format(_T("%.2f"), lstData[i]->m_nFactor);
csP.Format(_T("%d"), lstData[i]->m_iP);
csI.Format(_T("%.2f"), lstData[i]->m_dI); //暴雨强度
m_grid.GetCell(idx, 5).SetText(csArea);
m_grid.GetCell(idx, 6).SetText(csAllArea);
m_grid.GetCell(idx, 9).SetText(csTime);
m_grid.GetCell(idx, 7).SetText(csFactor);
m_grid.GetCell(idx, 8).SetText(csP);
m_grid.GetCell(idx, 11).SetText(csQ);
// m_grid.GetCell(idx, 11).SetText(csQ);
if(!m_bReCalc)
m_grid.GetCell(idx, 12).SetText(csI);
else
m_arRainStom.Add(csI);
}
else{ //管
int iDn = lstData[i]->m_iDn;
CString csDn, csPipeLen, csI, csV;
csDn.Format(_T("%d"), iDn);
csV.Format(_T("%.2f"), lstData[i]->m_nV);
csI.Format(_T("%.3f"), lstData[i]->m_nI);
csPipeLen.Format(_T("%.2f"), lstData[i]->m_nLength);
m_grid.GetCell(idx, 2).SetText(csDn);
m_grid.GetCell(idx, 3).SetText(csI);
m_grid.GetCell(idx, 4).SetText(csPipeLen);
m_grid.GetCell(idx, 10).SetText(csV);
double dTmpv = lstData[i]->m_nV;
double nTempQ = (0.25*iDn*iDn*PI)*lstData[i]->m_nV/1000;
double nQ = lstData[i]->m_nQ;
csI.Format(_T("%.2f"), nTempQ);
if(m_bReCalc){
if(nTempQ < lstData[i]->m_nQ){
csI = csI + _T("错误");
}
m_grid.GetCell(idx, 12).SetText(csI);
}
idx++;
//zxl 2013.12.30 add
if (bInitMap)
{
double nN(0.009);
CString csMat;
OPENOBJ_BEGIN(lstData[i]->m_ID, AcDb::kForRead, TDbPipe, pPipe);
if(pPipe)
{
csMat = GetPipeMaterialByIdx(pPipe->GetMaterial());
if(csMat.Find(_T("混凝土管")) > -1 || csMat.Find(_T("铸铁")) > -1)
nN = 0.013;
else if(csMat.Find(_T("钢")) > -1)
nN = 0.012;
m_mapMeratialN.insert(std::make_pair(csMat, nN));
}
OPENOBJ_END();
}
// if(nTempQ < lstData[i]->m_nQ || lstData[i]->m_nV > 5){
// CString csTmp;
// csTmp.Format(_T("%s管径过小,泄流量不满足计算流量要求!"), lstData[i]->m_csName);
//
// // m_grid.GetCell(idx, 2)
// // MessageBox(csTmp);
// }
}
}
m_grid.SelectRow(iCurRow, TRUE);
}
void CCalcRainWellDlg::OnCancel()
{
UpdateData(TRUE);
CRegProperty regProp(GetRegLocation(), _T("TWTConfig"));
regProp.SetTopRootKey(HKEY_CURRENT_USER);
regProp.SetValue(_T("CurProvince"), m_csProvince);
regProp.SetValue(_T("CurCity"), m_csCity);
CAcUiDialog::OnCancel();
}
//初算
void CCalcRainWellDlg::OnOK()
{
UpdateData(TRUE);
// if(m_csCity == _T("重庆")){ 2010-6-2 sr 删除,因为09技术措施有新公式
// double nB = m_nP;
// nB = pow(nB, 0.076)* 12.8;
// m_csB.Format(_T("%.3f"), nB);
// UpdateData(FALSE);
// }
if(m_csCity == _T("南充")){
double nB = m_nP;
nB = pow(nB, 0.0167)* 7.8786;
m_csB.Format(_T("%.3f"), nB);
UpdateData(FALSE);
}
if(m_csCity == _T("")){
MessageBox(_T("没有选择城市!"));
return;
}
m_grid.GetCol(12).SetName(_T("暴雨强度"));
m_bCalc = TRUE;
m_bReCalc = FALSE;
// zxl 2013.12.31 add
m_mapMeratialN.clear();
for(m_gridN.MoveToFirst(); !m_gridN.IsOut(); m_gridN.MoveToNext())
{
WDGridRow *pRow = m_gridN.CurRow();
CString csName = (*pRow)[0].GetText().cs();
CString csN = (*pRow)[1].GetText().cs();
m_mapMeratialN.insert(std::make_pair(csName, _tstof(csN)));
}
ResetList(m_pListAll);
m_pNodeLong->m_nLost = m_dTime;
CalcRainNode(m_pNodeLong, 0); //主干线计算
SSearchPipeList *pNodeNext = GetNextCalcWell(m_pListAll, NULL);
while(pNodeNext){
CalcRainNode(pNodeNext, 0);//支路计算
pNodeNext = GetNextCalcWell(m_pListAll, NULL);
}
UpdateGrid();
}
//返回用户选择的最远井所在链表的位置
// SSearchPipeList *GetPipeNodeByName(SSearchPipeList *pListAll, CString csName, SSearchPipeList *pNode)
// {
// AcDbObjectId id = NULL;
// id = pListAll->m_ID;
// if(pListAll->m_iType == 0){
// if(pListAll->m_csName == csName)
// return pListAll;
// }
// long len = pListAll->m_lstNode.Length();
// for(long i=0;i<len;i++){
// SSearchPipeList *pList = pListAll->m_lstNode[i];
// pNode = GetPipeNodeByName(pList, csName, pNode);
// }
// return pNode;
// }
void CCalcRainWellDlg::ResetList(SSearchPipeList *pListAll)
{
pListAll->m_nPipeQ = 0;
pListAll->m_nLost = 0; //汇水时间,每次计算都根据对话框重新计算
long len = pListAll->m_lstNode.Length();
for(long i=0;i<len;i++){
SSearchPipeList *pList = pListAll->m_lstNode[i];
ResetList(pList);
}
}
//复算2 已知坡度计算管径
void CCalcRainWellDlg::OnButtonCalc2()
{
UpdateData(TRUE);
// if(m_csCity == _T("重庆")){
// double nB = m_nP;
// nB = pow(nB, 0.076)* 12.8;
// m_csB.Format(_T("%.3f"), nB);
// UpdateData(FALSE);
// }
// else
if(m_csCity == _T("南充")){
double nB = m_nP;
nB = pow(nB, 0.0167)* 7.8786;
m_csB.Format(_T("%.3f"), nB);
UpdateData(FALSE);
}
if(m_csCity == _T("")){
MessageBox(_T("没有选择城市!"));
return;
}
m_grid.GetCol(12).SetName(_T("暴雨强度"));
for(m_grid.MoveToFirst(); !m_grid.IsOut(); m_grid.MoveToNext()){
WDGridRow *pRow = m_grid.CurRow();
CString csName1 = (*pRow)[0].GetText().cs();
CString csName2 = (*pRow)[1].GetText().cs();
CString csI = (*pRow)[3].GetText().cs();
if(csName1 == _T(""))
break;
csName1 = csName1 + _T("-") + csName2;
if(fabs(_tstof(csI)) < 1e-9){
MessageBox(_T("雨水计算,坡度不能为0!"));
return;
}
SSearchPipeList *pList = GetPipeNodeByName(m_pListAll, csName1, NULL);
if(pList != NULL){
pList->m_nI = _tstof(csI);
}
}
// zxl 2013.12.31 add
m_mapMeratialN.clear();
for(m_gridN.MoveToFirst(); !m_gridN.IsOut(); m_gridN.MoveToNext())
{
WDGridRow *pRow = m_gridN.CurRow();
CString csName = (*pRow)[0].GetText().cs();
CString csN = (*pRow)[1].GetText().cs();
m_mapMeratialN.insert(std::make_pair(csName, _tstof(csN)));
}
ResetList(m_pListAll);
CalcRainNode(m_pNodeLong, 2); //主干线计算
m_bCalc = TRUE;
m_bReCalc = FALSE;
SSearchPipeList *pNodeNext = GetNextCalcWell(m_pListAll, NULL);
while(pNodeNext){
CalcRainNode(pNodeNext, 2);//支路计算
pNodeNext = GetNextCalcWell(m_pListAll, NULL);
}
UpdateGrid();
}
//复算
void CCalcRainWellDlg::OnButtonCalc()
{
UpdateData(TRUE);
if(m_csCity == _T("重庆")){
double nB = m_nP;
nB = pow(nB, 0.076)* 12.8;
m_csB.Format(_T("%.3f"), nB);
UpdateData(FALSE);
}
else if(m_csCity == _T("南充")){
double nB = m_nP;
nB = pow(nB, 0.0167)* 7.8786;
m_csB.Format(_T("%.3f"), nB);
UpdateData(FALSE);
}
if(m_csCity == _T("")){
MessageBox(_T("没有选择城市!"));
return;
}
m_grid.GetCol(12).SetName(_T("泄流量"));
for(m_grid.MoveToFirst(); !m_grid.IsOut(); m_grid.MoveToNext()){
WDGridRow *pRow = m_grid.CurRow();
CString csName1 = (*pRow)[0].GetText().cs();
CString csName2 = (*pRow)[1].GetText().cs();
CString csDn = (*pRow)[2].GetText().cs();
CString csI = (*pRow)[3].GetText().cs();
if(csName1 == _T(""))
break;
csName1 = csName1 + _T("-") + csName2;
if(fabs(_tstof(csI)) < 1e-9){
MessageBox(_T("雨水计算,坡度不能为0!"));
return;
}
SSearchPipeList *pList = GetPipeNodeByName(m_pListAll, csName1, NULL);
if(pList != NULL){
pList->m_iDn = _ttoi(csDn);
pList->m_nI = _tstof(csI);
}
}
// zxl 2013.12.31 add
m_mapMeratialN.clear();
for(m_gridN.MoveToFirst(); !m_gridN.IsOut(); m_gridN.MoveToNext())
{
WDGridRow *pRow = m_gridN.CurRow();
CString csName = (*pRow)[0].GetText().cs();
CString csN = (*pRow)[1].GetText().cs();
m_mapMeratialN.insert(std::make_pair(csName, _tstof(csN)));
}
ResetList(m_pListAll);
CalcRainNode(m_pNodeLong, 1); //主干线计算
m_bCalc = TRUE;
m_bReCalc = TRUE;
SSearchPipeList *pNodeNext = GetNextCalcWell(m_pListAll, NULL);
while(pNodeNext){
CalcRainNode(pNodeNext, 1);//支路计算
pNodeNext = GetNextCalcWell(m_pListAll, NULL);
}
UpdateGrid();
}
//《给水排水设计手册》红皮 P436 满流
double CalcPipeV(double nDn, double nI, double n)
{
double nTemp = 1 / n;
nI = pow(nI, 0.5);
double nR = pow(0.25*nDn, 2.0/3.0);
return nTemp*nI*nR;
}
//《给水排水设计手册》红皮 P436 满流
double CalcPipeVByQ(double nPipeQ, double nDn)
{
double nRet(-1);
double nRadius = nDn / 1000 / 2;
double dArea = PI * nRadius * nRadius;
nRet = nPipeQ / dArea / 1000;
return nRet;
}
//计算管道泄流量
double CalcDesignPipeQ(double nDn, double nI, double n)
{
double nRet(-1);
double dV = CalcPipeV(nDn/ 1000, nI/ 1000, n);
double nRadius = nDn / 1000 / 2;
double dArea = PI * nRadius * nRadius;
nRet = dArea*dV*1000;
return nRet;
}
//《给水排水设计手册》红皮 P436 满流
double CalcPipeV(double nQ, double nDn, double nI, double n)
{
double nRet(-1);
double nTemp = 1 / n;
nI = pow(nI, 0.5);
double nR = pow(0.25*nDn, 2.0/3.0);
nRet = nTemp*nI*nR;
double nTempQ = (0.25*nDn*nDn*PI)*nRet;
if(nTempQ < nQ && nDn < 2.750)
return -1;
return nRet;
// double nRet(-1);
// double nArea(0);
// nArea = PI/4.0 * nDn * nDn;
// nRet = nQ / nArea;
// return nRet;
}
//主计算模块
// mode == 0 初算 计算管径
// mode == 1 复算 不计算管径, 从图上读管径
void CCalcRainWellDlg::CalcRainNode(SSearchPipeList *pListLast, int mode)
{
double A = _tstof(m_csA);
double B = _tstof(m_csB);
double C = _tstof(m_csC);
double D = _tstof(m_csN);
double P = m_nP;
if(m_csCity == _T("成都"))
{
B = pow(m_nP, 0.231) * 12.8;
}
else if(m_csCity == _T("贵阳"))
{
B = pow(m_nP, 0.031) * 9.35;
}
double nM = m_dM; //折减系数,暗管折减系数m=2,明渠折减系数m=l.2; 这里都认为是2
AcDbObjectId id = NULL;
id = pListLast->m_ID;
if(pListLast->m_iType == 3 || pListLast->m_iType == 1){
double nTime = pListLast->m_nLost;
double nFactor = (double)(pListLast->m_iNum) / 1000;
if(nFactor < 0.0001)
nFactor = m_nFactor;
if(nTime < 0.001){ //不是起始井
int len = pListLast->m_lstNode.Length();
for(int i=0;i<len;i++){
SSearchPipeList *pList = pListLast->m_lstNode[i];
if(pList->m_nLost > 0){
nTime = pList->m_nLost;
pListLast->m_nLost = nTime;
break;
}
}
}
if(nTime < 0.001){ //是起始井, 但不是最远,默认随最远井
nTime = m_dTime;
if(pListLast->m_nLost < 1)
pListLast->m_nLost = nTime;
}
double nArea = pListLast->m_nStartPress;
double i = (log10(P) * C + 1) * A;
i = i / pow((nTime + B), D);
double q = i * 10000 / 60; //把mm/min -> 升/秒/公顷
double nQ = q * nFactor * nArea / 10000;
if(nArea < 0.001)
nQ = -1;
pListLast->m_nPipeQ = nQ;
pListLast->m_nSpare = q; //暴雨强度 2007-12-13 应蒋工要求加入
}
else if(pListLast->m_iType == 0){
double nRadius(0), nPipeLen(0), nI(0);
int iDn(0);
double nN(0.009);//粗糙系数
OPENOBJ_BEGIN(id, AcDb::kForRead, TDbPipe, pPipe);
if(pPipe){
nPipeLen = pPipe->Length();
// if(!DocGetMeterUnitDraw())
// nPipeLen = nPipeLen/1000;
CString csMat = GetPipeMaterialByIdx(pPipe->GetMaterial());
// zxl 2013.12.30 modify
// if(csMat.Find(_T("混凝土管")) > -1) //《给排水设计手册》 P764 满流
// nN = 0.013;
// else if(csMat.Find(_T("铸铁")) > -1)
// nN = 0.013;
// else if(csMat.Find(_T("钢")) > -1)
// nN = 0.012;
// else if(csMat.Find(_T("PVC")) > -1 || csMat.Find(_T("塑料")) > -1)
// nN = 0.009;
std::map<CString, double>::iterator it = m_mapMeratialN.find(csMat);
if (it != m_mapMeratialN.end())
{
nN = it->second;
}
}
OPENOBJ_END();
if(pListLast->m_lstNode.Length() == 1){
SSearchPipeList *pList = pListLast->m_lstNode[0]; //得到后节点
double nPipeQ = pList->m_nPipeQ;
double nV(0), nI(0);
if(mode == 0){ //初算
iDn = GetFirstPipeDnByQ(nPipeQ, nN, nI, nV);
nI = nI * 1000;
int iDnBig(iDn);
//检查前管的管径是否大于本管,如果大于则本管也按大的管径 2010-5-11 sr 增加这个考虑 王峻提
if(pList->m_lstNode.Length() > 0){
for(int mm=0;mm< pList->m_lstNode.Length();mm++){
SSearchPipeList *pList4 = pList->m_lstNode[mm];
if(pList4->m_iDn > iDnBig)
iDnBig = pList4->m_iDn;
}
if(iDnBig > iDn){
iDn = iDnBig;
nRadius = (double)iDn / 1000;
nV = CalcPipeV(nRadius, nI/ 1000, nN);
}
}
}
else if(mode == 1){ //复算1
//以下是7.5的程序
// iDn = pListLast->m_iDn;
// nI = pListLast->m_nI;
// double nRadius = (double)iDn / 1000;
// nV = CalcPipeV(nRadius, nI/ 1000, nN);
//以下是7.0的程序,蒋工认为管径增加后,流速复算不能变大
// iDn = pListLast->m_iDn;
// nI = pListLast->m_nI;
// double nV2(0);
// int iDnTmp = GetFirstPipeDnByQ2(nPipeQ, nN, nI, nV2);
// if(iDnTmp == iDn){
// nRadius = (double)iDn / 1000;
// nV = CalcPipeV(nRadius, nI/ 1000, nN);
// }
// else{
// //计算流量的公式2:《给排水设计手册》P766 Q = V*A (A = PI/4*d*d)
// //假定复算2得到的管径是满流管径,nV2也就是满流流速
// //满流情况比非满流情况,计算得出非满流的流速V
// nV = ((double)iDnTmp/(double)iDn)*((double)iDnTmp/(double)iDn)*nV2;
// }
//2008-1-10 蒋工推荐方法:V=Q/A A仍然是满流
iDn = pListLast->m_iDn;
nI = pListLast->m_nI;
nV = CalcPipeVByQ(nPipeQ, (double)iDn);
// double dCalcQ = CalcDesignPipeQ((double)iDn, nI, nN);
// double dTmp = fabs(dCalcQ - nPipeQ);
// if(dTmp > nPipeQ*0.2){
// // nV = CalcPipeV((double)iDn/ 1000, nI/ 1000, nN);
// }
double nV2(0);
int iDnTmp = GetFirstPipeDnByQ2(nPipeQ, nN, nI, nV2);
// if(iDnTmp == iDn){
nRadius = (double)iDn / 1000;
nV = CalcPipeV(nRadius, nI/ 1000, nN);
// }
}
else if(mode == 2){ //复算2
nI = pListLast->m_nI;
iDn = GetFirstPipeDnByQ2(nPipeQ, nN, nI, nV);
int iDnBig(iDn);
//检查前管的管径是否大于本管,如果大于则本管也按大的管径
if(pList->m_lstNode.Length() > 0){
for(int mm=0;mm< pList->m_lstNode.Length();mm++){
SSearchPipeList *pList4 = pList->m_lstNode[mm];
if(pList4->m_iDn > iDnBig)
iDnBig = pList4->m_iDn;
}
if(iDnBig > iDn){
iDn = iDnBig;
nRadius = (double)iDn / 1000;
nV = CalcPipeV(nRadius, nI/ 1000, nN);
}
}
}
pListLast->m_nPipeQ = nPipeQ;
pListLast->m_iDn = iDn;
pListLast->m_nI = nI;
pListLast->m_nV = nV;
double nTime = nPipeLen / nV / 60 * nM + pList->m_nLost;
pListLast->m_nLost = nTime;
pListLast->m_nDang = pList->m_nDang;
}
}
if(pListLast->m_pPrevious){
CalcRainNode(pListLast->m_pPrevious, mode);
}
}
void CCalcRainWellDlg::OnButtonWord()
{
SSearchPipeList *pNodeLong = m_pNodeLong;
DList<SSearchPipeList> lstNode, lstWell;
while(pNodeLong){
if(pNodeLong->m_iType == 0 || pNodeLong->m_iType == 3){
SSearchPipeList *pNodeNew = new SSearchPipeList();
pNodeNew->m_iDn = pNodeLong->m_iDn;
pNodeNew->m_ID = pNodeLong->m_ID;
pNodeNew->m_csName = pNodeLong->m_csName;
pNodeNew->m_nLength = pNodeLong->m_nLength;
pNodeNew->m_nPipeQ = pNodeLong->m_nPipeQ;
pNodeNew->m_nDang = pNodeLong->m_nDang;
pNodeNew->m_nStartPress = pNodeLong->m_nStartPress;
pNodeNew->m_nI = pNodeLong->m_nI;
pNodeNew->m_nV = pNodeLong->m_nV;
pNodeNew->m_nLost = pNodeLong->m_nLost;
pNodeNew->m_nSpare = pNodeLong->m_nSpare;
if(pNodeLong->m_iType == 3)
lstWell.Append(pNodeNew);
else
lstNode.Append(pNodeNew);
}
if(pNodeLong->m_pPrevious)
pNodeLong = pNodeLong->m_pPrevious;
else
break;
}
GetOtherWellNode(m_pListAll, lstWell);
ImportRainCalcWord(lstNode, lstWell, *this);
}
//void CCalcRainWellDlg::OnButtonDim()
//{
// UpdateData(TRUE);
// BeginEditorCommand();
//
// XPoint ptLow, ptUp;
// m_ssAll.GetExtend(ptLow, ptUp);
// AssureInCurrentView(ptLow, ptUp);
//
// TCHAR szTmp[32];
// DimRainCalcResult(m_pListAll);
// actrTransactionManager->flushGraphics(); //acad 刷新
//
// ads_getstring(NULL, _T("\n数据已经赋回图面,n按任意键返回对话框:<返回>"), szTmp);
//
// CompleteEditorCommand();
//
//}
//extern void UpdateMultDim();
extern bool g_bPipeShow; // cet 2012.1.9 add 图面赋值控制变量
extern int g_nSelType; // cet 2012.1.9 add 图面赋值控制变量
void CCalcRainWellDlg::OnButtonDim()
{
if(!m_bCalc)
return;
UpdateData(TRUE);
BeginEditorCommand();
XPoint ptLow, ptUp;
m_ssAll.GetExtend(ptLow, ptUp);
AssureInCurrentView(ptLow, ptUp);
TCHAR szTmp[32];
// cet 2012.1.9 add
g_bPipeShow = false;
g_nSelType = -1;
DimRainCalcResult(m_pListAll);
acedRedraw(0,0); // cet 2012.1.9 add 刷新清除显示管线时的X
UpdateMultDim();
actrTransactionManager->flushGraphics(); //acad 刷新
ads_getstring(NULL, _T("\n数据已经赋回图面,按任意键返回对话框:<返回>"), szTmp);
CompleteEditorCommand();
}
void CCalcRainWellDlg::OnButtonNewCity()
{
CTemporaryResourceOverride vTemp;
CRainNewCityDlg dlg;
dlg.m_csProvince = m_csProvince;
if(dlg.DoModal() != IDOK || dlg.m_csCity == _T("") || dlg.m_csA == _T("") || dlg.m_csB == _T("") || dlg.m_csC == _T("") || dlg.m_csN == _T(""))
return;
XStringList lstCity;
GetAllCityByProvince(m_csProvince, lstCity);
for(int i=0;i<lstCity.Length();i++){
CString csTmp = lstCity[i];
if(csTmp == dlg.m_csCity)
return;
}
XString fullFile;
if(!FindFile(_T("raincity.dbf"), fullFile)) {
MessageBox(_T("对不起,没有发现raincity.dbf文件!"));
return;
}
CodeBase db;
XDbfTable *pTable = db.Open(fullFile);
if(!pTable)
return;
pTable->AppendBegin();
SET_FIELD(pTable, _T("province"), (const TCHAR*)m_csProvince);
SET_FIELD(pTable, _T("city"), (const TCHAR*)dlg.m_csCity);
SET_FIELD(pTable, _T("A"), (const TCHAR*)dlg.m_csA);
SET_FIELD(pTable, _T("B"), (const TCHAR*)dlg.m_csB);
SET_FIELD(pTable, _T("C"), (const TCHAR*)dlg.m_csC);
SET_FIELD(pTable, _T("D"), (const TCHAR*)dlg.m_csN);
pTable->AppendEnd();
OnSelchangeListProvince();
}
void CCalcRainWellDlg::OnButtonP()
{
// zxl 2011.08.16 modify 更改显示方式
// UpdateData(TRUE);
// CString csTmp;
// if(m_csCity == _T("北京"))
// csTmp = _T("一般地形居住区或城市区间道路:0.33~0.5\n 不利地形的居住区域或一般城市道路:0.5~1\n城市干道、中心区1~2\n特殊重要地区或盆地3~10\n立交路口1~3");
// else if(m_csCity == _T("上海"))
// csTmp = _T("市区:0.5~1\n 工业区的生活区:1\n厂区一般车间:2\n大型重要车间:5");
// else if(m_csCity == _T("无锡"))
// csTmp = _T("小巷:0.33\n 一般:0.5\n新建区:1");
// else if(m_csCity == _T("常州"))
// csTmp = _T("常州:1");
// else if(m_csCity == _T("南京"))
// csTmp = _T("南京:0.5~1");
// else if(m_csCity == _T("杭州"))
// csTmp = _T("杭州:0.33~1");
// else if(m_csCity == _T("宁波"))
// csTmp = _T("宁波:0.5~1");
// else if(m_csCity == _T("广州"))
// csTmp = _T("1~2,主要地区2~20");
// else if(m_csCity == _T("长沙"))
// csTmp = _T("长沙:0.5~1");
// else if(m_csCity == _T("成都"))
// csTmp = _T("成都:1");
// else if(m_csCity == _T("重庆"))
// csTmp = _T("小面积小区:1~2\n面积(30~50)×100平方米小区:5\n大面积或重要地区:5~10");
// else if(m_csCity == _T("天津"))
// csTmp = _T("天津:1");
// else if(m_csCity == _T("贵阳"))
// csTmp = _T("贵阳:3");
// else if(m_csCity == _T("哈尔滨"))
// csTmp = _T("哈尔滨:0.5~1");
// else if(m_csCity == _T("吉林"))
// csTmp = _T("吉林:1");
// else if(m_csCity == _T("营口"))
// csTmp = _T("郊区:0.5, 市区:1");
// else if(m_csCity == _T("白城"))
// csTmp = _T("白城:1");
// else if(m_csCity == _T("兰州"))
// csTmp = _T("兰州:0.5~1");
// else if(m_csCity == _T("西宁"))
// csTmp = _T("西宁:0.33~0.5");
// else if(m_csCity == _T("西安"))
// csTmp = _T("西安:1~3");
// else if(m_csCity == _T("唐山"))
// csTmp = _T("唐山:1");
// else if(m_csCity == _T("保定"))
// csTmp = _T("保定:1~2");
// else if(m_csCity == _T("昆明"))
// csTmp = _T("昆明:0.5");
// else
// return;
// AfxMessageBox(csTmp);
RBList rbCmd=ads_buildlist(RTSTR, _T("IShowRecurCyle"), NULL);
resbuf *rbRes=NULL;
if(ads_invoke(rbCmd, &rbRes)==RTNORM && rbRes)
{
ads_relrb(rbRes);
return;
}
return;
}
void CCalcRainWellDlg::OnSelchangeListProvince()
{
UpdateData(TRUE);
XStringList lstCity;
GetAllCityByProvince(m_csProvince, lstCity);
m_listCity.ResetContent();
for(int i=0;i<lstCity.Length();i++){
CString csTmp = lstCity[i];
m_listCity.AddString(csTmp);
}
m_listCity.SetCurSel(0);
UpdateData(FALSE);
OnSelchangeListCity();
}
void CCalcRainWellDlg::OnSelchangeListCity()
{
UpdateData(TRUE);
CodeBase db;
db.read_only = 1;
XString fullFile;
if(!FindFile(_T("raincity.dbf"), fullFile)) {
AfxMessageBox(_T("对不起,没有发现raincity.dbf文件!"));
return;
}
XDbfTable *pTable = db.Open(fullFile);
if(!pTable)
return;
CString csTmp, csCity;
XStringList lstProvince;
for(pTable->MoveFirst();!pTable->IsEOF();pTable->MoveNext()){
GET_FIELD(pTable, _T("province"), csTmp);
GET_FIELD(pTable, _T("city"), csCity);
if(_tcsicmp(csTmp, m_csProvince) == 0 && _tcsicmp(csCity, m_csCity) == 0){
GET_FIELD(pTable, _T("A"), m_csA);
GET_FIELD(pTable, _T("B"), m_csB);
GET_FIELD(pTable, _T("C"), m_csC);
GET_FIELD(pTable, _T("D"), m_csN);
if(m_csCity == _T("成都"))
{
m_csB = _T("12.8P");
m_csN2 = _T("0.231");
}
else if(m_csCity == _T("贵阳"))
{
m_csB = _T("9.35P");
m_csN2 = _T("0.031");
}
else
m_csN2 = _T("");
UpdateData(FALSE);
return;
}
}
}
void CCalcRainWellDlg::OnButtonFactor()
{
// cet 2010.9.25 modify
// CString csTmp;
// csTmp = _T("径 流 系 数\n\n");
// csTmp += _T("地面种类 ψ\n");
// csTmp += _T("各种屋面、混凝土和沥青路面 0.9\n");
// csTmp += _T("大块石铺砌路面和沥青表面处理的碎石路面 0.6\n");
// csTmp += _T("级配碎石路面 0.45\n");
// csTmp += _T("非铺砌土地面 0.3\n");
// csTmp += _T("公园或绿地 0.15\n\n");
// csTmp += _T("综 合 径 流 系 数\n");
// csTmp += _T("市区 0.5 ~ 0.8\n");
// csTmp += _T("郊区 0.4 ~ 0.6\n");
// AfxMessageBox(csTmp);
RBList rbCmd=ads_buildlist(RTSTR, _T("IShowRunoffQuotie"), NULL);
resbuf *rbRes=NULL;
if(ads_invoke(rbCmd, &rbRes)==RTNORM && rbRes)
{
ads_relrb(rbRes);
return;
}
return;
}
void CCalcRainWellDlg::OnButtonHide()
{
long idx = m_grid.GetCurRowIndex();
CString csName1;
if(idx > -1){
WDGridRow *pRow = &m_grid.GetRow(idx);
if(pRow)
csName1 = (*pRow)[0].GetText();
}
if(csName1 != _T("")){
RBList rbMask(RTDXF0, _T("ATS_WELL"), NULL);
PickSet ss(SS_FREE);
ss.Get(_T("X"), NULL, NULL, rbMask);
long len = ss.Length();
for(long i=0;i<len;i++){
Entity ent = ss[i];
OPENOBJ_BEGIN(ent, AcDb::kForRead, TDbWell, pEquip);
if(pEquip){
CString csName = pEquip->GetWellName();
if(_tcsicmp(csName, csName1) == 0){
XPoint ptCen = pEquip->GetLocation();
arxZoomTo(ptCen, 10*pEquip->GetPScale(), 10*pEquip->GetPScale());
double nDist = pEquip->GetPScale();
XPoint p1, p2, p3, p4;
ads_polar(ptCen, 0, nDist, p1);
ads_polar(p1, PI/2, nDist, p1);
ads_polar(ptCen, PI, nDist, p2);
ads_polar(p2, PI/2, -nDist, p2);
ads_grdraw(p1, p2, 2, 0);
ads_polar(ptCen, PI/2, nDist, p3);
ads_polar(p3, PI, nDist, p3);
ads_polar(ptCen, PI/2, -nDist, p4);
ads_polar(p4, 0, nDist, p4);
ads_grdraw(p3, p4, 2, 0);
break;
}
}
OPENOBJ_END();
}
}
HideDialog(this, TRUE);
TCHAR szTmp[256];
ads_getstring(NULL, _T("\n按任意键返回对话框:<返回>"), szTmp);
HideDialog(this, FALSE);
}
void CCalcRainWellDlg::OnDestroy()
{
CAcUiDialog::OnDestroy();
m_wndToolTip.DestroyWindow();
}
BOOL CCalcRainWellDlg::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message >= WM_MOUSEFIRST &&
pMsg->message <= WM_MOUSELAST)
{
MSG msg;
::CopyMemory(&msg, pMsg, sizeof(MSG));
HWND hWndParent = ::GetParent(msg.hwnd);
if (msg.hwnd)
{
m_wndToolTip.RelayEvent(&msg);
}
}
return CAcUiDialog::PreTranslateMessage(pMsg);
}
void CCalcRainWellDlg::OnBtnCalcTable()
{
//前期数据准备
SSearchPipeList *pNodeLong = m_pNodeLong;
DList<SSearchPipeList> lstNode, lstWell;
while(pNodeLong){
if(pNodeLong->m_iType == 0 || pNodeLong->m_iType == 3){
SSearchPipeList *pNodeNew = new SSearchPipeList();
pNodeNew->m_iDn = pNodeLong->m_iDn;
pNodeNew->m_ID = pNodeLong->m_ID;
pNodeNew->m_csName = pNodeLong->m_csName;
pNodeNew->m_nLength = pNodeLong->m_nLength;
pNodeNew->m_nPipeQ = pNodeLong->m_nPipeQ;
pNodeNew->m_nDang = pNodeLong->m_nDang;
pNodeNew->m_nStartPress = pNodeLong->m_nStartPress;
pNodeNew->m_nI = pNodeLong->m_nI;
pNodeNew->m_nV = pNodeLong->m_nV;
pNodeNew->m_nLost = pNodeLong->m_nLost;
pNodeNew->m_nSpare = pNodeLong->m_nSpare;
if(pNodeLong->m_iType == 3)
lstWell.Append(pNodeNew);
else
lstNode.Append(pNodeNew);
}
if(pNodeLong->m_pPrevious)
pNodeLong = pNodeLong->m_pPrevious;
else
break;
}
GetOtherWellNode(m_pListAll, lstWell);
//绘制计算表
DrawCalcTable(lstNode,lstWell);
}
//绘制计算表
void CCalcRainWellDlg::DrawCalcTable(DList<SSearchPipeList> &lstNode, DList<SSearchPipeList> &lstWell)
{
HideDialog(this,TRUE);
XPoint pt;
int ret = XGetPoint(NULL, _T("点取位置\n"), pt);
if(ret != RTNORM) {
HideDialog(this,FALSE);
return;
}
pt = Ucs2Wcs(pt);
int nColNum = 16;
int nRow = m_grid.GetRowNum();
if (nRow < 1)
{
HideDialog(this,FALSE);
return;
}
//删除空行
int nCount = m_grid.GetRowNum() - 1;
CString sEndText = m_grid.GetCell(nCount,0).GetText().cs();
while (sEndText.IsEmpty() && nCount >= 0)
{
nRow--;
nCount--;
if (nCount < 0)
break;
sEndText = m_grid.GetCell(nCount,0);
}
int nTitleLen = 3;
nRow += nTitleLen; //加上3行标题
double nTextSize(4), nTableHeight(7),dTitleHeight(15); //字高,表高,字宽高比
CString csDimStyle = _T("_TCH_DIM");//字型
InitTextStyle(csDimStyle);
AcDbObjectId idTextStyle = NULL;
idTextStyle = GetTextStyleId(csDimStyle);
if (!idTextStyle)
{
HideDialog(this,FALSE);
return;
}
TDbSheet *pSheet = new TDbSheet;
ASSERT(pSheet != NULL);
InitLayer(LAY_TEXT);
pSheet->setLayer(LAY_TEXT);
//初始化表格属性
TGridStyle gridStyle;
gridStyle.SetOverrideAll(TRUE);
gridStyle.SetTextHeight(nTextSize);
gridStyle.SetTextStyleId(idTextStyle);
gridStyle.SetHorMode(AcDb::kTextCenter);
gridStyle.SetVerMode(AcDb::kTextVertMid);
pSheet->SetRotation(Ucs2Wcs(0.0));
pSheet->SetGridStyle(gridStyle);
pSheet->SetRowHeight(nTableHeight);
pSheet->SetTitleHeight(dTitleHeight);
gridStyle.SetTextHeight(nTextSize+3);
pSheet->SetTitleGridStyle(gridStyle);
pSheet->SetTitleText(_T("雨水计算表"));
TSheetTitle &title=pSheet->GetTitle();
TDividerStyle &dStyle=title.GetDividerStyle();
dStyle.SetDividerFlag(TDividerStyle::kNone);
pSheet->InitSheet(nRow, nColNum, nTableHeight, 50);
//初始化列
TSheetColumn column;
column.SetWidth(17);
for (int i = 0; i < nColNum; ++i)
{
pSheet->SetColumnAt(i, column);
}
column.SetWidth(10);
pSheet->SetColumnAt(0, column);
pSheet->SetColumnAt(1, column);
column.SetWidth(13);
pSheet->SetColumnAt(5, column);
pSheet->SetColumnAt(6, column);
pSheet->SetColumnAt(2, column);
column.SetWidth(23);
pSheet->SetColumnAt(3, column);
pSheet->SetColumnAt(4, column);
column.SetWidth(26);
pSheet->SetColumnAt(7, column);
pSheet->SetColumnAt(8, column);
pSheet->MergeCells(0,0,0,5);
pSheet->MergeCells(0,6,0,11);
pSheet->MergeCells(0,12,0,15);
pSheet->MergeCells(1,0,1,1);
pSheet->MergeCells(1,0,1,1);
pSheet->MergeCells(1,2,2,2);
pSheet->MergeCells(1,3,1,4);
pSheet->MergeCells(1,5,2,5);
pSheet->MergeCells(1,6,2,6);
pSheet->MergeCells(1,7,1,9);
for (int j = 10; j < nColNum; ++j)
{
pSheet->MergeCells(1,j,2,j);
}
//标题文字
TGridCell &cell00=*(*pSheet)(0, 0);
cell00.SetText(_T("线路"));
TGridCell &cell01=*(*pSheet)(0, 6);
cell01.SetText(_T("设计降雨"));
TGridCell &cell02=*(*pSheet)(0, 12);
cell02.SetText(_T("设计管渠"));
TGridCell &cell10=*(*pSheet)(1, 0);
cell10.SetText(_T("管段"));
TGridCell &cell20=*(*pSheet)(2, 0);
cell20.SetText(_T("起点"));
TGridCell &cell21=*(*pSheet)(2, 1);
cell21.SetText(_T("终点"));
TGridCell &cell12=*(*pSheet)(1, 2);
cell12.SetText(_T("长度L(m)"));
TGridCell &cell13=*(*pSheet)(1, 3);
cell13.SetText(_T("面积F"));
TGridCell &cell23=*(*pSheet)(2, 3);
cell23.SetText(_T("汇水面积(m2)"));
TGridCell &cell24=*(*pSheet)(2, 4);
cell24.SetText(_T("总面积(m2)"));
TGridCell &cell15=*(*pSheet)(1, 5);
cell15.SetText(_T("径流系数ψ"));
TGridCell &cell16=*(*pSheet)(1, 6);
cell16.SetText(_T("重现期P(年)"));
TGridCell &cell17=*(*pSheet)(1, 7);
cell17.SetText(_T("历时t"));
TGridCell &cell27=*(*pSheet)(2, 7);
cell27.SetText(_T("汇水时间t(min)"));
TGridCell &cell28=*(*pSheet)(2, 8);
cell28.SetText(_T("管内时间t(min)"));
TGridCell &cell29=*(*pSheet)(2, 9);
cell29.SetText(_T("折减系数m"));
TGridCell &cell110=*(*pSheet)(1, 10);
cell110.SetText(_T("暴雨强度q(L/s.ha)"));
TGridCell &cell111=*(*pSheet)(1, 11);
cell111.SetText(_T("设计流量Q(L/s)"));
TGridCell &cell112=*(*pSheet)(1, 12);
cell112.SetText(_T("直径D(mm)"));
TGridCell &cell113=*(*pSheet)(1, 13);
cell113.SetText(_T("坡度i(‰)"));
TGridCell &cell114=*(*pSheet)(1, 14);
cell114.SetText(_T("流速v(m/s)"));
TGridCell &cell115=*(*pSheet)(1, 15);
cell115.SetText(_T("泄流量Qs(L/s)"));
//表格内容
CString sTmpText;
for (int k = nTitleLen; k < nRow; ++k)
{
sTmpText = m_grid.GetCell(k - nTitleLen,0).GetText();
TGridCell &cell0=*(*pSheet)(k, 0);
cell0.SetText(sTmpText);
sTmpText = m_grid.GetCell(k - nTitleLen,1).GetText();
TGridCell &cell1=*(*pSheet)(k, 1);
cell1.SetText(sTmpText);
sTmpText = m_grid.GetCell(k - nTitleLen,4).GetText();
TGridCell &cell2=*(*pSheet)(k, 2);
cell2.SetText(sTmpText);
sTmpText = m_grid.GetCell(k - nTitleLen,5).GetText();
TGridCell &cell3=*(*pSheet)(k, 3);
cell3.SetText(sTmpText);
sTmpText = m_grid.GetCell(k - nTitleLen,6).GetText();
TGridCell &cell4=*(*pSheet)(k, 4);
cell4.SetText(sTmpText);
sTmpText = m_grid.GetCell(k - nTitleLen,7).GetText();
TGridCell &cell5=*(*pSheet)(k, 5);
cell5.SetText(sTmpText);
sTmpText = m_grid.GetCell(k - nTitleLen,8).GetText();
TGridCell &cell6=*(*pSheet)(k, 6);
cell6.SetText(sTmpText);
sTmpText = m_grid.GetCell(k - nTitleLen,9).GetText();
TGridCell &cell7=*(*pSheet)(k, 7);
cell7.SetText(sTmpText);
TGridCell &cell8=*(*pSheet)(k, 8);
CString sLen = m_grid.GetCell(k - nTitleLen,4).GetText().cs();
CString sV = m_grid.GetCell(k - nTitleLen,10).GetText().cs();
sTmpText.Format(_T("%.2f"),_tstof(sLen)/_tstof(sV)/60);
cell8.SetText(sTmpText);
TGridCell &cell9=*(*pSheet)(k, 9);
sTmpText.Format(_T("%.2f"),m_dM);
cell9.SetText(sTmpText);
sTmpText = m_grid.GetCell(k - nTitleLen,12).GetText();
TGridCell &cell10=*(*pSheet)(k, 10);
if (m_bReCalc)
sTmpText = m_arRainStom[k - nTitleLen];
cell10.SetText(sTmpText);
sTmpText = m_grid.GetCell(k - nTitleLen,11).GetText();
TGridCell &cell11=*(*pSheet)(k, 11);
cell11.SetText(sTmpText);
sTmpText = m_grid.GetCell(k - nTitleLen,2).GetText();
TGridCell &cell12=*(*pSheet)(k, 12);
cell12.SetText(sTmpText);
sTmpText = m_grid.GetCell(k - nTitleLen,3).GetText();
TGridCell &cell13=*(*pSheet)(k, 13);
cell13.SetText(sTmpText);
sTmpText = m_grid.GetCell(k - nTitleLen,10).GetText();
TGridCell &cell14=*(*pSheet)(k, 14);
cell14.SetText(sTmpText);
TGridCell &cell15=*(*pSheet)(k, 15);
sV = m_grid.GetCell(k - nTitleLen,10).GetText();
CString sD = m_grid.GetCell(k - nTitleLen,2).GetText().cs();
sTmpText.Format(_T("%.2f"),PI/4*pow(_tstof(sD),2)*_tstof(sV)/1000.0);
cell15.SetText(sTmpText);
}
pSheet->SetLocation(pt);
pSheet->AddToCSpace(TRUE);
actrTransactionManager->flushGraphics(); //acad 刷新
acedUpdateDisplay();
HideDialog(this,FALSE);
}