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

687 lines
23 KiB
C++
Raw Normal View History

2026-09-28 15:28:50 +08:00
/********************************************************************
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;
}