385 lines
8.8 KiB
C++
385 lines
8.8 KiB
C++
// CalcRoomDlg.cpp : implementation file
|
||
//
|
||
|
||
#include "stdafx.h"
|
||
#include "resource.h"
|
||
#include "CalcRoomDlg.h"
|
||
#include "TwtDef.h"
|
||
#include "TGAs.h"
|
||
#include "TAPI.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*/)
|
||
: CModelessDialog(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)
|
||
{
|
||
CModelessDialog::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, CModelessDialog)
|
||
//{{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();
|
||
}
|
||
|
||
extern double GetAcByU0(double nU0);
|
||
// 得到给水计算管径和流速的对应关系
|
||
BOOL GetRelationFromDnToV(DList<CTempStruct> &lstDn)
|
||
{
|
||
XString fullFile;
|
||
if(!FindFile(_T("datastore.dbf"), fullFile)) {
|
||
AfxMessageBox(_T("对不起,没有发现datastore.dbf文件!"));
|
||
return 0;
|
||
}
|
||
CodeBase db;
|
||
db.read_only = 1;
|
||
XDbfTable *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;
|
||
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 = 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()
|
||
{
|
||
CModelessDialog::OnInitDialog();
|
||
XStringList lstMat;
|
||
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
|
||
}
|
||
extern bool IsStrAllNum(CString csText);
|
||
void CCalcRoomDlg::OnKillfocusEditAllroom()
|
||
{
|
||
double dData = m_dAllRoom;
|
||
CString sText;
|
||
m_edt1.GetWindowText(sText);
|
||
m_dAllRoom = _tstof(sText);
|
||
if (m_dAllRoom <= 0 || !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 || !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 || !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 || !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 || !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 || !IsStrAllNum(sText))
|
||
{
|
||
m_dWater = dData;
|
||
UpdateData(FALSE);
|
||
acedGetAcadDwgView()->SetFocus();
|
||
m_edt2.SetFocus();
|
||
m_edt2.SetSel(0, -1);
|
||
}
|
||
}
|
||
|
||
void CCalcRoomDlg::OnClose()
|
||
{
|
||
acedGetAcadDwgView()->SetFocus();
|
||
CModelessDialog::OnClose();
|
||
}
|
||
|
||
void CCalcRoomDlg::OnCancel()
|
||
{
|
||
PostCommand(_T("~ "));
|
||
acedGetAcadDwgView()->SetFocus();
|
||
CModelessDialog::OnCancel();
|
||
}
|