Files
envi-code/SourceCode/Code2026/tg_shs/shs_TwtKernal/FeedCalc.cpp
T
2026-09-28 15:28:50 +08:00

687 lines
23 KiB
C++
Raw 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.
/********************************************************************
created: 2004/09/07
created: 7:9:2004 16:42
filename: f:\tg_dev\telecdev\twtkernal\feedcalc.cpp
file path: f:\tg_dev\telecdev\twtkernal
file base: feedcalc
file ext: cpp
author: 沈睿
purpose: 给水计算
*********************************************************************/
#include "stdafx.h"
//#include <cbclass.h>
#include <DbEquipment.h>
#include <MSWORD8.h>
#include <twtdef.h>
#include "CalcFeedDataDlg.h"
//***************************************************************************************************
// 住宅给水计算
//***************************************************************************************************
double GetAcByU0(double nU0)
{
//差值法查表 2003规范 P107页
double nAc(0);
if(nU0 <= 1)
nAc = 0.00323;
else if(nU0 > 1 && nU0 <= 1.5)
nAc = GetValBetween2(0.00323, 0.00697, 1.0, 1.5, nU0);
else if(nU0 > 1.5 && nU0 <= 2.0)
nAc = GetValBetween2(0.00697, 0.01097, 1.5, 2.0, nU0);
else if(nU0 > 2.0 && nU0 <= 2.5)
nAc = GetValBetween2(0.01097, 0.01512, 2.0, 2.5, nU0);
else if(nU0 > 2.5 && nU0 <= 3.0)
nAc = GetValBetween2(0.01512, 0.01939, 2.5, 3.0, nU0);
else if(nU0 > 3.0 && nU0 <= 3.5)
nAc = GetValBetween2(0.01939, 0.02374, 3.0, 3.5, nU0);
else if(nU0 > 3.5 && nU0 <= 4.0)
nAc = GetValBetween2(0.02374, 0.02816, 3.5, 4.0, nU0);
else if(nU0 > 4.0 && nU0 <= 4.5)
nAc = GetValBetween2(0.02816, 0.03263, 4.0, 4.5, nU0);
else if(nU0 > 4.5 && nU0 <= 5.0)
nAc = GetValBetween2(0.03263, 0.03715, 4.5, 5.0, nU0);
else if(nU0 > 5.0 && nU0 <= 6.0)
nAc = GetValBetween2(0.03715, 0.04629, 5.0, 6.0, nU0);
else if(nU0 > 6.0 && nU0 <= 7.0)
nAc = GetValBetween2(0.04629, 0.05555, 6.0, 7.0, nU0);
else if(nU0 > 7.0 && nU0 <= 8.0)
nAc = GetValBetween2(0.05555, 0.06489, 7.0, 8.0, nU0);
else if(nU0 > 8.0 )
nAc = 0.06489;
return nAc;
}
//把立管加入SCalcFloorData结构中
void AddVerticalPipeToData(SSearchPipeList *pListAll, DList<SCalcFloorData> &lstFeedData, BOOL bFromDownToUp)
{
AcDbObjectId id = NULL;
id = pListAll->m_ID;
if(pListAll->m_iType == 0){//管线
CString csFloor,csVPipeName;
OPENOBJ_BEGIN(id, AcDb::kForRead, TDbPipe, pPipe);
if(pPipe){
CString csLabel = pPipe->GetSysLabel();
int idx = csLabel.Find(_T("-"));
if(idx > -1){
csFloor = csLabel.Left(idx);
csVPipeName = csLabel.Right(csLabel.GetLength()-idx-1);
}
}
OPENOBJ_END();
if(csFloor.Find(_T("立管")) >= 0){
int iLen = (int)_tcslen(_T("立管"));
int iNum = csFloor.GetLength() - iLen;
csFloor = csFloor.Left(iNum);
if(!bFromDownToUp){//自上往下供水,4楼立管属于3楼,。。。//小心UNICODE
iLen = (int)_tcslen(_T("楼"));
csFloor = csFloor.Left(csFloor.GetLength() - iLen);
csFloor.Format(_T("%d楼"), _ttoi(csFloor) - 1);
}
int len = lstFeedData.Length();
for(int i=0;i<len;i++){
SCalcFloorData *pDataTmp = lstFeedData[i];
if(pDataTmp->m_csFloor == csFloor && pDataTmp->m_csVPipeName == csVPipeName){
pDataTmp->m_IDMain = id;
break;
}
}
}
}
long len = pListAll->m_lstNode.Length();
for(long i=0;i<len;i++){
SSearchPipeList *pList = pListAll->m_lstNode[i];
AddVerticalPipeToData(pList, lstFeedData, bFromDownToUp);
}
}
//转换数据函数 把链表转换为数组
BOOL TransformCalcFeedData(SSearchPipeList *pListAll, DList<SCalcFloorData> &lstFeedData, CString csCurFloor, CString csCurVPipeName)
{
AcDbObjectId id = NULL;
id = pListAll->m_ID;
if(pListAll->m_iType == -1){
double nDang(0);
double nPeopleNum(3);
double nFactor(2.8);
int iRation(250), iDoorNum(1);
double nU0(0);
double nAc(0);
double nU(0);
AcDbObjectId id = pListAll->m_ID;
OPENOBJ_BEGIN(id, AcDb::kForRead, TDbEquipment, pEquip);
if(pEquip){
nDang = pEquip->GetDang();
nPeopleNum = pEquip->GetPipeLength();
nFactor = _tstof(pEquip->GetNumber());
iRation = _ttoi(pEquip->GetSysBlock());
iDoorNum = pEquip->GetICookie(0);
if(iDoorNum < 1)
iDoorNum = 1;
if(nDang < 0 && nPeopleNum < 0.5)//根本没有住宅信息
return FALSE;
if(iDoorNum < 0.001 || nDang < 0.001)
nU0 = 0;
else
nU0 = (iDoorNum * iRation * nPeopleNum * nFactor) / (0.2*iDoorNum * nDang*24*3600);
nAc = GetAcByU0(nU0*100);
if(iDoorNum < 0.001 || nDang < 0.001)
nU = 0;
else
nU = (1 + nAc * pow((iDoorNum * nDang -1), 0.49)) / sqrt(iDoorNum * nDang);
}
OPENOBJ_END();
int len = lstFeedData.Length();
for(int i=0;i<len;i++){
SCalcFloorData *pDataTmp = lstFeedData[i];
if(pDataTmp->m_csFloor == csCurFloor && pDataTmp->m_csVPipeName == csCurVPipeName){
SCalcHouseData *pData = new SCalcHouseData();
pData->m_ID = id;//前一节点是管线
pData->m_iDoorNum = iDoorNum;
pData->m_nNg = nDang;
pData->m_nPeopleNum = nPeopleNum;
pData->m_nFactor = nFactor;
pData->m_iRation = iRation;
pData->m_nU0 = nU0;
pData->m_nAc = nAc;
pData->m_nU = nU;
pDataTmp->m_lstHouse.Append(pData);
break;
}
}
}
else if(pListAll->m_iType == 0){//管线
CString csFloor, csVPipeName;
OPENOBJ_BEGIN(id, AcDb::kForRead, TDbPipe, pPipe);
if(pPipe){
CString csLabel = pPipe->GetSysLabel();
int idx = csLabel.Find(_T("-"));
if(idx > -1){
csFloor = csLabel.Left(idx);
csVPipeName = csLabel.Right(csLabel.GetLength()-idx-1);
}
}
OPENOBJ_END();
if(csFloor != _T("") && csFloor.Find(_T("立管")) < 0){
int len = lstFeedData.Length();
BOOL bExist = FALSE;
for(int i=0;i<len;i++){
SCalcFloorData *pDataTmp = lstFeedData[i];
if(pDataTmp->m_csFloor == csFloor && pDataTmp->m_csVPipeName == csVPipeName){
bExist = TRUE;
break;
}
}
if(!bExist){
csCurFloor = csFloor;
csCurVPipeName = csVPipeName;
SCalcFloorData *pNewData = new SCalcFloorData();
pNewData->m_csFloor = csFloor;
pNewData->m_csVPipeName = csVPipeName;
pNewData->m_ID = id;
lstFeedData.Append(pNewData);
}
}
}
long len = pListAll->m_lstNode.Length();
for(long i=0;i<len;i++){
SSearchPipeList *pList = pListAll->m_lstNode[i];
BOOL ret = TransformCalcFeedData(pList, lstFeedData, csCurFloor, csCurVPipeName);
if(!ret)
return FALSE;
}
return TRUE;
}
//计算函数
void DoCalcResidenceFeed(DList<SCalcFloorData> &lstFeedData, BOOL bFromDownToUp, BOOL bIsReCalc)
{
int len = lstFeedData.Length();
double nI(-1), nLost(-1), nSpeed(0);
//计算每层支管管径
for(int i=0;i<len;i++){
SCalcFloorData *pDataTmp = lstFeedData[i];
int iNum = pDataTmp->m_lstHouse.Length();
double nSigmaU0(0), nSigmaNg(0);
for(int j=0;j<iNum;j++){
SCalcHouseData *pData = pDataTmp->m_lstHouse[j];
double nAllNg = pData->m_iDoorNum * pData->m_nNg;
AcDbObjectId id = pData->m_ID;
AcDbObjectId idPipe = NULL;
nSigmaU0 += (pData->m_nU0 * pData->m_nNg * pData->m_iDoorNum);
nSigmaNg += pData->m_nNg * pData->m_iDoorNum;
OPENOBJ_BEGIN(id, AcDb::kForRead, TDbEquipment, pEquip);
if(pEquip){
int num = pEquip->GetInterfaceNum();
if(num == 1){
TPipeInterface face;
pEquip->GetInterface(0, face);
idPipe = face.m_idPipe;
}
}
OPENOBJ_END();
if(!idPipe)
continue;
int iDn = GetPipeDnByQ(0.2*pData->m_nU*nAllNg, idPipe, nLost, nI, nSpeed, bIsReCalc);
ads_name ent;
acdbGetAdsName(ent, idPipe);
DoDimPipeDn(ent, iDn, _T("自动"), g_nPipeDnHeight-0.5, FALSE, FALSE);
}
double nTmpU0(0); //平均出流概率 加权
if(nSigmaNg < 0.001)
nTmpU0 = 0;
else
nTmpU0 = nSigmaU0 / nSigmaNg;
double nTmpAc = GetAcByU0(nTmpU0*100);
double nTmpU(0);
if(nSigmaNg < 0.001)
nTmpU = 0;
else
nTmpU = (1 + nTmpAc * pow((nSigmaNg -1), 0.49)) / sqrt(nSigmaNg);
pDataTmp->m_nNg = nSigmaNg;
pDataTmp->m_nSigmaU0 = nSigmaU0;
if(!pDataTmp->m_ID)
continue;
int iDn2 = GetPipeDnByQ(0.2*nTmpU*nSigmaNg, pDataTmp->m_ID, nLost, nI, nSpeed, bIsReCalc);
ads_name ent2;
acdbGetAdsName(ent2, pDataTmp->m_ID);
DoDimPipeDn(ent2, iDn2, _T("自动"), g_nPipeDnHeight, FALSE, FALSE);
}
DList<SCalcFloorData> lstVPipeData;
//计算每层立管管径
int iLen = (int)_tcslen(_T("楼"));//兼容UNICODE
for(i=0;i<len;i++){
SCalcFloorData *pDataCur = lstFeedData[i];
double nSigmaU0(0), nSigmaNg(0);
CString csCurFloor = pDataCur->m_csFloor;
CString csCurVPipeName = pDataCur->m_csVPipeName;
int iCurFloor = _ttoi(csCurFloor.Left(csCurFloor.GetLength() - iLen));
for(int j=0;j<len;j++){
SCalcFloorData *pDataTmp = lstFeedData[j];
CString csFloor = pDataTmp->m_csFloor;
CString csVPipeName = pDataTmp->m_csVPipeName;
int iFloor = _ttoi(csFloor.Left(csFloor.GetLength() - iLen));
if(bFromDownToUp){//自下向上
if(iCurFloor <= iFloor && csVPipeName == csCurVPipeName){
nSigmaU0 += pDataTmp->m_nSigmaU0;
nSigmaNg += pDataTmp->m_nNg;
}
}
else{
if(iCurFloor >= iFloor && csVPipeName == csCurVPipeName){
nSigmaU0 += pDataTmp->m_nSigmaU0;
nSigmaNg += pDataTmp->m_nNg;
}
}
}
////////// 创建立管信息 /////////////////////////////
int lenVPipe = lstVPipeData.Length();
BOOL bFlag = TRUE;
for(int nn=0;nn<lenVPipe;nn++){
if(lstVPipeData[nn]->m_csVPipeName == csCurVPipeName){
bFlag = FALSE;
lstVPipeData[nn]->m_nSigmaU0 += pDataCur->m_nSigmaU0;
lstVPipeData[nn]->m_nAllNg += pDataCur->m_nNg;
if(csCurFloor == _T("干管"))
lstVPipeData[nn]->m_IDMain = pDataCur->m_ID;
}
}
if(bFlag){
SCalcFloorData *pNew = new SCalcFloorData();
pNew->m_csFloor = _T("干管");
pNew->m_csVPipeName = csCurVPipeName;
pNew->m_nSigmaU0 = pDataCur->m_nSigmaU0;
pNew->m_nAllNg = pDataCur->m_nNg;
lstVPipeData.Append(pNew);
if(csCurFloor == _T("干管"))
lstVPipeData[nn]->m_IDMain = pDataCur->m_ID;
}
//////////////////////////////////////////////////////////////
double nTmpU0(0); //平均出流概率 加权
if(nSigmaNg < 0.001)
nTmpU0 = 0;
else
nTmpU0 = nSigmaU0 / nSigmaNg;
double nTmpAc = GetAcByU0(nTmpU0*100);
double nTmpU(0);
if(nSigmaNg < 0.001)
nTmpU = 0;
else
nTmpU = (1 + nTmpAc * pow((nSigmaNg -1), 0.49)) / sqrt(nSigmaNg);
double nQ = 0.2*nTmpU*nSigmaNg;
pDataCur->m_nQ = nQ;
pDataCur->m_nAllNg = nSigmaNg;
pDataCur->m_nRetU = nTmpU;
if(!pDataCur->m_IDMain)
continue;
int iDn3 = GetPipeDnByQ(nQ, pDataCur->m_IDMain, nLost, nI, nSpeed, bIsReCalc);
pDataCur->m_iDn = iDn3;
pDataCur->m_nV = nSpeed;
pDataCur->m_nI = nI;
pDataCur->m_nLost = nLost;
ads_name ent3;
acdbGetAdsName(ent3, pDataCur->m_IDMain);
DoDimPipeDn(ent3, iDn3, _T("自动"), g_nPipeDnHeight, FALSE, FALSE);
}
//计算每栋立管管径
for(i=0;i<lstVPipeData.Length();i++){
SCalcFloorData *pDataCur = lstVPipeData[i];
double nSigmaU0(0), nSigmaNg(0);
CString csCurVPipeName = pDataCur->m_csVPipeName;
int iCurPipeName = _ttoi(csCurVPipeName);
for(int j=0;j<lstVPipeData.Length();j++){
SCalcFloorData *pDataTmp = lstVPipeData[j];
CString csVPipeName = pDataTmp->m_csVPipeName;
int iPipeName = _ttoi(csVPipeName);
if(iCurPipeName >= iPipeName){
nSigmaU0 += pDataTmp->m_nSigmaU0;
nSigmaNg += pDataTmp->m_nAllNg;
}
}
double nTmpU0(0); //平均出流概率 加权
if(nSigmaNg < 0.001)
nTmpU0 = 0;
else
nTmpU0 = nSigmaU0 / nSigmaNg;
double nTmpAc = GetAcByU0(nTmpU0*100);
double nTmpU(0);
if(nSigmaNg < 0.001)
nTmpU = 0;
else
nTmpU = (1 + nTmpAc * pow((nSigmaNg -1), 0.49)) / sqrt(nSigmaNg);
double nQ = 0.2*nTmpU*nSigmaNg;
pDataCur->m_nQ = nQ;
pDataCur->m_nAllNg = nSigmaNg;
pDataCur->m_nRetU = nTmpU;
if(!pDataCur->m_IDMain)
continue;
int iDn3 = GetPipeDnByQ(nQ, pDataCur->m_IDMain, nLost, nI, nSpeed, bIsReCalc);
pDataCur->m_iDn = iDn3;
pDataCur->m_nV = nSpeed;
pDataCur->m_nI = nI;
pDataCur->m_nLost = nLost;
ads_name ent3;
acdbGetAdsName(ent3, pDataCur->m_IDMain);
DoDimPipeDn(ent3, iDn3, _T("自动"), g_nPipeDnHeight, FALSE, FALSE);
//计算每层立管管径
for(int m=0;m<len;m++){
SCalcFloorData *pData = lstFeedData[m];
if(pData->m_csVPipeName == pDataCur->m_csVPipeName && pData->m_csFloor == pDataCur->m_csFloor){
pData->m_nQ = pDataCur->m_nQ;
pData->m_nAllNg = pDataCur->m_nAllNg;
pData->m_nRetU = pDataCur->m_nRetU;
pData->m_iDn = pDataCur->m_iDn;
pData->m_nV = pDataCur->m_nV;
pData->m_nI = pDataCur->m_nI;
pData->m_nLost = pDataCur->m_nLost;
break;
}
}
}
}
void CalcFeedImportWord(DList<SCalcFloorData> &lstFeedData)
{
//初始化
COleVariant vtOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR), vtTrue((short)TRUE), vtFalse((short)FALSE);
_Application wordApplication;
Documents wordDocuments;
_Document activeDocument;
Paragraphs wordParagraphs;
Selection wordSelection;
if (!wordApplication.CreateDispatch(_T("Word.Application")))
{
AfxMessageBox(_T("不能执行Microsoft Word 8.0!"));
return;
}
wordApplication.SetVisible(TRUE);
wordDocuments = wordApplication.GetDocuments();
activeDocument = wordDocuments.Add(vtOptional,vtOptional);
//写一行字
wordSelection = wordApplication.GetSelection();
wordParagraphs = wordSelection.GetParagraphs();
wordParagraphs.SetAlignment(0); // 0: 居左 1:居中 2:居右
wordSelection.TypeText(_T("按照建筑给水排水设计规范 (GB 50015-2003)进行计算 \n"));
wordSelection.TypeText(_T("计算公式: \n"));
wordSelection.TypeText(_T("1:计算U0 = (q0*m*Kh)/(0.2*Ng*T*3600)\n"));
wordSelection.TypeText(_T("αc 对应于不同U0的系数 \n"));
wordSelection.TypeText(_T("式中: \n"));
wordSelection.TypeText(_T("U0 -- 生活给水管道的最大用水时卫生器具给水当量平均出流概率(%) \n"));
wordSelection.TypeText(_T("q0-- 最高用水日的用水定额\n"));
wordSelection.TypeText(_T("m-- 每户用水人数 \n"));
wordSelection.TypeText(_T("Kh-- 小时变化系数 \n"));
wordSelection.TypeText(_T("Ng-- 每户设置的卫生器具给水当量数\n"));
wordSelection.TypeText(_T("T-- 用水时数(h)\n"));
wordSelection.TypeText(_T("0.2-- 一个卫生器具给水当量的额定流量(L/s) \n\n"));
wordSelection.TypeText(_T("2:计算U = (1 + αc * pow((Ng - 1), 0.49)) / SQRT(Ng) \n"));
wordSelection.TypeText(_T("式中: \n"));
wordSelection.TypeText(_T("U--计算管段的卫生器具给水当量同时出溜概率(%) \n"));
wordSelection.TypeText(_T("αc对应于不同U0的系数 \n"));
wordSelection.TypeText(_T("Ng--计算管段的卫生器具给水当量总数 \n\n"));
wordSelection.TypeText(_T("3:计算管段的设计秒流量Qg = 0.2*U*Ng \n\n"));
wordSelection.TypeText(_T("各楼层计算结果如下 \n"));
int iNumFloor = lstFeedData.Length();
//画表格
int rows(iNumFloor+1), columns(9);
Selection wSelection = wordApplication.GetSelection();
Range oRange = wSelection.GetRange();
Tables oTables = activeDocument.GetTables();
_Table oTable = oTables.Add(oRange, rows, columns);
// cet 2010.3.25 add
Borders oBorders = oTable.GetBorders();
oBorders.SetInsideLineStyle(1); // 设置表格线型
oBorders.SetOutsideLineStyle(1);
Columns oColumns;
Column oColumn;
oColumns = oTable.GetColumns();
oColumn = oColumns.Item(1);
oColumn.SetWidth(50, 0); // 0 = wdAdjustNone
oColumn = oColumns.Item(2);
oColumn.SetWidth(55, 0);
oColumn = oColumns.Item(3);
oColumn.SetWidth(50, 0);
oColumn = oColumns.Item(4);
oColumn.SetWidth(70, 0);
oColumn = oColumns.Item(5);
oColumn.SetWidth(50, 0);
oColumn = oColumns.Item(6);
oColumn.SetWidth(40, 0);
oColumn = oColumns.Item(7);
oColumn.SetWidth(40, 0);
oColumn = oColumns.Item(8);
oColumn.SetWidth(40, 0);
oColumn = oColumns.Item(9);
oColumn.SetWidth(40, 0);
Cell oCell;
oCell = oTable.Cell(1, 1);
oRange = oCell.GetRange();
oRange.InsertAfter(_T("楼层"));
oCell = oTable.Cell(1, 2);
oRange = oCell.GetRange();
oRange.InsertAfter(_T("本层当量"));
oCell = oTable.Cell(1, 3);
oRange = oCell.GetRange();
oRange.InsertAfter(_T("总当量∑Ng"));
oCell = oTable.Cell(1, 4);
oRange = oCell.GetRange();
oRange.InsertAfter(_T("同时出流概率U"));
oCell = oTable.Cell(1, 5);
oRange = oCell.GetRange();
oRange.InsertAfter(_T("流量(l/s)"));
oCell = oTable.Cell(1, 6);
oRange = oCell.GetRange();
oRange.InsertAfter(_T("立管管径"));
oCell = oTable.Cell(1, 7);
oRange = oCell.GetRange();
oRange.InsertAfter(_T("流速"));
oCell = oTable.Cell(1, 8);
oRange = oCell.GetRange();
oRange.InsertAfter(_T("水力坡降"));
oCell = oTable.Cell(1, 9);
oRange = oCell.GetRange();
oRange.InsertAfter(_T("沿程损失"));
for(int i=1;i<=iNumFloor;i++){
SCalcFloorData *pData = lstFeedData[i-1];
CString csFloor, csAllNg, csU, csQ, csDn, csCurNg, csDe, csV , csI, csLost;
csFloor = pData->m_csVPipeName + _T("#-") + pData->m_csFloor;
csCurNg.Format(_T("%.1f"), pData->m_nNg);
csDn.Format(_T("%d"), pData->m_iDn);
csU.Format(_T("%.2f"), pData->m_nRetU);
csQ.Format(_T("%.2f"), pData->m_nQ);
csAllNg.Format(_T("%.1f"), pData->m_nAllNg);
csV.Format(_T("%.2f"), pData->m_nV);
csI.Format(_T("%.3f"), pData->m_nI);
csLost.Format(_T("%.3f"), pData->m_nLost);
oCell = oTable.Cell(i+1, 1); // 楼层
oRange = oCell.GetRange();
oRange.InsertAfter(csFloor);
oCell = oTable.Cell(i+1, 2); // 当量
oRange = oCell.GetRange();
oRange.InsertAfter(csCurNg);
oCell = oTable.Cell(i+1, 3); // 总当量
oRange = oCell.GetRange();
oRange.InsertAfter(csAllNg);
oCell = oTable.Cell(i+1, 4); // 同时出流概率
oRange = oCell.GetRange();
oRange.InsertAfter(csU);
oCell = oTable.Cell(i+1, 5); // 流量
oRange = oCell.GetRange();
oRange.InsertAfter(csQ);
oCell = oTable.Cell(i+1, 6); // 立管管径
oRange = oCell.GetRange();
oRange.InsertAfter(csDn);
oCell = oTable.Cell(i+1, 7); // 流速
oRange = oCell.GetRange();
oRange.InsertAfter(csV);
oCell = oTable.Cell(i+1, 8);
oRange = oCell.GetRange();
oRange.InsertAfter(csI);
oCell = oTable.Cell(i+1, 9);
oRange = oCell.GetRange();
oRange.InsertAfter(csLost);
}
}
//主函数
void ResidenceFeedCalc()
{
Entity entMainPipe;
RBList rbMask(RTDXF0, _T("ATS_EQUIPMENT"), 8, _T("*"), NULL);
RBList rbMaskPipe = ads_buildlist( -4, _T("<or"),
-4, _T("<and"), RTDXF0, _T("ATS_PIPE"), 8, LAY_PIPE_FEED, -4, _T("and>"),
-4, _T("<and"), RTDXF0, _T("ATS_PIPE"), 8, LAY_VPIPE_FEED, -4, _T("and>"),
-4, _T("<and"), RTDXF0, _T("ATS_PIPE"), 8, LAY_PIPE_FEED2, -4, _T("and>"),
-4, _T("<and"), RTDXF0, _T("ATS_PIPE"), 8, LAY_VPIPE_FEED2, -4, _T("and>"),
-4, _T("<and"), RTDXF0, _T("ATS_PIPE"), 8, LAY_PIPE_FEED3, -4, _T("and>"),
-4, _T("<and"), RTDXF0, _T("ATS_PIPE"), 8, LAY_VPIPE_FEED3, -4, _T("and>"),
-4, _T("or>"), NULL);
if(SelectEntity(_T("\n请选择给水总干管<退出>"), entMainPipe, rbMaskPipe) != RTNORM) {
return;
}
DList<SCalcFloorData> lstFeedData;
SSearchPipeList *pListAll = new SSearchPipeList();
PickSet ssAll(SS_FREE);
ssAll += entMainPipe;
if(!SearchSprinkPipeSys(entMainPipe, NULL, pListAll, ssAll)){
AfxMessageBox(_T("系统有回路!"));
delete pListAll;
return;
}
if(!TransformCalcFeedData(pListAll, lstFeedData, CString(), CString())){
AfxMessageBox(_T("没有住宅信息!请首先执行【修改当量】"));
delete pListAll;
return;
}
BOOL bFromDownToUp = TRUE;
CString csFeedDir = ReadXdata(entMainPipe, _T("TG-FEED-DIR"));
if(csFeedDir == _T("自下而上"))
bFromDownToUp = TRUE;
else if(csFeedDir == _T("自上而下"))
bFromDownToUp = FALSE;
else if(csFeedDir == _T("")){
bFromDownToUp = TRUE;
// OPENOBJ_BEGIN(entMainPipe, AcDb::kForRead, TDbPipe, pPipe);
// if(pPipe){
// CString csFloor = pPipe->GetSysLabel();
// if(csFloor.Find(_T("1楼立管")) > -1)
// bFromDownToUp = TRUE;
// else{
// CString csTmp;
// csTmp.Format(_T("%d楼立管"), lstFeedData.Length()+1);
// if(csFloor.Find(csTmp) > -1)
// bFromDownToUp = FALSE;
// else{
// delete pListAll;
// return;
// }
// }
// }
// OPENOBJ_END();
}
AddVerticalPipeToData(pListAll, lstFeedData, bFromDownToUp);
delete pListAll;
TCHAR szTmp[64];
BOOL bIsReCale = FALSE;
OPENOBJ_BEGIN(entMainPipe, AcDb::kForRead, TDbPipe, pPipe);
if(pPipe){
CString csLable = pPipe->GetLabel();
if(csLable != _T(""))
{
int ret2 = ads_getstring(0, _T("\n已经计算过,是否进行复算(已知管径,计算流速)<N>:"), szTmp);
if(_tcsicmp(szTmp, _T("Y")) == 0)
bIsReCale = TRUE;
if(ret2 == RTCAN)
return;
}
}
OPENOBJ_END();
DoCalcResidenceFeed(lstFeedData, bFromDownToUp, bIsReCale);
UpdateMultDim();
CalcFeedImportWord(lstFeedData);
return;
}