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

327 lines
9.2 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();
}