687 lines
23 KiB
C++
687 lines
23 KiB
C++
/********************************************************************
|
||
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;
|
||
|
||
} |