Files
gjm 164968b62e chore
把非utf8-bom编码的cpp/h文件改为 utf8 bom 编码, msvc识别utf8编码时,如果不是bom格式的,会使用当前cp_oem来解码.
2026-10-04 00:04:20 +08:00

417 lines
10 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// 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();
}