417 lines
10 KiB
C++
417 lines
10 KiB
C++
// 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();
|
||
}
|