Files
envi-code/SourceCode/Code2026/tg_shs/shs_TwtCalc/CalcRoomDlg.cpp
T

384 lines
8.8 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 "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();
}