// Plan2SysDlg.cpp : implementation file // #include "stdafx.h" #include #include #include #include #include #include #include #include "DbSymbolAnnotate.h" #include #include "twtdef.h" #include "Plan2SysDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif extern BOOL IsAppandNode(DList &lstNode, AcDbObjectId id); //extern XPoint ReadXPoint(AcDbObjectId id, const TCHAR*szName); extern void DrawFloorLine(XPoint p1, XPoint p2, const TCHAR*szPipeLayer, const TCHAR*szText, double nHeight, const TCHAR*szSerial); //*************************************************************************************************** // 生成系统管线 //*************************************************************************************************** /* //克隆的时候,把所有的附件也克隆了 //导致的后果: //如果取消系统生成,新管线删除了,而他记录的附件(实际不是他的)也被删除了 //所以这里手工把附件记录删除 TDbPipe * ClonePipe(TDbPipe *pOldPipe) { TDbPipe *pNewPipe = (TDbPipe *)pOldPipe->clone(); DList lstAttachment; pNewPipe->GetAttachments(lstAttachment); for(int n=0;nRemoveAttachment(idTmp); } return pNewPipe; } */ TPipeSys::SysType GetPipeSys(Entity ent) { OPENOBJ_BEGIN(ent, AcDb::kForRead, TDbPipe, pPipe); if(pPipe){ TPipeSys::SysType sys = pPipe->GetSysType(); return sys; } OPENOBJ_END(); return TPipeSys::kUnknownSys; } /* BOOL IsHorAngle(double nAngle) { if(nAngle >= PI*2) nAngle -= PI*2; if(fabs(nAngle) < 0.00001 || fabs(nAngle - PI) < 0.00001) return TRUE; else return FALSE; } */ AcDbObjectId GetPipeIdByEq(Entity ent) { AcDbObjectId idRet = NULL; OPENOBJ_BEGIN(ent, AcDb::kForRead, TDbEquipment, pEquip); int num = pEquip->GetInterfaceNum(); if(pEquip->GetInterfaceNum() > 0){ TPipeInterface face; pEquip->GetInterface(0, face); idRet = face.m_idPipe; } OPENOBJ_END(); return idRet; } /* CString GetSysBlockByAng(const TCHAR* szOld, double angEq, BOOL &bIsBreak) { if(_tcsicmp(szOld, _T("")) == 0) return CString(); CString csRet, csDesName, csTKName, csAllTk; XString xsTKName, xsRocord; SplitSlbName(szOld, xsTKName, xsRocord); csTKName = xsTKName; csAllTk.Format(_T("%s%s.tk"), g_csDwbPath, (const TCHAR*)xsTKName); csDesName = GetBlkDesName((const TCHAR*)xsRocord, (const TCHAR*)csAllTk); if(csDesName.Find(_T("(打断)"), 0) >= 0) // 2008-3-21 沈睿修改,默认都是打断管线 bIsBreak = TRUE; else bIsBreak = FALSE; if(csDesName.Find(_T("-"), 0) < 0) return CString(szOld); csDesName = csDesName.Right(8); // 180度 if(angEq > 2*PI) angEq -= 2*PI; else if(fabs(angEq - 2*PI) < 0.01) angEq = 0; if(angEq < (PI/2-0.00001) && (angEq > 0 || fabs(angEq) < 0.01)){ //0 csDesName = GetBlkDesName((const TCHAR*)csDesName, (const TCHAR*)csAllTk); csDesName = csDesName.Right(8); csDesName = GetBlkDesName((const TCHAR*)csDesName, (const TCHAR*)csAllTk); csDesName = csDesName.Right(8); csRet = csDesName; } else if(angEq < (PI - 0.01) && angEq >= (PI/2-0.00001)){ //90 csDesName = GetBlkDesName((const TCHAR*)csDesName, (const TCHAR*)csAllTk); csDesName = csDesName.Right(8); csDesName = GetBlkDesName((const TCHAR*)csDesName, (const TCHAR*)csAllTk); csDesName = csDesName.Right(8); csDesName = GetBlkDesName((const TCHAR*)csDesName, (const TCHAR*)csAllTk); csDesName = csDesName.Right(8); csRet = csDesName; } else if((angEq + 0.01) < PI/2*3 && (angEq > PI || fabs(angEq - PI) < 0.01)){ //180 csRet = csDesName; } else if(angEq < PI*2 && (angEq > PI/2*3 || fabs(angEq - PI/2*3) < 0.01)){ //270 csDesName = GetBlkDesName((const TCHAR*)csDesName, (const TCHAR*)csAllTk); csDesName = csDesName.Right(8); csRet = csDesName; } if(csRet != _T("")) csRet = csTKName + _T("(") + csRet + _T(")"); return csRet; } void PlanEquip2Sys(AcDbObjectId id, TDbPipe *pPipe, double nRadian, AcGeMatrix3d mat, AcGeScale3d scale) { if(!pPipe || !id) return; XPoint ptStart, ptEnd, ptNewS, ptNewE, ptInsert; double dX = scale.sx; double dY = scale.sy; double dZ = scale.sz; if(IsWell(id)) { TDbWell *pNewWell = NULL; OPENOBJ_BEGIN(id, AcDb::kForRead, TDbWell, pEquip); if(pEquip){ ptStart = pEquip->GetLocation(); pNewWell = (TDbWell *)pEquip->clone(); } OPENOBJ_END(); ptStart.TransformBy(mat); ptStart = Wcs2Ucs(ptStart); // sr 2010-1-28 modify 系统生成支持UCS ptNewS.x = ptStart.x*dX + cos(nRadian)*ptStart.y*dY; ptNewS.y = ptStart.z*dZ + sin(nRadian)*ptStart.y*dY; ptNewS = Ucs2Wcs(ptNewS); // sr 2010-1-28 modify 系统生成支持UCS pNewWell->SetLocation(ptNewS); pNewWell->SetInsert(ptNewS); pNewWell->EnableDrawLabel(FALSE); pNewWell->SetHidePipe(TRUE); // pNewWell->SetLabelLocation(ptNewS); // pNewWell->SetHidePipe(FALSE); AddToCurrentSpace(pNewWell, Adesk::kTrue); return; } XString xsTmpSys; TDbEquipment *pNewEquip = NULL; BOOL bIsBreak = TRUE; AcDbObjectId sysBlkId(NULL); CString csBlkName, csSysBlk, csDesName; int iItem; GetEquipNameById(id, csBlkName, csDesName, iItem); double angEq(0), nRotateNewEq(0), nPipeLength(0); OPENOBJ_BEGIN(id, AcDb::kForRead, TDbEquipment, pEquip); if(pEquip){ ptStart = pEquip->GetLocation(); //ptStart = pEquip->GetInsert(); ptInsert = ptStart; nPipeLength = pEquip->GetPipeLength(); AcDbObjectId idBlk = pEquip->GetBlock2d(); csBlkName = GetBlkNameById(idBlk); csSysBlk = pEquip->GetSysBlock(); angEq = pEquip->GetAngle(); if(csSysBlk == _T("") && _tcsicmp(_T("$TWTSYS$00000320"), csBlkName) == 0) return;//对于热水给水点(十字叉), 如果系统图块为空,就不生成了, 由给水生成 pNewEquip = (TDbEquipment *)pEquip->clone(); } OPENOBJ_END(); ptStart.TransformBy(mat); ptStart = Wcs2Ucs(ptStart); // sr 2010-1-28 modify 系统生成支持UCS csSysBlk = GetSysBlockByAng(csSysBlk, angEq, bIsBreak); if(LoadDwbBlock((const TCHAR*)csSysBlk, xsTmpSys) == RTNORM){ sysBlkId = GetBlkIdByName((const TCHAR*)xsTmpSys); pNewEquip->SetBlock2d(sysBlkId); } if(fabs(nPipeLength) > 0.001){ if(_tcsicmp(_T("$TWTSYS$00000128"), csBlkName) == 0){ //上下喷头 ptEnd = ptStart; ptEnd.z -= nPipeLength; ptNewS.x = ptStart.x*dX + cos(nRadian)*ptStart.y*dY; ptNewS.y = ptStart.z*dZ + sin(nRadian)*ptStart.y*dY; ptNewE.x = ptEnd.x*dX + cos(nRadian)*ptEnd.y*dY; ptNewE.y = ptEnd.z*dZ + sin(nRadian)*ptEnd.y*dY; ptNewS = Ucs2Wcs(ptNewS); // sr 2010-1-28 modify 系统生成支持UCS ptNewE = Ucs2Wcs(ptNewE); // sr 2010-1-28 modify 系统生成支持UCS TDbPipe *pNewPipe = ClonePipe(pPipe); pNewPipe->EnableDrawLabel(FALSE); pNewPipe->SetDnDiameter(25); pNewPipe->SetStartPoint(ptNewS); pNewPipe->SetEndPoint(ptNewE); pNewPipe->SetHideLevel(1); pNewPipe->SetModelType(TPipeSys::kSystem); AddToCurrentSpace(pNewPipe, Adesk::kTrue); TDbEquipment *pNewEquip2 = NULL; pNewEquip2 = (TDbEquipment *)pNewEquip->clone(); ptNewS.x = ptEnd.x*dX + cos(nRadian)*ptEnd.y*dY; ptNewS.y = ptEnd.z*dZ + sin(nRadian)*ptEnd.y*dY; ptNewS = Ucs2Wcs(ptNewS); // sr 2010-1-28 modify 系统生成支持UCS pNewEquip2->SetSysBlock(_T("")); pNewEquip2->SetHidePipe(bIsBreak); pNewEquip2->SetAngle(Ucs2Wcs(0.0));// sr 2010-1-28 modify 系统生成支持UCS pNewEquip2->SetLocation(ptNewS); pNewEquip2->SetInsert(ptNewS); AddToCurrentSpace(pNewEquip2, Adesk::kTrue); } else if(_tcsicmp(_T("$TWTSYS$00000131"), csBlkName) == 0){//侧喷头 ptEnd = ptStart; ptEnd.z += nPipeLength; ptNewS.x = ptEnd.x*dX + cos(nRadian)*ptEnd.y*dY; ptNewS.y = ptEnd.z*dZ + sin(nRadian)*ptEnd.y*dY; ptNewE = ptNewS; ptNewE.x -= nPipeLength/2;//往右画 ptNewS = Ucs2Wcs(ptNewS); // sr 2010-1-28 modify 系统生成支持UCS ptNewE = Ucs2Wcs(ptNewE); // sr 2010-1-28 modify 系统生成支持UCS // TDbPipe *pNewPipe3 = (TDbPipe *)pPipe->clone(); TDbPipe *pNewPipe3 = ClonePipe(pPipe); pNewPipe3->SetDnDiameter(25); pNewPipe3->EnableDrawLabel(FALSE); pNewPipe3->SetStartPoint(ptNewS); pNewPipe3->SetEndPoint(ptNewE); pNewPipe3->SetHideLevel(1); pNewPipe3->SetModelType(TPipeSys::kSystem); AddToCurrentSpace(pNewPipe3, Adesk::kTrue); nRotateNewEq = PI/2; } ptEnd = ptStart; ptEnd.z += nPipeLength; ptNewS.x = ptStart.x*dX + cos(nRadian)*ptStart.y*dY; ptNewS.y = ptStart.z*dZ + sin(nRadian)*ptStart.y*dY; ptNewE.x = ptEnd.x*dX + cos(nRadian)*ptEnd.y*dY; ptNewE.y = ptEnd.z*dZ + sin(nRadian)*ptEnd.y*dY; ptNewS = Ucs2Wcs(ptNewS); // sr 2010-1-28 modify 系统生成支持UCS ptNewE = Ucs2Wcs(ptNewE); // sr 2010-1-28 modify 系统生成支持UCS TDbPipe *pNewPipe = ClonePipe(pPipe); if(_tcsicmp(_T("TWTSYS(00000283)"), csSysBlk) == 0 || _tcsicmp(_T("TWTSYS(00000126)"), csSysBlk) == 0) pNewPipe->SetDnDiameter(25); pNewPipe->EnableDrawLabel(FALSE); pNewPipe->SetStartPoint(ptNewS); pNewPipe->SetEndPoint(ptNewE); pNewPipe->SetHideLevel(1); pNewPipe->SetModelType(TPipeSys::kSystem); AddToCurrentSpace(pNewPipe, Adesk::kTrue); ptStart = ptEnd; } if(nPipeLength > 0 && (_tcsicmp(_T("TWTSYS(00000283)"), csSysBlk) == 0 || _tcsicmp(_T("TWTSYS(00000126)"), csSysBlk) == 0)) nRotateNewEq = PI; pNewEquip->SetAngle(nRotateNewEq + Ucs2Wcs(0.0));// sr 2010-1-28 modify 系统生成支持UCS if(_tcsicmp(_T("$TWTSYS$00000147"), csBlkName) == 0){ //排水点 pNewEquip->SetScale(1); pNewEquip->SetYScale(1); } ptNewS.x = ptStart.x*dX + cos(nRadian)*ptStart.y*dY; ptNewS.y = ptStart.z*dZ + sin(nRadian)*ptStart.y*dY; ptNewS = Ucs2Wcs(ptNewS); // sr 2010-1-28 modify 系统生成支持UCS ptNewE = ptNewS; if(csDesName.Find(_T("消火栓")) > -1){ //消火栓 // pNewEquip->SetNumber(_T("CIRCLE-131")); pNewEquip->SetScale(1); pNewEquip->SetYScale(1); pNewEquip->SetZScale(1); bIsBreak = FALSE; //消火栓的插入基点要偏移 if(fabs(nPipeLength) > 0.001)//上接直接往上偏移131 { if(pNewEquip->IsAutoScale()) ads_polar(ptNewS, PI/2, 131*pNewEquip->GetPScale()/100, ptNewE); else ads_polar(ptNewS, PI/2, 131, ptNewE); } else{//平接,要根据接管角度而定 XPoint ptTmp; OPENOBJ_BEGIN(id, AcDb::kForRead, TDbEquipment, pEquip); if(pEquip){ int num = pEquip->GetInterfaceNum(); if(num == 1){ TPipeInterface face; pEquip->GetInterface(0, face); AcDbObjectId idPipeTmp = face.m_idPipe; OPENOBJ_BEGIN(idPipeTmp, AcDb::kForRead, TDbPipe, pPipeTmp); if(pPipeTmp){ XPoint p1 = pPipeTmp->StartPoint(); XPoint p2 = pPipeTmp->EndPoint(); XPoint p11 = p1; XPoint P22 = p2; p1.TransformBy(mat); p2.TransformBy(mat); XPoint p3, p4; p3.x = p1.x*dX + cos(nRadian)*p1.y*dY; p3.y = p1.z*dZ + sin(nRadian)*p1.y*dY; p4.x = p2.x*dX + cos(nRadian)*p2.y*dY; p4.y = p2.z*dZ + sin(nRadian)*p2.y*dY; if(p11 == ptInsert) ptTmp = p4; else if(P22 == ptInsert) ptTmp = p3; } OPENOBJ_END(); } } OPENOBJ_END(); if(!!ptTmp){//消火栓的插入基点要偏移 double dAng3 = ads_angle(ptTmp, ptNewS); ads_polar(ptNewS, dAng3, 131, ptNewE); } } } pNewEquip->SetSysBlock(_T("")); pNewEquip->SetHidePipe(bIsBreak); if(csBlkName != _T("") && _tcsicmp(_T("$TWTSYS$00000131"), csBlkName) == 0)//侧喷时多画一段小横管 { ptNewS = Wcs2Ucs(ptNewS); ptNewS.x -= nPipeLength/2; ptNewS = Ucs2Wcs(ptNewS); ptNewE = ptNewS; } pNewEquip->SetLocation(ptNewS); pNewEquip->SetInsert(ptNewE); AddToCurrentSpace(pNewEquip, Adesk::kTrue); } */ CString GetPipeLayerByVPipeLay(const TCHAR* szLayer) { CString csLayer = szLayer; CString csRet; if(csLayer == LAY_VPIPE_FEED || csLayer == LAY_PIPE_FEED) csRet = LAY_PIPE_FEED; else if(csLayer == LAY_VPIPE_HEADFEED || csLayer == LAY_PIPE_HEADFEED) csRet = LAY_PIPE_HEADFEED; else if(csLayer == LAY_VPIPE_HEADBACK || csLayer == LAY_PIPE_HEADBACK) csRet = LAY_PIPE_HEADBACK; else if(csLayer == LAY_VPIPE_DIRT || csLayer == LAY_PIPE_DIRT) csRet = LAY_PIPE_DIRT; else if(csLayer == LAY_VPIPE_USELESS || csLayer == LAY_PIPE_USELESS) csRet = LAY_PIPE_USELESS; else if(csLayer == LAY_VPIPE_RAIN || csLayer == LAY_PIPE_RAIN) csRet = LAY_PIPE_RAIN; else if(csLayer == LAY_VPIPE_USED || csLayer == LAY_PIPE_USED) csRet = LAY_PIPE_USED; else if(csLayer == LAY_VPIPE_FIRE || csLayer == LAY_PIPE_FIRE) csRet = LAY_PIPE_FIRE; else if(csLayer == LAY_VPIPE_SPRINKLE || csLayer == LAY_PIPE_SPRINKLE) csRet = LAY_PIPE_SPRINKLE; else if(csLayer == LAY_VPIPE_COAGULATE || csLayer == LAY_PIPE_COAGULATE) csRet = LAY_PIPE_COAGULATE; else if(csLayer == LAY_VPIPE_DRINK || csLayer == LAY_PIPE_DRINK) csRet = LAY_PIPE_DRINK; else if(csLayer == LAY_VPIPE_PRESSDIRT || csLayer == LAY_PIPE_PRESSDIRT) csRet = LAY_PIPE_PRESSDIRT; else if(csLayer == LAY_VPIPE_PRESSUSELESS || csLayer == LAY_PIPE_PRESSUSELESS) csRet = LAY_PIPE_PRESSUSELESS; else if(csLayer == LAY_VPIPE_PRESSRAIN || csLayer == LAY_PIPE_PRESSRAIN) csRet = LAY_PIPE_PRESSRAIN; else if(csLayer == LAY_VPIPE_OTHER || csLayer == LAY_PIPE_OTHER) csRet = LAY_PIPE_OTHER; else if(csLayer == LAY_VPIPE_FEED2 || csLayer == LAY_PIPE_FEED2) csRet = LAY_PIPE_FEED2; else if(csLayer == LAY_VPIPE_FEED3 || csLayer == LAY_PIPE_FEED3) csRet = LAY_PIPE_FEED3; else if(csLayer == LAY_VPIPE_HEADFEED2 || csLayer == LAY_PIPE_HEADFEED2) csRet = LAY_PIPE_HEADFEED2; else if(csLayer == LAY_VPIPE_HEADFEED3 || csLayer == LAY_PIPE_HEADFEED3) csRet = LAY_PIPE_HEADFEED3; else if(csLayer == LAY_VPIPE_HEADBACK2 || csLayer == LAY_PIPE_HEADBACK2) csRet = LAY_PIPE_HEADBACK2; else if(csLayer == LAY_VPIPE_HEADBACK3 || csLayer == LAY_PIPE_HEADBACK3) csRet = LAY_PIPE_HEADBACK3; else if(csLayer == LAY_VPIPE_FIRE2 || csLayer == LAY_PIPE_FIRE2) csRet = LAY_PIPE_FIRE2; else if(csLayer == LAY_VPIPE_FIRE3 || csLayer == LAY_PIPE_FIRE3) csRet = LAY_PIPE_FIRE3; else if(csLayer == LAY_VPIPE_SPRINKLE2 || csLayer == LAY_PIPE_SPRINKLE2) csRet = LAY_PIPE_SPRINKLE2; else if(csLayer == LAY_VPIPE_SPRINKLE3 || csLayer == LAY_PIPE_SPRINKLE3) csRet = LAY_PIPE_SPRINKLE3; else if(csLayer == LAY_VPIPE_USED2 || csLayer == LAY_PIPE_USED2) csRet = LAY_PIPE_USED2; else if(csLayer == LAY_VPIPE_USED3 || csLayer == LAY_PIPE_USED3) csRet = LAY_PIPE_USED3; else if(csLayer == LAY_PIPE_USER1 || csLayer == LAY_VPIPE_USER1) csRet = LAY_PIPE_USER1; else if(csLayer == LAY_PIPE_USER2 || csLayer == LAY_VPIPE_USER2) csRet = LAY_PIPE_USER2; else if(csLayer == LAY_PIPE_USER3 || csLayer == LAY_VPIPE_USER3) // cet 2011.12.12 add user3-user8 csRet = LAY_PIPE_USER3; else if(csLayer == LAY_PIPE_USER4 || csLayer == LAY_VPIPE_USER4) csRet = LAY_PIPE_USER4; else if(csLayer == LAY_PIPE_USER5 || csLayer == LAY_VPIPE_USER5) csRet = LAY_PIPE_USER5; else if(csLayer == LAY_PIPE_USER6 || csLayer == LAY_VPIPE_USER6) csRet = LAY_PIPE_USER6; else if(csLayer == LAY_PIPE_USER7 || csLayer == LAY_VPIPE_USER7) csRet = LAY_PIPE_USER7; else if(csLayer == LAY_PIPE_USER8 || csLayer == LAY_VPIPE_USER8) csRet = LAY_PIPE_USER8; return csRet; } /* AcDbObjectId PlanLabel2Sys(AcDbObjectId id, TDbPipe *pPipe) { TDbPipeLabel *pNewLabel = NULL; OPENOBJ_BEGIN(id, AcDb::kForRead, TDbPipeLabel, pLabel); pNewLabel = (TDbPipeLabel *)pLabel->clone(); OPENOBJ_END(); XPoint ptS, ptE, ptMid; ptS = pPipe->StartPoint(); ptE = pPipe->EndPoint(); XLine line(ptS, ptE, 1); line.MidPoint(ptMid); pNewLabel->SetLocation(ptMid); AcDbObjectId idNewLabel = AddToCurrentSpace(pNewLabel, Adesk::kTrue); return idNewLabel; } */ //取消自定义实体中做系统图转换,改为重新生成水箱线框. sr 20061221 void PlanWaterTank2Sys(Entity ent, double nRadian) { XPushVarStr clayer(_T("CLAYER"), LAY_TWT_WATERTANK); XPoint ptNewE, ptNewS; OPENOBJ_BEGIN(ent, AcDb::kForRead, TDbWaterTank, pTank); if(pTank){ AcDbVoidPtrArray entSet; XExplodeStream dc(entSet); pTank->ExplodeOrDraw3d(dc); int nLen=entSet.length(); for(int n=0; nisKindOf(AcDbFace::desc())) { AcDbFace *pFace = AcDbFace::cast(pEnt); XPoint p1,p2,p3,p4; pFace->getVertexAt(0, p1); pFace->getVertexAt(1, p2); pFace->getVertexAt(2, p3); pFace->getVertexAt(3, p4); ptNewS.x = p1.x + cos(nRadian)*p1.y; ptNewS.y = p1.z + sin(nRadian)*p1.y; ptNewE.x = p2.x + cos(nRadian)*p2.y; ptNewE.y = p2.z + sin(nRadian)*p2.y; XLine l1(ptNewS, ptNewE); l1.Make(); ptNewS.x = p2.x + cos(nRadian)*p2.y; ptNewS.y = p2.z + sin(nRadian)*p2.y; ptNewE.x = p3.x + cos(nRadian)*p3.y; ptNewE.y = p3.z + sin(nRadian)*p3.y; XLine l2(ptNewS, ptNewE); l2.Make(); } } ReleaseEntSet(entSet); } OPENOBJ_END(); return; } /* AcDbObjectId PlanValve2Sys(AcDbObjectId id, TDbPipe *pPipe, double nRadian, AcGeMatrix3d mat, AcGeScale3d scale) { XPoint ptStart, ptNewS; CString csSysBlk, csSysBlk2, csSysBlk3; CString csTK, csRecord; double dX = scale.sx; double dY = scale.sy; double dZ = scale.sz; TDbPipeValve *pNewValve = NULL; AcDbObjectId idBlk = NULL; double nWidth(0); OPENOBJ_BEGIN(id, AcDb::kForRead, TDbPipeValve, pValve); pNewValve = (TDbPipeValve *)pValve->clone(); idBlk = pValve->GetBlock2d(); CString csBlkName = GetBlkNameById(idBlk); SplitBlkStr(csBlkName, csTK, csRecord); nWidth = pValve->GetWidth(); csSysBlk = pValve->GetSysBlock(); ptStart = pValve->GetLocation(); OPENOBJ_END(); ptStart.TransformBy(mat); ptStart = Wcs2Ucs(ptStart); // sr 2010-1-28 modify 系统生成支持UCS ptNewS.x = ptStart.x*dX + cos(nRadian)*ptStart.y*dY; ptNewS.y = ptStart.z*dZ + sin(nRadian)*ptStart.y*dY; ptNewS = Ucs2Wcs(ptNewS); // sr 2010-1-28 modify 系统生成支持UCS pNewValve->SetLocation(ptNewS); XPoint pt1 = pPipe->StartPoint(); XPoint pt2 = pPipe->EndPoint(); double ang = ads_angle(pt1, pt2) - Ucs2Wcs(0.0);// sr 2010-1-28 modify 系统生成支持UCS pNewValve->SetSysBlock(_T("")); int idx = csSysBlk.Find(_T("-")); int idx2 = csSysBlk.Find(_T("-"), idx+1); csSysBlk3 = csSysBlk.Right(8); if(idx2 > -1)//平面阀门和系统阀门完全不一样 2005-5-31 csSysBlk2 = csSysBlk.Mid(idx+1, 8); if(!IsHorAngle(ang) && csSysBlk3 != _T("")){ if(idx < 0){ pNewValve->SetBlock2d(idBlk); pNewValve->SetWidth(nWidth); } else{ XString xsTmpSys; CString csDwb = g_csDwbPath + csTK; if(LoadDwbBlock(csDwb, (const TCHAR*)csSysBlk3, xsTmpSys) != RTNORM) return NULL; double nWidth = GetValveWidth(xsTmpSys); pNewValve->SetWidth(nWidth); AcDbObjectId recordId = GetBlkIdByName((const TCHAR*)xsTmpSys); pNewValve->SetBlock2d(recordId); } } else if(IsHorAngle(ang) && csSysBlk2 != _T("")){ XString xsTmpSys; CString csDwb = g_csDwbPath + csTK; if(LoadDwbBlock(csDwb, (const TCHAR*)csSysBlk2, xsTmpSys) != RTNORM) return NULL; double nWidth = GetValveWidth(xsTmpSys); pNewValve->SetWidth(nWidth); AcDbObjectId recordId = GetBlkIdByName((const TCHAR*)xsTmpSys); pNewValve->SetBlock2d(recordId); } AcDbObjectId idNewValve = AddToCurrentSpace(pNewValve, Adesk::kTrue); return idNewValve; } */ //extern Acad::ErrorStatus AssureInCurrentView_New(const XPoint &ptLow, const XPoint &ptUp); CString GetVPipeDimText(AcDbObjectId id) { CString csDimText; RBList rbMask(RTDXF0, _T("ATS_VPIPEDIM"), NULL); PickSet ss(SS_FREE); ss.Get(_T("X"), NULL, NULL, rbMask); long len = ss.Length(); for(long i=0;iGetVPipeId() == id) { pDim->GetDimText(csDimText); return csDimText; } } OPENOBJ_END(); } //2段立管,就找不到了 XPoint ptStart, ptEnd; OPENOBJ_BEGIN(id, AcDb::kForRead, TDbPipe, pPipe) if(pPipe){ ptStart = pPipe->StartPoint(); ptEnd = pPipe->EndPoint(); } OPENOBJ_END(); ptStart.z = 0; ptEnd.z = 0; PickSet ss2(SS_FREE); AssureInCurrentView_New(ptStart, ptEnd); GetPointPickSet(Wcs2Ucs(ptStart), ss2, rbMask); if(ss2.Length() == 1) { Entity ent = ss2[0L]; OPENOBJ_BEGIN(ent, AcDb::kForRead, TDbVPipeDim, pDim); if(pDim){ pDim->GetDimText(csDimText); return csDimText; } OPENOBJ_END(); } return csDimText; } BOOL IsOutDoorPipe(Entity ent) { BOOL bRet = FALSE; OPENOBJ_BEGIN(ent, AcDb::kForRead, TDbPipe, pPipe) if(pPipe){ AcDbObjectId id0 = pPipe->GetNode(0); AcDbObjectId id1 = pPipe->GetNode(1); BOOL b1 = FALSE; BOOL b2 = FALSE; OPENOBJ_BEGIN(id0, AcDb::kForRead, TDbWell, pEquip); if(pEquip){ b1 = TRUE; } OPENOBJ_END(); OPENOBJ_BEGIN(id1, AcDb::kForRead, TDbWell, pEquip); if(pEquip){ b2 = TRUE; } OPENOBJ_END(); if(b1 && b2) return TRUE; } OPENOBJ_END() return bRet; } // cet 2013.4.27 add 系统生成时,如果TDbEquipment对象是洁具用到的给水点, // 根据TDbEquipment的镜像,需要调整其角度,否则产生的洁具系统图有误 void UpdateSanitaryEqu(const AcDbObjectId &idEqu) { OPENOBJ_BEGIN(idEqu, AcDb::kForRead, TDbEquipment, pEqu); if (pEqu != NULL) { AcDbObjectId idBlk = pEqu->GetBlock2d(); CString sBlkName; AcDbBlockTableRecord *pRec = NULL; acdbOpenObject(pRec, idBlk, AcDb::kForRead); if (pRec != NULL) { const TCHAR *pszBlkName = NULL; pRec->getName(pszBlkName); sBlkName = pszBlkName; pRec->close(); } // 去除限制,所有给水附件和排水附件均支持镜像 zxl 2013.10.12 del // 非给水点或排水点 // if (sBlkName.CompareNoCase(_T("$TwtSys$00000225")) != 0 && sBlkName.CompareNoCase(_T("$TwtSys$00000320")) != 0 // && sBlkName.CompareNoCase(_T("$TwtSys$00000519")) != 0 && sBlkName.CompareNoCase(_T("$TwtSys$00000147")) != 0) // { // return; // } // 更加镜像设置设备角度 if (pEqu->upgradeOpen() == Acad::eOk) { double dAngle = pEqu->GetAngle(); // x轴镜像 if (pEqu->IsMirrorByX()) { dAngle += PI; pEqu->MirrorByX(FALSE); } // y轴镜像 if (pEqu->IsMirrorByY()) { dAngle += PI; pEqu->MirrorByY(FALSE); } pEqu->SetAngle(dAngle); pEqu->downgradeOpen(); } } OPENOBJ_END(); } // zxl 2013.07.16 add 系统生成显示井编号 void SetWellDimShow(Entity entWell, const AcDbObjectId idWellOld) { AcGeVector3d vtDim; OPENOBJ_BEGIN(idWellOld, AcDb::kForRead, TDbEquipment, pEqu); if (pEqu != NULL) { if (pEqu->isKindOf(TDbWell::desc())) { TDbWell *pWell = (TDbWell *)pEqu; XPoint ptDim = pWell->GetLabelLocation(); XPoint ptLoc = pWell->GetLocation(); vtDim = ptDim - ptLoc; } } OPENOBJ_END(); OPENOBJ_BEGIN(entWell, AcDb::kForWrite, AcDbEntity, pEnt); if(pEnt != NULL) { if (pEnt->isKindOf(TDbWell::desc())) { TDbWell *pWell = (TDbWell *)pEnt; pWell->EnableDrawLabel(TRUE); XPoint ptLoc = pWell->GetLocation(); pWell->SetLabelLocation(ptLoc + vtDim); } } OPENOBJ_END(); } void BuildSysPipe() { CTemporaryResourceOverride vTemp; CPlan2SysDlg dlg; if(dlg.DoModal() != IDOK) return; int nOsMode=0; xg_getvar(_T("OSMODE"), &nOsMode); nOsMode &= ~0x4000; nOsMode |= OS_INT|OS_NEA|OS_PER|OS_END|OS_CEN; XPushVar vOsMode(_T("OSMODE"), nOsMode); XPoint ptIns; xg_getvar(_T("VIEWCTR"), ptIns); ptIns = Ucs2Wcs(ptIns); ptIns.z = 0; CString csPipeLayer = GetPipeLayerByIdx(dlg.m_iPipeType); double nSysAng = _tstof(dlg.m_csAngle); double nRadian = nSysAng/180.0*PI; XPoint ptVerticalS, ptVerticalE; XPoint ptStart, ptEnd, ptNewS, ptNewE; PickSet ssNew(SS_FREE); ssNew.IncludeBegin(); double nCountHeight(0); int iFloorIdx = 0; CString csFloorName = dlg.m_csFloorPostfixName; //楼层名后缀,1F 1层 1楼 int iFirstFloor = dlg.m_iFirstFloor; CString csBasementName = dlg.m_csBasementName; XPointList lstHasDimedPt;//已经标注的点 DList lstFloorDimed; //已经标注过的楼层线 //---------- 每个不同的楼层 ------------------------ for(dlg.m_grid.MoveToFirst(); !dlg.m_grid.IsOut(); dlg.m_grid.MoveToNext()){ WDGridRow *pRow = dlg.m_grid.CurRow(); double nFloorHeight(0); CString csHeight = (*pRow)[2].GetText().cs(); nFloorHeight = _tstof(csHeight); CString csNum = (*pRow)[1].GetText().cs(); int iFloorNum = _ttoi(csNum); TGridFloorData *pNewData = (TGridFloorData *)pRow->GetExtendData(); if(pNewData == NULL) continue; XPoint ptBase = pNewData->m_ptBase; int length = pNewData->m_lstId.Length(); //---------- 标准层 ------------------------ for(int m=0;m lstNode; //首先找到y坐标最大的管线 double nBigY(0); for(int i=0;im_lstId[i]; OPENOBJ_BEGIN(id, AcDb::kForRead, TDbPipe, pPipe); if(pPipe){ XPoint ptMid = pPipe->MidPoint(); if(ptMid.y > nBigY || fabs(nBigY) < 0.001){ nBigY = ptMid.y; } } OPENOBJ_END(); } for(i=0;im_lstId[i]; Entity entSel; ads_name entTmp; acdbGetAdsName(entTmp, id); entSel = entTmp; OPENOBJ_BEGIN(id, AcDb::kForRead, TDbPipe, pPipe); if(!pPipe || pPipe->GetModelType() == TPipeSys::kSystem) //系统管线不理会 continue; if(pPipe->IsVertical()){//楼层立管, 读立管编号 csSerial = ReadXdata(entSel, _T("PIPE-SERIAL")); } TPipeSys::SysType sysType = pPipe->GetSysType(); ptStart = pPipe->StartPoint(); ptEnd = pPipe->EndPoint(); if(ptStart == ptEnd) continue; TDbPipe *pNewPipe = ClonePipe(pPipe); AcGeMatrix3d mat; mat.setToTranslation(vectTmp); pNewPipe->transformBy(mat); ptStart = pNewPipe->StartPoint(); ptEnd = pNewPipe->EndPoint(); ptStart = Wcs2Ucs(ptStart);// sr 2010-1-28 modify 系统生成支持UCS ptEnd = Wcs2Ucs(ptEnd); // sr 2010-1-28 modify 系统生成支持UCS if(pPipe->IsVertical() && csSerial != _T("")){//楼层立管, 如果立管标高为3000,则按对话框定义的楼层高度 if(fabs(ptEnd.z - 3000) < 0.001) ptEnd.z = nFloorHeight; } if(!pPipe->IsVertical()) { if(IsOutDoorPipe(entSel)) { ptStart.z = 0; //把室外横管z坐标置零 sr 2008-2-25 ptEnd.z = 0; } } ptNewS.x = ptStart.x*dlg.m_dX + cos(nRadian)*ptStart.y*dlg.m_dY; ptNewS.y = ptStart.z*dlg.m_dZ + sin(nRadian)*ptStart.y*dlg.m_dY; ptNewE.x = ptEnd.x*dlg.m_dX + cos(nRadian)*ptEnd.y*dlg.m_dY; ptNewE.y = ptEnd.z*dlg.m_dZ + sin(nRadian)*ptEnd.y*dlg.m_dY; ptNewS = Ucs2Wcs(ptNewS);// sr 2010-1-28 modify 系统生成支持UCS ptNewE = Ucs2Wcs(ptNewE);// sr 2010-1-28 modify 系统生成支持UCS ////////////////////////////////////////////////////////////////////////////////////////////////// //如果是立管,要进行楼层线绘制 if(pPipe->IsVertical() && csSerial != _T("") && dlg.m_bFloor && iFloorNum > 0){ XPoint ptFloorS, ptFloorE, ptFloorBase, ptFloorTmp; ptFloorTmp = ptStart; ptFloorTmp.z =0; ptFloorBase.x = ptFloorTmp.x*dlg.m_dX + cos(nRadian)*ptFloorTmp.y*dlg.m_dY; ptFloorBase.y = ptFloorTmp.z*dlg.m_dZ + sin(nRadian)*ptFloorTmp.y*dlg.m_dY; ptFloorBase = Ucs2Wcs(ptFloorBase);// sr 2010-1-28 modify 系统生成支持UCS double dFloorLen = 10; CString csText; if(dlg.m_bFloorName) { dFloorLen += 10; int iCurFloor = iFloorIdx+iFirstFloor; if((iFloorIdx <= abs(iFirstFloor) && iFirstFloor < 0) || iFirstFloor > 0) iCurFloor -= 1; if(iCurFloor < 0) csText.Format(_T("%s%d%s"), csBasementName, abs(iCurFloor), csFloorName); else csText.Format(_T("%d%s"), iCurFloor, csFloorName); } double dEle(-999); if(dlg.m_bFloorHeight){ dFloorLen += 10; dEle = (nCountHeight/dlg.m_dZ + dlg.m_dFisrtEle)/1000; } ads_polar(ptFloorBase, PI+Ucs2Wcs(0.0), dFloorLen*DocGetPScale(), ptFloorS); ads_polar(ptFloorBase, 0+Ucs2Wcs(0.0), 5*DocGetPScale(), ptFloorE); //先判断一下是否标注过了(立管被支管打断后,会标注多次) BOOL bFloorDimed = FALSE; for(int mm=0;mmm_ptStart == ptFloorS && pData->m_ptEnd == ptFloorE && pData->m_csText == csText) { bFloorDimed = TRUE; break; } } if(!bFloorDimed) { SFloorLine *pData = new SFloorLine; pData->m_csText = csText; pData->m_ptStart = ptFloorS; pData->m_ptEnd = ptFloorE; lstFloorDimed.Append(pData); if (dlg.m_bIsSingleSys)// zxl 2013.05.28 add 单层系统 { if (dlg.m_bFloorName) { csText = dlg.m_csFloorName; } else { csText = _T(""); } if (dlg.m_bFloorHeight) { dEle = dlg.m_dEle;; } } DrawFloorLine(ptFloorS, ptFloorE, csPipeLayer, csText, dEle, csSerial); } if(!lstHasDimedPt.FindPoint(ptFloorTmp)) {//防止2根同层立管重复标注 lstHasDimedPt.NewAppend(ptFloorTmp); if(m == 0) { XPoint ptTurn; CString csDim = GetVPipeDimText(id); if(csDim != _T("")) { ads_polar(ptFloorBase, PI/4+Ucs2Wcs(0.0), 10*DocGetPScale(), ptTurn); //标注立管 CString csDimLay = GetDimLayBySys(sysType); TDbSymbComposing *pDim = new TDbSymbComposing; pDim->setLayer(InitLayer(csDimLay)); pDim->SetLayoutRotation(Ucs2Wcs(0.0)); pDim->SetStartPoint(ptFloorBase); pDim->SetTurnPoint(ptTurn); pDim->SetText(csDim); pDim->SetSideText(0); pDim->SetTextStyleId(InitTwtTextStyle(g_csVPipeStyle)); pDim->SetTextLayerId(InitLayer(LAY_TEXT)); pDim->SetTextHeight(g_nVPipeHeight); pDim->SetTextBaseLen(pDim->GetDefaultTextBaseLen()*1.2); pDim->SetPageWidth(pDim->GetDefaultTextBaseLen()); pDim->AddToCSpace(Adesk::kTrue); Entity entLast2; entLast2.GetLast(); OPENOBJ_BEGIN(entLast2, AcDb::kForWrite, TDbEntity, pEnt) if(pEnt){ pEnt->setLayer(csDimLay); } OPENOBJ_END() } } } } ////////////////////////////////////////////////////////////////////////////////////////////////// //根据平面管线中点的y坐标,决定遮挡先后系数 XPoint ptMid = pPipe->MidPoint(); double nLevel = (nBigY - ptMid.y)/100; int iLevel = int(nLevel); pNewPipe->SetHideLevel(iLevel); pNewPipe->SetStartPoint(ptNewS); pNewPipe->SetEndPoint(ptNewE); pNewPipe->SetModelType(TPipeSys::kSystem); if(pPipe->IsVertical()){ //通过立管得到横管的图层,然后得到横管的线形 TCHAR *szLayer = pPipe->layer(); CString csLayer; csLayer = GetPipeLayerByVPipeLay(szLayer); delete [] szLayer; if(csLayer == _T("")) csLayer = szLayer; InitPipeLayer(csLayer); pNewPipe->setLayer(csLayer); pNewPipe->setLinetype(GetPipeWireLayLineType(csLayer)); pNewPipe->SetPipeGradient(0); } AddToCurrentSpace(pNewPipe, Adesk::kTrue); Entity entLast; entLast.GetLast(); XString xsTmp(_T("%.3f"), ptStart.z/1000 + (nCountHeight + dlg.m_dFisrtEle)/1000); WriteXdata(entLast, _T("TG-ELEVATION"), (const TCHAR*)xsTmp); if(csSerial != _T("")) WriteXdata(entLast, _T("PIPE-SERIAL"), (const TCHAR*)csSerial); //阀门阀件, 标注 DList lstAttachment; pPipe->GetAttachments(lstAttachment); int leng = lstAttachment.Length(); for(int m=0;mGetNode(0); nodeId2 = pPipe->GetNode(1); if(IsAppandEquip(lstNode, nodeId1)) { UpdateSanitaryEqu(nodeId1); // cet 2013.4.27 add 当node1为给水点时,根据其是否镜像,需调整其角度 PlanEquip2Sys(nodeId1, pPipe, nRadian, mat, AcGeScale3d(dlg.m_dX, dlg.m_dY, dlg.m_dZ)); // zxl 2013.07.16 add 显示井编号 Entity entWell; entWell.GetLast(); if (entWell.Is(_T("ATS_WELL"))) { SetWellDimShow(entWell, nodeId1); } } if(IsAppandEquip(lstNode, nodeId2)) { UpdateSanitaryEqu(nodeId2); // cet 2013.4.27 add 当node1为给水点时,根据其是否镜像,需调整其角度 PlanEquip2Sys(nodeId2, pPipe, nRadian, mat, AcGeScale3d(dlg.m_dX, dlg.m_dY, dlg.m_dZ)); // zxl 2013.07.16 add 显示井编号 Entity entWell; entWell.GetLast(); if (entWell.Is(_T("ATS_WELL"))) { SetWellDimShow(entWell, nodeId2); } } OPENOBJ_END(); } ////////////////////////////////////////////////////////////////////////////////////////////////// //每层图元绘制完毕后自动向上偏移楼层高度 ssNew2.IncludeEnd(); XPoint ptNewIns; ads_polar(ptIns, PI/2+Ucs2Wcs(0.0), nCountHeight, ptNewIns);// sr 2010-1-28 modify 系统生成支持UCS AcGeVector3d vectTmp2(ptNewIns.x - ptIns.x, ptNewIns.y - ptIns.y, 0); AcGeMatrix3d mat; mat.setToTranslation(vectTmp2); long len2 = ssNew2.Length(); for(long j=0;jtransformBy(mat); // if(pEnt->isKindOf(TDbEntity::desc())){ // TDbEntity *pTg = TDbEntity::cast(pEnt); // pTg->SetPScale(DocGetPScale()); // } // else if(pEnt->isKindOf(TDbCurveEntity::desc())){ // TDbCurveEntity *pTg = TDbCurveEntity::cast(pEnt); // pTg->SetPScale(DocGetPScale()); // } } OPENOBJ_END(); } ////////////////////////////////////////////////////////////////////////////////////////////////// nCountHeight += nFloorHeight*dlg.m_dZ; //楼层标高增加一楼 } } TPipePerDocData *pData = GetCurPipeDocData(); pData->ApplyUpdates(); //2009-2-12 sr加,有些管线遮挡的长度计算错误,如果连井的管线 ssNew.IncludeEnd(); if(ssNew.Length() < 1) return; //2006-4-28日添加, 在立管上有阀门的时候, 生成系统阀门GetExtend出错,导致ptIns点错误 PickSet ssNew3(SS_FREE); long len3 = ssNew.Length(); for(long j=0;jflushGraphics(); //acad 刷新 ptIns = Wcs2Ucs(ptIns); ptIns.z =0; XPoint xp; int nRet = DragMovePickSet(ssNew, _T("\n请点取系统图位置<退出>: "), ptIns, xp); if(nRet != RTNORM){ ssNew.Erase(); return; } ssNew.Redraw(1); } //*************************************************************************************************** // 水箱系统 //*************************************************************************************************** void Plan2SysWaterTank() { RBList rbMask = ads_buildlist( -4, _T(""), -4, _T(""), -4, _T("or>"), NULL); PickSet ss(SS_FREE), ssNew(SS_FREE); if(SelectEntities(_T("\n选择自动生成系统图的所有平面图管线和水箱<退出>:"), ss, rbMask) != RTNORM) return; XPoint ptVerticalS, ptVerticalE; ssNew.IncludeBegin(); XPoint ptPick, ptPick2, ptStart, ptEnd, ptNewS, ptNewE; double nRadian = 45.0/180.0*PI; long len = ss.Length(); DList lstNode; for(long i=0;iGetModelType() == TPipeSys::kSystem) //系统管线不理会 continue; TDbPipe *pNewPipe = ClonePipe(pPipe); if(pPipe->IsVertical()){ csSerial = ReadXdata(entSel, _T("PIPE-SERIAL")); pNewPipe->SetHideLevel(100); ptVerticalS = ptNewS; ptVerticalE = ptNewE; } else{ pNewPipe->SetHideLevel(int(ptStart.z/1000*10)); //设置遮挡关系,把平面图标高转为米×10 } pNewPipe->SetStartPoint(ptNewS); pNewPipe->SetEndPoint(ptNewE); pNewPipe->SetModelType(TPipeSys::kSystem); AddToCurrentSpace(pNewPipe, Adesk::kTrue); Entity entLast; entLast.GetLast(); XString xsTmp(_T("%.3f"), ptStart.z/1000); WriteXdata(entLast, _T("TG-ELEVATION"), (const TCHAR*)xsTmp); if(csSerial != _T("")) WriteXdata(entLast, _T("PIPE-SERIAL"), (const TCHAR*)csSerial); //阀门阀件 DList lstAttachment; pPipe->GetAttachments(lstAttachment); int leng = lstAttachment.Length(); AcGeMatrix3d mat; for(int m=0;mGetNode(0); nodeId2 = pPipe->GetNode(1); if(IsAppandEquip(lstNode, nodeId1)){ PlanEquip2Sys(nodeId1, pPipe, nRadian, mat, AcGeScale3d(1, 1, 1)); } if(IsAppandEquip(lstNode, nodeId2)){ PlanEquip2Sys(nodeId2, pPipe, nRadian, mat, AcGeScale3d(1, 1, 1)); } OPENOBJ_END(); } ssNew.IncludeEnd(); int nOsMode=0; xg_getvar(_T("OSMODE"), &nOsMode); nOsMode &= ~0x4000; nOsMode |= OS_INT|OS_END|OS_NEA|OS_MID; XPushVar vOsMode(_T("OSMODE"), nOsMode); double x,y,z; XPoint ptIns; ssNew.Redraw(2); ssNew.GetExtend(ptIns, &x, &y, &z); actrTransactionManager->flushGraphics(); //acad 刷新 ptIns = Wcs2Ucs(ptIns); XPoint xp; int nRet = DragMovePickSet(ssNew, _T("\n请点取系统图位置<退出>: "), ptIns, xp); if(nRet != RTNORM){ ssNew.Erase(); return; } ssNew.Redraw(1); } ///////////////////////////////////////////////////////////////////////////// // CPlan2SysDlg dialog TGridFloor::TGridFloor() { AppendCol(_T("楼层"), 30); AppendCol(_T("标准层数"), 50); AppendCol(_T("层高"), 50); AppendCol(_T("位置")); SetColPosFix(); SetColFixLength(); SetNoPaste(); FitLastCol(); GetCol(3).SetRightButton(); m_iPipeType = 0; COLORREF color = RGB(255,0,0); GetCol(3).SetTextColor(color); } Entity GetVertPipeByPt(XPoint pt) { RBList rbMaskPipe(RTDXF0, _T("ATS_PIPE"), 8, GetLayerNames(_T("管")), NULL); PickSet ss(SS_FREE); XPoint ptUcs = Wcs2Ucs(pt); GetPointPickSet(ptUcs, ss, rbMaskPipe, int(DocGetPScale())); pt.z = 0; for(long i=0;iIsVertical()){ XPoint ptTmp = pPipe->StartPoint(); ptTmp.z = 0; if(pt == ptTmp) return entPipe; } OPENOBJ_END(); } return Entity(); } extern CString GetVPipeLayerByIdx(int iLayer); bool TGridFloor::OnCellButtonDown(WDGridCell &cell, CString &res) { if(cell.GetColIndex() == 3) { CPlan2SysDlg *pDlg=(CPlan2SysDlg*)GetParent(); int ret(0); CString csLay; PickSet ss(SS_FREE); // if(m_iPipeType == 17){//多系统 if(m_iPipeType == 1000){ // 多系统 cet 2011.12.8 modify csLay = pDlg->GetMutiSysLayer(); if(csLay == _T(""))//用户没有选择任何系统 return true; RBList rbMask=ads_buildlist( -4, _T(""), -4, _T("or>"), NULL); HideDialog(this->GetParent(), TRUE); ret = SelectEntities(_T("\n选择自动生成系统图的所有平面图管线<退出>:"), ss, rbMask); } else{ CString csPipeLayer, csVPipeLayer; pDlg->GetSingleSysLayer(csPipeLayer, csVPipeLayer); RBList rbMask=ads_buildlist( -4, _T(""), -4, _T(""), -4, _T("or>"), NULL); HideDialog(this->GetParent(), TRUE); ret = SelectEntities(_T("\n选择自动生成系统图的所有平面图管线<退出>:"), ss, rbMask); } XPoint pt; int nOsMode = OS_INT|OS_END|OS_CEN; XPushVar vOsMode(_T("OSMODE"), nOsMode); if(ret != RTNORM || ss.Length() < 1){ HideDialog(this->GetParent(), FALSE); return true; } if(ads_getpoint(NULL, _T("\n请点取基点(建议是连接各楼层的立管)<退出>:"), pt) != RTNORM){ HideDialog(this->GetParent(), FALSE); return true; } pt = Ucs2Wcs(pt); long len = ss.Length(); TGridFloorData *pNewData = new TGridFloorData(); pt.z = 0; pNewData->m_ptBase = pt; for(long i=0;im_lstId.Append(new AcDbObjectId(id)); } HideDialog(this->GetParent(), FALSE); WDGridRow &row = cell.GetRow(); row[3].SetText(_T("已框选")); row.SetExtendData(pNewData); Refresh(); res=(const TCHAR*)cell; return true; } return false; } extern BOOL GetLayerReMark(const TCHAR *szLayer, CString &sRemark); // cet 2011.12.8 add extern void GetLayerPipeName(std::map &mapLayerPipeName); // cet 2011.12.12 add int CPlan2SysDlg::m_iPipeType = 0; BOOL CPlan2SysDlg::m_bFloor = FALSE; CString CPlan2SysDlg::m_csFloorName = _T("1层"); CString CPlan2SysDlg::m_csBaseEle = _T("±0"); CPlan2SysDlg::CPlan2SysDlg(CWnd* pParent /*=NULL*/) : CDialog(CPlan2SysDlg::IDD, pParent) { //{{AFX_DATA_INIT(CPlan2SysDlg) m_csAngle = _T("45"); m_bFloorHeight = FALSE; m_bFloorName = FALSE; m_bCivicismWater = FALSE; m_bCyclleWater = FALSE; m_dX = 1; m_dY = 1; m_dZ = 1; m_bLQ = FALSE; m_bQTMH = FALSE; m_bSJ = FALSE; m_bTQ = FALSE; m_bYL2 = FALSE; m_bZQ = FALSE; //}}AFX_DATA_INIT m_bHideDlg = TRUE; m_csFloorPostfixName = _T("层"); //楼层名后缀,1F 1层 1楼 m_iFirstFloor = 1; m_csBasementName = _T(""); m_dFisrtEle = 0; m_dEle = 0; m_bIsSingleSys = false;// zxl 2013.05.28 add } void CPlan2SysDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CPlan2SysDlg) DDX_Control(pDX, IDC_COMBO_TYPE, m_comboType); DDX_CBString(pDX, IDC_COMBO_ANGLE, m_csAngle); DDX_Check(pDX, IDC_CHECK_FL, m_bFL); DDX_Check(pDX, IDC_CHECK_HL, m_bHL); DDX_Check(pDX, IDC_CHECK_JL, m_bJL); DDX_Check(pDX, IDC_CHECK_RHL, m_bRHL); DDX_Check(pDX, IDC_CHECK_RJL, m_bRJL); DDX_Check(pDX, IDC_CHECK_WL, m_bWL); DDX_Check(pDX, IDC_CHECK_XL, m_bXL); DDX_Check(pDX, IDC_CHECK_YL, m_bYL); DDX_Check(pDX, IDC_CHECK_ZL, m_bZL); DDX_Check(pDX, IDC_CHECK_DRINK, m_bDrink); DDX_Check(pDX, IDC_CHECK_OTHER, m_bOther); DDX_Check(pDX, IDC_CHECK_PRESSDIRT, m_bPressDirt); DDX_Check(pDX, IDC_CHECK_PRESSRAIN, m_bPressRain); DDX_Check(pDX, IDC_CHECK_PRESSUSELESS, m_bPressUseless); DDX_Check(pDX, IDC_CHECK_COAGULATE, m_bCoagulate); DDX_Check(pDX, IDC_CHECK_FLOORHEIGHT, m_bFloorHeight); DDX_Check(pDX, IDC_CHECK_FLOORNAME, m_bFloorName); DDX_Check(pDX, IDC_CHK_CIVICISMWATER, m_bCivicismWater); DDX_Check(pDX, IDC_CHK_CYCLEWATER, m_bCyclleWater); DDX_Text(pDX, IDC_EDIT_X, m_dX); DDX_Text(pDX, IDC_EDIT_Y, m_dY); DDX_Text(pDX, IDC_EDIT_Z, m_dZ); DDX_CBString(pDX, IDC_COMBO_FLOORNAME, m_csFloorName); DDX_Check(pDX, IDC_CHECK_FLOOR, m_bFloor); DDX_Text(pDX, IDC_EDIT_BASEELE, m_csBaseEle); DDX_Check(pDX, IDC_CHECK_LQ, m_bLQ); DDX_Check(pDX, IDC_CHECK_QTMH, m_bQTMH); DDX_Check(pDX, IDC_CHECK_SJ, m_bSJ); DDX_Check(pDX, IDC_CHECK_TQ, m_bTQ); DDX_Check(pDX, IDC_CHECK_YL2, m_bYL2); DDX_Check(pDX, IDC_CHECK_ZQ, m_bZQ); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CPlan2SysDlg, CDialog) //{{AFX_MSG_MAP(CPlan2SysDlg) ON_CBN_SELCHANGE(IDC_COMBO_TYPE, OnSelchangeComboType) ON_BN_CLICKED(IDC_BUTTON_ADD, OnButtonAdd) ON_BN_CLICKED(IDC_BUTTON_DEL, OnButtonDel) ON_BN_CLICKED(IDC_BUTTON_SINGLE, OnButtonSingle) ON_BN_CLICKED(IDC_CHECK_FLOOR, OnCheckFloor) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CPlan2SysDlg message handlers // 获取当前层标高 zxl 2013.05.27 add double CPlan2SysDlg::GetCurEle() { double dEle = _tstof(m_csBaseEle); double dFloor = 0; if(m_bFloor) { // 1.0 得到后缀 int idx1 = -1; if(m_csFloorName.Find(_T("F")) > -1) { idx1 = m_csFloorName.Find(_T("F")); m_csFloorPostfixName = _T("F"); } else if(m_csFloorName.Find(_T("楼")) > -1) { idx1 = m_csFloorName.Find(_T("楼")); m_csFloorPostfixName = _T("楼"); } else { idx1 = m_csFloorName.Find(_T("层")); } int idx2 = -1; // 2.0 得到前缀 if(m_csFloorName.Find(_T("-")) > -1) { idx2 = m_csFloorName.Find(_T("-")); m_csBasementName = _T("-"); } else if(m_csFloorName.Find(_T("地下")) > -1) { idx2 = m_csFloorName.Find(_T("地下")); m_csBasementName = _T("地下"); } // 3.0 如果有地下,看看是从几层开始 if(idx2 > -1) { int iLen = (int)_tcslen(m_csBasementName); CString csTmp = m_csFloorName.Mid(idx2+iLen, 1); dFloor = -_ttoi(csTmp); } else if(idx1 > -1) { CString csTmp = m_csFloorName.Mid(idx1-1, 1); dFloor = _ttoi(csTmp); } if (dFloor < 0) { double dBasementHeight(0); double dEleOld = dEle; m_grid.Refresh(); for(m_grid.MoveToFirst(); !m_grid.IsOut(); m_grid.MoveToNext()) { WDGridRow *pRow = m_grid.CurRow(); double nFloorHeight(0); CString csNum = (*pRow)[1].GetText().cs(); CString csHeight = (*pRow)[2].GetText().cs(); nFloorHeight = _tstof(csHeight) / 1000; int iFloorNum = _ttoi(csNum); for(int m=0;m= 0) { break; } } if (dFloor >= 0) { break; } } if (dFloor < 0) { return dEleOld; } } else { return dEle; } } return dEle; } BOOL CPlan2SysDlg::OnInitDialog() { CDialog::OnInitDialog(); /* cet 2011.12.8 modify m_comboType.AddString(g_csPipeName[0]); m_comboType.AddString(g_csPipeName[1]); m_comboType.AddString(g_csPipeName[2]); m_comboType.AddString(g_csPipeName[3]); m_comboType.AddString(g_csPipeName[4]); m_comboType.AddString(_T("其它")); m_comboType.AddString(g_csPipeName[5]); m_comboType.AddString(g_csPipeName[6]); m_comboType.AddString(_T("多系统")); */ InitCmbPipeSysType(); m_grid.Clear(); m_grid.Create(this, IDC_LIST_LAYER); m_grid.FitLastCol(); m_grid.m_iPipeType = m_iPipeType; if(!ReadFloorInfo()){ m_grid.AppendRow(); m_grid.GetCell(0, 0).SetText(_T("1层")); m_grid.GetCell(0, 1).SetText(_T("1")); m_grid.GetCell(0, 2).SetText(_T("3000")); m_grid.GetCell(0, 3).SetText(_T("未指定")); } CRect rect; // if(m_iPipeType != 17){ // cet 2011.12.8 modify if(m_iPipeType != 1000){ this->GetWindowRect(&rect); //rect.bottom -= 110; // cet 2011.12.8 modify rect.bottom -= 150; this->MoveWindow(&rect); m_bHideDlg = TRUE; } else m_bHideDlg = FALSE; m_grid.SetNoAppendButton(TRUE); m_grid.SetNoDefaultMenu(true); m_grid.Refresh(); InitCheckBoxName(); //cet 2009.12.29 add UpdateData(FALSE); OnCheckFloor(); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CPlan2SysDlg::OnSelchangeComboType() { UpdateData(TRUE); // m_grid.m_iPipeType = m_iPipeType; cet 2011.12.8 del CString csSel; //m_comboType.GetLBText(m_iPipeType, csSel); m_comboType.GetWindowText(csSel); std::map::iterator it; it = m_mapPipeLayerSysType.find(csSel); if (it == m_mapPipeLayerSysType.end()) { return; } m_iPipeType = it->second; m_grid.m_iPipeType = m_iPipeType; CRect rect; this->GetWindowRect(&rect); if(csSel == _T("多系统")){ if(m_bHideDlg){ //rect.bottom += 110; rect.bottom += 150; // cet 2011.12.8 modify this->MoveWindow(&rect); m_bHideDlg = FALSE; } } else{ if(!m_bHideDlg){ //rect.bottom -= 110; rect.bottom -= 150; // cet 2011.12.8 modify this->MoveWindow(&rect); m_bHideDlg = TRUE; } } } void CPlan2SysDlg::OnButtonAdd() { m_grid.AppendRow(); int idx = m_grid.GetRowNum(); m_grid.GetCell(idx-1, 0).SetText(XString(_T("%d层"), idx)); m_grid.GetCell(idx-1, 1).SetText(_T("1")); m_grid.GetCell(idx-1, 2).SetText(_T("3000")); m_grid.GetCell(idx-1, 3).SetText(_T("未指定")); } void CPlan2SysDlg::OnButtonDel() { long idx = m_grid.GetCurRowIndex(); if(idx < 0){ MessageBox(_T("没有选中的行!请点击表格左侧的行标!")); return; } m_grid.DelRow(idx); } void CPlan2SysDlg::OnOK() { UpdateData(TRUE); m_bIsSingleSys = false;// zxl 2013.05.28 add int num = m_grid.GetRowNum(); if(num == 1){ m_grid.MoveToFirst(); WDGridRow *pRow = m_grid.CurRow(); TGridFloorData *pNewData = (TGridFloorData *)pRow->GetExtendData(); if(pNewData == NULL){ MessageBox(_T("没有选择要生成的平面图!点击“位置”右侧按钮。\n")); return; } } SaveFloorInfo(); ////////////////////////////////////////////////////////////////////////////////////////////////////// if(m_bFloor){ // 1.0 得到后缀 int idx1 = -1; if(m_csFloorName.Find(_T("F")) > -1) { idx1 = m_csFloorName.Find(_T("F")); m_csFloorPostfixName = _T("F"); } else if(m_csFloorName.Find(_T("楼")) > -1) { idx1 = m_csFloorName.Find(_T("楼")); m_csFloorPostfixName = _T("楼"); } else { idx1 = m_csFloorName.Find(_T("层")); } int idx2 = -1; // 2.0 得到前缀 if(m_csFloorName.Find(_T("-")) > -1) { idx2 = m_csFloorName.Find(_T("-")); m_csBasementName = _T("-"); } else if(m_csFloorName.Find(_T("地下")) > -1) { idx2 = m_csFloorName.Find(_T("地下")); m_csBasementName = _T("地下"); } // 3.0 如果有地下,看看是从几层开始 if(idx2 > -1) { int iLen = (int)_tcslen(m_csBasementName); CString csTmp = m_csFloorName.Mid(idx2+iLen, 1); m_iFirstFloor = -_ttoi(csTmp); } else if(idx1 > -1) { CString csTmp = m_csFloorName.Mid(idx1-1, 1); m_iFirstFloor = _ttoi(csTmp); } // 4.0 计算起始标高 m_dFisrtEle = _tstof(m_csBaseEle)*1000; double dFirstTmp = m_dFisrtEle; if(m_iFirstFloor < 1) { int iBasementNum(0); double dBasementHeight(0); for(m_grid.MoveToFirst(); !m_grid.IsOut(); m_grid.MoveToNext()){ WDGridRow *pRow = m_grid.CurRow(); double nFloorHeight(0); CString csHeight = (*pRow)[2].GetText().cs(); nFloorHeight = _tstof(csHeight); CString csNum = (*pRow)[1].GetText().cs(); int iFloorNum = _ttoi(csNum); for(int m=0;m 0.001) break; } } } CDialog::OnOK(); } BOOL CPlan2SysDlg::ReadFloorInfo() { XStringList lstHis; TCHAR strTmpPath[100] = _T(""); GetTempPath(100, strTmpPath); _tcscat(strTmpPath, _T("sysfloor.his")); FILE *fp=fopen(_AS(strTmpPath), "r"); if(!fp) return FALSE; while(!feof(fp)) { char sBuf[256]=""; fgets(sBuf, 255, fp); CString csTmp = sBuf; csTmp.TrimRight(); if(csTmp != _T("")) lstHis.Append(tstrnew(csTmp)); } fclose(fp); int len = lstHis.Length(); if(len < 1) return FALSE; for(int i=0;i"), -4, _T("or>"), NULL); SelectEntities(_T("\n选择自动生成系统图的所有平面图管线<退出>:"), ss, rbMask); } else{ CString csPipeLayer, csVPipeLayer; GetSingleSysLayer(csPipeLayer, csVPipeLayer); RBList rbMask=ads_buildlist( -4, _T(""), -4, _T(""), -4, _T("or>"), NULL); SelectEntities(_T("\n选择自动生成系统图的所有平面图管线<退出>:"), ss, rbMask); } XPoint pt; int nOsMode = OS_INT|OS_END|OS_CEN; XPushVar vOsMode(_T("OSMODE"), nOsMode); long len = ss.Length(); TGridFloorData *pNewData = new TGridFloorData(); pt.z = 0; pNewData->m_ptBase = pt; for(long i=0;im_lstId.Append(new AcDbObjectId(id)); } // 获取当前层标高 zxl 2013.05.27 add if((m_bFloorHeight || m_bFloorName ) && len > 0) { m_dEle = GetCurEle(); m_bIsSingleSys = true;// zxl 2013.05.28 add } if(m_grid.GetRowNum() == 0) { m_grid.AppendRow(); m_grid.GetCell(0, 0).SetText(_T("1层")); m_grid.GetCell(0, 1).SetText(_T("1")); m_grid.GetCell(0, 2).SetText(_T("3000")); m_grid.GetCell(0, 3).SetText(_T("未指定")); } m_grid.GetRow(0)[1].SetText(_T("1")); m_grid.GetRow(0).SetExtendData(pNewData); } void CPlan2SysDlg::OnCheckFloor() { UpdateData(TRUE); CWnd *pWnd = GetDlgItem(IDC_COMBO_FLOORNAME); CWnd *pWnd2 = GetDlgItem(IDC_CHECK_FLOORNAME); CWnd *pWnd3 = GetDlgItem(IDC_CHECK_FLOORHEIGHT); CWnd *pWnd4 = GetDlgItem(IDC_EDIT_BASEELE); if(m_bFloor) { pWnd->EnableWindow(TRUE); pWnd2->EnableWindow(TRUE); pWnd3->EnableWindow(TRUE); pWnd4->EnableWindow(TRUE); m_bFloorName = TRUE; m_bFloorHeight = TRUE; } else { m_bFloorName = FALSE; m_bFloorHeight = FALSE; pWnd->EnableWindow(FALSE); pWnd2->EnableWindow(FALSE); pWnd3->EnableWindow(FALSE); pWnd4->EnableWindow(FALSE); } UpdateData(FALSE); } //cet 2009.12.29 add //初始化复选框 void CPlan2SysDlg::InitCheckBoxName() { /* cet 2011.12.12 modify CWnd *pWnd = GetDlgItem(IDC_CHECK_COAGULATE); if (pWnd != NULL) { pWnd->SetWindowText(g_csPipeName[0]); } pWnd = GetDlgItem(IDC_CHECK_DRINK); if (pWnd != NULL) { pWnd->SetWindowText(g_csPipeName[1]); } pWnd = GetDlgItem(IDC_CHECK_PRESSDIRT); if (pWnd != NULL) { pWnd->SetWindowText(g_csPipeName[2]); } pWnd = GetDlgItem(IDC_CHECK_PRESSUSELESS); if (pWnd != NULL) { pWnd->SetWindowText(g_csPipeName[3]); } pWnd = GetDlgItem(IDC_CHECK_PRESSRAIN); if (pWnd != NULL) { pWnd->SetWindowText(g_csPipeName[4]); } pWnd = GetDlgItem(IDC_CHK_CIVICISMWATER); if (pWnd != NULL) { pWnd->SetWindowText(g_csPipeName[5]); } pWnd = GetDlgItem(IDC_CHK_CYCLEWATER); if (pWnd != NULL) { pWnd->SetWindowText(g_csPipeName[6]); } */ std::map mapLayerPipeName; GetLayerPipeName(mapLayerPipeName); CWnd *pWnd = GetDlgItem(IDC_CHECK_COAGULATE); if (pWnd != NULL) { pWnd->SetWindowText(mapLayerPipeName[LAY_PIPE_COAGULATE]); } pWnd = GetDlgItem(IDC_CHECK_DRINK); if (pWnd != NULL) { pWnd->SetWindowText(mapLayerPipeName[LAY_PIPE_DRINK]); } pWnd = GetDlgItem(IDC_CHECK_PRESSDIRT); if (pWnd != NULL) { pWnd->SetWindowText(mapLayerPipeName[LAY_PIPE_PRESSDIRT]); } pWnd = GetDlgItem(IDC_CHECK_PRESSUSELESS); if (pWnd != NULL) { pWnd->SetWindowText(mapLayerPipeName[LAY_PIPE_PRESSUSELESS]); } pWnd = GetDlgItem(IDC_CHECK_PRESSRAIN); if (pWnd != NULL) { pWnd->SetWindowText(mapLayerPipeName[LAY_PIPE_PRESSRAIN]); } pWnd = GetDlgItem(IDC_CHK_CIVICISMWATER); if (pWnd != NULL) { pWnd->SetWindowText(mapLayerPipeName[LAY_PIPE_USER1]); } pWnd = GetDlgItem(IDC_CHK_CYCLEWATER); if (pWnd != NULL) { pWnd->SetWindowText(mapLayerPipeName[LAY_PIPE_USER2]); } pWnd = GetDlgItem(IDC_CHECK_LQ); if (pWnd != NULL) { pWnd->SetWindowText(mapLayerPipeName[LAY_PIPE_USER3]); } pWnd = GetDlgItem(IDC_CHECK_QTMH); if (pWnd != NULL) { pWnd->SetWindowText(mapLayerPipeName[LAY_PIPE_USER4]); } pWnd = GetDlgItem(IDC_CHECK_ZQ); if (pWnd != NULL) { pWnd->SetWindowText(mapLayerPipeName[LAY_PIPE_USER5]); } pWnd = GetDlgItem(IDC_CHECK_YL2); if (pWnd != NULL) { pWnd->SetWindowText(mapLayerPipeName[LAY_PIPE_USER6]); } pWnd = GetDlgItem(IDC_CHECK_TQ); if (pWnd != NULL) { pWnd->SetWindowText(mapLayerPipeName[LAY_PIPE_USER7]); } pWnd = GetDlgItem(IDC_CHECK_SJ); if (pWnd != NULL) { pWnd->SetWindowText(mapLayerPipeName[LAY_PIPE_USER8]); } } void CPlan2SysDlg::InitCmbPipeSysType() { m_comboType.ResetContent(); int nIndex = -1; m_comboType.InsertString(++nIndex, _T("给水")); m_mapPipeLayerSysType.insert(std::make_pair(CString(_T("给水")), 0)); m_comboType.InsertString(++nIndex, _T("热给水")); m_mapPipeLayerSysType.insert(std::make_pair(CString(_T("热给水")), 1)); m_comboType.InsertString(++nIndex, _T("热回水")); m_mapPipeLayerSysType.insert(std::make_pair(CString(_T("热回水")), 2)); m_comboType.InsertString(++nIndex, _T("污水")); m_mapPipeLayerSysType.insert(std::make_pair(CString(_T("污水")), 3)); m_comboType.InsertString(++nIndex, _T("废水")); m_mapPipeLayerSysType.insert(std::make_pair(CString(_T("废水")), 4)); m_comboType.InsertString(++nIndex, _T("雨水")); m_mapPipeLayerSysType.insert(std::make_pair(CString(_T("雨水")), 5)); m_comboType.InsertString(++nIndex, _T("中水")); m_mapPipeLayerSysType.insert(std::make_pair(CString(_T("中水")), 6)); m_comboType.InsertString(++nIndex, _T("消防")); m_mapPipeLayerSysType.insert(std::make_pair(CString(_T("消防")), 7)); m_comboType.InsertString(++nIndex, _T("喷淋")); m_mapPipeLayerSysType.insert(std::make_pair(CString(_T("喷淋")), 8)); CString sTemp; if(GetLayerReMark(LAY_PIPE_COAGULATE, sTemp) && !sTemp.IsEmpty()) { m_comboType.InsertString(++nIndex, sTemp); m_mapPipeLayerSysType.insert(std::make_pair(sTemp, 9)); } else { m_comboType.InsertString(++nIndex, CString(_T("凝结"))); m_mapPipeLayerSysType.insert(std::make_pair(CString(_T("凝结")), 9)); } if(GetLayerReMark(LAY_PIPE_DRINK, sTemp) && !sTemp.IsEmpty()) { m_comboType.InsertString(++nIndex, sTemp); m_mapPipeLayerSysType.insert(std::make_pair(sTemp, 10)); } else { m_comboType.InsertString(++nIndex, CString(_T("直饮"))); m_mapPipeLayerSysType.insert(std::make_pair(CString(_T("直饮")), 10)); } if(GetLayerReMark(LAY_PIPE_PRESSDIRT, sTemp) && !sTemp.IsEmpty()) { m_comboType.InsertString(++nIndex, sTemp); m_mapPipeLayerSysType.insert(std::make_pair(sTemp, 11)); } else { m_comboType.InsertString(++nIndex, CString(_T("压力污"))); m_mapPipeLayerSysType.insert(std::make_pair(CString(_T("压力污")), 11)); } if(GetLayerReMark(LAY_PIPE_PRESSUSELESS, sTemp) && !sTemp.IsEmpty()) { m_comboType.InsertString(++nIndex, sTemp); m_mapPipeLayerSysType.insert(std::make_pair(sTemp, 12)); } else { m_comboType.InsertString(++nIndex, CString(_T("压力废"))); m_mapPipeLayerSysType.insert(std::make_pair(CString(_T("压力废")), 12)); } if(GetLayerReMark(LAY_PIPE_PRESSRAIN, sTemp) && !sTemp.IsEmpty()) { m_comboType.InsertString(++nIndex, sTemp); m_mapPipeLayerSysType.insert(std::make_pair(sTemp, 13)); } else { m_comboType.InsertString(++nIndex, CString(_T("压力雨"))); m_mapPipeLayerSysType.insert(std::make_pair(CString(_T("压力雨")), 13)); } if(GetLayerReMark(LAY_PIPE_USER1, sTemp) && !sTemp.IsEmpty()) { m_comboType.InsertString(++nIndex, sTemp); m_mapPipeLayerSysType.insert(std::make_pair(sTemp, 15)); } else { m_comboType.InsertString(++nIndex, CString(_T("用户1管线"))); m_mapPipeLayerSysType.insert(std::make_pair(CString(_T("用户1管线")), 15)); } if(GetLayerReMark(LAY_PIPE_USER2, sTemp) && !sTemp.IsEmpty()) { m_comboType.InsertString(++nIndex, sTemp); m_mapPipeLayerSysType.insert(std::make_pair(sTemp, 16)); } else { m_comboType.InsertString(++nIndex, CString(_T("用户2管线"))); m_mapPipeLayerSysType.insert(std::make_pair(CString(_T("用户2管线")), 16)); } if(GetLayerReMark(LAY_PIPE_USER3, sTemp) && !sTemp.IsEmpty()) { m_comboType.InsertString(++nIndex, sTemp); m_mapPipeLayerSysType.insert(std::make_pair(sTemp, 29)); } else { m_comboType.InsertString(++nIndex, CString(_T("用户3管线"))); m_mapPipeLayerSysType.insert(std::make_pair(CString(_T("用户3管线")), 29)); } if(GetLayerReMark(LAY_PIPE_USER4, sTemp) && !sTemp.IsEmpty()) { m_comboType.InsertString(++nIndex, sTemp); m_mapPipeLayerSysType.insert(std::make_pair(sTemp, 30)); } else { m_comboType.InsertString(++nIndex, CString(_T("用户4管线"))); m_mapPipeLayerSysType.insert(std::make_pair(CString(_T("用户4管线")), 30)); } if(GetLayerReMark(LAY_PIPE_USER5, sTemp) && !sTemp.IsEmpty()) { m_comboType.InsertString(++nIndex, sTemp); m_mapPipeLayerSysType.insert(std::make_pair(sTemp, 31)); } else { m_comboType.InsertString(++nIndex, CString(_T("用户5管线"))); m_mapPipeLayerSysType.insert(std::make_pair(CString(_T("用户5管线")), 31)); } if(GetLayerReMark(LAY_PIPE_USER6, sTemp) && !sTemp.IsEmpty()) { m_comboType.InsertString(++nIndex, sTemp); m_mapPipeLayerSysType.insert(std::make_pair(sTemp, 32)); } else { m_comboType.InsertString(++nIndex, CString(_T("用户6管线"))); m_mapPipeLayerSysType.insert(std::make_pair(CString(_T("用户6管线")), 32)); } if(GetLayerReMark(LAY_PIPE_USER7, sTemp) && !sTemp.IsEmpty()) { m_comboType.InsertString(++nIndex, sTemp); m_mapPipeLayerSysType.insert(std::make_pair(sTemp, 33)); } else { m_comboType.InsertString(++nIndex, CString(_T("用户7管线"))); m_mapPipeLayerSysType.insert(std::make_pair(CString(_T("用户7管线")), 33)); } if(GetLayerReMark(LAY_PIPE_USER8, sTemp) && !sTemp.IsEmpty()) { m_comboType.InsertString(++nIndex, sTemp); m_mapPipeLayerSysType.insert(std::make_pair(sTemp, 34)); } else { m_comboType.InsertString(++nIndex, CString(_T("用户6管线"))); m_mapPipeLayerSysType.insert(std::make_pair(CString(_T("用户8管线")), 34)); } m_comboType.AddString(_T("其它")); m_mapPipeLayerSysType.insert(std::make_pair(CString(_T("其它")), 14)); m_comboType.AddString(_T("多系统")); m_mapPipeLayerSysType.insert(std::make_pair(CString(_T("多系统")), 1000)); // 设置当前选择 sTemp.Empty(); std::map::iterator it; for (it = m_mapPipeLayerSysType.begin(); it != m_mapPipeLayerSysType.end(); it++) { if (it->second == m_iPipeType) { sTemp = it->first; break; } } if (sTemp.IsEmpty()) { m_comboType.SetCurSel(0); } else { nIndex = m_comboType.FindString(0,sTemp); m_comboType.SetCurSel(nIndex); } }