Files
envi-code/SourceCode/Code2026/Dimension/CalcRoomDlg.cpp
T

416 lines
10 KiB
C++
Raw Normal View History

2026-09-28 15:28:50 +08:00
// 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<CTempStruct> &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<int> lstSpec;
GlobalFunc::GetPipeSpecList(lstSpec, csMat);
nQ = nQ / 1000;
DList<CTempStruct> lstDn;
GetRelationFromDnToV(lstDn);
lstDn.QuickSort(CTempStruct::SortByInt);
// <<建筑给排水规范》2003,P35 表3.6.9
for(int j=0;j<lstSpec.Length();j++)
{
int iDnTmp = *lstSpec[j];
double nRetDj = GlobalFunc::GetPipeDjByDn(csMat, iDnTmp);
nSpeed = nQ / (0.25*PI*nRetDj*nRetDj);
if(nRetDj < 0)
continue;
int len = lstDn.Length();
for(int i=0;i<len;i++)
{
int iTmp = lstDn[i]->m_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;i<lstMat.Length();i++)
{
m_comboMat.AddString(lstMat[i]);
}
UpdateData(FALSE);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CCalcRoomDlg::OnKillfocusEditAllroom()
{
double dData = m_dAllRoom;
CString sText;
m_edt1.GetWindowText(sText);
m_dAllRoom = _tstof(sText);
if (m_dAllRoom <= 0 || !GlobalFunc::IsStrAllNum(sText))
{
m_dAllRoom = dData;
UpdateData(FALSE);
acedGetAcadDwgView()->SetFocus();
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();
}