#include "stdafx.h" #include "ResidenceFeedCalcDlg.h" //#include #include #include #include #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;im_csFloor == csFloor && pDataTmp->m_csVPipeName == csVPipeName){ pDataTmp->m_IDMain = id; break; } } } } long len = pListAll->m_lstNode.Length(); for(long i=0;im_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;im_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;im_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;im_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;im_lstHouse.Length(); double nSigmaU0(0), nSigmaNg(0); for(int j=0;jm_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 lstVPipeData; //计算每层立管管径 int iLen = (int)_tcslen(_T("楼"));//兼容UNICODE for(i=0;im_csFloor; CString csCurVPipeName = pDataCur->m_csVPipeName; int iCurFloor = _ttoi(csCurFloor.Left(csCurFloor.GetLength() - iLen)); for(int j=0;jm_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;nnm_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;im_csVPipeName; int iCurPipeName = _ttoi(csCurVPipeName); for(int j=0;jm_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;mm_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(""), -4, _T(""), -4, _T(""), -4, _T(""), -4, _T(""), -4, _T(""), -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已经计算过,是否进行复算(已知管径,计算流速):"), 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;im_lstHouse.Length(); double nSigmaU0(0), nSigmaNg(0); for(int j=0;jm_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 lstVPipeData; //计算每层立管管径 int iLen = (int)_tcslen(_T("楼"));//兼容UNICODE for(i=0;im_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;jm_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;nnm_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;im_csVPipeName; int iCurPipeName = _ttoi(csCurVPipeName); for(int j=0;jm_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;mm_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 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 &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); }