Files
envi-code/SourceCode/Code2026/tg_shs/shs_TwtKernal/CalcFeedDataDlg.cpp
T

400 lines
13 KiB
C++
Raw Normal View History

2026-10-04 00:04:20 +08:00
// CalcFeedDataDlg.cpp : implementation file
2026-09-28 15:28:50 +08:00
//
#include "stdafx.h"
#include <xtext.h>
#include <DbEquipment.h>
#include "CalcFeedDataDlg.h"
#include "SanitaryDangDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
2026-10-04 00:04:20 +08:00
// 修改当量
2026-09-28 15:28:50 +08:00
/////////////////////////////////////////////////////////////////////////////
2026-10-04 00:04:20 +08:00
//判断这根管线是不是连接立管的干管,GetSysLabel==“”
2026-09-28 15:28:50 +08:00
BOOL IsMainPipeLink2VPipe(Entity ent)
{
BOOL bRet = FALSE;
OPENOBJ_BEGIN(ent, AcDb::kForRead, TDbPipe, pPipe);
if(pPipe){
AcDbObjectId id1 = pPipe->GetNode(0);
AcDbObjectId id2 = pPipe->GetNode(1);
OPENOBJ_BEGIN(id1, AcDb::kForRead, TDbPipeNode, pNode);
if(pNode){
int num = pNode->GetInterfaceNum();
for(int m=0;m<num;m++){
TPipeInterface iFace;
pNode->GetInterface(m, iFace);
AcDbObjectId idPipe = iFace.m_idPipe;
CString csPipeName;
OPENOBJ_BEGIN(idPipe, AcDb::kForRead, TDbPipe, pPipe);
if(pPipe){
CString csPipeName = pPipe->GetSysLabel();
2026-10-04 00:04:20 +08:00
// cet 2012.6.5 modify 不指定楼层号,否则从非一楼无法计算
// if(csPipeName.Find(_T("1楼立管")) > -1)
2026-09-28 15:28:50 +08:00
// return TRUE;
2026-10-04 00:04:20 +08:00
if (csPipeName.Find(_T("楼立管")) > -1)
2026-09-28 15:28:50 +08:00
{
return TRUE;
}
}
OPENOBJ_END();
}
}
OPENOBJ_END();
OPENOBJ_BEGIN(id2, AcDb::kForRead, TDbPipeNode, pNode);
if(pNode){
int num = pNode->GetInterfaceNum();
for(int m=0;m<num;m++){
TPipeInterface iFace;
pNode->GetInterface(m, iFace);
AcDbObjectId idPipe = iFace.m_idPipe;
CString csPipeName;
OPENOBJ_BEGIN(idPipe, AcDb::kForRead, TDbPipe, pPipe);
if(pPipe){
CString csPipeName = pPipe->GetSysLabel();
2026-10-04 00:04:20 +08:00
// cet 2012.6.5 modify 不指定楼层号,否则从非一楼无法计算
// if(csPipeName.Find(_T("1楼立管")) > -1)
2026-09-28 15:28:50 +08:00
// return TRUE;
2026-10-04 00:04:20 +08:00
if (csPipeName.Find(_T("楼立管")) > -1)
2026-09-28 15:28:50 +08:00
{
return TRUE;
}
}
OPENOBJ_END();
}
}
OPENOBJ_END();
}
OPENOBJ_END();
return bRet;
}
2026-10-04 00:04:20 +08:00
//修改住宅立管编号,因为有的系统是由用户拼接完成
2026-09-28 15:28:50 +08:00
void ModifyVPipeIdx()
{
2026-10-04 00:04:20 +08:00
RBList rbMask(RTDXF0, _T("ATS_PIPE"), 8, GetLayerNames(_T("管")), NULL);
2026-09-28 15:28:50 +08:00
Entity entMainPipe;
2026-10-04 00:04:20 +08:00
if(SelectEntity(_T("\n请选择给水总干管<退出>"), entMainPipe, rbMask) != RTNORM) {
2026-09-28 15:28:50 +08:00
return;
}
PickSet ssAll(SS_FREE);
ssAll += entMainPipe;
SSearchPipeList *pListAll = new SSearchPipeList();
SearchSprinkPipeSys(entMainPipe, NULL, pListAll, ssAll);
delete pListAll;
long len = ssAll.Length();
for(long i=0;i<len;i++){
Entity ent = ssAll[i];
2026-10-04 00:04:20 +08:00
//首先判断管线是不是由【住宅原理】绘制的
2026-09-28 15:28:50 +08:00
OPENOBJ_BEGIN(ent, AcDb::kForRead, TDbPipe, pPipe);
if(pPipe){
CString csLabel = pPipe->GetSysLabel();
if(csLabel == _T("")){
if(IsMainPipeLink2VPipe(ent)){
if(pPipe->upgradeOpen()==Acad::eOk) {
2026-10-04 00:04:20 +08:00
pPipe->SetSysLabel(_T("干管-1"));
2026-09-28 15:28:50 +08:00
pPipe->SetModelType(TPipeSys::kSystem);
pPipe->downgradeOpen();
}
}
}
}
OPENOBJ_END();
// OPENOBJ_BEGIN(ent, AcDb::kForWrite, TDbPipe, pPipe);
// if(pPipe){
// CString csLabel = pPipe->GetSysLabel();
// int idx = csLabel.Find(_T("-"));
// if(idx > -1){
// CString csVPipeName = csLabel.Right(csLabel.GetLength()-idx-1);
// int iDn = _ttoi(csVPipeName);
// pPipe->SetDnDiameter(iDn);
// }
// }
// OPENOBJ_END();
// DoDimPipeDn(ent,-1,_T(""),3,TRUE);
}
PickSet ss(SS_FREE);
2026-10-04 00:04:20 +08:00
while(SelectEntities(_T("\n请选择要修改楼栋编号的管线:<退出>"), ss, rbMask) == RTNORM){
2026-09-28 15:28:50 +08:00
int iStart(1);
2026-10-04 00:04:20 +08:00
ads_getint(_T("\n请输入立管(楼栋)编号<1>"), &iStart);
2026-09-28 15:28:50 +08:00
len = ss.Length();
for(i=0;i<len;i++){
Entity ent = ss[i];
OPENOBJ_BEGIN(ent, AcDb::kForWrite, TDbPipe, pPipe);
if(pPipe){
CString csLabel = pPipe->GetSysLabel();
int idx = csLabel.Find(_T("-"));
if(idx > -1){
CString csFloor = csLabel.Left(idx+1);
csFloor.Format(_T("%s%d"), csFloor, iStart);
pPipe->SetSysLabel(csFloor);
// pPipe->SetDnDiameter(iStart);
}
}
OPENOBJ_END();
}
}
len = ssAll.Length();
for(i=0;i<len;i++){
Entity ent = ssAll[i];
OPENOBJ_BEGIN(ent, AcDb::kForWrite, TDbPipe, pPipe);
if(pPipe){
pPipe->EnableDrawLabel(FALSE);
}
OPENOBJ_END();
}
}
void ModifyNg()
{
PickSet ss(SS_FREE);
RBList rbMask = ads_buildlist( -4, _T("<or"),
-4, _T("<and"), RTDXF0, _T("ATS_EQUIPMENT"), 8, _T("*"), 2, _T("$TwtSys$00000132"), -4, _T("and>"),
-4, _T("<and"), RTDXF0, _T("ATS_EQUIPMENT"), 8, _T("*"), 2, _T("$TwtSys$00000005"), -4, _T("and>"),
-4, _T("or>"), NULL);
RBList rbMask2(RTDXF0, _T("TEXT"), 8, LAY_CALC_TEXT, NULL);
2026-10-04 00:04:20 +08:00
if(SelectEntities(_T("\n请选择每层支管末端的断管符号或水龙头:<修改楼栋编号>"), ss, rbMask) != RTNORM){
2026-09-28 15:28:50 +08:00
ModifyVPipeIdx();
return;
}
if(ss.Length() < 1)
return;
BOOL bIsResidence = FALSE;
BOOL bIsFeedSys = TRUE;
OPENOBJ_BEGIN(ss[0L], AcDb::kForRead, TDbEquipment, pEquip);
if(pEquip){
if(pEquip->GetInterfaceNum() > 0){
TPipeInterface face;
pEquip->GetInterface(0, face);
AcDbObjectId nextPipeId = face.m_idPipe;
OPENOBJ_BEGIN(nextPipeId, AcDb::kForRead, TDbPipe, pPipe);
if(pPipe){
if(pPipe->GetSysType() != TPipeSys::kFeedWater)
bIsFeedSys = FALSE;
}
OPENOBJ_END();
}
double nNg = pEquip->GetDang();
if(nNg < 0)
bIsResidence = TRUE;
else{
double nPeopleNum = pEquip->GetPipeLength();
if(nPeopleNum > 0 && bIsFeedSys)
bIsResidence = TRUE;
}
}
OPENOBJ_END();
double nNewDang(0), dBigQ(0);
double nPeopleNum(0);
double nFactor(2.8);
int iRation(250), iDoorNum(1);
double nU0(0);
CString csDim;
if(!bIsResidence){
2026-10-04 00:04:20 +08:00
if(bIsFeedSys){//公建给水
2026-09-28 15:28:50 +08:00
CTemporaryResourceOverride vTemp;
CSanitaryDangDlg dlg;
dlg.m_bMultSel = TRUE;
if(dlg.DoModal() == IDOK){
nNewDang = dlg.m_nRet;
dBigQ = dlg.m_nBigQ;
if(dBigQ > 1.0)
2026-10-04 00:04:20 +08:00
nPeopleNum = -1;//如果是公建,要问当量是否包含“自闭式冲洗阀”
2026-09-28 15:28:50 +08:00
}
// csDim.Format(_T("Ng=%.1f"), nNewDang);
2026-10-04 00:04:20 +08:00
// //如果是公建,要问当量是否包含“自闭式冲洗阀”
// ads_getstring(0, _T("\n本层洁具是否包括自闭式冲洗阀?<N>: "), szText);
2026-09-28 15:28:50 +08:00
// if(_tcsicmp(szText, _T("Y")) == 0){
// nPeopleNum = -1;
// }
}
2026-10-04 00:04:20 +08:00
else{//排水
2026-09-28 15:28:50 +08:00
TCHAR szText[32];
2026-10-04 00:04:20 +08:00
ads_getreal(_T("\n请输入器具的当量值:<退出>"), &nNewDang);
ads_getstring(0, _T("\n本层最大卫生器具的排水流量(L/s): "), szText);
2026-09-28 15:28:50 +08:00
nPeopleNum = _tstof(szText);
csDim.Format(_T("Ng=%.1f Q=%.2f"), nNewDang, nPeopleNum);
}
}
else{
CTemporaryResourceOverride vTemp;
CCalcFeedDataDlg dlg;
if(dlg.DoModal() != IDOK)
return;
bIsResidence = TRUE;
nNewDang = dlg.m_nNg;
iDoorNum = dlg.m_iDoorNum;
nPeopleNum = dlg.m_nNumPeople;
iRation = dlg.m_iRation;
nFactor = dlg.m_nFactor;
//U0 = (q0*m*Kh)/(0.2*Ng*T*3600)
if(iDoorNum < 0.001 || nNewDang < 0.001)
nU0 = 0;
else
nU0 = (iDoorNum * iRation * nPeopleNum * nFactor) / (0.2*iDoorNum * nNewDang*24*3600);
if(dlg.m_bDim)
2026-10-04 00:04:20 +08:00
csDim.Format(_T("%d户/%.1f人每户/q0=%d/Ng=%.1f每户/Kh=%.1f/U0=%.3f"), iDoorNum, nPeopleNum, iRation, nNewDang, nFactor, nU0);
2026-09-28 15:28:50 +08:00
}
XPoint ptLow, ptUp;
ss.GetExtend(ptLow, ptUp);
AssureInCurrentView(ptLow, ptUp);
InitTwtTextStyle(g_csTwtDimStyle);
for(long i=0;i<ss.Length();i++){
Entity ent = ss[i];
double nNg(0);
XPoint ptLoc;
OPENOBJ_BEGIN(ent, AcDb::kForWrite, TDbEquipment, pEquip);
if(pEquip){
nNg = pEquip->GetDang();
if(bIsFeedSys){
pEquip->SetSpare(dBigQ);
2026-10-04 00:04:20 +08:00
pEquip->SetDang(nNewDang); //总当量 SetDang
pEquip->SetPipeLength(nPeopleNum); //每户人数 SetPipeLength
pEquip->SetNumber(XString(_T("%.2f"), nFactor)); //小时变化系数 SetNumber
pEquip->SetSysBlock(XString(_T("%.d"), iRation));//用水定额 SetSysBlock
pEquip->SetICookie(0, iDoorNum); //该户型户数 SetICookie
2026-09-28 15:28:50 +08:00
}
else
2026-10-04 00:04:20 +08:00
pEquip->SetSpare(nPeopleNum); //最大排水流量
2026-09-28 15:28:50 +08:00
ptLoc = pEquip->GetLocation();
}
OPENOBJ_END();
if(bIsResidence && csDim == _T(""))
continue;
PickSet ssText(SS_FREE);
ads_polar(ptLoc, 0, g_nTwtDimHeight * DocGetPScale(), ptLoc);
XPoint ptUcs = Wcs2Ucs(ptLoc);
GetPointPickSet(ptUcs, ssText, rbMask2, 100);
if(ssText.Length() == 1){
Entity entTmp = ssText[0L];
TCHAR szText[256];
entTmp.GetData(1, szText);
CString csNg = szText;
csNg = csNg.Right(csNg.GetLength() - 3);
if(fabs(nNg - _tstof(csNg)) < 0.01 || bIsResidence){
entTmp.SetData(1, csDim);
entTmp.Modify();
}
}
else{
XText text(csDim, ptLoc, g_nTwtDimHeight * DocGetPScale(), g_nDimScale, g_csTwtDimStyle, LAY_CALC_TEXT);
text.Draw();
Entity entLast;
entLast.GetLast();
WriteXdata(entLast, _T("TG-LAYER"), LAY_PIPE_FEED);
}
}
}
/////////////////////////////////////////////////////////////////////////////
// CCalcFeedDataDlg dialog
CCalcFeedDataDlg::CCalcFeedDataDlg(CWnd* pParent /*=NULL*/)
: CDialog(CCalcFeedDataDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CCalcFeedDataDlg)
m_iRation = 250;
m_nFactor = 2.8;
m_nNg = 4;
m_nNumPeople = 3.5;
m_bDim = TRUE;
m_iDoorNum = 1;
//}}AFX_DATA_INIT
}
void CCalcFeedDataDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CCalcFeedDataDlg)
DDX_Control(pDX, IDC_SPIN_DOORNUM, m_spinDoorNum);
DDX_Text(pDX, IDC_EDIT_RATION, m_iRation);
DDX_Text(pDX, IDC_EDIT_HOUR_FACTOR, m_nFactor);
DDX_Text(pDX, IDC_EDIT_DOOR_DANG, m_nNg);
DDX_Text(pDX, IDC_EDIT_PEOPLE_NUM, m_nNumPeople);
DDX_Check(pDX, IDC_CHECK_DIM, m_bDim);
DDX_Text(pDX, IDC_EDIT_DOOR_NUM, m_iDoorNum);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CCalcFeedDataDlg, CDialog)
//{{AFX_MSG_MAP(CCalcFeedDataDlg)
ON_BN_CLICKED(IDC_BUTTON_RATION, OnButtonRation)
ON_BN_CLICKED(IDC_BUTTON_FACTOR, OnButtonFactor)
ON_BN_CLICKED(IDC_BUTTON_DANG, OnButtonDang)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CCalcFeedDataDlg message handlers
void CCalcFeedDataDlg::OnButtonRation()
{
2026-10-04 00:04:20 +08:00
//AfxMessageBox(_T("住宅最高日生活用水定额\n\n1.普通住宅Ⅰ (有大便器、洗涤盆) 85~150\n2.普通住宅Ⅱ(有大便器、洗脸盆、洗涤盆、洗衣机、 热水器和沐浴设备) 130~300\n3.普通住宅Ⅲ(有大便器、洗脸盆、洗涤盆、洗衣机、 集中热水供应和沐浴设备) 180~320\n4.别墅 (有大便器、洗脸盆、洗涤盆、洗衣机、洒水栓,家用热水机组和沐浴设备) 200~350\n\n"));
2026-09-28 15:28:50 +08:00
RBList rbCmd=ads_buildlist(RTSTR, _T("IPrincipleFeed"), NULL);
resbuf *rbRes=NULL;
if(ads_invoke(rbCmd, &rbRes) == RTNORM && rbRes)
{
ads_relrb(rbRes);
}
}
void CCalcFeedDataDlg::OnButtonFactor()
{
2026-10-04 00:04:20 +08:00
//AfxMessageBox(_T("住宅最高日生活用水小时变化系数Kh\n\n1.普通住宅Ⅰ (有大便器、洗涤盆) 3.0~2.5\n2.普通住宅Ⅱ(有大便器、洗脸盆、洗涤盆、洗衣机、 热水器和沐浴设备) 2.8~2.3\n3.普通住宅Ⅲ(有大便器、洗脸盆、洗涤盆、洗衣机、 集中热水供应和沐浴设备) 2.5~2.0\n4.别墅 (有大便器、洗脸盆、洗涤盆、洗衣机、洒水栓,家用热水机组和沐浴设备) 2.3~1.8\n\n"));
2026-09-28 15:28:50 +08:00
RBList rbCmd=ads_buildlist(RTSTR, _T("IPrincipleFeed"), NULL);
resbuf *rbRes=NULL;
if(ads_invoke(rbCmd, &rbRes) == RTNORM && rbRes)
{
ads_relrb(rbRes);
}
}
void CCalcFeedDataDlg::OnButtonDang()
{
CTemporaryResourceOverride vTemp;
CSanitaryDangDlg dlg;
dlg.m_bMultSel = TRUE;
if(dlg.DoModal() == IDOK){
m_nNg = dlg.m_nRet;
UpdateData(FALSE);
}
}
BOOL CCalcFeedDataDlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_spinDoorNum.SetRange(1, 20);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}