327 lines
9.0 KiB
C++
327 lines
9.0 KiB
C++
// CalcRainRoofDlg.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
//#include <cbclass.h>
|
|
|
|
#include "CalcRainRoofDlg.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
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CCalcRainRoofDlg dialog
|
|
|
|
void RoofRainCalc()
|
|
{
|
|
CTemporaryResourceOverride vTemp;
|
|
CCalcRainRoofDlg dlg;
|
|
dlg.DoModal();
|
|
}
|
|
|
|
|
|
CCalcRainRoofDlg::CCalcRainRoofDlg(CWnd* pParent /*=NULL*/)
|
|
: CDialog(CCalcRainRoofDlg::IDD, pParent)
|
|
{
|
|
//{{AFX_DATA_INIT(CCalcRainRoofDlg)
|
|
m_csCity = _T("北京");
|
|
m_csProvince = _T("北京");
|
|
m_csA = _T("");
|
|
m_csB = _T("");
|
|
m_csC = _T("");
|
|
m_csN = _T("");
|
|
m_nF = 100;
|
|
m_nW = 0.9;
|
|
m_csRet1 = _T("");
|
|
m_csRet2 = _T("");
|
|
m_nK = 1;
|
|
m_iP = 5;
|
|
m_iT = 5;
|
|
m_csN2 = _T("");
|
|
//}}AFX_DATA_INIT
|
|
}
|
|
|
|
|
|
void CCalcRainRoofDlg::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CCalcRainRoofDlg)
|
|
DDX_Control(pDX, IDC_LIST_CITY, m_listCity);
|
|
DDX_Control(pDX, IDC_LIST_PROVINCE, m_listProvince);
|
|
DDX_LBString(pDX, IDC_LIST_CITY, m_csCity);
|
|
DDX_LBString(pDX, IDC_LIST_PROVINCE, m_csProvince);
|
|
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_F, m_nF);
|
|
DDX_Text(pDX, IDC_EDIT_W, m_nW);
|
|
DDX_Text(pDX, IDC_STATIC_RET1, m_csRet1);
|
|
DDX_Text(pDX, IDC_STATIC_RET3, m_csRet2);
|
|
DDX_Text(pDX, IDC_EDIT_K, m_nK);
|
|
DDX_Text(pDX, IDC_EDIT_P, m_iP);
|
|
DDX_Text(pDX, IDC_EDIT_T, m_iT);
|
|
DDX_Text(pDX, IDC_STATIC_N2, m_csN2);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CCalcRainRoofDlg, CDialog)
|
|
//{{AFX_MSG_MAP(CCalcRainRoofDlg)
|
|
ON_LBN_SELCHANGE(IDC_LIST_PROVINCE, OnSelchangeListProvince)
|
|
ON_LBN_SELCHANGE(IDC_LIST_CITY, OnSelchangeListCity)
|
|
ON_BN_CLICKED(IDC_BUTTON_NEWCITY, OnButtonNewcity)
|
|
ON_BN_CLICKED(IDC_BUTTON_P, OnButtonP)
|
|
ON_BN_CLICKED(IDC_BUTTON_K, OnButtonK)
|
|
ON_BN_CLICKED(IDC_BUTTON_W, OnButtonW)
|
|
ON_BN_CLICKED(IDC_BUTTON_POLY, OnButtonPoly)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CCalcRainRoofDlg message handlers
|
|
|
|
BOOL CCalcRainRoofDlg::OnInitDialog()
|
|
{
|
|
CDialog::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();
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
|
// EXCEPTION: OCX Property Pages should return FALSE
|
|
}
|
|
|
|
extern BOOL GetAllCityByProvince(const TCHAR* szProvince, XStringList &lstCity);
|
|
|
|
void CCalcRainRoofDlg::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 CCalcRainRoofDlg::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 CCalcRainRoofDlg::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 CCalcRainRoofDlg::OnButtonP()
|
|
{
|
|
// cet 2010.9.21 modify 更改显示方式
|
|
// AfxMessageBox(_T("各种汇水区域的设计重现期\n\n屋面:\n一般性建筑 ≥2~5\n重要公共建筑 ≥10\n\n室外场所:\n居住小区 ≥1~3\n车站、码头、机场的基地 ≥2~5"));
|
|
RBList rbCmd=ads_buildlist(RTSTR, _T("IShowRecurCyle"), NULL);
|
|
resbuf *rbRes=NULL;
|
|
if(ads_invoke(rbCmd, &rbRes)==RTNORM && rbRes)
|
|
{
|
|
ads_relrb(rbRes);
|
|
return;
|
|
}
|
|
return;
|
|
}
|
|
|
|
void CCalcRainRoofDlg::OnButtonK()
|
|
{
|
|
AfxMessageBox(_T("k流量校正系数, 对于坡度大于2.5%的屋面,取1.2~1.5,室外地面和其余地面,取1"));
|
|
}
|
|
|
|
void CCalcRainRoofDlg::OnButtonW()
|
|
{
|
|
// cet 2010.9.21 modify 更改显示方式
|
|
// AfxMessageBox(_T("径流系数ψ\n\n屋面 0.9\n混凝土和沥青路面 0.9\n块石路面 0.6\n级配碎石路面 0.45\n干砖及碎石路面 0.4\n非铺砌地面 0.3\n 公园地面 0.15"));
|
|
RBList rbCmd=ads_buildlist(RTSTR, _T("IShowRunoffQuotie"), NULL);
|
|
resbuf *rbRes=NULL;
|
|
if(ads_invoke(rbCmd, &rbRes)==RTNORM && rbRes)
|
|
{
|
|
ads_relrb(rbRes);
|
|
return;
|
|
}
|
|
return;
|
|
}
|
|
|
|
void CCalcRainRoofDlg::OnButtonPoly()
|
|
{
|
|
HideDialog(this, TRUE);
|
|
Entity entPoly;
|
|
RBList rbMask(RTDXF0, _T("LWPOLYLINE"), 8, _T("*"), NULL);
|
|
if(SelectEntity(_T("\n请选择表示屋面的闭合PLINE:<退出>"), entPoly, rbMask) != RTNORM){
|
|
UpdateData(FALSE);
|
|
HideDialog(this, FALSE);
|
|
return;
|
|
}
|
|
XPoly2D poly(entPoly);
|
|
CString csTmp;
|
|
csTmp.Format(_T("%.2f"), _AS_SQMETER(poly.Area()));
|
|
m_nF = _tstof(csTmp);
|
|
UpdateData(FALSE);
|
|
HideDialog(this, FALSE);
|
|
}
|
|
|
|
void CCalcRainRoofDlg::OnOK()
|
|
{
|
|
UpdateData(TRUE);
|
|
// if(m_csCity == _T("重庆")){
|
|
// double nB = m_iP;
|
|
// nB = pow(nB, 0.076)* 12.8;
|
|
// m_csB.Format(_T("%.3f"), nB);
|
|
// UpdateData(FALSE);
|
|
// }
|
|
|
|
double A = _tstof(m_csA);
|
|
double B = _tstof(m_csB);
|
|
double C = _tstof(m_csC);
|
|
double D = _tstof(m_csN);
|
|
double P = m_iP;
|
|
|
|
if(m_csCity == _T("成都"))
|
|
{
|
|
B = pow(m_iP, 0.231) * 12.8;
|
|
}
|
|
else if(m_csCity == _T("贵阳"))
|
|
{
|
|
B = pow(m_iP, 0.031) * 9.35;
|
|
}
|
|
|
|
|
|
|
|
double i = (log10(P) * C + 1) * A;
|
|
|
|
i = i / pow((m_iT + B), D);
|
|
double q = i * 100 / 60; //把mm/min -> 升/秒/100平方米
|
|
double nRet = q * m_nW * m_nF/100 * m_nK;
|
|
m_csRet1.Format(_T("%.2f"), q);
|
|
m_csRet2.Format(_T("%.2f"), nRet);
|
|
UpdateData(FALSE);
|
|
}
|
|
|
|
void CCalcRainRoofDlg::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);
|
|
CDialog::OnCancel();
|
|
}
|