1455 lines
46 KiB
C++
1455 lines
46 KiB
C++
#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);
|
||
}
|