// CalcRoomDlg.cpp : implementation file // #include "stdafx.h" #include "resource.h" #include"TGAs.h" #include "RBList.h" #include "globalfunc.h" #include "CalcRoomDlg.h" // zxl 2013.11.22 add kernal中要调用 int IPrincipleFeed() { CTemporaryResourceOverride vTemp; CCalcRoomTextDlg dlg; if (dlg.DoModal() != IDOK) { return RTERROR; } return RTNORM; } void RoomCalc() { CCalcRoomDlg dlg; { CTemporaryResourceOverride vTemp; dlg.Create(IDD_CALC_ROOM, acedGetAcadFrame()); } dlg.ShowWindow(SW_SHOW); acedGetAcadDwgView()->SetFocus(); // 通过隐含的用户交互函数暂停程序,以便完成操作 acedInitGet(RSG_NOZERO, _T("~ ")); TCHAR sz[10]; acedGetString(0, _T(""),sz); dlg.DestroyWindow(); } #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CCalcRoomTextDlg dialog CCalcRoomTextDlg::CCalcRoomTextDlg(CWnd* pParent /*=NULL*/) : CDialog(CCalcRoomTextDlg::IDD, pParent) { //{{AFX_DATA_INIT(CCalcRoomTextDlg) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT } void CCalcRoomTextDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CCalcRoomTextDlg) // NOTE: the ClassWizard will add DDX and DDV calls here //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CCalcRoomTextDlg, CDialog) //{{AFX_MSG_MAP(CCalcRoomTextDlg) // NOTE: the ClassWizard will add message map macros here //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CCalcRoomDlg dialog CCalcRoomDlg::CCalcRoomDlg(CWnd* pParent /*=NULL*/) : CDialog(CCalcRoomDlg::IDD, pParent) { //{{AFX_DATA_INIT(CCalcRoomDlg) m_dAllRoom = 24; m_sDn = _T(""); m_sFlow = _T(""); m_dHour = 24; m_dPeople = 3.5; m_sRate = _T(""); m_dRoom = 4; m_dScaleHour = 2.8; m_dWater = 250; m_iMaterial = 7; //}}AFX_DATA_INIT } void CCalcRoomDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CCalcRoomDlg) DDX_Control(pDX, IDC_EDIT_WATER, m_edt2); DDX_Control(pDX, IDC_EDIT_SCALE_HOUR, m_edt6); DDX_Control(pDX, IDC_EDIT_ROOM, m_edt5); DDX_Control(pDX, IDC_EDIT_PEOPLE, m_edt4); DDX_Control(pDX, IDC_EDIT_HOUR, m_edt3); DDX_Control(pDX, IDC_EDIT_ALLROOM, m_edt1); DDX_Control(pDX, IDC_COMBO_MERITAL, m_comboMat); DDX_Text(pDX, IDC_EDIT_ALLROOM, m_dAllRoom); DDX_Text(pDX, IDC_EDIT_DN, m_sDn); DDX_Text(pDX, IDC_EDIT_FLOW, m_sFlow); DDX_Text(pDX, IDC_EDIT_HOUR, m_dHour); DDX_Text(pDX, IDC_EDIT_PEOPLE, m_dPeople); DDX_Text(pDX, IDC_EDIT_RATE, m_sRate); DDX_Text(pDX, IDC_EDIT_ROOM, m_dRoom); DDX_Text(pDX, IDC_EDIT_SCALE_HOUR, m_dScaleHour); DDX_Text(pDX, IDC_EDIT_WATER, m_dWater); DDX_CBIndex(pDX, IDC_COMBO_MERITAL, m_iMaterial); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CCalcRoomDlg, CDialog) //{{AFX_MSG_MAP(CCalcRoomDlg) ON_BN_CLICKED(IDC_BUTTON_ROOM, OnButtonRoom) ON_BN_CLICKED(IDC_BUTTON_WATER, OnButtonWater) ON_BN_CLICKED(IDC_BUTTON_CALC, OnButtonCalc) ON_EN_KILLFOCUS(IDC_EDIT_ALLROOM, OnKillfocusEditAllroom) ON_EN_KILLFOCUS(IDC_EDIT_HOUR, OnKillfocusEditHour) ON_EN_KILLFOCUS(IDC_EDIT_PEOPLE, OnKillfocusEditPeople) ON_EN_KILLFOCUS(IDC_EDIT_ROOM, OnKillfocusEditRoom) ON_EN_KILLFOCUS(IDC_EDIT_SCALE_HOUR, OnKillfocusEditScaleHour) ON_EN_KILLFOCUS(IDC_EDIT_WATER, OnKillfocusEditWater) ON_WM_CLOSE() //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CCalcRoomDlg message handlers void CCalcRoomDlg::OnButtonRoom() { double dData = m_dRoom; RBList rbCmd=ads_buildlist(RTSTR, _T("ISetRoomV"), NULL); resbuf *rbRes=NULL; if(ads_invoke(rbCmd, &rbRes) == RTNORM && rbRes) { if(rbRes && rbRes->restype==RTSTR) m_dRoom = _tstof(rbRes->resval.rstring); ads_relrb(rbRes); } if (m_dRoom <= 0) { m_dRoom = dData; } UpdateData(FALSE); } void CCalcRoomDlg::OnButtonWater() { CTemporaryResourceOverride vTemp; CCalcRoomTextDlg dlg; dlg.DoModal(); } double GetAcByU0(double nU0) { //差值法查表 2003规范 P107页 double nAc(0); if (nU0 <= 1) nAc = 0.00323; else if (nU0 > 1 && nU0 <= 1.5) nAc = GlobalFunc::GetValBetween2(0.00323, 0.00697, 1.0, 1.5, nU0); else if (nU0 > 1.5 && nU0 <= 2.0) nAc = GlobalFunc::GetValBetween2(0.00697, 0.01097, 1.5, 2.0, nU0); else if (nU0 > 2.0 && nU0 <= 2.5) nAc = GlobalFunc::GetValBetween2(0.01097, 0.01512, 2.0, 2.5, nU0); else if (nU0 > 2.5 && nU0 <= 3.0) nAc = GlobalFunc::GetValBetween2(0.01512, 0.01939, 2.5, 3.0, nU0); else if (nU0 > 3.0 && nU0 <= 3.5) nAc = GlobalFunc::GetValBetween2(0.01939, 0.02374, 3.0, 3.5, nU0); else if (nU0 > 3.5 && nU0 <= 4.0) nAc = GlobalFunc::GetValBetween2(0.02374, 0.02816, 3.5, 4.0, nU0); else if (nU0 > 4.0 && nU0 <= 4.5) nAc = GlobalFunc::GetValBetween2(0.02816, 0.03263, 4.0, 4.5, nU0); else if (nU0 > 4.5 && nU0 <= 5.0) nAc = GlobalFunc::GetValBetween2(0.03263, 0.03715, 4.5, 5.0, nU0); else if (nU0 > 5.0 && nU0 <= 6.0) nAc = GlobalFunc::GetValBetween2(0.03715, 0.04629, 5.0, 6.0, nU0); else if (nU0 > 6.0 && nU0 <= 7.0) nAc = GlobalFunc::GetValBetween2(0.04629, 0.05555, 6.0, 7.0, nU0); else if (nU0 > 7.0 && nU0 <= 8.0) nAc = GlobalFunc::GetValBetween2(0.05555, 0.06489, 7.0, 8.0, nU0); else if (nU0 > 8.0) nAc = 0.06489; return nAc; } // 得到给水计算管径和流速的对应关系 extern BOOL GetRelationFromDnToV(DList &lstDn); //{ // XString fullFile; // if(!GlobalFunc::FindFile(_T("datastore.dbf"), fullFile)) { // AfxMessageBox(_T("对不起,没有发现datastore.dbf文件!")); // return 0; // } // CodeBase db; // db.read_only = 1; // DbfTable *pTable = db.Open(fullFile); // if(!pTable) // return 0; // int nType = 0,nRowCount = 0; // CString strName = _T(""),strValue = _T(""); // for(pTable->MoveFirst();!pTable->IsEOF();pTable->MoveNext()) // { // GET_FIELD(pTable, _T("typenumber"), nType); // if (nType == 42) // { // GET_FIELD(pTable, _T("typename"), strName); // GET_FIELD(pTable, _T("typevalue"), strValue); // int iDn = _ttoi(strName); // double dValue = _tstof(strValue); // CTempStruct *pData = new CTempStruct; // pData->m_iTmp = iDn; // pData->m_dTmp = dValue; // lstDn.Append(pData); // } // } // return TRUE; //} int GetPipeDnByQ(double nQ, CString csMat, double &nSpeed) { double nLength(-1); int nRet(-1); DList lstSpec; GlobalFunc::GetPipeSpecList(lstSpec, csMat); nQ = nQ / 1000; DList lstDn; GetRelationFromDnToV(lstDn); lstDn.QuickSort(CTempStruct::SortByInt); // <<建筑给排水规范》2003,P35 表3.6.9 for(int j=0;jm_iTmp; double dTmp = lstDn[i]->m_dTmp; dTmp += 0.001; if(iTmp >= iDnTmp || (iTmp == 80 && iDnTmp > 80)) { if(nSpeed < dTmp) return iDnTmp; break; } } } return nRet; } void CCalcRoomDlg::OnButtonCalc() { UpdateData(TRUE); double nTmpU0 = 0.0; nTmpU0 = m_dWater * m_dPeople * m_dScaleHour / (0.2 * m_dRoom * m_dHour * 3600); double nTmpAc = GetAcByU0(nTmpU0*100); // 同时流出概率 double nTmpU = (1 + nTmpAc * pow((m_dAllRoom -1), 0.49)) / sqrt(m_dAllRoom); // 流量 double dRate = 0.2 * nTmpU * m_dAllRoom; m_sRate.Format(_T("%.3f"), dRate); double dSpeed = 0.0; CString csMat; m_comboMat.GetLBText(m_iMaterial, csMat); double dDn = GetPipeDnByQ(dRate, csMat, dSpeed); // 管径 m_sDn.Format(_T("%.3f"), dDn); // 流速 m_sFlow.Format(_T("%.3f"), dSpeed); UpdateData(FALSE); } BOOL CCalcRoomDlg::OnInitDialog() { CDialog::OnInitDialog(); XStringList lstMat; GlobalFunc::GetPipeMaterialList(lstMat); for(int i=0;iSetFocus(); m_edt1.SetFocus(); m_edt1.SetSel(0, -1); } } void CCalcRoomDlg::OnKillfocusEditHour() { double dData = m_dHour; CString sText; m_edt3.GetWindowText(sText); m_dHour = _tstof(sText); if (m_dHour <= 0 || !GlobalFunc::IsStrAllNum(sText)) { m_dHour = dData; UpdateData(FALSE); acedGetAcadDwgView()->SetFocus(); m_edt3.SetFocus(); m_edt3.SetSel(0, -1); } } void CCalcRoomDlg::OnKillfocusEditPeople() { double dData = m_dPeople; CString sText; m_edt4.GetWindowText(sText); m_dPeople = _tstof(sText); if (m_dPeople <= 0 || !GlobalFunc::IsStrAllNum(sText)) { m_dPeople = dData; UpdateData(FALSE); acedGetAcadDwgView()->SetFocus(); m_edt4.SetFocus(); m_edt4.SetSel(0, -1); } } void CCalcRoomDlg::OnKillfocusEditRoom() { double dData = m_dRoom; CString sText; m_edt5.GetWindowText(sText); m_dRoom = _tstof(sText); if (m_dRoom <= 0 || !GlobalFunc::IsStrAllNum(sText)) { m_dRoom = dData; UpdateData(FALSE); acedGetAcadDwgView()->SetFocus(); m_edt5.SetFocus(); m_edt5.SetSel(0, -1); } } void CCalcRoomDlg::OnKillfocusEditScaleHour() { double dData = m_dScaleHour; CString sText; m_edt6.GetWindowText(sText); m_dScaleHour = _tstof(sText); if (m_dScaleHour <= 0 || !GlobalFunc::IsStrAllNum(sText)) { m_dScaleHour = dData; UpdateData(FALSE); acedGetAcadDwgView()->SetFocus(); m_edt6.SetFocus(); m_edt6.SetSel(0, -1); } } void CCalcRoomDlg::OnKillfocusEditWater() { double dData = m_dWater; CString sText; m_edt2.GetWindowText(sText); m_dWater = _tstof(sText); if (m_dWater <= 0 || !GlobalFunc::IsStrAllNum(sText)) { m_dWater = dData; UpdateData(FALSE); acedGetAcadDwgView()->SetFocus(); m_edt2.SetFocus(); m_edt2.SetSel(0, -1); } } void CCalcRoomDlg::OnClose() { acedGetAcadDwgView()->SetFocus(); CDialog::OnClose(); } void CCalcRoomDlg::OnCancel() { GlobalFunc::PostCommand(_T("~ ")); acedGetAcadDwgView()->SetFocus(); CDialog::OnCancel(); }