#include "stdafx.h" #include "shs_outdoor.h" #include "RoofInfoCalcDlg.h" #include "RecurCycleDlg.h" #include "RunoffQuotietyDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif //#ifdef _WIN64 #include"TGAs.h" //#endif CString CRoofInfoCalcDlg::m_strt = _T("5"); CString CRoofInfoCalcDlg::m_strP = _T("50"); CString CRoofInfoCalcDlg::m_strQuotiety = _T("1"); CString CRoofInfoCalcDlg::m_strK1 = _T("0.9"); IMPLEMENT_DYNAMIC(CRoofInfoCalcDlg, CModelessDialog) CRoofInfoCalcDlg::CRoofInfoCalcDlg(int iType, CWnd* pParent /*=NULL*/) : CModelessDialog(CRoofInfoCalcDlg::IDD, pParent) { //{{AFX_DATA_INIT(CRoofInfoCalcDlg) m_strA = _T(""); m_strB = _T(""); m_strC = _T(""); m_strN = _T(""); m_strProvince = _T("北京"); m_strCity = _T("北京"); m_strWndEdtArea = _T("0.0"); m_strN2 = _T(""); //}}AFX_DATA_INIT m_bExistSideWall = FALSE; } void CRoofInfoCalcDlg::DoDataExchange(CDataExchange* pDX) { CModelessDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CRoofInfoCalcDlg) DDX_Control(pDX, IDC_LIST_CITY, m_listCity); DDX_Control(pDX, IDC_LIST_PROVINCE, m_listProvince); DDX_Text(pDX, IDC_STATIC_A, m_strA); DDX_Text(pDX, IDC_STATIC_B, m_strB); DDX_Text(pDX, IDC_STATIC_C, m_strC); DDX_Text(pDX, IDC_STATIC_N, m_strN); DDX_LBString(pDX, IDC_LIST_PROVINCE, m_strProvince); DDX_LBString(pDX, IDC_LIST_CITY, m_strCity); DDX_Text(pDX, IDC_EDIT_AREA, m_strWndEdtArea); DDX_Text(pDX, IDC_EDIT_RAINTIME, m_strt); DDX_Text(pDX, IDC_EDIT_RECURTIME, m_strP); DDX_Text(pDX, IDC_EDIT_QUOTIETY, m_strQuotiety); DDX_Text(pDX, IDC_EDIT_K1, m_strK1); DDX_Text(pDX, IDC_STATIC_N2, m_strN2); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CRoofInfoCalcDlg, CModelessDialog) //{{AFX_MSG_MAP(CRoofInfoCalcDlg) ON_MESSAGE(WM_ACAD_KEEPFOCUS, onAcadKeepFocus) 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_CALC, OnButtonCalc) ON_BN_CLICKED(IDC_BUTTON_RUNOFF, OnButtonRunoff) ON_BN_CLICKED(IDC_BUTTON_RECUR, OnButtonRecur) ON_BN_CLICKED(IDC_BUTTON_REGULATE, OnButtonRegulate) ON_BN_CLICKED(IDC_BUTTON_AREA, OnButtonArea) //}}AFX_MSG_MAP END_MESSAGE_MAP() LONG_PTR CRoofInfoCalcDlg::onAcadKeepFocus(UINT_PTR, LONG_PTR) { CPoint pt; GetCursorPos(&pt); CRect rc; GetWindowRect(&rc); return (rc.PtInRect(pt) ? TRUE : FALSE); } BOOL CRoofInfoCalcDlg::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;iEnableWindow(FALSE); } if (pWnd2 != NULL) { pWnd2->EnableWindow(FALSE); } } return TRUE; } BOOL CRoofInfoCalcDlg::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; } void CRoofInfoCalcDlg::OnSelchangeListProvince() { UpdateData(TRUE); XStringList lstCity; GetAllCityByProvince(m_strProvince, lstCity); m_listCity.ResetContent(); 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_strProvince) == 0 && _tcsicmp(csCity, m_strCity) == 0) { GET_FIELD(pTable, _T("A"), m_strA); GET_FIELD(pTable, _T("B"), m_strB); GET_FIELD(pTable, _T("C"), m_strC); GET_FIELD(pTable, _T("D"), m_strN); if(m_strCity == _T("成都")) { m_strB = _T("12.8P"); m_strN2 = _T("0.231"); } else if(m_strCity == _T("贵阳")) { m_strB = _T("9.35P"); m_strN2 = _T("0.031"); } else { m_strN2 = _T(""); } UpdateData(FALSE); return; } } } BOOL InvokeNewCity(CString csText) { CString csRet; RBList rbCmd=ads_buildlist(RTSTR, _T("ICreateNewCity"), RTSTR, csText, NULL); resbuf *rbRes=NULL; if(ads_invoke(rbCmd, &rbRes)==RTNORM && rbRes) { if(rbRes && rbRes->restype==RTSTR) csRet=rbRes->resval.rstring; ads_relrb(rbRes); return TRUE; } return FALSE; } void CRoofInfoCalcDlg::OnButtonNewcity() { UpdateData(TRUE); InvokeNewCity(m_strProvince); OnSelchangeListProvince(); } void CRoofInfoCalcDlg::OnButtonCalc() { UpdateData(TRUE); double dA = 0.0, dC = 0.0, dP = 0.0, dB = 0.0, dt = 0.0, dn = 0.0, dq = 0.0; dA = _tstof(m_strA); dC = _tstof(m_strC); dB = _tstof(m_strB); dn = _tstof(m_strN); dt = _tstof(m_strt); dP = _tstof(m_strP); if(m_strCity == _T("成都")) { dB = pow(dP, 0.231) * 12.8; } else if(m_strCity == _T("贵阳")) { dB = pow(dP, 0.031) * 9.35; } dq = (10000.0 / 60) * dA * (1.0 + dC * log10(dP)) / pow((dt + dB), dn); double dQuotiety = 0.0, dK1 = 0.0; dQuotiety = _tstof(m_strQuotiety); dK1 = _tstof(m_strK1); double dSizeWallArea = _tstof(m_strWndEdtArea) / 2.0; std::vector::iterator it; for (it = m_idData.begin(); it != m_idData.end(); it++) { TDbSpace *pSpace = NULL; acdbOpenObject(pSpace, *it, AcDb::kForWrite); if (pSpace != NULL) { double dArea = pSpace->GetUseArea() + dSizeWallArea; double dFlux = dK1 * dQuotiety * dq * dArea / 10000; CString strFlux; strFlux.Format(_T("流量:%.2fL/s"), dFlux); pSpace->SetSndName(strFlux); pSpace->close(); } } OnCancel(); } void CRoofInfoCalcDlg::OnButtonRunoff() { CRunoffQuotietyDlg dlg; dlg.DoModal(); } void CRoofInfoCalcDlg::OnButtonRecur() { CRecurCycleDlg dlg; dlg.DoModal(); } void CRoofInfoCalcDlg::OnButtonRegulate() { AfxMessageBox(_T("流量校正系数,对于坡度大于2.5%的屋面,取1.2~1.5;\n室外地面和其余屋面,取1。")); } void CRoofInfoCalcDlg::SetSpaceIdData(const std::vector &data) { std::vector::const_iterator it; for (it = data.begin(); it != data.end(); it++) { m_idData.push_back(*it); } } void CRoofInfoCalcDlg::GetSpaceIdData(std::vector &data) { std::vector::iterator it; for (it = m_idData.begin(); it != m_idData.end(); it++) { data.push_back(*it); } } void CRoofInfoCalcDlg::SetSideWall(BOOL bVal) { m_bExistSideWall = bVal; } BOOL CRoofInfoCalcDlg::GetSideWall() { return m_bExistSideWall; } void CRoofInfoCalcDlg::OnButtonArea() { HideDialog(this, TRUE); RBList rbMark = ads_buildlist(RTDXF0, _T("ATS_SPACE"), NULL); PickSet ss(SS_FREE); if (SelectEntities(_T("\n请框选侧墙汇水面积<退出>:"), ss, rbMark) != RTNORM) { HideDialog(this, FALSE); return; } double dArea = 0.0; for (long i = 0; i < ss.Length(); i++) { Entity ent = ss[i]; OPENOBJ_BEGIN(ent, AcDb::kForRead, TDbSpace, pEnt); if(pEnt != NULL) { dArea += pEnt->GetUseArea(); } OPENOBJ_END(); } m_strWndEdtArea.Format(_T("%.3f"), dArea); HideDialog(this, FALSE); UpdateData(FALSE); } void CRoofInfoCalcDlg::OnCancel() { UpdateData(); CRegProperty regProp(GetRegLocation(), _T("TWTConfig")); regProp.SetTopRootKey(HKEY_CURRENT_USER); regProp.SetValue(_T("CurProvince"), m_strProvince); regProp.SetValue(_T("CurCity"), m_strCity); CModelessDialog::OnCancel(); }