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

1455 lines
45 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.
#include "stdafx.h"
#include "ResidenceFeedCalcDlg.h"
//#include <cbclass.h>
#include <DbEquipment.h>
#include <MSWORD8.h>
#include <twtdef.h>
#include "TelDef.h"
#include "TAPI.h"
#include "TWordFormulasTemplet.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
// static double GetAcByU0(double nU0) zxl 2013.06.03 modify
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 CResidenceFeedCalcDlg::AddVerticalPipeToData(SSearchPipeList *pListAll, 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 = m_lstFeedData.Length();
for(int i=0;i<len;i++){
SCalcFloorData *pDataTmp = m_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, bFromDownToUp);
}
}
//转换数据函数 把链表转换为数组
BOOL CResidenceFeedCalcDlg::TransformCalcFeedData(SSearchPipeList *pListAll, 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 = m_lstFeedData.Length();
for(int i=0;i<len;i++){
SCalcFloorData *pDataTmp = m_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 = m_lstFeedData.Length();
BOOL bExist = FALSE;
for(int i=0;i<len;i++){
SCalcFloorData *pDataTmp = m_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;
m_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, csCurFloor, csCurVPipeName);
if(!ret)
return FALSE;
}
return TRUE;
}
//计算函数
void CResidenceFeedCalcDlg::DoCalcResidenceFeed( BOOL bFromDownToUp, BOOL bIsReCalc)
{
int len = m_lstFeedData.Length();
double nI(-1), nLost(-1), nSpeed(0);
//计算每层支管管径
for(int i=0;i<len;i++){
SCalcFloorData *pDataTmp = m_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 = m_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 = m_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 = m_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 CResidenceFeedCalcDlg::CalcFeedImportWord()
{
//初始化
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;
}
// cet 2010.6.25 add 打开公式模板
TWordFormulasTemplet wdFormula;
CString sPathName = g_csSysPath;
sPathName += _T("formula.doc");
if (!wdFormula.OpenWordFormulasTempletFile(sPathName))
{
return;
}
wordApplication.SetVisible(TRUE);
wordDocuments = wordApplication.GetDocuments();
activeDocument = wordDocuments.Add(vtOptional,vtOptional);
//写一行字
wordSelection = wordApplication.GetSelection();
wordParagraphs = wordSelection.GetParagraphs();
wordParagraphs.SetAlignment(0); // 0: 居左 1:居中 2:居右
// cet 2010.6.25 del
// 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"));
// wdFormula.InsertFormula(1,wordSelection);
// 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"));
// cet 2010.6.25 add
_Font font;
font = wordSelection.GetFont();
wordSelection.TypeText(_T("按照建筑给水排水设计规范 (GB 50015-2003)(2009年版)进行计算 \n"));
wordSelection.TypeText(_T("计算公式: \n"));
wordSelection.TypeText(_T("1:计算最大用水时卫生器具给水当量平均出流概率:\n "));
wdFormula.InsertFormula(1,wordSelection);
wordSelection.TypeText(_T("\n式中:"));
wordSelection.TypeText(_T("U"));
font.SetSubscript(2); //处理下标
wordSelection.TypeText(_T("0"));
font.SetSubscript(0);
wordSelection.TypeText(_T(" -- 生活给水管道的最大用水时卫生器具给水当量平均出流概率(%); \n"));
wordSelection.TypeText(_T(" q"));
font.SetSubscript(2); //处理下标
wordSelection.TypeText(_T("L"));
font.SetSubscript(0);
wordSelection.TypeText(_T(" -- 最高用水日的用水定额;\n"));
wordSelection.TypeText(_T(" m -- 每户用水人数; \n"));
wordSelection.TypeText(_T(" K"));
font.SetSubscript(2); //处理下标
wordSelection.TypeText(_T("h"));
font.SetSubscript(0);
wordSelection.TypeText(_T(" -- 小时变化系数; \n"));
wordSelection.TypeText(_T(" N"));
font.SetSubscript(2); //处理下标
wordSelection.TypeText(_T("g"));
font.SetSubscript(0);
wordSelection.TypeText(_T(" -- 每户设置的卫生器具给水当量数;\n"));
wordSelection.TypeText(_T(" T -- 用水时数(h);\n"));
wordSelection.TypeText(_T(" 0.2 -- 一个卫生器具给水当量的额定流量(L/s); \n\n"));
wordSelection.TypeText(_T("2:计算卫生器具给水当量的同时出流概率: \n "));
wdFormula.InsertFormula(2, wordSelection);
wordSelection.TypeText(_T("\n式中:"));
wordSelection.TypeText(_T("U -- 计算管段的卫生器具给水当量同时出流概率(%); \n"));
wordSelection.TypeText(_T(" α"));
font.SetSubscript(2); //处理下标
wordSelection.TypeText(_T("c"));
font.SetSubscript(0);
wordSelection.TypeText(_T(" -- 对应于不同"));
wordSelection.TypeText(_T("U"));
font.SetSubscript(2); //处理下标
wordSelection.TypeText(_T("0"));
font.SetSubscript(0);
wordSelection.TypeText(_T("的系数; \n"));
wordSelection.TypeText(_T(" N"));
font.SetSubscript(2); //处理下标
wordSelection.TypeText(_T("g"));
font.SetSubscript(0);
wordSelection.TypeText(_T(" -- 计算管段的卫生器具给水当量总数; \n\n"));
wordSelection.TypeText(_T("3:计算管段的设计秒流量:\n "));
wdFormula.InsertFormula(3, wordSelection);
wordSelection.TypeText(_T("\n式中:"));
wordSelection.TypeText(_T("q"));
font.SetSubscript(2); //处理下标
wordSelection.TypeText(_T("g"));
font.SetSubscript(0);
wordSelection.TypeText(_T(" -- 计算管段的设计秒流量(L/s);\n"));
wordSelection.TypeText(_T(" U -- 计算管段的卫生器具给水当量同时出流概率(%);\n"));
wordSelection.TypeText(_T(" N"));
font.SetSubscript(2); //处理下标
wordSelection.TypeText(_T("g"));
font.SetSubscript(0);
wordSelection.TypeText(_T(" -- 计算管段的卫生器具给水当量总数; \n\n"));
wordSelection.TypeText(_T("各楼层计算结果如下 \n"));
int iNumFloor = m_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("流速m/s"));
oCell = oTable.Cell(1, 8);
oRange = oCell.GetRange();
oRange.InsertAfter(_T("水力坡降mH2O/m"));
oCell = oTable.Cell(1, 9);
oRange = oCell.GetRange();
oRange.InsertAfter(_T("沿程损失mH2O"));
for(int i=1;i<=iNumFloor;i++){
SCalcFloorData *pData = m_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);
}
wdFormula.CloseFile(); // cet 2010.6.28 add
}
//主函数
void ResidenceFeedCalc()
{
Entity entMainPipe;
RBList rbMask(RTDXF0, _T("ATS_EQUIPMENT"), 8, _T("*"), NULL);
CTemporaryResourceOverride vTemp;
CResidenceFeedCalcDlg dlgFeed;
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;
}
SSearchPipeList *pListAll = new SSearchPipeList();
PickSet ssAll(SS_FREE);
ssAll += entMainPipe;
if(!SearchSprinkPipeSys(entMainPipe, NULL, pListAll, ssAll)){
AfxMessageBox(_T("系统有回路!"));
delete pListAll;
return;
}
if(!dlgFeed.TransformCalcFeedData(pListAll, 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;
}
dlgFeed.m_bFromDownToUp = bFromDownToUp;
dlgFeed.AddVerticalPipeToData(pListAll, bFromDownToUp);
dlgFeed.SetSearchPipeList(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();
*/
// dlgFeed.DoCalcResidenceFeed(bFromDownToUp, FALSE);
dlgFeed.ReadDataFromGraph();
dlgFeed.InitFeedData();
dlgFeed.DoModal();
delete pListAll;
return;
}
CResidenceFeedGrid::CResidenceFeedGrid()
{
AppendCol(_T("楼层"),45);
AppendCol(_T("本层当量"),60);
AppendCol(_T("总当量∑Ng"),70);
AppendCol(_T("同时出流概率U"),83);
AppendCol(_T("流量l/s"),55);
AppendCol(_T("标注管径"),60);
AppendCol(_T("流速m/s"),55);
AppendCol(_T("水力坡降mH2O/m"),95);
AppendCol(_T("沿程损失mH2O"),90);
GetCol(5).SetComboSel();
GetCol(5).SetTextColor(RGB(255,0,0));
GetCol(0).SetReadOnly();
GetCol(1).SetReadOnly();
GetCol(2).SetReadOnly();
GetCol(3).SetReadOnly();
GetCol(4).SetReadOnly();
GetCol(6).SetReadOnly();
GetCol(7).SetReadOnly();
GetCol(8).SetReadOnly();
GetCol(6).SetTextColor(RGB(0,0,255));
GetCol(7).SetTextColor(RGB(0,0,255));
GetCol(8).SetTextColor(RGB(0,0,255));
SetNoAppendButton();
SetNoDefaultMenu();
SetNoPaste();
}
void CResidenceFeedGrid::OnCellComboString(WDGridCell&cell,CComboBox&combo)
{
if(cell.GetColIndex()==5)
{
combo.AddString(_T("15"));
combo.AddString(_T("20"));
combo.AddString(_T("25"));
combo.AddString(_T("32"));
combo.AddString(_T("40"));
combo.AddString(_T("50"));
combo.AddString(_T("70"));
combo.AddString(_T("80"));
combo.AddString(_T("100"));
combo.AddString(_T("125"));
combo.AddString(_T("150"));
combo.AddString(_T("300"));
combo.AddString(_T("350"));
combo.AddString(_T("400"));
combo.AddString(_T("500"));
combo.AddString(_T("600"));
combo.AddString(_T("700"));
}
}
CResidenceFeedCalcDlg::CResidenceFeedCalcDlg(CWnd* pParent /*=NULL*/)
: CDialog(CResidenceFeedCalcDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CResidenceFeedCalcDlg)
m_strWndEdtAllLost = _T("");
//}}AFX_DATA_INIT
}
void CResidenceFeedCalcDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CResidenceFeedCalcDlg)
DDX_Control(pDX, IDC_BTN_SEARCH, m_btnSearch);
DDX_Control(pDX, IDC_LIST_FEED_CALC, m_listFeed);
DDX_Text(pDX, IDC_EDIT_LOST, m_strWndEdtAllLost);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CResidenceFeedCalcDlg, CDialog)
//{{AFX_MSG_MAP(CResidenceFeedCalcDlg)
ON_BN_CLICKED(IDC_BOOK_BTN, OnBookBtn)
ON_BN_CLICKED(IDC_REPEART_CALC_BTN, OnRepeartCalcBtn)
ON_BN_CLICKED(IDC_BTN_SEARCH, OnBtnSearch)
ON_BN_CLICKED(IDC_BUTTON_SHEET, OnButtonSheet)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
BOOL CResidenceFeedCalcDlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_listFeed.Create(this,IDC_LIST_FEED_CALC);
m_listFeed.Refresh();
m_bitSearchPipe.LoadBitmap(IDB_SEARCHPIPE);
m_btnSearch.SetBitmap((HBITMAP)m_bitSearchPipe);
return TRUE;
}
void CResidenceFeedCalcDlg::InitFeedData()
{
CString sTmpText;
for (int i = 0; i < m_lstFeedData.Length(); ++i)
{
m_listFeed.AppendRow();
//楼层
sTmpText.Format(_T("%s#-%s"),m_lstFeedData[i]->m_csVPipeName,m_lstFeedData[i]->m_csFloor);
m_listFeed.GetCell(i,0).SetText(sTmpText);
//本层当量
sTmpText.Format(_T("%.2f"),m_lstFeedData[i]->m_nNg);
m_listFeed.GetCell(i,1).SetText(sTmpText);
//总当量
sTmpText.Format(_T("%.2f"),m_lstFeedData[i]->m_nAllNg);
m_listFeed.GetCell(i,2).SetText(sTmpText);
//同时流出概率
sTmpText.Format(_T("%.2f"),m_lstFeedData[i]->m_nRetU);
m_listFeed.GetCell(i,3).SetText(sTmpText);
//流量
sTmpText.Format(_T("%.2f"),m_lstFeedData[i]->m_nQ);
m_listFeed.GetCell(i,4).SetText(sTmpText);
//立管管径
sTmpText.Format(_T("%d"),m_lstFeedData[i]->m_iDn);
m_listFeed.GetCell(i,5).SetText(sTmpText);
}
}
void CResidenceFeedCalcDlg::OnBookBtn()
{
CalcFeedImportWord();
}
void CResidenceFeedCalcDlg::OnOK()
{
DoCalcResidenceFeed(m_bFromDownToUp, FALSE);
CString sTmpText;
for (int i = 0; i < m_lstFeedData.Length(); ++i)
{
//楼层
sTmpText.Format(_T("%s#-%s"),m_lstFeedData[i]->m_csVPipeName,m_lstFeedData[i]->m_csFloor);
m_listFeed.GetCell(i,0).SetText(sTmpText);
//本层当量
sTmpText.Format(_T("%.2f"),m_lstFeedData[i]->m_nNg);
m_listFeed.GetCell(i,1).SetText(sTmpText);
//总当量
sTmpText.Format(_T("%.2f"),m_lstFeedData[i]->m_nAllNg);
m_listFeed.GetCell(i,2).SetText(sTmpText);
//同时流出概率
sTmpText.Format(_T("%.2f"),m_lstFeedData[i]->m_nRetU);
m_listFeed.GetCell(i,3).SetText(sTmpText);
//流量
sTmpText.Format(_T("%.2f"),m_lstFeedData[i]->m_nQ);
m_listFeed.GetCell(i,4).SetText(sTmpText);
//立管管径
sTmpText.Format(_T("%d"),m_lstFeedData[i]->m_iDn);
m_listFeed.GetCell(i,5).SetText(sTmpText);
//流量
sTmpText.Format(_T("%.2f"),m_lstFeedData[i]->m_nV);
m_listFeed.GetCell(i,6).SetText(sTmpText);
//坡降
sTmpText.Format(_T("%.3f"),m_lstFeedData[i]->m_nI);
m_listFeed.GetCell(i,7).SetText(sTmpText);
//损失
sTmpText.Format(_T("%.3f"),m_lstFeedData[i]->m_nLost);
m_listFeed.GetCell(i,8).SetText(sTmpText);
}
m_listFeed.Refresh();
UpdateMultDim();
SetAllLost(); // cet 2010.11.24 add
}
void CResidenceFeedCalcDlg::OnRepeartCalcBtn()
{
//从表中得到数据
GetDataFromList();
//复算
DoCalcResidenceFeed(m_bFromDownToUp, TRUE);
CString sTmpText;
for (int i = 0; i < m_lstFeedData.Length(); ++i)
{
sTmpText.Format(_T("%.2f"),m_lstFeedData[i]->m_nV);
m_listFeed.GetCell(i,6).SetText(sTmpText);
sTmpText.Format(_T("%.3f"),m_lstFeedData[i]->m_nI);
m_listFeed.GetCell(i,7).SetText(sTmpText);
sTmpText.Format(_T("%.3f"),m_lstFeedData[i]->m_nLost);
m_listFeed.GetCell(i,8).SetText(sTmpText);
}
UpdateMultDim();
m_listFeed.Refresh();
SetAllLost(); // cet 2010.11.24 add
}
//从表上获得数据
void CResidenceFeedCalcDlg::GetDataFromList()
{
CString sPipeD;
BOOL bSet = FALSE;
for (int i = 0; i < m_listFeed.GetRowNum(); ++i)
{
sPipeD = m_listFeed.GetCell(i,5).GetText();
OPENOBJ_BEGIN(m_lstFeedData[i]->m_IDMain, AcDb::kForWrite, TDbPipe, pPipe);
if(pPipe)
{
pPipe->SetDnDiameter(_ttoi(sPipeD));
bSet = TRUE;
}
OPENOBJ_END();
//干管管径
if (!bSet)
{
OPENOBJ_BEGIN(m_lstFeedData[i]->m_ID, AcDb::kForWrite, TDbPipe, pPipe);
if(pPipe)
{
pPipe->SetDnDiameter(_ttoi(sPipeD));
}
OPENOBJ_END();
}
bSet = FALSE;
}
}
//从图上读出数据
void CResidenceFeedCalcDlg::ReadDataFromGraph()
{
int len = m_lstFeedData.Length();
double nI(-1), nLost(-1), nSpeed(0);
//计算每层支管管径
for(int i=0;i<len;i++){
SCalcFloorData *pDataTmp = m_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, FALSE);
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, FALSE);
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 = m_lstFeedData[i];
double nSigmaU0(0), nSigmaNg(0);
CString csCurFloor = pDataCur->m_csFloor;
CString csCurVPipeName = pDataCur->m_csVPipeName;
if(csCurFloor == _T("干管"))
{
OPENOBJ_BEGIN(pDataCur->m_ID, AcDb::kForRead, TDbPipe, pPipe);
if(pPipe)
{
pDataCur->m_iDn = (int)pPipe->GetDnDiameter();
}
OPENOBJ_END();
}
else
{
OPENOBJ_BEGIN(pDataCur->m_IDMain, AcDb::kForRead, TDbPipe, pPipe);
if(pPipe)
{
pDataCur->m_iDn = (int)pPipe->GetDnDiameter();
}
OPENOBJ_END();
}
int iCurFloor = _ttoi(csCurFloor.Left(csCurFloor.GetLength() - iLen));
for(int j=0;j<len;j++){
SCalcFloorData *pDataTmp = m_lstFeedData[j];
CString csFloor = pDataTmp->m_csFloor;
CString csVPipeName = pDataTmp->m_csVPipeName;
int iFloor = _ttoi(csFloor.Left(csFloor.GetLength() - iLen));
if(m_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, FALSE);
// 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, FALSE);
// 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 = m_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 CResidenceFeedCalcDlg::OnBtnSearch()
{
int nSelR = m_listFeed.GetCurRowIndex();
if (nSelR < 0)
{
AfxMessageBox(_T("请选择一行!"));
return;
}
CString sFloor,sFloorT;
sFloor = m_listFeed.GetCell(nSelR,0).GetText();
AcDbObjectId id;
for (int i = 0; i < m_lstFeedData.Length();++i)
{
SCalcFloorData *pDataTmp = m_lstFeedData[i];
if (pDataTmp != NULL)
{
sFloorT.Format(_T("%s#-%s"),m_lstFeedData[i]->m_csVPipeName,m_lstFeedData[i]->m_csFloor);
if (sFloorT.CompareNoCase(sFloor) == 0)
{
BOOL bFind = FALSE;
id = pDataTmp->m_IDMain;
OPENOBJ_BEGIN(id, AcDb::kForRead, TDbPipe, pPipe);
if(pPipe)
{
XPoint ptCen, p1, p2, p3, p4;
ptCen = pPipe->MidPoint();
double nDist = pPipe->Length()*2000;
arxZoomTo(ptCen, nDist, nDist);
ads_polar(ptCen, 0, nDist/5, p1);
ads_polar(p1, PI/2, nDist/5, p1);
ads_polar(ptCen, PI, nDist/5, p2);
ads_polar(p2, PI/2, -nDist/5, p2);
ads_grdraw(p1, p2, 2, 0);
ads_polar(ptCen, PI/2, nDist/5, p3);
ads_polar(p3, PI, nDist/5, p3);
ads_polar(ptCen, PI/2, -nDist/5, p4);
ads_polar(p4, 0, nDist/5, p4);
ads_grdraw(p3, p4, 2, 0);
bFind = TRUE;
}
OPENOBJ_END();
if (!bFind)
{
id = pDataTmp->m_ID;
OPENOBJ_BEGIN(id, AcDb::kForRead, TDbPipe, pPipe);
if(pPipe)
{
XPoint ptCen, p1, p2, p3, p4;
ptCen = pPipe->MidPoint();
double nDist = pPipe->Length()*2000;
arxZoomTo(ptCen, nDist, nDist);
ads_polar(ptCen, 0, nDist/5, p1);
ads_polar(p1, PI/2, nDist/5, p1);
ads_polar(ptCen, PI, nDist/5, p2);
ads_polar(p2, PI/2, -nDist/5, p2);
ads_grdraw(p1, p2, 2, 0);
ads_polar(ptCen, PI/2, nDist/5, p3);
ads_polar(p3, PI, nDist/5, p3);
ads_polar(ptCen, PI/2, -nDist/5, p4);
ads_polar(p4, 0, nDist/5, p4);
ads_grdraw(p3, p4, 2, 0);
bFind = TRUE;
}
OPENOBJ_END();
}
}
}
}
HideDialog(this, TRUE);
TCHAR szTmp[256];
ads_getstring(NULL, _T("\n按任意键返回对话框:<返回>"), szTmp);
HideDialog(this, FALSE);
}
void CResidenceFeedCalcDlg::SetSearchPipeList(SSearchPipeList *pList)
{
m_pListAll = pList;
}
// cet 2010.11.23 add
SSearchPipeList* GetFeedDisadvantageNode(SSearchPipeList *pListAll, SSearchPipeList *pDisadvantage);
void CResidenceFeedCalcDlg::SetAllLost()
{
if (m_pListAll != NULL)
{
CalcPipeLength2(m_pListAll, NULL);
SSearchPipeList *pDisadvantage = NULL;
pDisadvantage = GetFeedDisadvantageNode(m_pListAll, NULL);
double dAllLost = 0.0;
if(pDisadvantage != NULL)
{
std::set<CString> data;
DoCalcFeedWaterLost(pDisadvantage, data, dAllLost);
}
m_strWndEdtAllLost.Format(_T("%.3f"), dAllLost);
UpdateData(FALSE);
}
}
// cet 2010.11.23 add
//计算总的沿程水头损失
void CResidenceFeedCalcDlg::DoCalcFeedWaterLost(SSearchPipeList *pDisadvantage,std::set<CString> &data, double &dAllLostRet)
{
if(pDisadvantage != NULL)
{
if(pDisadvantage->m_iType == 0)
{
for (int i = 0; i < m_lstFeedData.Length(); i++)
{
CString strNum = m_lstFeedData[i]->m_csVPipeName + m_lstFeedData[i]->m_csFloor;
if ((pDisadvantage->m_ID == m_lstFeedData[i]->m_IDMain || pDisadvantage->m_ID == m_lstFeedData[i]->m_ID)
&& data.find(strNum) == data.end())
{
double d = m_lstFeedData[i]->m_nLost;
dAllLostRet += m_lstFeedData[i]->m_nLost;
data.insert(strNum);
break;
}
}
}
DoCalcFeedWaterLost(pDisadvantage->m_pPrevious, data, dAllLostRet);
}
}
void CResidenceFeedCalcDlg::OnButtonSheet()
{
UpdateData(TRUE);
HideDialog(this, TRUE);
XPoint pt;
if(acedGetPoint(NULL, _T("\n点取表格左上角位置:<返回>"), pt) != RTNORM)
{
HideDialog(this, FALSE);
return;
}
double nTextSize = g_nSheetHeight;
double nTableHeight = g_nSheetHeight+2;
AcDbObjectId idTextStyle=InitTwtTextStyle(g_csSheetStyle);
TDbSheet *pSheet = new TDbSheet;
TGridStyle gridStyle;
gridStyle.SetOverrideAll(TRUE);
gridStyle.SetTextHeight(nTextSize);
gridStyle.SetTextStyleId(idTextStyle);
TSheetTitle &title=pSheet->GetTitle();
title.SetHeight(nTextSize);
title.SetText(_T("住宅给水计算表"));
TGridStyle &gridStyle2=title.GetGridStyle();
gridStyle2.SetTextHeight(nTextSize);
gridStyle2.SetTextStyleId(idTextStyle);
TDividerStyle &style=title.GetDividerStyle();
style.SetDividerFlag(TDividerStyle::kNone);
gridStyle.SetHorMode(AcDb::kTextCenter);
gridStyle.SetVerMode(AcDb::kTextVertMid);
gridStyle.SetLineSpaceFactor(0.2);
gridStyle.SetTextWrap(FALSE);
pSheet->SetGridStyle(gridStyle);
pSheet->SetRowHeight(nTableHeight);
pSheet->SetLayoutRotation(Ucs2Wcs(0.0));
pSheet->SetLocation(Ucs2Wcs(pt));
int nAllRow = (int)m_listFeed.GetRowNum();
pSheet->InitSheet(nAllRow + 1, 9, nTableHeight, 50);
TDividerStyle &styleBorder = pSheet->GetBorderStyle();
styleBorder.SetLineWidth(0.2);
TSheetRow *pRow = pSheet->GetRow(0);
if (pRow != NULL)
{
TDividerStyle &styleRow = pRow->GetDividerStyle();
styleRow.SetLineWidth(0.2);
styleRow.SetDividerFlag(TDividerStyle::kLocal);
}
pSheet->SetLocation(Ucs2Wcs(pt));
XPoint ptex = pSheet->GetExtents(FALSE);
TSheetColumn column;
column.SetWidth(15);
pSheet->SetColumnAt(0, column);
column.SetWidth(15);
pSheet->SetColumnAt(1, column);
column.SetWidth(20);
pSheet->SetColumnAt(2, column);
column.SetWidth(25);
pSheet->SetColumnAt(3, column);
column.SetWidth(20);
pSheet->SetColumnAt(4, column);
column.SetWidth(20);
pSheet->SetColumnAt(5, column);
column.SetWidth(20);
pSheet->SetColumnAt(6, column);
column.SetWidth(30);
pSheet->SetColumnAt(7, column);
column.SetWidth(30);
pSheet->SetColumnAt(8, column);
TGridCell &cell01=*(*pSheet)(0, 0);
cell01.SetText(_T("楼层"));
TGridCell &cell02=*(*pSheet)(0, 1);
cell02.SetText(_T("本层当量"));
TGridCell &cell03=*(*pSheet)(0, 2);
cell03.SetText(_T("总当量∑Ng"));
TGridCell &cell04=*(*pSheet)(0, 3);
cell04.SetText(_T("同时出流概率U"));
TGridCell &cell05=*(*pSheet)(0, 4);
cell05.SetText(_T("流量(l/s)"));
TGridCell &cell06=*(*pSheet)(0, 5);
cell06.SetText(_T("立管管径"));
TGridCell &cell07=*(*pSheet)(0, 6);
cell07.SetText(_T("流速m/s"));
TGridCell &cell08=*(*pSheet)(0, 7);
cell08.SetText(_T("水力坡降mH2O/m"));
TGridCell &cell09=*(*pSheet)(0, 8);
cell09.SetText(_T("沿程损失mH2O"));
for(int j = 1; j < m_listFeed.GetRowNum() + 1; j++)
{
for (int i = 0; i < m_listFeed.GetColNum(); i++)
{
TGridCell &Cell=*(*pSheet)(j, i);
CString sText = m_listFeed.GetCell(j-1,i).GetText();
Cell.SetText(sText);
}
}
pSheet->AddToCSpace(TRUE);
TCHAR szTmp[32];
ads_getstring(NULL, _T("\n按任意键返回对话框:<返回>"), szTmp);
HideDialog(this, FALSE);
}