#include "stdafx.h" #include "globalFunc.h" #include "AcDbObjectPtr.h" #include "DbWell.h" #include "MSWORD8.h" #include "xtext.h" #include "DbPool.h" #include "Dbpipe.h" #include "layerdef.h" #include "EntitySet.h" #include "RBGroups.h" #include "PickEntSet.h" //#include "CalcSheetDlg.h" //#include "TWordFormulasTemplet.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif //extern int DoSerialNumber(SSearchPipeList *pListLast, int idx, BOOL IsMainNode); //extern double CalcPipeV(double nDn, double nI, double n); //extern double CalcPipeV(double nQ, double nDn, double nI, double n); //extern BOOL CheckWellSys(SSearchPipeList *pListAll, BOOL bChcekPool); // extern void SetPipeLabelType(CDbPipe *pPipe); namespace { double CalcPipeV(double nDn, double nI, double n) { double nTemp = 1 / n; nI = pow(nI, 0.5); double nR = pow(0.25 * nDn, 2.0 / 3.0); return nTemp * nI * nR; } double CalcPipeV(double nQ, double nDn, double nI, double n) { double nRet(-1); double nTemp = 1 / n; nI = pow(nI, 0.5); double nR = pow(0.25 * nDn, 2.0 / 3.0); nRet = nTemp * nI * nR; double nTempQ = (0.25 * nDn * nDn * PI) * nRet; if (nTempQ < nQ && nDn < 2.750) return -1; return nRet; // double nRet(-1); // double nArea(0); // nArea = PI/4.0 * nDn * nDn; // nRet = nQ / nArea; // return nRet; } } //*************************************************************************************************** // 显示面积 //*************************************************************************************************** int g_iShowRainArea = 1; int GetRainAreaState() { ads_retint(g_iShowRainArea); return RTNORM; } /*int SetRainAreaState() { CString csAreaLayer = LAY_CALC_AREA; // 8.0发行之前要修改过来 if(g_iShowRainArea == 1) g_iShowRainArea = 0; else g_iShowRainArea = 1; TDocLock vLock; RBList rbMask(RTDXF0, _T("ATS_SPACE"), 8, csAreaLayer, NULL); PickSet ssAll(SS_FREE); ssAll.Get(_T("X"), NULL, NULL, rbMask); for(long j=0;jsetVisibility(AcDb::kVisible); else pSpace->setVisibility(AcDb::kInvisible); pSpace->SetHighlight(TRUE); } OPENOBJ_END(); } SetLayerOnOff(csAreaLayer, g_iShowRainArea); return GetRainAreaState(); }*/ extern void UpdateRainWellArea(); //*************************************************************************************************** // 雨水水力 //*************************************************************************************************** //extern void GlobalFunc::GetPipeSpecList(DList &lstSpec, const TCHAR* szMat); int DoPlusRainDn(int dn, BOOL bPlus) { int ret(0); if (bPlus) { //增大一级管径 if (dn <= 250) ret = 300; else if (dn == 300) ret = 350; else if (dn == 350) ret = 400; else if (dn == 400) ret = 450; else if (dn == 450) ret = 500; else if (dn == 500) ret = 600; else if (dn == 600) ret = 700; else if (dn == 700) ret = 800; else if (dn == 800) ret = 900; else if (dn == 900) ret = 1000; else if (dn == 1000) ret = 1100; else if (dn == 1100) ret = 1200; else if (dn == 1200) ret = 1350; else if (dn == 1350) ret = 1500; else if (dn == 1500) ret = 1650; else if (dn == 1650) ret = 1800; else if (dn == 1800) ret = 2000; else if (dn == 2000) ret = 2100; else if (dn == 2100) ret = 2200; else if (dn == 2200) ret = 2300; else if (dn == 2300) ret = 2400; else if (dn == 2400) ret = 2500; else if (dn == 2500) ret = 2600; else if (dn == 2600) ret = 2700; else if (dn == 2700) ret = 2800; else if (dn == 2800) ret = 2900; else if (dn == 2900) ret = 3000; else ret = 3000; } else { if (dn <= 300) ret = 250; else if (dn == 350) ret = 300; else if (dn == 400) ret = 350; else if (dn == 450) ret = 400; else if (dn == 500) ret = 450; else if (dn == 600) ret = 500; else if (dn == 700) ret = 600; else if (dn == 800) ret = 700; else if (dn == 900) ret = 800; else if (dn == 1000) ret = 900; else if (dn == 1100) ret = 1000; else if (dn == 1200) ret = 1100; else if (dn == 1350) ret = 1200; else if (dn == 1500) ret = 1350; else if (dn == 1650) ret = 1500; else if (dn == 1800) ret = 1650; else if (dn == 2000) ret = 1800; else if (dn == 2100) ret = 2000; else if (dn == 2200) ret = 2100; else if (dn == 2300) ret = 2200; else if (dn == 2400) ret = 2300; else if (dn == 2500) ret = 2400; else if (dn == 2600) ret = 2500; else if (dn == 2700) ret = 2600; else if (dn == 2800) ret = 2700; else if (dn == 2900) ret = 2800; else if (dn == 3000) ret = 2900; } return ret; } int GetDnBySpecList(int dn) { DList lstSpec; GlobalFunc::GetPipeSpecList(lstSpec, _T("钢筋混凝土管")); int idx = -1; int len = lstSpec.Length(); for (int j = 0; j < lstSpec.Length(); j++) { int iDnTmp = *lstSpec[j]; if (iDnTmp == dn) return dn; if (iDnTmp > dn) return iDnTmp; } return dn; } int PlusRainDn(int dn, BOOL bPlus) { DList lstSpec; GlobalFunc::GetPipeSpecList(lstSpec, _T("钢筋混凝土管")); int idx = -1; int len = lstSpec.Length(); for (int j = 0; j < lstSpec.Length(); j++) { int iDnTmp = *lstSpec[j]; if (iDnTmp == dn) { idx = j; break; } if (iDnTmp > dn && bPlus) { return iDnTmp; } else if (iDnTmp > dn && !bPlus && j > 1) { iDnTmp = *lstSpec[j - 1]; return iDnTmp; } } int ret(dn); if (bPlus && idx != len - 1) ret = *lstSpec[idx + 1]; else if (!bPlus && idx != 0) ret = *lstSpec[idx - 1]; return ret; } // 根据<<给水排水管网系统>> P55 按充满度为1 进行计算管径 int GetFirstPipeDnByQ2(double nQ, double nN, double nI, double &nRetV) { int dn = 300;//小区道路最小是300 double dTmp = pow(nQ / 1000.0, 3.0 / 8.0); double dTmp2 = pow(nI / 1000.0, 3.0 / 16.0); dTmp = dTmp / dTmp2 * 0.304 * 1000; dTmp -= 0.1; if (dTmp < 300) dn = 300; else if (dTmp < 350) dn = 350; else if (dTmp < 400) dn = 400; else if (dTmp < 450) dn = 450; else if (dTmp < 500) dn = 500; else if (dTmp < 600) dn = 600; else if (dTmp < 700) dn = 700; else if (dTmp < 800) dn = 800; else if (dTmp < 900) dn = 900; else if (dTmp < 1000) dn = 1000; else if (dTmp < 1100) dn = 1100; else if (dTmp < 1200) dn = 1200; else if (dTmp < 1350) dn = 1350; else if (dTmp < 1500) dn = 1500; else if (dTmp < 1650) dn = 1650; else if (dTmp < 1800) dn = 1800; else if (dTmp < 2000) dn = 2000; else if (dTmp < 2100) dn = 2100; else if (dTmp < 2200) dn = 2200; else if (dTmp < 2300) dn = 2300; else if (dTmp < 2400) dn = 2400; else if (dTmp < 2500) dn = 2500; else if (dTmp < 2600) dn = 2600; else if (dTmp < 2700) dn = 2700; else dn = 2800; double nRadius = (double)dn / 1000; nRetV = CalcPipeV(nQ / 1000.0, nRadius, nI / 1000.0, nN); return dn; } // 初算管径 已知坡度 // 已知流量 以及 粗糙系数 根据 流速不能小于 0.6 原则, 给出最大管径 int GetFirstPipeDnByQ3(double nQ, double nN, double nI, double &nRetV) { BOOL bMetal = FALSE; if (fabs(nN - 0.012) < 0.001 || fabs(nN - 0.013) < 0.001 || fabs(nN - 0.014) < 0.001) bMetal = TRUE; //以下数字出自:《给水排水管网系统》P217 主要针对于污水管,所以经验流量×1。5 (污水充满度55%) int dn = 300;//小区道路最小是300 if (nQ < 23.9) dn = 300; else if (nQ < 39.72 * 1.8) dn = 350; else if (nQ < 51.88 * 1.8) dn = 400; else if (nQ < 65.66 * 1.8) dn = 450; else if (nQ < 88.08 * 1.8) dn = 500; else if (nQ < 126.84 * 1.8) dn = 600; else if (nQ < 172.65 * 1.8) dn = 700; else if (nQ < 222.5 * 1.8) dn = 800; else if (nQ < 285.39 * 1.8) dn = 900; else if (nQ < 379.11 * 1.8) dn = 1000; else if (nQ < 458.72 * 1.8) dn = 1100; else if (nQ < 545.92 * 1.8) dn = 1200; else if (nQ < 690.93 * 1.8) dn = 1350; else if (nQ < 853 * 1.8) dn = 1500; else if (nQ < 1032.13 * 1.8) dn = 1650; else dn = 1800; nI = nI / 1000; nQ = nQ / 1000;// 把L/S 转化为 M3/S double nSlowV = 0.7; dn = GetDnBySpecList(dn); while (1) { double nV(0); double nRadius = (double)dn / 1000; nV = CalcPipeV(nQ, nRadius, nI, nN); while (nV < nSlowV || (nV > 10 && bMetal) || (nV > 5 && !bMetal)) { if (nV > nSlowV) dn = PlusRainDn(dn, FALSE); else dn = PlusRainDn(dn, TRUE); nRadius = (double)dn / 1000; nV = CalcPipeV(nQ, nRadius, nI, nN); if (dn == 250) { nRetV = nV; return dn; } if (nV < 0) { dn = PlusRainDn(dn, TRUE); nRadius = (double)dn / 1000; nV = CalcPipeV(nRadius, nI, nN); break; } } nRetV = nV; double nTempQ = (0.25 * nRadius * nRadius * PI) * nV; double nTmp = nTempQ - nQ; if (nTempQ < nQ && dn < 3000) { dn = PlusRainDn(dn, TRUE); //设计流量不够,管径加大一号 continue; } if (dn == 300) break; //把当前管径小2号,计算设计流量,如果设计流量仍然大于计算流量,就把当前管径小1号 int iTempDn = PlusRainDn(dn, FALSE); iTempDn = PlusRainDn(iTempDn, FALSE); double nTempDn = (double)iTempDn / 1000; nTempQ = (0.25 * nTempDn * nTempDn * PI) * nV; if (nTempQ > nQ && dn > 300) { dn = PlusRainDn(dn, FALSE); break; } else break; if (dn == 300) break; } return dn; } // 初算管径 // 已知流量 以及 粗糙系数 根据 流速不能小于 0.6 原则, 给出最大管径 int GetFirstPipeDnByQ(double nQ, double nN, double &nRetI, double &nRetV) { BOOL bMetal = FALSE; if (fabs(nN - 0.012) < 0.001 || fabs(nN - 0.013) < 0.001 || fabs(nN - 0.014) < 0.001) bMetal = TRUE; double nTempI = 0.003; //以下数字出自:《给水排水管网系统》P217 主要针对于污水管,所以经验流量×1。5 (污水充满度55%) int dn = 300;//小区道路最小是300 if (nQ < 23.9) dn = 300; // else if(nQ < 39.72*1.8) // dn = 350; else if (nQ < 51.88 * 1.8) { dn = 400; nTempI = 0.0025; } // else if(nQ < 65.66*1.8){ // dn = 450; // nTempI = 0.002; // } else if (nQ < 88.08 * 1.8) { dn = 500; nTempI = 0.0015; } else if (nQ < 126.84 * 1.8) { dn = 600; nTempI = 0.0015; } else if (nQ < 172.65 * 1.8) { dn = 700; nTempI = 0.001; } else if (nQ < 222.5 * 1.8) { dn = 800; nTempI = 0.001; } else if (nQ < 285.39 * 1.8) { dn = 900; nTempI = 0.001; } else if (nQ < 379.11 * 1.8) { dn = 1000; nTempI = 0.001; } else if (nQ < 458.72 * 1.8) { dn = 1100; nTempI = 0.001; } else if (nQ < 545.92 * 1.8) { dn = 1200; nTempI = 0.0005; } else if (nQ < 690.93 * 1.8) { dn = 1350; nTempI = 0.0005; } else if (nQ < 853 * 1.8) { dn = 1500; nTempI = 0.0005; } else if (nQ < 1032.13 * 1.8) { dn = 1650; nTempI = 0.0005; } else { dn = 1800; nTempI = 0.0005; } nQ = nQ / 1000;// 把L/S 转化为 M3/S double nSlowV = 0.7; dn = GetDnBySpecList(dn); while (1) { double nV(0); double nI = nTempI - 0.0005; double nRadius = (double)dn / 1000; while (nV < nSlowV || (nV > 10 && bMetal) || (nV > 5 && !bMetal)) { nI += 0.0005; nV = CalcPipeV(nRadius, nI, nN); if (dn == 300 && nRetI > 0.003) { nI = 0.003; nV = CalcPipeV(nRadius, nI, nN); } } nRetI = nI; nRetV = nV; double nTempQ = (0.25 * nRadius * nRadius * PI) * nV; double nTmp = nTempQ - nQ; if (nTempQ < nQ && dn < 3000) { int dn2 = dn; dn = PlusRainDn(dn2, TRUE); //设计流量不够,管径加大一号 if (dn == dn2) break; continue; } if (dn == 300) break; //把当前管径小2号,计算设计流量,如果设计流量仍然大于计算流量,就把当前管径小1号 int iTempDn = PlusRainDn(dn, FALSE); iTempDn = PlusRainDn(iTempDn, FALSE); double nTempDn = (double)iTempDn / 1000; nTempQ = (0.25 * nTempDn * nTempDn * PI) * nV; if (nTempQ > nQ && dn > 300) { dn = PlusRainDn(dn, FALSE); if (dn == 300) break; else continue; } else break; if (dn == 300) break; } return dn; } //计算本节点往后有多少井 void CalcWellNum(SSearchPipeList *pListAll) { AcDbObjectId id = NULL; id = pListAll->m_ID; pListAll->m_iNum = 0; if (pListAll->m_iType == 3) pListAll->m_iNum = 1; ads_name ent; acdbGetAdsName(ent, id); long len = pListAll->m_lstNode.Length(); for (long i = 0; i < len; i++) { SSearchPipeList *pList = pListAll->m_lstNode[i]; CalcWellNum(pList); pListAll->m_iNum += pList->m_iNum; } } extern void ShowPipe(const AcDbObjectId &idPipe); extern bool HandlePipeDimType(CDbPipe *pPipe, int &nSelType); bool g_bPipeShow = false; // cet 2012.1.9 add 图面赋值控制变量 int g_nSelType = -1; // cet 2012.1.9 add 图面赋值控制变量 //将初算结果标注在图中 管径 & 坡度 void DimRainCalcResult(SSearchPipeList *pListAll) { BOOL bDrawLabel = false; // cet 2012.1.10 add 管线是否显示标注 AcDbObjectId id = NULL; id = pListAll->m_ID; if (pListAll->m_iType == 0) { ads_name ent; acdbGetAdsName(ent, id); XPoint ptStart, ptEnd; GlobalFunc::GetPipePoint(ent, ptStart, ptEnd); //对于接雨水口的支管,不需要标注 BOOL bIsLink2Gully = FALSE; OPENOBJ_BEGIN(ent, AcDb::kForWrite, CDbPipe, pPipe); if (pPipe) { bDrawLabel = pPipe->IsDrawLabel(); // cet 2012.1.10 add 记录原始设置 AcDbObjectId idNode1 = pPipe->GetNode(0); OPENOBJ_BEGIN(idNode1, AcDb::kForRead, CDbEquipment, pEquip); if (pEquip) { TCHAR* szLay = pEquip->layer(); if (_tcsicmp(szLay, LAY_TWT_GULLY) == 0) bIsLink2Gully = TRUE; delete[] szLay; } OPENOBJ_END(); AcDbObjectId idNode2 = pPipe->GetNode(1); OPENOBJ_BEGIN(idNode2, AcDb::kForRead, CDbEquipment, pEquip); if (pEquip) { TCHAR* szLay = pEquip->layer(); if (_tcsicmp(szLay, LAY_TWT_GULLY) == 0) bIsLink2Gully = TRUE; delete[] szLay; } OPENOBJ_END(); } OPENOBJ_END(); if (!bIsLink2Gully) GlobalFunc::DoDimPipeDn(ent, pListAll->m_iDn, _T("自动"), g_Option::instance().g_nPipeDnHeight, FALSE, FALSE); BOOL bReverse = FALSE; if (pListAll->m_pPrevious != NULL) { //得到前一节点 AcDbObjectId idFront = pListAll->m_pPrevious->m_ID; XPoint ptNode; OPENOBJ_BEGIN(idFront, AcDb::kForRead, CDbPipeNode, pNode); if (pNode) { ptNode = pNode->GetLocation(); } OPENOBJ_END(); if (ptStart == ptNode) bReverse = TRUE; //如果前一节点位置等于本管线的起点位置,说明管线画反了 } if (pListAll->m_nI > 0) { OPENOBJ_BEGIN(ent, AcDb::kForWrite, CDbPipe, pPipe); if (pPipe) { pPipe->SetPipeGradient(pListAll->m_nI / 1000); } OPENOBJ_END(); } // cet 2012.1.10 add 在管线信息更新完毕后设置管线标注以防计算标注信息长度有误 OPENOBJ_BEGIN(ent, AcDb::kForWrite, CDbPipe, pPipe); if (pPipe != NULL) { pPipe->EnableDrawLabel(bDrawLabel); // 设置为管线原有标注设置 if (!pPipe->IsDrawLabel()) { SetPipeLabelType(pPipe); } else { g_bPipeShow = HandlePipeDimType(pPipe, g_nSelType); } if (static_cast(pPipe->GetSpare()) == -1) { pPipe->EnableDrawLabel(FALSE); } else { pPipe->EnableDrawLabel(TRUE); } } OPENOBJ_END(); // 显示交叉线 if (g_bPipeShow) { ShowPipe(id); GlobalFunc::AnyKeyReturn(_T("\n按任意键继续查找下一段待修改管标注...")); } } else if (pListAll->m_iType == 3) { if (pListAll->m_pPrevious != NULL) { ads_name ent; acdbGetAdsName(ent, pListAll->m_ID); GlobalFunc::WriteXdata(ent, _T("TG-DIRTWELLQ"), XString(_T("%.2f"), pListAll->m_pPrevious->m_nPipeQ)); } } long len = pListAll->m_lstNode.Length(); for (long i = 0; i < len; i++) { SSearchPipeList *pList = pListAll->m_lstNode[i]; DimRainCalcResult(pList); } } //将每个井的汇流面积写入链表 // m_nDang 记录本井汇流面积 // m_nStartPress 记录总汇流面积 // m_iNum 记录径流系数 BOOL SetWellArea(SSearchPipeList *pListAll, BOOL &bHasArea) { BOOL bRet = TRUE; AcDbObjectId id = NULL; id = pListAll->m_ID; if (GlobalFunc::IsWell(id)) pListAll->m_iType = 3; if (pListAll->m_iType == 3) { ads_name ent; acdbGetAdsName(ent, id); CString csArea = GlobalFunc::ReadXdata(ent, _T("TG-WELLAREA")); CString csFactor = GlobalFunc::ReadXdata(ent, _T("TG-RAINWELLFACTOR")); CString csP = GlobalFunc::ReadXdata(ent, _T("TG-RAINWELLP")); CString csTime = GlobalFunc::ReadXdata(ent, _T("TG-WELLTIME")); int iFactor = int(_tstof(csFactor) * 1000); pListAll->m_nDang = _tstof(csArea); pListAll->m_iNum = iFactor; pListAll->m_iSpare = _ttoi(csP); if (csTime != _T("") && pListAll->m_lstNode.Length() == 0)//必须是末端井 pListAll->m_nLost = _tstof(csTime); if (pListAll->m_nDang > 0.01) bHasArea = TRUE; pListAll->m_nStartPress = _tstof(csArea); } else if (pListAll->m_iType == 0) { OPENOBJ_BEGIN(id, AcDb::kForRead, CDbPipe, pPipe); if (pPipe) { pListAll->m_nLength = pPipe->Length(); // if(!DocGetMeterUnitDraw()) // pListAll->m_nLength = pListAll->m_nLength/1000; } OPENOBJ_END(); } long len = pListAll->m_lstNode.Length(); for (long i = 0; i < len; i++) { SSearchPipeList *pList = pListAll->m_lstNode[i]; bRet = SetWellArea(pList, bHasArea); pListAll->m_nStartPress += pList->m_nStartPress; //m_nStartPress记录总汇流面积 } return bRet; } BOOL IsDirtPool(AcDbObjectId idNode) { if (!idNode) return FALSE; OPENOBJ_BEGIN(idNode, AcDb::kForRead, CDbPool, pEquip); if (pEquip) return TRUE; else return FALSE; OPENOBJ_END(); } //将井编号写入链表 BOOL SetWellName(SSearchPipeList *pListAll) { BOOL bRet = TRUE; AcDbObjectId id = NULL; id = pListAll->m_ID; if (GlobalFunc::IsWell(id)) pListAll->m_iType = 3; if (IsDirtPool(id)) pListAll->m_iType = 4; if (pListAll->m_iType == 3) { pListAll->m_csName = GlobalFunc::GetWellName(id); if (pListAll->m_csName == _T("")) return FALSE; } if (pListAll->m_iType == 4) { pListAll->m_csName = _T("HC"); } long len = pListAll->m_lstNode.Length(); for (long i = 0; i < len; i++) { SSearchPipeList *pList = pListAll->m_lstNode[i]; bRet = SetWellName(pList); if (!bRet) return FALSE; } return bRet; } //返回用户选择的最远井所在链表的位置 SSearchPipeList *GetWellNode(SSearchPipeList *pListAll, Entity entLongWell, SSearchPipeList *pNode) { AcDbObjectId id = NULL; id = pListAll->m_ID; ads_name ent; acdbGetAdsName(ent, id); Entity entTmp = ent; if (entTmp == entLongWell) return pListAll; long len = pListAll->m_lstNode.Length(); for (long i = 0; i < len; i++) { SSearchPipeList *pList = pListAll->m_lstNode[i]; pNode = GetWellNode(pList, entLongWell, pNode); } return pNode; } //得到下一个计算支路的起点节点 根据流量是否为0且最远 SSearchPipeList *GetNextCalcWell(SSearchPipeList *pListAll, SSearchPipeList *pDisadvantage) { AcDbObjectId id = NULL; id = pListAll->m_ID; double nCurPipeLength(0); if (pListAll->m_nPipeQ == 0 && pListAll->m_iType == 3) { nCurPipeLength = pListAll->m_nLength; if (pDisadvantage) { if (nCurPipeLength > pDisadvantage->m_nLength) pDisadvantage = pListAll; } else pDisadvantage = pListAll; //条件3: 临时节点为空 } int len = pListAll->m_lstNode.Length(); for (long i = 0; i < len; i++) { SSearchPipeList *pList = pListAll->m_lstNode[i]; pDisadvantage = GetNextCalcWell(pList, pDisadvantage); } return pDisadvantage; } CString TransformDouble2String(double dDouble, int iPre) { CString csRet; CString csNote; csNote.Format(_T("%d"), iPre--); CString sFormat = _T("%.") + csNote + _T("f"); csRet.Format(sFormat, dDouble); while (csRet.ReverseFind(_T('0')) > 0 && iPre >= 0) { csNote.Format(_T("%d"), iPre--); CString sFormat = _T("%.") + csNote + _T("f"); csRet.Format(sFormat, dDouble); } return csRet; } //输出计算书函数 /* void ImportRainCalcWord(DList &lstNode, DList &lstWell, CCalcRainWellDlg &dlg) { int len = lstNode.Length(); if(len < 1) return; int len2 = lstWell.Length(); if(len2 < 1) return; // 打开公式模板 zxl 2013.12.31 add TWordFormulasTemplet wdFormula; CString sPathName = g_csSysPath; sPathName += _T("formula.doc"); if (!wdFormula.OpenWordFormulasTempletFile(sPathName)) { return; } //初始化 COleVariant vtOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR), vtTrue((short)TRUE), vtFalse((short)FALSE); _Application wordApplication; Documents wordDocuments; _Document activeDocument; Paragraphs wordParagraphs; Selection wordSelection; if (!wordApplication.CreateDispatch(_T("Word.Application"))) { AfxMessageBox(_T("不能执行Microsoft Word 8.0!")); return; } wordApplication.SetVisible(TRUE); wordDocuments = wordApplication.GetDocuments(); activeDocument = wordDocuments.Add(vtOptional,vtOptional); wordSelection = wordApplication.GetSelection(); wordParagraphs = wordSelection.GetParagraphs(); wordParagraphs.SetAlignment(1); // 0: 居左 1:居中 2:居右 CString csFisrt = lstWell[0]->m_csName; CString csLast = lstWell[len2-1]->m_csName; CString csTitle = _T("室外雨水井") + csFisrt + _T(" ~ ") + csLast + _T("水力计算书\n\n"); wordSelection.TypeText(csTitle); //写一行字 wordSelection = wordApplication.GetSelection(); wordParagraphs = wordSelection.GetParagraphs(); wordParagraphs.SetAlignment(0); // 0: 居左 1:居中 2:居右 // zxl 2014.01.03 add _Font font; font = wordSelection.GetFont(); wordSelection.TypeText(_T("计算原理参照《室外排水设计规范》GB 50014-2006(2011版),《给水排水设计手册》(第五册城镇排水) \n")); wordSelection.TypeText(_T("一、基本计算公式 \n")); wordSelection.TypeText(_T("1、降雨强度公式: \n")); wordSelection.TypeText(_T(" ")); wdFormula.InsertFormula(WORD_FORMULA30, wordSelection); wordSelection.TypeText(_T("mm/min")); wordSelection.TypeText(_T("")); wordSelection.TypeText(_T("\n 式中: i —— 降雨强度(mm/min)")); wordSelection.TypeText(_T("\n 其中:1mm/min=1L/(m")); font.SetSuperscript(2); //处理上标 wordSelection.TypeText(_T("2")); font.SetSuperscript(0); wordSelection.TypeText(_T("·min)= 10000L/(min·公顷)")); wordSelection.TypeText(_T("\n t —— 降雨历时(min)")); wordSelection.TypeText(_T("\n 雨水管渠的设计降雨历时公式:")); wordSelection.TypeText(_T("\n ")); wdFormula.InsertFormula(WORD_FORMULA31, wordSelection); wordSelection.TypeText(_T("\n t —— 降雨历时(min);")); wordSelection.TypeText(_T("\n t")); font.SetSubscript(2); //处理下标 wordSelection.TypeText(_T("1")); font.SetSubscript(0); wordSelection.TypeText(_T(" —— 地面集水时间(min),视距离长短、地形坡度和地面铺盖情")); wordSelection.TypeText(_T(" 况而定,一般采用5~10min")); wordSelection.TypeText(_T("\n m —— 折减系数")); wordSelection.TypeText(_T("\n t")); font.SetSubscript(2); //处理下标 wordSelection.TypeText(_T("2")); font.SetSubscript(0); wordSelection.TypeText(_T(" —— 管渠内雨水流行时间(min)\n ")); wdFormula.InsertFormula(WORD_FORMULA32, wordSelection); wordSelection.TypeText(_T("\n L")); font.SetSubscript(2); //处理下标 wordSelection.TypeText(_T("i")); font.SetSubscript(0); wordSelection.TypeText(_T(" —— 为设计断面上游各管道的长度(m)")); wordSelection.TypeText(_T("\n v")); font.SetSubscript(2); //处理下标 wordSelection.TypeText(_T("i")); font.SetSubscript(0); wordSelection.TypeText(_T(" —— 为上游管段的设计流速(m/s)")); wordSelection.TypeText(_T("\n P —— 设计重现期(年)")); wordSelection.TypeText(_T("\n A,C,n,B —— 参数,根据统计方法进行计算确定.")); wordSelection.TypeText(_T("\n2、暴雨强度公式:")); wordSelection.TypeText(_T("\n ")); wdFormula.InsertFormula(WORD_FORMULA33, wordSelection); wordSelection.TypeText(_T(" L/(s·公顷)")); wordSelection.TypeText(_T("\n 式中: q —— 设计暴雨强度L/(s·公顷)、L/(s·hm")); font.SetSuperscript(2); //处理上标 wordSelection.TypeText(_T("2")); font.SetSuperscript(0); wordSelection.TypeText(_T(")、L/(s·10")); font.SetSuperscript(2); //处理上标 wordSelection.TypeText(_T("4")); font.SetSuperscript(0); wordSelection.TypeText(_T("m")); font.SetSuperscript(2); //处理上标 wordSelection.TypeText(_T("2")); font.SetSuperscript(0); wordSelection.TypeText(_T(")")); wordSelection.TypeText(_T("\n3、雨水设计流量公式:")); wordSelection.TypeText(_T("\n ")); wdFormula.InsertFormula(WORD_FORMULA34, wordSelection); wordSelection.TypeText(_T("\n 式中:")); wordSelection.TypeText(_T(" Q —— 雨水设计流量(L/s)")); wordSelection.TypeText(_T("\n q —— 设计降雨强度 L/(s·公顷)")); wordSelection.TypeText(_T("\n ψ—— 径流系数")); wordSelection.TypeText(_T("\n F —— 汇水面积(ha 、10")); font.SetSuperscript(2); //处理上标 wordSelection.TypeText(_T("4")); font.SetSuperscript(0); wordSelection.TypeText(_T("m")); font.SetSuperscript(2); //处理上标 wordSelection.TypeText(_T("2")); font.SetSuperscript(0); wordSelection.TypeText(_T(")")); wordSelection.TypeText(_T("\n4、流速公式:")); wordSelection.TypeText(_T("\n ")); wdFormula.InsertFormula(WORD_FORMULA35, wordSelection); wordSelection.TypeText(_T("\n 式中:")); wordSelection.TypeText(_T(" V —— 流速(m/s)")); wordSelection.TypeText(_T("\n R —— 水力半径(m)")); wordSelection.TypeText(_T("\n I —— 水力坡度")); wordSelection.TypeText(_T("\n n —— 粗糙系数")); wordSelection.TypeText(_T("\n5、泄流量公式:")); wordSelection.TypeText(_T("\n ")); wdFormula.InsertFormula(WORD_FORMULA36, wordSelection); wordSelection.TypeText(_T("\n 式中:")); wordSelection.TypeText(_T(" Q —— 泄流量(m")); font.SetSuperscript(2); //处理上标 wordSelection.TypeText(_T("3")); font.SetSuperscript(0); wordSelection.TypeText(_T("/s)")); wordSelection.TypeText(_T("\n V —— 流速(m/s)")); wordSelection.TypeText(_T("\n A —— 管截面积(m")); font.SetSuperscript(2); //处理上标 wordSelection.TypeText(_T("2")); font.SetSuperscript(0); wordSelection.TypeText(_T(")")); wordSelection.TypeText(_T("\n二、计算参数")); wordSelection.TypeText(_T("\n1、地区:")); wordSelection.TypeText(dlg.m_csProvince); wordSelection.TypeText(_T(" ")); wordSelection.TypeText(dlg.m_csCity); wdFormula.CloseFile(); Selection wSelection = wordApplication.GetSelection(); wSelection.TypeParagraph(); //画表格 int nrows(2), ncolumns(4); wSelection = wordApplication.GetSelection(); Range oRange = wSelection.GetRange(); Tables oTables = activeDocument.GetTables(); _Table oTable = oTables.Add(oRange, nrows, ncolumns); Borders oBordersn = oTable.GetBorders(); oBordersn.SetInsideLineStyle(1); // 设置表格线型 oBordersn.SetOutsideLineStyle(1); Columns oColumns; Column oColumn; oColumns = oTable.GetColumns(); oColumn = oColumns.Item(1); oColumn.SetWidth(110, 0); // 0 = wdAdjustNone oColumn = oColumns.Item(2); oColumn.SetWidth(110, 0); oColumn = oColumns.Item(3); oColumn.SetWidth(110, 0); oColumn = oColumns.Item(4); oColumn.SetWidth(110, 0); Cell oCell; oCell = oTable.Cell(1, 1); oRange = oCell.GetRange(); oRange.InsertAfter(_T("A")); oCell = oTable.Cell(1, 2); oRange = oCell.GetRange(); oRange.InsertAfter(_T("B")); oCell = oTable.Cell(1, 3); oRange = oCell.GetRange(); oRange.InsertAfter(_T("C")); oCell = oTable.Cell(1, 4); oRange = oCell.GetRange(); oRange.InsertAfter(_T("n")); oCell = oTable.Cell(2, 1); oRange = oCell.GetRange(); oRange.InsertAfter(dlg.m_csA); oCell = oTable.Cell(2, 2); oRange = oCell.GetRange(); oRange.InsertAfter(dlg.m_csB); oCell = oTable.Cell(2, 3); oRange = oCell.GetRange(); oRange.InsertAfter(dlg.m_csC); oCell = oTable.Cell(2, 4); oRange = oCell.GetRange(); oRange.InsertAfter(dlg.m_csN); wordSelection = wordApplication.GetSelection(); wordSelection.GoTo(COleVariant((short)3), // 3 = wdGoToLine COleVariant((short)-1),vtOptional,vtOptional); // -1 = wdGoToLast wordSelection.TypeText(XString(_T("2、重现期:%s年"), TransformDouble2String(dlg.m_nP, 3))); wordSelection.TypeText(XString(_T("\n3、汇流时间:%smin"), TransformDouble2String(dlg.m_dTime, 3))); wordSelection.TypeText(XString(_T("\n4、径流系数:%s"), TransformDouble2String(dlg.m_nFactor, 3))); wordSelection.TypeText(XString(_T("\n5、折减系数:%s"), TransformDouble2String(dlg.m_dM, 3))); wordSelection.TypeText(_T("\n6、粗糙系数:")); wSelection = wordApplication.GetSelection(); wSelection.TypeParagraph(); //画表格 nrows = dlg.m_mapMeratialN.size() + 1, ncolumns = 2; wSelection = wordApplication.GetSelection(); oRange = wSelection.GetRange(); oTables = activeDocument.GetTables(); oTable = oTables.Add(oRange, nrows, ncolumns); oBordersn = oTable.GetBorders(); oBordersn.SetInsideLineStyle(1); // 设置表格线型 oBordersn.SetOutsideLineStyle(1); oColumns = oTable.GetColumns(); oColumn = oColumns.Item(1); oColumn.SetWidth(200, 0); // 0 = wdAdjustNone oColumn = oColumns.Item(2); oColumn.SetWidth(100, 0); oCell = oTable.Cell(1, 1); oRange = oCell.GetRange(); oRange.InsertAfter(_T("管材")); oCell = oTable.Cell(1, 2); oRange = oCell.GetRange(); oRange.InsertAfter(_T("粗糙系数")); std::map::iterator it; int iIndex = 0; for ( it = dlg.m_mapMeratialN.begin(); it != dlg.m_mapMeratialN.end(); it++) { oCell = oTable.Cell(iIndex+2, 1); oRange = oCell.GetRange(); oRange.InsertAfter(it->first); oCell = oTable.Cell(iIndex+2, 2); oRange = oCell.GetRange(); oRange.InsertAfter(XString(_T("%.3f"), it->second)); iIndex++; } wordSelection = wordApplication.GetSelection(); wordSelection.GoTo(COleVariant((short)3), // 3 = wdGoToLine COleVariant((short)-1),vtOptional,vtOptional); // -1 = wdGoToLast wSelection = wordApplication.GetSelection(); wSelection.TypeParagraph(); wordSelection.TypeText(_T("三、计算结果:")); Selection wSelection2 = wordApplication.GetSelection(); wSelection2.TypeParagraph(); wordSelection.TypeText(_T("主干管线信息:\n")); //画表格 int rows(len+1), columns(7); wSelection = wordApplication.GetSelection(); oRange = wSelection.GetRange(); oTables = activeDocument.GetTables(); oTable = oTables.Add(oRange, rows, columns); // cet 2010.3.25 add Borders oBorders = oTable.GetBorders(); oBorders.SetInsideLineStyle(1); // 设置表格线型 oBorders.SetOutsideLineStyle(1); oColumns = oTable.GetColumns(); oColumn = oColumns.Item(1); oColumn.SetWidth(60, 0); // 0 = wdAdjustNone oColumn = oColumns.Item(2); oColumn.SetWidth(60, 0); oColumn = oColumns.Item(3); oColumn.SetWidth(70, 0); oColumn = oColumns.Item(4); oColumn.SetWidth(50, 0); oColumn = oColumns.Item(5); oColumn.SetWidth(50, 0); oColumn = oColumns.Item(6); oColumn.SetWidth(65, 0); oColumn = oColumns.Item(7); oColumn.SetWidth(75, 0); oCell = oTable.Cell(1, 1); oRange = oCell.GetRange(); oRange.InsertAfter(_T("管段名称")); oCell = oTable.Cell(1, 2); oRange = oCell.GetRange(); oRange.InsertAfter(_T("管径mm")); oCell = oTable.Cell(1, 3); oRange = oCell.GetRange(); oRange.InsertAfter(_T("管道流量L/s")); oCell = oTable.Cell(1, 4); oRange = oCell.GetRange(); oRange.InsertAfter(_T("管长m")); oCell = oTable.Cell(1, 5); oRange = oCell.GetRange(); oRange.InsertAfter(_T("流速m/s")); oCell = oTable.Cell(1, 6); oRange = oCell.GetRange(); oRange.InsertAfter(_T("水力坡降‰")); oCell = oTable.Cell(1, 7); oRange = oCell.GetRange(); oRange.InsertAfter(_T("管材")); for(int i=0; im_csName); csTmp.Format(_T("%d"), lstNode[i]->m_iDn); oCell = oTable.Cell(i+2, 2); oRange = oCell.GetRange(); oRange.InsertAfter(csTmp); csTmp.Format(_T("%.2f"), lstNode[i]->m_nPipeQ); oCell = oTable.Cell(i+2, 3); //管道流量L/s oRange = oCell.GetRange(); oRange.InsertAfter(csTmp); // if(DocGetMeterUnitDraw()) // csTmp.Format(_T("%.2f"), lstNode[i]->m_nLength); // else csTmp.Format(_T("%.2f"), lstNode[i]->m_nLength); oCell = oTable.Cell(i+2, 4); //管长m oRange = oCell.GetRange(); oRange.InsertAfter(csTmp); csTmp.Format(_T("%.2f"), lstNode[i]->m_nV); oCell = oTable.Cell(i+2, 5); //流速m/s oRange = oCell.GetRange(); oRange.InsertAfter(csTmp); csTmp.Format(_T("%.3f"), lstNode[i]->m_nI); oCell = oTable.Cell(i+2, 6); //水力坡降mH2O/m oRange = oCell.GetRange(); oRange.InsertAfter(csTmp); OPENOBJ_BEGIN(lstNode[i]->m_ID, AcDb::kForRead, CDbPipe, pPipe); if(pPipe){ csTmp = GetPipeMaterialByIdx(pPipe->GetMaterial()); } OPENOBJ_END(); oCell = oTable.Cell(i+2, 7); //管材 oRange = oCell.GetRange(); oRange.InsertAfter(csTmp); } wordSelection = wordApplication.GetSelection(); wordSelection.GoTo(COleVariant((short)3), // 3 = wdGoToLine COleVariant((short)-1),vtOptional,vtOptional); // -1 = wdGoToLast wSelection = wordApplication.GetSelection(); wSelection.TypeParagraph(); wordSelection.TypeText(_T("主要井信息:\n")); //画表格 rows = len2+1; columns = 6; wSelection = wordApplication.GetSelection(); oRange = wSelection.GetRange(); oTables = activeDocument.GetTables(); oTable = oTables.Add(oRange, rows, columns); // cet 2010.3.25 add oBorders = oTable.GetBorders(); oBorders.SetInsideLineStyle(1); // 设置表格线型 oBorders.SetOutsideLineStyle(1); 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(85, 0); oColumn = oColumns.Item(4); oColumn.SetWidth(85, 0); oColumn = oColumns.Item(5); oColumn.SetWidth(75, 0); oColumn = oColumns.Item(6); oColumn.SetWidth(88, 0); oCell = oTable.Cell(1, 1); oRange = oCell.GetRange(); oRange.InsertAfter(_T("井编号")); oCell = oTable.Cell(1, 2); oRange = oCell.GetRange(); oRange.InsertAfter(_T("流量L/s")); oCell = oTable.Cell(1, 3); oRange = oCell.GetRange(); oRange.InsertAfter(_T("汇流面积平方米")); oCell = oTable.Cell(1, 4); oRange = oCell.GetRange(); oRange.InsertAfter(_T("总面积平方米")); oCell = oTable.Cell(1, 5); oRange = oCell.GetRange(); oRange.InsertAfter(_T("汇流时间min")); oCell = oTable.Cell(1, 6); oRange = oCell.GetRange(); oRange.InsertAfter(_T("暴雨强度L/s/顷")); for(i=0; im_csName); csTmp.Format(_T("%.2f"), lstWell[i]->m_nPipeQ); oCell = oTable.Cell(i+2, 2); //管道流量L/s oRange = oCell.GetRange(); oRange.InsertAfter(csTmp); csTmp.Format(_T("%.0f"), lstWell[i]->m_nDang); oCell = oTable.Cell(i+2, 3); //当量长度m oRange = oCell.GetRange(); oRange.InsertAfter(csTmp); csTmp.Format(_T("%.0f"), lstWell[i]->m_nStartPress); oCell = oTable.Cell(i+2, 4); oRange = oCell.GetRange(); oRange.InsertAfter(csTmp); csTmp.Format(_T("%.2f"), lstWell[i]->m_nLost); oCell = oTable.Cell(i+2, 5); oRange = oCell.GetRange(); oRange.InsertAfter(csTmp); csTmp.Format(_T("%.2f"), lstWell[i]->m_nSpare); oCell = oTable.Cell(i+2, 6); //暴雨强度 oRange = oCell.GetRange(); oRange.InsertAfter(csTmp); } wordSelection = wordApplication.GetSelection(); wordSelection.GoTo(COleVariant((short)3), // 3 = wdGoToLine COleVariant((short)-1),vtOptional,vtOptional); // -1 = wdGoToLast wSelection = wordApplication.GetSelection(); wSelection.TypeParagraph(); } */ //将其它井加入输出列表 void GetOtherWellNode(SSearchPipeList *pListAll, DList &lstWell) { if (pListAll->m_iType == 3) { SSearchPipeList *pNodeNew = new SSearchPipeList(); pNodeNew->m_iDn = pListAll->m_iDn; pNodeNew->m_csName = pListAll->m_csName; pNodeNew->m_nLength = pListAll->m_nLength; pNodeNew->m_nPipeQ = pListAll->m_nPipeQ; pNodeNew->m_nDang = pListAll->m_nDang; pNodeNew->m_nStartPress = pListAll->m_nStartPress; pNodeNew->m_nI = pListAll->m_nI; pNodeNew->m_nV = pListAll->m_nV; pNodeNew->m_nLost = pListAll->m_nLost; pNodeNew->m_nSpare = pListAll->m_nSpare; int len = lstWell.Length(); BOOL bFlag = FALSE; for (int i = 0; i < len; i++) { if (pNodeNew->m_csName == lstWell[i]->m_csName) { bFlag = TRUE; break; } } if (!bFlag) lstWell.Append(pNodeNew); } long len = pListAll->m_lstNode.Length(); for (long i = 0; i < len; i++) { SSearchPipeList *pList = pListAll->m_lstNode[i]; GetOtherWellNode(pList, lstWell); } } //得到下一个标注节点 根据节点编号是否为空 //3个条件 SSearchPipeList *GetLongestWell(SSearchPipeList *pListAll, SSearchPipeList *pDisadvantage) { AcDbObjectId id = NULL; id = pListAll->m_ID; double nCurPipeLength(0); nCurPipeLength = pListAll->m_nLength; if (pListAll->m_csName == _T("") && pListAll->m_iType == 3) { int idx = GlobalFunc::GetFirstAncestorSerial(pListAll); if (pDisadvantage) { int idx2 = GlobalFunc::GetFirstAncestorSerial(pDisadvantage); if (idx < idx2) { //条件1: 当前节点的祖先编号小于临时节点的祖先编号 pDisadvantage = pListAll; } else if (idx == 0) { //条件2: if (pDisadvantage && nCurPipeLength > pDisadvantage->m_nLength) pDisadvantage = pListAll; } else if (idx == idx2) {//条件3: 当前节点的祖先编号等于临时节点的祖先编号, 但离起始节点最远 int iParentIdx1 = GlobalFunc::GetAncestorSerial(pListAll); int iParentIdx2 = GlobalFunc::GetAncestorSerial(pDisadvantage); if (iParentIdx1 == iParentIdx2) { if (pDisadvantage && nCurPipeLength > pDisadvantage->m_nLength) pDisadvantage = pListAll; } else if (iParentIdx1 < iParentIdx2 || iParentIdx2 == idx2) { pDisadvantage = pListAll; } } } else pDisadvantage = pListAll; //条件3: 临时节点为空 } int len = pListAll->m_lstNode.Length(); for (long i = 0; i < len; i++) { SSearchPipeList *pList = pListAll->m_lstNode[i]; pDisadvantage = GetLongestWell(pList, pDisadvantage); } return pDisadvantage; } extern BOOL SetWellData(SSearchPipeList *pListAll, BOOL bFeedSys); //主函数 /*void RainCalc() { Entity entMainPipe, entLongWell; //RBList rbMaskPipe(RTDXF0, _T("AEC_ZT_PIPE"), 8, LAY_PIPE_RAIN, NULL); RBList rbMask(RTDXF0, _T("AEC_ZT_WELL"), NULL); RBList rbMaskMain = ads_buildlist( -4, _T(""), -4, _T(""), -4, _T("or>"), NULL); if(GlobalFunc::SelectEntity(_T("\n请选择排出干管或排出井<退出>"), entMainPipe, rbMaskMain) != RTNORM) { return; } SSearchPipeList *pListAll = new SSearchPipeList(); PickSet ssAll(SS_FREE); ssAll += entMainPipe; if(!GlobalFunc::SearchSprinkPipeSys(entMainPipe, NULL, pListAll, ssAll)){ AfxMessageBox(_T("雨水系统有回路!")); delete pListAll; return; } if(!GlobalFunc::CalcLstPipeLength(pListAll, NULL, ssAll)){ AfxMessageBox(_T("雨水系统没有标注管径,请先执行命令[管径标注]")); delete pListAll; return; } if(pListAll->m_lstNode.Length() == 2 && entMainPipe.Is(_T("AEC_ZT_PIPE"))){ ssAll.Free(); //计算源头应为节点,而不是管线. 以下计算管线2节点哪个是源头 CalcWellNum(pListAll); SSearchPipeList *p1 = pListAll->m_lstNode[0]; SSearchPipeList *p2 = pListAll->m_lstNode[1]; SSearchPipeList *p3 = p1->m_iNum > p2->m_iNum ? p2 : p1; ads_name ent; acdbGetAdsName(ent, p3->m_ID); delete pListAll; pListAll = new SSearchPipeList(); //重新搜索系统 if(!GlobalFunc::SearchSprinkPipeSys(ent, NULL, pListAll, ssAll)){ AfxMessageBox(_T("雨水系统有回路!")); delete pListAll; return; } GlobalFunc::CalcLstPipeLength(pListAll, NULL, ssAll); pListAll->m_iType = GlobalFunc::GetNodeType(ent); } XPoint ptLow, ptUp; ssAll.GetExtend(ptLow, ptUp); GlobalFunc::AssureInCurrentView(ptLow, ptUp); //UpdateRainWellArea(); zxl 20131218 del 汇流面积新实体能实时更新井的汇流面积 ssAll.Redraw(3); SSearchPipeList *pNodeLong = GetLongestWell(pListAll, NULL); if(pNodeLong == NULL){ ssAll.Redraw(4); delete pListAll; return; } if(!SetWellName(pListAll)){ AfxMessageBox(_T("没有完整输入井编号!")); delete pListAll; return; } BOOL bHasArea(FALSE); SetWellArea(pListAll, bHasArea); if(!bHasArea){ AfxMessageBox(_T("没有完整输入汇流面积!")); delete pListAll; return; } if(CheckWellSys(pListAll, TRUE) == FALSE){ ssAll.Redraw(4); delete pListAll; return; } CString csDwb = g_csDwbPath + _T("TwtSys"); XString xsTmp; Entity entBlk; if(GlobalFunc::LoadDwbBlock(csDwb, _T("00000069"), xsTmp) != RTNORM ){ delete pListAll; return; } OPENOBJ_BEGIN(pNodeLong->m_ID, AcDb::kForRead, CDbPipeNode, pNode); if(pNode){ XPoint pt = pNode->GetLocation(); GlobalFunc::InsertBlock((const TCHAR*)xsTmp, asPnt3d(pt), 20*GlobalFunc::DocGetPScale(), 20*GlobalFunc::DocGetPScale(), 0, _T("0")); entBlk.GetLast(); } OPENOBJ_END(); if(GlobalFunc::SelectEntity(_T("\n请选择最远井<系统搜索>:"), entLongWell, rbMask) != RTNORM || !entLongWell.In(&ssAll)) { AcDbObjectId id = pNodeLong->m_ID; ads_name entTmp; acdbGetAdsName(entTmp, id); entLongWell = entTmp; } DoDimPipeSerialNumber(pListAll); //2008-6-5 SB 改到对话框参数实现 // ssAll.Redraw(3); // double nTime(10); // ads_getreal(_T("\n请输入最远井汇流时间<10分钟>:"), &nTime); // ssAll.Redraw(4); // GlobalFunc::WriteXdata(entLongWell, _T("TG-WELLTIME"), XString(_T("%.1f"), nTime)); pNodeLong = GetWellNode(pListAll, entLongWell, NULL); // pNodeLong->m_nLost = nTime; // ssAll.Redraw(4); entBlk.Erase(); CTemporaryResourceOverride vTemp; CCalcRainWellDlg dlg; dlg.m_pListAll = pListAll; dlg.m_ssAll += ssAll; dlg.m_pNodeLong = pNodeLong; if(dlg.DoModal() != IDOK){ delete pListAll; return; } delete pListAll; return; } */