// CalcRainRoofDlg.cpp : implementation file // #include "stdafx.h" //#include #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;iMoveFirst();!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;iAppendBegin(); 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(); }