// DrawStandPipeDlg.cpp : implementation file // #include "stdafx.h" //#include #include #include #include #include #include #include #include #include "DrawStandPipeDlg.h" #include "PipeSettingDlg.h" #include "InsBlockDlg.h" #include "PipeSettingFrameDlg.h" #include "dbxutil.h" #include #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif const UINT PipeMenuID = 9410; extern void DoDimStandPipe(AcDbObjectId idPipe, const TCHAR* szName, const TCHAR* szSerial); //extern TDbPipe * ClonePipe(TDbPipe *pOldPipe); //*************************************************************************************************** // 上下扣弯 //*************************************************************************************************** void GetAllPipeByPipe(AcDbObjectId pipeId, PickSet &ss, XPoint ptStart) { OPENOBJ_BEGIN(pipeId, AcDb::kForRead, TDbPipe, pPipe); if(pPipe){ XPoint ptTmp = pPipe->StartPoint(); AcDbObjectId nodeId(NULL); if(ptStart == pPipe->StartPoint()) nodeId = pPipe->GetNode(0); else if(ptStart == pPipe->EndPoint()) nodeId = pPipe->GetNode(1); if(!IsEquipment(nodeId)){ OPENOBJ_BEGIN(nodeId, AcDb::kForRead, TDbPipeNode, pNode); if(pNode){ int num = pNode->GetInterfaceNum(); if(num == 2){ TPipeInterface face; pNode->GetInterface(0, face); AcDbObjectId nextPipeId = face.m_idPipe; if(pipeId == face.m_idPipe){ pNode->GetInterface(1, face); nextPipeId = face.m_idPipe; } XPoint nextPt; OPENOBJ_BEGIN(nextPipeId, AcDb::kForRead, TDbPipe, pPipe2); if(pPipe2){ nextPt = pPipe2->StartPoint() == ptStart ? pPipe2->EndPoint() : pPipe2->StartPoint(); } OPENOBJ_END(); GetAllPipeByPipe(nextPipeId, ss, nextPt); ss+=nextPipeId; } } OPENOBJ_END(); } } OPENOBJ_END(); return; } void CheckStandPipe(Entity ent, XPoint ptPick, double nOldElevation) { RBList rbMask(RTDXF0, _T("ATS_PIPE"), 8, GetLayerNames(_T("管")), NULL); XPoint ptPipeS, ptPipeE, ptTmp; GetPipePoint(ent, ptPipeS, ptPipeE); CString csLay = GetPipeLayer(ent); TPipeSys::SysType sys = GetPipeSys(ent); if(ptPipeS == ptPick) ptTmp = ptPipeE; else ptTmp = ptPipeS; PickSet ss(SS_FREE); GetPointPickSet(ptTmp, ss, rbMask, (int)g_nPipeRadius[GetPipeLayerIdxByName(csLay)]); if(ss.Length() != 2 && ss.Length() != 3) return; Entity entDel; for(long i=0;iGetSysType() || !pPipe->IsVertical()) continue; pt1 = pPipe->StartPoint(); pt2 = pPipe->EndPoint(); if(fabs(pt1.z - nOldElevation) < 0.001 || fabs(pt2.z - nOldElevation) < 0.01){ if(pPipe->upgradeOpen()==Acad::eOk) { pPipe->assertWriteEnabled(); if(fabs(pt1.z - nOldElevation) < 0.001) pPipe->StartPoint().z = ptPipeS.z; else if(fabs(pt2.z - nOldElevation) < 0.001) pPipe->EndPoint().z = ptPipeS.z; pPipe->downgradeOpen(); if(pPipe->StartPoint() == pPipe->EndPoint()){//2段管线同标高,删除扣弯 entDel = entTmp; break; } return; } } } OPENOBJ_END(); } entDel.Erase(); } BOOL DoModifyPipeEle(Entity entSel, XPoint ptPick, double &nElevation, BOOL bNeed) { double dMeter(1); if(!DocGetMeterUnitDraw()) dMeter = 1000; Adesk::UInt16 iCol(1), iCol2(1); TCHAR szLay[256]; entSel.GetData(8, szLay); AcDbLayerTable *pLayertable = NULL; AcDbLayerTableRecord *pLayerRec = NULL; acdbCurDwg()->getLayerTable(pLayertable, AcDb::kForRead); if(!pLayertable) return FALSE; if((pLayertable->getAt(szLay, pLayerRec, AcDb::kForWrite)) == Acad::eOk) { AcCmColor col = pLayerRec->color(); iCol2 = col.colorIndex(); if(iCol2 == 1) iCol2 = 2; else iCol2 = 1; pLayerRec->close(); pLayertable->close(); } else pLayertable->close(); OPENOBJ_BEGIN(entSel, AcDb::kForWrite, TDbPipe, pPipe); if(pPipe){ pPipe->assertWriteEnabled(); iCol = pPipe->colorIndex(); XPoint ptTmp = pPipe->StartPoint(); nElevation = ptTmp.z/dMeter; pPipe->setColorIndex(iCol2); if(pPipe->isKindOf(TDbDoubleLinePipe::desc()) && dMeter < 10) dMeter = 1000; } OPENOBJ_END(); double nOldElevation = nElevation; CString csTmp; int iRet; if(bNeed){ csTmp.Format(_T("\n请输入管线的标高(米)<%.3f>"), nElevation); INITGET_BEG(0, _T("A")); iRet = ads_getdist(ptPick, csTmp, &nElevation); INITGET_END(); } else{ csTmp.Format(_T("\n请输入管线的标高(米)<%.3f>"), nElevation); iRet = ads_getdist(ptPick, csTmp, &nElevation); } if(iRet == RTNORM && nElevation < 100){ OPENOBJ_BEGIN(entSel, AcDb::kForWrite, TDbPipe, pPipe); if(pPipe){ // pPipe->assertWriteEnabled(); XPoint ptTmp = pPipe->StartPoint(); XPoint ptTmp2 = pPipe->EndPoint(); ptTmp.z = nElevation*dMeter; ptTmp2.z = nElevation*dMeter; pPipe->SetStartPoint(ptTmp); pPipe->SetEndPoint(ptTmp2); pPipe->setColorIndex(iCol); DList lstAttachment; pPipe->GetAttachments(lstAttachment); int len = lstAttachment.Length(); for(int m=0;mGetLocation(); ptLoc.z = nElevation*dMeter; pValve->SetLocation(ptLoc); } OPENOBJ_END(); } } OPENOBJ_END(); } else{ OPENOBJ_BEGIN(entSel, AcDb::kForWrite, TDbPipe, pPipe); if(pPipe){ pPipe->setColorIndex(iCol); } OPENOBJ_END(); // if(iRet == RTKWORD) // return FALSE; } return TRUE; } void DynamicDrawStandPipe(Entity ent1, Entity ent2, XPoint ptPick) { XPoint ptTurn, ptStart, ptEnd, ptStart2, ptEnd2; GetPipePoint(ent1, ptStart, ptEnd); Entity entTmp; CString csDwb = g_csDwbPath + _T("TwtSys"); XString xsTmp; if(LoadDwbBlock(csDwb, _T("00000146"), xsTmp) != RTNORM) //扣弯 return; double nElevation(0); nElevation = ptStart.z; AcGeVector3d vectBase(ptEnd.x - ptStart.x, ptEnd.y - ptStart.y, 0); double nAng = ads_angle(ptStart, ptEnd); g_nInsBlkRotate = vectBase.angleTo(AcGeVector3d(1,0,0)); g_nInsBlkRotate = nAng; TBlockEdJig jig((const TCHAR*)xsTmp, ptPick, 50, vectBase); jig.SetPrompt(_T("\n请指定扣弯方向<完成>:")); if(jig.DoIt() == RTNORM){ int iQuadrant = jig.m_iQuadrant; if(iQuadrant == 0 || iQuadrant == 3){ entTmp = ent1; } else if(iQuadrant == 1 || iQuadrant == 2){ entTmp = ent2; } TDbPipe *pPipe2 = new TDbPipe; OPENOBJ_BEGIN(entTmp, AcDb::kForWrite, TDbPipe, pPipe); if(pPipe){ pPipe2 = (TDbPipe *)pPipe->clone(); pPipe->assertWriteEnabled(); XPoint pt1, pt2; pt1 = pPipe->StartPoint(); pt2 = pPipe->EndPoint(); pt1.z -= 1000; pt2.z -= 1000; pPipe->SetStartPoint(pt1); pPipe->SetEndPoint(pt2); } OPENOBJ_END(); ptPick.z = nElevation; pPipe2->SetStartPoint(ptPick); ptPick.z = nElevation - 1000; pPipe2->SetEndPoint(ptPick); pPipe2->SetModelType(TPipeSys::kModel); AddToCurrentSpace(pPipe2, Adesk::kTrue); // CheckStandPipe(entTmp, ptPick, nElevation); } SHads_command(RTNONE); g_nInsBlkRotate = 0; } extern CString GetVPipeLayerByIdx(int iLayer); CString GetVPipeLayByPipe(Entity entRef) { CString csRet; OPENOBJ_BEGIN(entRef, AcDb::kForRead, TDbPipe, pPipe); if(pPipe && !pPipe->IsVertical()){ TCHAR* szLay = pPipe->layer(); int idx = GetPipeLayerIdxByName(szLay); csRet = szLay;//sr 2010.1.6 改正,把扣弯图层直接改为管线图层,不影响立管排序 // csRet = GetVPipeLayerByIdx(idx); if(pPipe->isKindOf(TDbDoubleLinePipe::desc())) csRet = szLay; delete [] szLay; } OPENOBJ_END(); return csRet; } AcDbObjectId DoDrawStandPipe(Entity entRef, double nEle1, double nEle2, XPoint ptPick) { if(fabs(nEle1 - nEle2) < 0.01){ adsout << _T("\n立管顶标高等于底标高!"); return NULL; } TDbPipe *pPipe2 = new TDbPipe; OPENOBJ_BEGIN(entRef, AcDb::kForRead, TDbPipe, pPipe); if(pPipe){ pPipe2 = (TDbPipe *)pPipe->clone(); } OPENOBJ_END(); pPipe2->setLinetype(_T("CONTINUOUS")); CString csLay = GetVPipeLayByPipe(entRef); InitPipeLayer(csLay); ptPick.z = nEle1; pPipe2->SetStartPoint(ptPick); ptPick.z = nEle2; pPipe2->SetEndPoint(ptPick); pPipe2->SetBulge(0.0); // 清除弧度,以免克隆实体来自弧管,造成错误 cet 2013.3.15 add pPipe2->SetRadius(g_nPipeRadius[GetPipeLayerIdxByName(csLay)]); if(!g_bStandPipeArc)//传统扣弯 pPipe2->SetRadiusIn(-2); if(csLay != _T("")) //双线水管没有立管图层 pPipe2->setLayer(csLay); pPipe2->SetModelType(TPipeSys::kModel); AcDbObjectId id = AddToCurrentSpace(pPipe2, Adesk::kTrue); return id; } //判断1个点,是否在管线上。 不考虑斜管,只要投影在管线上就算 BOOL IsPtOnPipe(XPoint pt, Entity ent) { OPENOBJ_BEGIN(ent, AcDb::kForRead, TDbPipe, pPipe); if(pPipe){ pt.z = 0; AcGePoint3d p1 = pt; AcGePoint3d p2; TDbPipe *pNewPipe = ClonePipe(pPipe); pNewPipe->StartPoint().z = 0; pNewPipe->EndPoint().z = 0; //把管线放平 AcDbCurve *pCurve = pNewPipe->AsAcDbCurve(); delete pNewPipe; pCurve->getClosestPointTo(p1,p2); delete pCurve; double dDist = ads_distance(XPoint(p1), XPoint(p2)); if(dDist < 0.001){ pt = p2; return TRUE; } else return FALSE; } OPENOBJ_END(); return FALSE; } void GetPipeByPt(XPoint ptPick, PickSet &ss) { RBList rbMask = ads_buildlist( -4, _T(""), -4, _T(""), -4, _T("or>"), NULL); //因为考虑到搜索遮挡管线,所以把选择框放大,有可能多选不必要的管线,例如:2平行管线, 不同系统的管线 GetPointPickSet(ptPick, ss, rbMask, int(g_nBreakPipeWidth*DocGetPScale())); int len = ss.Length(); if(ss.Length() > 1){ long len = ss.Length(); BOOL bEqualHeight = TRUE; BOOL bDiffentSys = FALSE; double nEleTmp = -9999; PickSet ssDel(SS_FREE); TPipeSys::SysType sys0=TPipeSys::kUnknownSys; for(long j=0;j 0.01){ bEqualHeight = FALSE; continue; } } if(bDiffentSys){//搜索出不同系统的管线 GetPointPickSet(ptPick, ss, rbMask, int(g_nCurPipeWidth*DocGetPScale()/2)); len = ss.Length(); return; } ss -= ssDel; if(bEqualHeight){//如果所有被选管线等高,缩小框选范围 GetPointPickSet(ptPick, ss, rbMask, int(g_nCurPipeWidth*DocGetPScale()/2)); if(ss.Length() > 1){ double nDist(-1); Entity ent2; for(j=0;j 0.001 && (nDist < 0 || nTmp < nDist)){ nDist = nTmp; ent2 = entTmp; } } if(!!ent2){ ss.Free(); ss+=ent2; } } } else{ len = ss.Length(); if(len == 2){//如果选择有2个,且平行, 缩小框选范围 Entity ent1 = ss[0L]; Entity ent2 = ss[1L]; if(Is2PipeParallel(ent1, ent2)) GetPointPickSet(ptPick, ss, rbMask, int(g_nCurPipeWidth*DocGetPScale()/2)); } else if(len == 3){//如果选择有3个,且平行, 缩小框选范围 Entity ent1 = ss[0L]; Entity ent2 = ss[1L]; Entity ent3 = ss[2L]; if(Is2PipeParallel(ent1, ent2) && Is2PipeParallel(ent1, ent3)) GetPointPickSet(ptPick, ss, rbMask, int(g_nCurPipeWidth*DocGetPScale()/2)); } } } } //选择2管线交叉处插入扣弯 void DrawStandPipeBy2PipeInter() { RBList rbMask = ads_buildlist( -4, _T(""), -4, _T(""), -4, _T("or>"), NULL); Entity ent1, ent2; if(SelectEntity(_T("\n请选择1根管线:<退出>"), ent1, rbMask) != RTNORM) return; if(SelectEntity(_T("\n请选择另1根管线:<退出>"), ent2, rbMask) != RTNORM) return; TPipeSys::SysType sys1, sys2; XPoint ptStart1, ptStart2; XLine line1, line2; OPENOBJ_BEGIN(ent1, AcDb::kForRead, TDbPipe, pPipe); if(pPipe && !pPipe->IsVertical()){ ptStart1 = pPipe->StartPoint(); sys1 = pPipe->GetSysType(); line1 = pPipe->GetLine(); } OPENOBJ_END(); OPENOBJ_BEGIN(ent2, AcDb::kForRead, TDbPipe, pPipe); if(pPipe && !pPipe->IsVertical()){ ptStart2 = pPipe->StartPoint(); sys2 = pPipe->GetSysType(); line2 = pPipe->GetLine(); } OPENOBJ_END(); if(fabs(ptStart1.z - ptStart2.z) < 0.001){ adsout << _T("\n2根管线高度相同,无法插入扣弯"); return; } if(sys1 != sys2){ adsout << _T("\n2根管线系统不一致,无法插入扣弯"); return; } line1.EndPoint().z = 0; line1.StartPoint().z = 0; line2.EndPoint().z = 0; line2.StartPoint().z = 0; XPoint ptInt; int ret = line1.Intersection(&line2, ptInt); if(ret == 1) DoDrawStandPipe(ent1, ptStart1.z, ptStart2.z, ptInt); } void DrawStandPipeBy2Pipe() { RBList rbMask = ads_buildlist( -4, _T(""), -4, _T(""), -4, _T("or>"), NULL); Entity entSel, entLast; XPoint ptPick, ptPipeS, ptPipeE; int nOsMode=0; xg_getvar(_T("OSMODE"), &nOsMode); nOsMode &= ~0x4000; nOsMode |= OS_INT|OS_NEA|OS_END|OS_INS; XPushVar vOsMode2(_T("OSMODE"), nOsMode); if(ads_getpoint(NULL, _T("\n请点取插入扣弯的位置<选择2管线交叉处插入扣弯>:"), ptPick) != RTNORM){ DrawStandPipeBy2PipeInter(); return; } double dMeter(1); if(!DocGetMeterUnitDraw()) dMeter = 1000; PickSet ss(SS_FREE); GetPipeByPt(ptPick, ss); // cet 2013.3.15 add 过滤掉不经过ptPick的管线 PickSet ssDel(SS_FREE); int nNum = ss.Length(); XPoint ptTemp = Ucs2Wcs(ptPick); ptTemp.z = 0.0; XCurveSegment seg; XPoint ptPrj; for (long i = 0; i < nNum; ++i) { OPENOBJ_BEGIN(ss[i], AcDb::kForRead, TDbPipe, pPipe); if (pPipe != NULL) { seg = pPipe->GetCurve(); seg.SetElevation(0.0); seg.ProjectToMe(ptTemp, ptPrj); if (ptTemp.Distance(ptPrj) > 0.001) { ssDel += ss[i]; } } OPENOBJ_END(); } ss -= ssDel; int len1 = ss.Length(); //ptPick = Ucs2Wcs(ptPick); if(ss.Length() == 1){ entSel = ss[0L]; if(IsPipeVertical(entSel)) return; XPoint ptWcsPick = Ucs2Wcs(ptPick); if(!IsPtOnPipe(ptWcsPick, entSel)) return; GetPipePoint(entSel, ptPipeS, ptPipeE);//打断管线 if(ads_distance(ptWcsPick, ptPipeS) < 0.1 || ads_distance(ptWcsPick, ptPipeE) < 0.1 ){ CString csTmp; double nElevation = ptPipeS.z; csTmp.Format(_T("\n请输入竖管线的另一标高(米),当前标高=%.3f<退出>"), nElevation/dMeter); ads_getdist(ptPick, csTmp, &nElevation); if(ptPick.z == nElevation) return; DoDrawStandPipe(entSel, nElevation*dMeter, ptWcsPick.z, ptWcsPick); return; } BreakEntity(entSel, ptPick, ptPick); entLast.GetLast(); //以下目的是让新管线更新节点,而又不重新连接到一起 OPENOBJ_BEGIN(entLast, AcDb::kForWrite, TDbPipe, pPipe); if(pPipe){ pPipe->assertWriteEnabled(); pPipe->SetDnDiameter(pPipe->GetDnDiameter()+1);//把管径+1,2断管就不会连接 if(pPipe->isKindOf(TDbDoubleLinePipe::desc()) && dMeter < 10) dMeter = 1000; } else { adsout << _T("距离太短,无法打断!"); return; } OPENOBJ_END(); TPipePerDocData *pData = GetCurPipeDocData(); pData->ApplyUpdates(); double nElevation(0), nElevation2(0); DoModifyPipeEle(entSel, ptPick, nElevation, TRUE); //把管径恢复 OPENOBJ_BEGIN(entLast, AcDb::kForWrite, TDbPipe, pPipe); if(pPipe){ pPipe->assertWriteEnabled(); pPipe->SetDnDiameter(pPipe->GetDnDiameter()-1); } OPENOBJ_END(); DoModifyPipeEle(entLast, ptPick, nElevation2, FALSE); ptPick = Ucs2Wcs(ptPick); if(fabs(nElevation - nElevation2) > 0.001){ TDbPipe *pPipe2 = new TDbPipe; OPENOBJ_BEGIN(entLast, AcDb::kForRead, TDbPipe, pPipe); if(pPipe){ pPipe2 = (TDbPipe *)pPipe->clone(); } OPENOBJ_END(); CString csLay = GetVPipeLayByPipe(entLast); InitPipeLayer(csLay); pPipe2->assertWriteEnabled(); pPipe2->setLinetype(_T("CONTINUOUS")); ptPick.z = nElevation*dMeter; pPipe2->SetStartPoint(ptPick); ptPick.z = nElevation2*dMeter; pPipe2->SetRadius(g_nPipeRadius[GetPipeLayerIdxByName(csLay)]); //pPipe2->SetRadius(g_nPipeRadius[GetPipeLayerIdxBySys(pPipe2->GetSysType())]); pPipe2->SetEndPoint(ptPick); pPipe2->setLayer(csLay); pPipe2->SetModelType(TPipeSys::kModel); if(!g_bStandPipeArc)//传统扣弯 pPipe2->SetRadiusIn(-2); AddToCurrentSpace(pPipe2, Adesk::kTrue); } } else if(ss.Length() == 2){ //处理遮挡扣弯的问题 XPoint p1, p2, p3, p4, p5; GetPipePoint(ss[0L], p1, p2); GetPipePoint(ss[1L], p3, p4); if(fabs(p1.z - p3.z) < 0.01){ //2管线等高 double nElevation(0), nElevation2(0); DoModifyPipeEle(ss[0L], ptPick, nElevation, FALSE); p1.z = nElevation*dMeter; DoModifyPipeEle(ss[1L], ptPick, nElevation2, FALSE); p3.z = nElevation2*dMeter; } // cet 2011.5.17 modify 未考虑弧管 // XLine l1(p1, p2); // XLine l2(p3, p4); // l1.EndPoint().z = 0; // l1.StartPoint().z = 0; // l2.EndPoint().z = 0; // l2.StartPoint().z = 0; // l1.Intersection(&l2, p5); // if(!p5 && Is2LineOnLine(l1, l2)){ // if(l1.StartPoint() == l2.StartPoint()) // p5 = l1.StartPoint(); // else if(l1.EndPoint() == l2.StartPoint()) // p5 = l1.EndPoint(); // else if(l1.StartPoint() == l2.EndPoint()) // p5 = l1.StartPoint(); // else if(l1.EndPoint() == l2.EndPoint()) // p5 = l1.EndPoint(); // } double dBulge1 = 0.0, dBulge2 = 0.0; OPENOBJ_BEGIN(ss[0L], AcDb::kForRead, TDbPipe, pPipe); if (pPipe != NULL) { dBulge1 = pPipe->GetBulge(); } OPENOBJ_END(); OPENOBJ_BEGIN(ss[1L], AcDb::kForRead, TDbPipe, pPipe); if (pPipe != NULL) { dBulge2 = pPipe->GetBulge(); } OPENOBJ_END(); XCurveSegment seg1(p1, p2, dBulge1), seg2(p3, p4, dBulge2); seg1.StartPoint().z = 0; seg1.EndPoint().z = 0; seg2.StartPoint().z = 0; seg2.EndPoint().z = 0; seg1.Intersection(seg2, p5, XPoint()); if (!p5) { if(seg1.StartPoint() == seg2.StartPoint()) { p5 = seg1.StartPoint(); } else if(seg1.EndPoint() == seg2.StartPoint()) { p5 = seg1.EndPoint(); } else if(seg1.StartPoint() == seg2.EndPoint()) { p5 = seg1.StartPoint(); } else if(seg1.EndPoint() == seg2.EndPoint()) { p5 = seg1.EndPoint(); } } if(!!p5 && fabs(p1.z - p3.z) > 0.01){ DoDrawStandPipe(ss[0L], p1.z, p3.z, p5); } } else if(ss.Length() > 2){ double nHigh(0), nLow(0); XPoint ptInt; for(long j=0;j p1.z || fabs(nLow) < 0.01) nLow = p1.z; p1.z = 0; p2.z = 0; ptPick.z = 0; double nDist2 = ads_distance(ptPick, p1); double nDist3 = ads_distance(ptPick, p2); if(nDist2 < 0.01) ptInt2 = p1; if(nDist3 < 0.01) ptInt2 = p2; if(!ptInt) ptInt = ptInt2; // else if(ptInt2 != ptInt){ // ptInt = XPoint(); // break; // } } if(!!ptInt){ DoDrawStandPipe(ss[0L], nHigh, nLow, ptInt); } } } //*************************************************************************************************** // 立管布置 //*************************************************************************************************** bool IsNumberic(const CString &sText); //cet 2013.1.9 add 考虑楼号 //int GetCurSerial(const TCHAR* szLay) int GetCurSerial(const TCHAR* szLay, const CString &sFloorNum, PickSet &ss) { long len = ss.Length(); int iRet(0); for(long i=0;iIsVertical()){ // cet 2013.1.9 add 考虑楼号 CString sBuildingSerial = ReadXdata(ent, _T("BUILDING-SERIAL")); if (sBuildingSerial.Compare(sFloorNum) != 0) { continue; } CString csSerial = ReadXdata(ent, _T("PIPE-SERIAL")); // cet 2013.3.13 add 排除非纯数字 if (!IsNumberic(csSerial)) { continue; } if(_ttoi(csSerial) > iRet) iRet = _ttoi(csSerial); } OPENOBJ_END(); } return iRet; } // cet 2013.3.12 add 是否为数字字符串 bool IsNumberic(const CString &sText) { // 空串 if (sText.IsEmpty()) { return false; } // 依次检查字符 int nNum = sText.GetLength(); for(int i = 0; i < nNum; ++i) { int nCh = sText.GetAt(i); // 非数字(0-9) if (!_istdigit(nCh)) { return false; } } return true; } // cet 2013.3.12 add 分解字符串 void SplitString(const CString &sText, std::list &lstStrs) { lstStrs.clear(); // 空串 if (sText.IsEmpty()) { return; } // 只有一个字符 int nLen = sText.GetLength(); if (nLen == 1) { lstStrs.push_back(sText); return; } CString sTemp = sText.GetAt(nLen - 1); for (int i = nLen - 2; i >= 0; --i) { TCHAR nCh = sText.GetAt(i); if (_istdigit(nCh)) // 数字 { TCHAR nPreCh = sText.GetAt(i + 1); if (_istdigit(nPreCh)) // 上一个字符为数字 { sTemp.Insert(0, nCh); } else { lstStrs.push_back(sTemp); sTemp = nCh; } } else if (_istalpha(nCh)) // 字母 { TCHAR nPreCh = sText.GetAt(i + 1); if (_istalpha(nPreCh)) // 上一个字符为字母 { sTemp.Insert(0, nCh); } else { lstStrs.push_back(sTemp); sTemp = nCh; } } else // 非数字字母 { TCHAR nPreCh = sText.GetAt(i + 1); if (!_istalpha(nPreCh) && !_istdigit(nPreCh)) // 上一个字符为非数字字母 { sTemp.Insert(0, nCh); } else { lstStrs.push_back(sTemp); sTemp = nCh; } } } lstStrs.push_back(sTemp); } // cet 2013.3.12 add 纯字母递增, 返回值表示是否进位, sSerial完全有字母组成 bool IncreaseAlpha(CString &sSerial) { CString sTemp = sSerial; bool bCarry = false; int nLen = sSerial.GetLength(); for (int i = nLen - 1; i >= 0; --i) { TCHAR ch = sSerial.GetAt(i); if (_istupper(ch)) // 大写字母 { if (ch + 1 <= _T('Z')) { sTemp.SetAt(i, ch + 1); bCarry = false; break; } else { int nDiff = ch - _T('Z'); sTemp.SetAt(i, _T('A') + nDiff); bCarry = true; } } else // 小写字母 { if (ch + 1 <= _T('z')) { sTemp.SetAt(i, ch + 1); bCarry = false; break; } else { int nDiff = ch - _T('z'); sTemp.SetAt(i, _T('a') + nDiff); bCarry = true; } } } sSerial = sTemp; return bCarry; } // cet 2013.3.13 add 区间内是否存在数字或字母 bool IsExistDigitOrLetter(std::list::iterator itBegin, std::list::iterator itEnd) { CString sTemp; while(itBegin != itEnd) { sTemp = *itBegin; ++itBegin; if (sTemp.IsEmpty()) { continue; } TCHAR ch = sTemp.GetAt(0); // 数字或字母 if (_istdigit(ch) || _istalpha(ch)) { return true; } } return false; } // cet 2013.3.12 add 递增编号 CString IncreaseSerial(const CString &sSerial) { CString sRet; if (IsNumberic(sSerial)) // 纯数字 { int nNum = _ttoi(sRet); sRet.Format(_T("%d"), nNum + 1); } else { // 拆分字符串 std::list lstStrs; SplitString(sSerial, lstStrs); // 递增字符串 std::list::iterator it, itTemp, itEnd = lstStrs.end(); CString sTemp; for (it = lstStrs.begin(); it != itEnd; ++it) { sTemp = *it; TCHAR ch = sTemp.GetAt(0); if (_istdigit(ch)) // 数字 { int nNum = _ttoi(sTemp); sTemp.Format(_T("%d"), nNum + 1); *it = sTemp; break; } else if (_istalpha(ch)) // 字符 { bool bCarry = IncreaseAlpha(sTemp); if (!bCarry) // 不需要进位,计算到此为止 { *it = sTemp; break; } itTemp = it; ++itTemp; if (IsExistDigitOrLetter(itTemp, itEnd)) // 后续字符串可处理进位 { *it = sTemp; continue;; } // 在本字符串中处理进位 if (_istupper(ch)) // 大小字母 { sTemp.Insert(0, _T("A")); } else // 小写字母 { sTemp.Insert(0, _T("a")); } *it = sTemp; } } std::list::reverse_iterator itR, itREnd = lstStrs.rend(); for (itR = lstStrs.rbegin(); itR != itREnd; ++itR) { sRet += *itR; } } return sRet; } // cet 2013.3.12 add 递增字符串,sText表示递增的格式字符串 CString GetCurSerial(const CString &sLayerName, const CString &sFloorNum, const CString &sText, PickSet &ss) { CString sRet = sText; if (IsNumberic(sText)) // 纯数字字符串 { int nNum = GetCurSerial(sLayerName, sFloorNum, ss); sRet.Format(_T("%d"), nNum + 1); } else { // 获得同图层立管的编号 std::vector vecSerials; long nLen = ss.Length(); CString sTemp; for(long i = 0; i < nLen; i++) { Entity ent = ss[i]; OPENOBJ_BEGIN(ent, AcDb::kForRead, TDbPipe, pPipe); if(pPipe && pPipe->IsVertical()) { // 考虑楼号 CString sBuildingSerial = ReadXdata(ent, _T("BUILDING-SERIAL")); if (sBuildingSerial.Compare(sFloorNum) != 0) { continue; } sTemp = ReadXdata(ent, _T("PIPE-SERIAL")); vecSerials.push_back(sTemp); } OPENOBJ_END(); } std::vector::iterator itBegin = vecSerials.begin(), itEnd = vecSerials.end(); std::vector::iterator it; while(true) { it = std::find(itBegin, itEnd, sRet); if (it == itEnd) { break; } sRet = IncreaseSerial(sRet); } } return sRet; } void GetExternalBlockWallSeg(Entity entBlk, XCurveSegment &lCurve, XCurveSegment &rCurve, XPoint &ptResult) { XBlock myBlock(entBlk); if(!myBlock.m_bInitSuccess) return; XCurveSegment seg; // ads_point ptResult; ads_name ent; ads_matrix xformres; resbuf* refstkres; while (1) { refstkres = NULL; //直接选择子实体 int result = acedNEntSelP(_T("\n外部参照!请继续选择外部参照上墙线<退出>: "), ent, ptResult, 0, xformres, &refstkres); if (refstkres != NULL) acutRelRb(refstkres); if (result == RTNORM) { Entity entTemp = ent; if(entTemp.Is(_T("ATS_WALL"))){ OPENOBJ_BEGIN(entTemp, AcDb::kForRead, TDbWall, pWall); XPoint ptNew1, ptNew2; if(pWall) { pWall->GetSideCurve(lCurve, rCurve); AcGePoint3d ptStart = lCurve.StartPoint(); ptStart = ptStart.transformBy(myBlock.GetMatrix3d()); AcGePoint3d ptEnd = lCurve.EndPoint(); ptEnd = ptEnd.transformBy(myBlock.GetMatrix3d()); XLine line(asDblArray(ptStart), asDblArray(ptEnd), 1); lCurve = line; ptStart = rCurve.StartPoint(); ptStart = ptStart.transformBy(myBlock.GetMatrix3d()); ptEnd = rCurve.EndPoint(); ptEnd = ptEnd.transformBy(myBlock.GetMatrix3d()); XLine line2(asDblArray(ptStart), asDblArray(ptEnd), 1); rCurve = line2; return; } OPENOBJ_END(); } else{ if(entTemp.Is(_T("LINE"))){ XCurveSegment seg1(entTemp); lCurve = seg1; } break; } } else break; } return; } void DrawStandPipeCmd() { RBList rbMaskPipe(RTDXF0, _T("ATS_PIPE"), 8, GetLayerNames(_T("管")), NULL); CDrawStandPipeDlg dlg(1, acedGetAcadFrame()); { CTemporaryResourceOverride vTemp; dlg.Create(IDD_STAND_PIPE, acedGetAcadFrame()); } dlg.ShowWindow(SW_SHOW); acedGetAcadDwgView()->SetFocus(); XPoint ptOld; int nOsMode=0; xg_getvar(_T("OSMODE"), &nOsMode); nOsMode &= ~0x4000; nOsMode |= OS_INT|OS_END; XPushVar vOsMode2(_T("OSMODE"), nOsMode); double dMeter(1); if(!DocGetMeterUnitDraw()) dMeter = 1000; while(1){ dlg.UpdateData(TRUE); /* cet 2013.3.12 modify 支持非纯数字编号 // cet 2013.1.9 modify 考虑楼号 // int idx = GetCurSerial(dlg.GetLayer()); int idx = GetCurSerial(dlg.GetLayer(), dlg.m_csFloorName); dlg.m_csName.Format(_T("%d"), idx+1); */ PickSet ssPipe(SS_FREE); RBList rbMask(RTDXF0, _T("ATS_PIPE"), 8, dlg.GetLayer(), NULL); ssPipe.Get(_T("X"), NULL, NULL, rbMask); dlg.m_csName = GetCurSerial(dlg.GetLayer(), dlg.m_csFloorName, dlg.GetCurSerialFormat(), ssPipe); dlg.SetPickset(ssPipe); dlg.UpdateData(FALSE); XPoint ptIns; if(dlg.m_iPlace == 0){ xg_getvar(_T("VIEWCTR"), ptIns); ptIns = Ucs2Wcs(ptIns); TPipeEdJig jig(ptIns, g_nPipeRadius[dlg.m_iPipeType]); jig.SetPrompt(_T("\n请指定立管的插入点[输入参考点(R)]<退出>:")); jig.SetKeyword(_T("R V")); int nKeyIdx; if(!!ptOld) jig.m_ptRef = ptOld; int nRetCode=jig.DoIt(&nKeyIdx); if(nRetCode==RTNORM) { ptIns = jig.GetPickPoint(); ptOld = ptIns; } else if(nRetCode==RTKWORD){ if(nKeyIdx == 0){ if(ads_getpoint(NULL,_T("\n请输入参考点:"), ptIns) != RTNORM) continue; double nXDist(0), nYDist(0); ptIns = Ucs2Wcs(ptIns); ads_getdist(ptIns, _T("\n请输入X方向距参考点的距离(注意:反方向用负号)<0>:"), &nXDist); ads_polar(ptIns, 0, nXDist, ptIns); ads_getdist(ptIns, _T("\n请输入Y方向距参考点的距离(注意:反方向用负号)<0>:"), &nYDist); ads_polar(ptIns, PI/2, nYDist, ptIns); } else { continue; } } else{ dlg.DestroyWindow(); return; } } else if(dlg.m_iPlace == 1 || dlg.m_iPlace == 2){ RBList rbMask = ads_buildlist( -4, _T(""), -4, _T(""), -4, _T(""), -4, _T("or>"), NULL); XPoint ptPick; Entity entWall; int ret(0); INITGET_BEG(0, _T("R V")); ret = SelectEntity1(_T("\n请拾取靠近立管的墙线<退出>"), entWall, ptPick, rbMask); INITGET_END(); if(ret == RTNONE || ret == RTCAN || ret == RTERROR) break; else if(ret != RTNORM) continue; if(entWall.Is(_T("ATS_WALL")) || entWall.Is(_T("INSERT"))){ XCurveSegment lCurve, rCurve, SelCurve, TmpCurve; BOOL bIsLeft = TRUE; XPoint ptNew1, ptNew2; if(entWall.Is(_T("ATS_WALL"))){ OPENOBJ_BEGIN(entWall, AcDb::kForRead, TDbWall, pWall); if(pWall) { pWall->GetSideCurve(lCurve, rCurve); } OPENOBJ_END(); } else{ GetExternalBlockWallSeg(entWall, lCurve, rCurve, ptPick); } lCurve.ProjectToMe(ptPick, ptNew1); rCurve.ProjectToMe(ptPick, ptNew2); if(ads_distance(ptPick, ptNew1) < ads_distance(ptPick, ptNew2)){ SelCurve = lCurve; TmpCurve = rCurve; bIsLeft = TRUE; } else{ SelCurve = rCurve; TmpCurve = lCurve; bIsLeft = FALSE; } double nRotate(0), nRotate2(0); if(!SelCurve.Is(CURVE_LINE)){ ads_prompt(_T("不能选择弧墙!请重新选择墙线")); continue; } XPoint ptS = SelCurve.GetLine().StartPoint(); XPoint ptE = SelCurve.GetLine().EndPoint(); if(dlg.m_iPlace == 1){ XPoint ptOther; //与哪边墙角近 if(ads_distance(ptPick, ptS) < ads_distance(ptPick, ptE)){ ptIns = ptS; ptOther = TmpCurve.GetLine().StartPoint(); nRotate2 = ads_angle(ptS, ptE); } else{ ptIns = ptE; ptOther = TmpCurve.GetLine().EndPoint(); nRotate2 = ads_angle(ptS, ptE) + PI; } AcGeVector2d v1(AcGePoint2d(ptPick[0],ptPick[1]) - AcGePoint2d(ptIns[0],ptIns[1])); AcGeVector2d v2(AcGePoint2d(ptOther[0],ptOther[1]) - AcGePoint2d(ptIns[0],ptIns[1])); v1.normalize(); v2.normalize(); if(v1.dotProduct(v2) > 0.0000001){ ads_prompt(_T("请重新选择墙线")); continue; } if(bIsLeft) nRotate = ads_angle(ptS, ptE); else nRotate = ads_angle(ptS, ptE) + PI; ads_polar(ptIns, nRotate+(PI/2), g_nStandPipe2Wall, ptIns); ads_polar(ptIns, nRotate2, g_nStandPipe2Wall, ptIns); ptOld = ptIns; } else if(dlg.m_iPlace == 2){ if(rCurve.GetLength() < 0.01){//沿线布置 AcGeVector3d vectBase(lCurve.EndPoint().x - lCurve.StartPoint().x, lCurve.EndPoint().y - lCurve.StartPoint().y, 0); TPipeEdJig jig(ptPick, g_nPipeRadius[dlg.m_iPipeType], vectBase); jig.m_nLockAng = g_nStandPipe2Wall; jig.SetKeyword(_T("D")); jig.SetPrompt(_T("\n请指定立管的插入方向[距墙距离(D)]<退出>:")); while(1){ int nKeyIdx; int nRetCode=jig.DoIt(&nKeyIdx); if(nRetCode==RTNORM){ ptIns = jig.m_ptPick; break; } else if(nRetCode == RTKWORD){ ads_getdist(ptPick, _T("\n请输入立管距墙的距离:"), &g_nStandPipe2Wall); jig.m_nLockAng = g_nStandPipe2Wall; continue; } else break; } } else{//沿墙布置 ptIns = ptPick; if(bIsLeft) nRotate = ads_angle(ptS, ptE); else nRotate = ads_angle(ptS, ptE) + PI; ads_polar(ptIns, nRotate+(PI/2), g_nStandPipe2Wall, ptIns); ptOld = ptIns; } } } else{ //3.x版墙体 XWall myWall(entWall); Entity entOther = myWall.GetNextWallLine(ptPick); if(!entOther){//单线 XCurveSegment seg(entWall); AcGeVector3d vectBase(seg.EndPoint().x - seg.StartPoint().x, seg.EndPoint().y - seg.StartPoint().y, 0); TPipeEdJig jig(ptPick, g_nPipeRadius[dlg.m_iPipeType], vectBase); jig.m_nLockAng = g_nStandPipe2Wall; jig.SetKeyword(_T("D")); jig.SetPrompt(_T("\n请指定立管的插入方向[距墙距离(D)]<退出>:")); while(1){ int nKeyIdx; int nRetCode=jig.DoIt(&nKeyIdx); if(nRetCode==RTNORM){ ptIns = jig.m_ptPick; break; } else if(nRetCode == RTKWORD){ ads_getdist(ptPick, _T("\n请输入立管距墙的距离:"), &g_nStandPipe2Wall); jig.m_nLockAng = g_nStandPipe2Wall; continue; } else break; } } else{//3.x版墙体 XCurveSegment SelCurve(entWall); XCurveSegment TmpCurve(entOther); double angleWall = ads_angle(SelCurve.GetStartPoint(), SelCurve.GetEndPoint()); double angleWall1 = angleWall; double angleWall2 = ads_angle(TmpCurve.GetStartPoint(), TmpCurve.GetEndPoint()); double dn = fabs(angleWall2 - angleWall1); if(fabs(dn - PI) < 0.0001){ //逆向平行 XLine line(TmpCurve.EndPoint(), TmpCurve.StartPoint(), 1); TmpCurve = line; //纠正过来 } if(TmpCurve.OnWhichSide(ptPick) == OFFSET_RIGHT) angleWall = angleWall + PI; double nRotate2(0); XPoint ptS = SelCurve.GetLine().StartPoint(); XPoint ptE = SelCurve.GetLine().EndPoint(); if(dlg.m_iPlace == 1){ XPoint ptOther; if(ads_distance(ptPick, ptS) < ads_distance(ptPick, ptE)){ ptIns = ptS; ptOther = TmpCurve.GetLine().StartPoint(); nRotate2 = ads_angle(ptS, ptE); } else{ ptIns = ptE; ptOther = TmpCurve.GetLine().EndPoint(); nRotate2 = ads_angle(ptS, ptE) + PI; } AcGeVector2d v1(AcGePoint2d(ptPick[0],ptPick[1]) - AcGePoint2d(ptIns[0],ptIns[1])); AcGeVector2d v2(AcGePoint2d(ptOther[0],ptOther[1]) - AcGePoint2d(ptIns[0],ptIns[1])); v1.normalize(); v2.normalize(); if(v1.dotProduct(v2) > 0.0000001){ ads_prompt(_T("请重新选择墙线")); continue; } ads_polar(ptIns, angleWall+(PI/2), g_nStandPipe2Wall, ptIns); ads_polar(ptIns, nRotate2, g_nStandPipe2Wall, ptIns); } else if(dlg.m_iPlace == 2){ ptIns = ptPick; ads_polar(ptIns, angleWall+(PI/2), g_nStandPipe2Wall, ptIns); ptOld = ptIns; } } } } InitPipeLayer(dlg.GetLayer()); int iPipeIdx = GetPipeLayerIdxByName(dlg.GetLayer()); CString csMat = GetPipeMaterialByIdx(g_iPipeMaterial[iPipeIdx]); CString csDnHead = GetDnByMat(csMat); TDbPipe *pPipe=new TDbPipe; PickSet ss(SS_FREE); GetPointPickSet(ptIns, ss, rbMaskPipe, 50); double len = ss.Length(); ptIns.z = dlg.m_nEleDown*dMeter; pPipe->SetStartPoint(ptIns); ptIns.z = dlg.m_nEleUp*dMeter; pPipe->SetEndPoint(ptIns); pPipe->setLinetype(_T("CONTINUOUS")); pPipe->setLayer(dlg.GetLayer()); pPipe->SetSysType(dlg.GetPipeSysType()); pPipe->SetDnDiameter(_ttoi(dlg.m_csDn)); pPipe->SetModelType(TPipeSys::kModel); pPipe->SetMaterial(g_iPipeMaterial[iPipeIdx]); // pPipe->SetPipeWeight(dlg.GetPipeWeight()); pPipe->SetPipeWeight(g_nPipeWidth[iPipeIdx]); pPipe->SetRadius(g_nPipeRadius[iPipeIdx]); pPipe->SetLabel(csDnHead); if(g_bPipeDouble[iPipeIdx]) pPipe->SetRadiusIn(g_nPipeRadius[iPipeIdx] / 2); else { if(!g_bStandPipeArc)//传统扣弯 pPipe->SetRadiusIn(-2); } pPipe->setColor(AcCmColor()); //随层 AcDbObjectId id = AddToCurrentSpace(pPipe, Adesk::kTrue); CString csDim = g_csPipeDim[iPipeIdx] + _T("L"); if(!g_bIsPipeDimCir || g_bIsPipeDimCir == 3) csDim += _T("-"); Entity entLast; entLast.GetLast(); WriteXdata(entLast, _T("PIPE-SERIAL"), dlg.m_csName); if(_tcsicmp(dlg.m_csFloorName, _T("")) != 0) WriteXdata(entLast,_T("BUILDING-SERIAL"),dlg.m_csFloorName); DoDimStandPipe(id, csDim, dlg.m_csName); dlg.UpdateData(TRUE); // cet 2013.3.12 modify 递增编号支持非纯数字 // dlg.m_csName.Format(_T("%d"), _ttoi(dlg.m_csName) + 1); dlg.UpdateSerial(); dlg.UpdateData(FALSE); } dlg.DestroyWindow(); SHads_command(RTSTR, _T(".REDRAW"), RTNONE); } ///////////////////////////////////////////////////////////////////////////// // CDrawStandPipeDlg dialog extern BOOL GetLayerReMark(const TCHAR *szLayer, CString &sRemark); IMPLEMENT_DYNAMIC(CDrawStandPipeDlg, CModelessDialog) int CDrawStandPipeDlg::m_iPipeType = 0; int CDrawStandPipeDlg::m_iPipeType2 = 0; // cet 2011.12.1 add int CDrawStandPipeDlg::m_iPipeType3 = 9; // cet 2011.12.1 add int CDrawStandPipeDlg::m_iPlace = 0; int CDrawStandPipeDlg::m_iPos = 0; CString CDrawStandPipeDlg::m_csDn = _T("-1"); CString CDrawStandPipeDlg::m_csName = _T("1"); CString CDrawStandPipeDlg::m_csEle = _T("0"); CString CDrawStandPipeDlg::m_csFloorName = _T(""); std::map CDrawStandPipeDlg::m_mapAngle; // cet 2012.3.15 add DWORD CDrawStandPipeDlg::m_nSelSerialID = WM_USER + 1; // cet 2013.3.13 编号菜单默认选项 std::map > CDrawStandPipeDlg::m_mapPipeSerial; CDrawStandPipeDlg::CDrawStandPipeDlg(int iType, CWnd* pParent /*=NULL*/) : CModelessDialog(CDrawStandPipeDlg::IDD, pParent) { //{{AFX_DATA_INIT(CDrawStandPipeDlg) m_csDim1 = _T("J"); m_csDim2 = _T("RJ"); m_csDim3 = _T("RH"); m_csDim4 = _T("W"); m_csDim5 = _T("F"); m_csDim6 = _T("Y"); m_csDim7 = _T("Z"); m_csDim8 = _T("X"); m_csDim9 = _T("H"); m_nEleDown = 0; m_nEleUp = 3; m_csDim10 = _T(""); m_bLockAngle = FALSE; //}}AFX_DATA_INIT m_spinName.SetBase(1); if(m_csDn == _T("-1")) m_csDn = Itoa(g_iDefaultPipeDn); m_iPipeMode = iType; m_pMenu = NULL; m_pMenuEle = NULL; // cet 2010.6.23 add m_bEle = false; // cet 2010.6.23 add m_pMenuAngle = NULL; // cet 2012.3.15 add m_bSendCmdKeyToCAD = FALSE; // cet 2012.3.16 add m_pMenuSerial = NULL; // cet 2013.3.13 add m_bOpeningMenuSerial = false; // cet 2013.3.18 add m_bInitDlg = false; // zxl 2013.10.17 add } CDrawStandPipeDlg::~CDrawStandPipeDlg() { if(::IsWindow(m_hWnd)) DestroyWindow(); if(m_pMenu != NULL) { m_pMenu->DestroyMenu(); delete m_pMenu; } // 清除角度菜单 cet 2012.3.16 add if (m_pMenuAngle != NULL) { m_pMenuAngle->DestroyMenu(); delete m_pMenuAngle; } // cet 2012.10.18 add if (m_pMenuEle != NULL) { m_pMenuEle->DestroyMenu(); delete m_pMenuEle; } // cet 2013.3.13 add if (m_pMenuSerial != NULL) { m_pMenuSerial->DestroyMenu(); delete m_pMenuSerial; } } void CDrawStandPipeDlg::DoDataExchange(CDataExchange* pDX) { CModelessDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CDrawStandPipeDlg) DDX_Control(pDX, IDC_COMBO_DN, m_comboDn); DDX_Control(pDX, IDC_SPIN_NAME, m_spinName); DDX_Text(pDX, IDC_STATIC_1, m_csDim1); DDX_Text(pDX, IDC_STATIC_2, m_csDim2); DDX_Text(pDX, IDC_STATIC_3, m_csDim3); DDX_Text(pDX, IDC_STATIC_4, m_csDim4); DDX_Text(pDX, IDC_STATIC_5, m_csDim5); DDX_Text(pDX, IDC_STATIC_6, m_csDim6); DDX_Text(pDX, IDC_STATIC_7, m_csDim7); DDX_Text(pDX, IDC_STATIC_8, m_csDim8); DDX_Text(pDX, IDC_STATIC_9, m_csDim9); DDX_Text(pDX, IDC_EDIT_ELE_DOWN, m_nEleDown); DDX_Text(pDX, IDC_EDIT_ELE_UP, m_nEleUp); DDX_Text(pDX, IDC_STATIC_10, m_csDim10); DDX_Text(pDX, IDC_EDIT_NAME, m_csName); DDX_Radio(pDX, IDC_RADIO_PIPETYPE1, m_iPipeType2); // cet 2011.12.1 modify DDX_Radio(pDX, IDC_RADIO_PLACE1, m_iPlace); //DDX_CBString(pDX, IDC_COMBO_DN, m_csDn); cet 2012.8.30 del DDX_Text(pDX, IDC_EDIT_ELEVATION, m_csEle); DDX_Text(pDX, IDC_EDIT_FLOOR_NAME, m_csFloorName); DDX_Radio(pDX, IDC_RADIO_POS1, m_iPos); DDX_Check(pDX, IDC_CHECK_LOCKANGLE, m_bLockAngle); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CDrawStandPipeDlg, CModelessDialog) //{{AFX_MSG_MAP(CDrawStandPipeDlg) ON_WM_CLOSE() ON_BN_CLICKED(IDC_RADIO_PLACE1, OnRadioPlace1) ON_BN_CLICKED(IDC_RADIO_PLACE2, OnRadioPlace2) ON_BN_CLICKED(IDC_RADIO_PLACE3, OnRadioPlace3) ON_BN_CLICKED(IDC_BUTTON_SETTING, OnButtonSetting) ON_BN_CLICKED(IDC_RADIO_PIPETYPE1, OnRadioPipetype1) ON_BN_CLICKED(IDC_RADIO_PIPETYPE2, OnRadioPipetype2) ON_BN_CLICKED(IDC_RADIO_PIPETYPE3, OnRadioPipetype3) ON_BN_CLICKED(IDC_RADIO_PIPETYPE4, OnRadioPipetype4) ON_BN_CLICKED(IDC_RADIO_PIPETYPE5, OnRadioPipetype5) ON_BN_CLICKED(IDC_RADIO_PIPETYPE6, OnRadioPipetype6) ON_BN_CLICKED(IDC_RADIO_PIPETYPE7, OnRadioPipetype7) ON_BN_CLICKED(IDC_RADIO_PIPETYPE8, OnRadioPipetype8) ON_BN_CLICKED(IDC_RADIO_PIPETYPE9, OnRadioPipetype9) ON_BN_CLICKED(IDC_RADIO_PIPETYPE10, OnRadioPipetype10) /* cet 2011.12.1 del ON_BN_CLICKED(IDC_RADIO_PIPETYPE11, OnRadioPipetype11) ON_BN_CLICKED(IDC_RADIO_PIPETYPE12, OnRadioPipetype12) ON_BN_CLICKED(IDC_RADIO_PIPETYPE13, OnRadioPipetype13) ON_BN_CLICKED(IDC_RADIO_PIPETYPE14, OnRadioPipetype14) ON_BN_CLICKED(IDC_RADIO_PIPETYPE15, OnRadioPipetype15) ON_BN_CLICKED(IDC_RADIO_PIPETYPE16, OnRadioPipetype16) ON_BN_CLICKED(IDC_RADIO_PIPETYPE17, OnRadioPipetype17) */ ON_BN_CLICKED(IDC_BUTTON_MENU, OnButtonMenu) ON_BN_CLICKED(IDC_BTN_SERIAL, OnButtonSerial) ON_BN_CLICKED(IDC_BUTTON_ANGLEMENU, OnButtonAngleMenu) ON_WM_DESTROY() ON_BN_CLICKED(IDC_CHECK_LOCKANGLE, OnCheckLockangle) ON_BN_CLICKED(IDC_RADIO_POS1, OnRadioPos1) ON_BN_CLICKED(IDC_RADIO_POS2, OnRadioPos2) ON_BN_CLICKED(IDC_RADIO_POS3, OnRadioPos3) ON_CBN_EDITCHANGE(IDC_COMBO_DN, OnEditChangeComboDn) ON_CBN_SELCHANGE(IDC_COMBO_DN, OnSelchangeComboDn) ON_EN_CHANGE(IDC_EDIT_FLOOR_NAME, OnEditChangeFloorName) ON_MESSAGE(WM_ACAD_KEEPFOCUS, onAcadKeepFocus) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CDrawStandPipeDlg message handlers LONG_PTR CDrawStandPipeDlg::onAcadKeepFocus(UINT_PTR, LONG_PTR) { CWnd *pFoucsWnd = CDrawStandPipeDlg::GetFocus(); if (pFoucsWnd != NULL && (pFoucsWnd->GetDlgCtrlID() == IDC_EDIT_ELEVATION || pFoucsWnd->GetDlgCtrlID() == 1001 || pFoucsWnd->GetDlgCtrlID() == IDC_EDIT_NAME || pFoucsWnd->GetDlgCtrlID() == IDC_EDIT_ELE_DOWN || pFoucsWnd->GetDlgCtrlID() == IDC_EDIT_ELE_UP || pFoucsWnd->GetDlgCtrlID() == IDC_EDIT_FLOOR_NAME)) { return TRUE; } CPoint pt; GetCursorPos(&pt); CRect rc; GetWindowRect(&rc); return (rc.PtInRect(pt) ? TRUE : FALSE); } BOOL CDrawStandPipeDlg::OnInitDialog() { CModelessDialog::OnInitDialog(); m_spinName.SetRange(1, 100); CWnd *pWnd5 = GetDlgItem(IDC_STATIC_SET); CWnd *pWnd6 = GetDlgItem(IDC_RADIO_PLACE1); CWnd *pWnd3 = GetDlgItem(IDC_RADIO_PLACE2); CWnd *pWnd4 = GetDlgItem(IDC_RADIO_PLACE3); CWnd *pWnd9 = GetDlgItem(IDC_STATIC_NAME); CWnd *pWnd12 = GetDlgItem(IDC_SPIN_NAME); CWnd *pWnd10 = GetDlgItem(IDC_EDIT_ELEVATION); CWnd *pWnd11 = GetDlgItem(IDC_EDIT_NAME); CWnd *pWndM = GetDlgItem(IDC_BUTTON_MENU); // cet 2010.6.23 add CWnd *pWnd13 = GetDlgItem(IDC_CHECK_LOCKANGLE); // cet 2011.7.27 add CWnd *pWnd14 = GetDlgItem(IDC_STATIC_BOTTOMELE); // cet 2011.7.27 add CWnd *pWnd15 = GetDlgItem(IDC_EDIT_ELE_DOWN); // cet 2011.7.27 add CWnd *pWnd16 = GetDlgItem(IDC_BUTTON_ANGLEMENU); // cet 2012.3.15 add CWnd *pWnd17 = GetDlgItem(IDC_BTN_SERIAL); // cet 2013.3.13 add if(m_iPipeMode == 1){ SetWindowText(_T("立管")); pWnd5->SetWindowText(_T("布置方式")); pWnd6->SetWindowText(_T("任意布置")); pWnd3->SetWindowText(_T("墙角布置")); pWnd4->SetWindowText(_T("沿墙布置")); m_iPlace = 0; pWnd10->ShowWindow(SW_HIDE); pWndM->ShowWindow(SW_HIDE); // cet 2010.6.23 add pWnd13->ShowWindow(SW_HIDE); // cet 2011.7.27 add pWnd16->ShowWindow(SW_HIDE); // cet 2012.3.15 add InitMenuSerial(); // cet 2013.3.13 add UpdateSpinVisible(); // cet 2013.3.13 add } else if(m_iPipeMode == 0){ CRegProperty regProp(GetRegLocation(), _T("TWT7")); regProp.SetTopRootKey(HKEY_CURRENT_USER); CString csMenu; regProp.GetValue(_T("menu"), csMenu); if(csMenu.Find(_T("OUT")) > -1 || csMenu.Find(_T("out")) > -1){ m_comboDn.ResetContent(); m_csDn = _T("200"); m_comboDn.AddString(_T("200")); m_comboDn.AddString(_T("300")); m_comboDn.AddString(_T("350")); m_comboDn.AddString(_T("400")); m_comboDn.AddString(_T("500")); m_comboDn.AddString(_T("600")); m_comboDn.AddString(_T("700")); m_comboDn.AddString(_T("800")); m_comboDn.AddString(_T("900")); m_comboDn.AddString(_T("1000")); } SetWindowText(_T("管线")); pWnd5->SetWindowText(_T("等标高管线交叉")); pWnd6->SetWindowText(_T("生成四通")); pWnd3->SetWindowText(_T("管线置上")); pWnd4->SetWindowText(_T("管线置下")); CWnd *pWnd1 = GetDlgItem(IDC_STATIC_NAME); CWnd *pWnd2 = GetDlgItem(IDC_SPIN_NAME); pWnd9->SetWindowText(_T("标高(m):")); // cet 2010.6.23 add 修改标高编辑框的大小 int nWidth = 0, nHeight = 0; CRect rec; pWnd10->GetWindowRect(&rec); pWnd10->GetParent()->ScreenToClient(&rec); nWidth = rec.Width(); nHeight = rec.Height(); CPoint ptL = rec.TopLeft(); pWnd10->MoveWindow(ptL.x, ptL.y, nWidth * 2 / 3, nHeight); pWnd10->ShowWindow(SW_SHOW); pWnd11->ShowWindow(SW_HIDE); pWnd12->ShowWindow(SW_HIDE); pWnd14->ShowWindow(SW_HIDE); // cet 2011.7.27 add pWnd15->ShowWindow(SW_HIDE); // cet 2011.7.27 add pWnd17->ShowWindow(SW_HIDE); // cet 2013.3.13 add m_spinName.SetBase(10); CRect rect; this->GetWindowRect(&rect); // rect.bottom -= 78; cet 2011.7.27 modify rect.bottom -= 52; this->MoveWindow(&rect); if(fabs(_tstof(m_csEle)) < 0.01) m_csEle = _T("0"); InitAngleData(); // cet 2012.3.15 add } ResetShowRadio(); ResetRegion(); m_csDim1 = g_csPipeDim[0]; m_csDim2 = g_csPipeDim[1]; m_csDim3 = g_csPipeDim[2]; m_csDim4 = g_csPipeDim[3]; m_csDim5 = g_csPipeDim[4]; m_csDim6 = g_csPipeDim[5]; m_csDim7 = g_csPipeDim[6]; m_csDim8 = g_csPipeDim[7]; m_csDim9 = g_csPipeDim[8]; m_csDim10 = g_csPipeDim[m_iPipeType3]; UpdateData(FALSE); // cet 2010.6.23 add ReadWriteData(); UpdateData(FALSE); // cet 2011.12.14 add 根据管线当前选择的低中高区设置标注文字 UpdateDimText(); // cet 2012.3.15 add 根据是否使用角度盘更新角度菜单可用性 if (m_iPipeMode == 0) { EnableAngleMenu(m_bLockAngle); } // 更新管径 cet 2012.8.30 UpdatePipeDn(FALSE); m_bInitDlg = true; // zxl 2013.10.17 add return TRUE; } void CDrawStandPipeDlg::ResetShowRadio() { /* cet 2011.12.1 modify //其他 CWnd *pWnd10 = GetDlgItem(IDC_RADIO_PIPETYPE10); CWnd *pWnd11 = GetDlgItem(IDC_RADIO_PIPETYPE11); CWnd *pWnd12 = GetDlgItem(IDC_RADIO_PIPETYPE12); CWnd *pWnd13 = GetDlgItem(IDC_RADIO_PIPETYPE13); CWnd *pWnd14 = GetDlgItem(IDC_RADIO_PIPETYPE14); CWnd *pWnd15 = GetDlgItem(IDC_RADIO_PIPETYPE15);//其它 CWnd *pWnd16 = GetDlgItem(IDC_RADIO_PIPETYPE16); CWnd *pWnd17 = GetDlgItem(IDC_RADIO_PIPETYPE17); pWnd10->ShowWindow(SW_HIDE); pWnd11->ShowWindow(SW_HIDE); pWnd12->ShowWindow(SW_HIDE); pWnd13->ShowWindow(SW_HIDE); pWnd14->ShowWindow(SW_HIDE); pWnd15->ShowWindow(SW_HIDE); pWnd16->ShowWindow(SW_HIDE); pWnd17->ShowWindow(SW_HIDE); pWnd10->EnableWindow(FALSE); pWnd11->EnableWindow(FALSE); pWnd12->EnableWindow(FALSE); pWnd13->EnableWindow(FALSE); pWnd14->EnableWindow(FALSE); pWnd15->EnableWindow(FALSE); pWnd16->EnableWindow(FALSE); pWnd17->EnableWindow(FALSE); pWnd10->SetWindowText(g_csPipeName[0]); pWnd11->SetWindowText(g_csPipeName[1]); pWnd12->SetWindowText(g_csPipeName[2]); pWnd13->SetWindowText(g_csPipeName[3]); pWnd14->SetWindowText(g_csPipeName[4]); pWnd16->SetWindowText(g_csPipeName[5]); pWnd17->SetWindowText(g_csPipeName[6]); if(m_iPipeType == 9) { pWnd10->EnableWindow(TRUE); pWnd10->ShowWindow(SW_SHOW); } else if(m_iPipeType == 10) { pWnd11->EnableWindow(TRUE); pWnd11->ShowWindow(SW_SHOW); } else if(m_iPipeType == 11) { pWnd12->EnableWindow(TRUE); pWnd12->ShowWindow(SW_SHOW); } else if(m_iPipeType == 12) { pWnd13->EnableWindow(TRUE); pWnd13->ShowWindow(SW_SHOW); } else if(m_iPipeType == 13) { pWnd14->EnableWindow(TRUE); pWnd14->ShowWindow(SW_SHOW); } else if(m_iPipeType == 15) { pWnd16->EnableWindow(TRUE); pWnd16->ShowWindow(SW_SHOW); } else if(m_iPipeType == 16) { pWnd17->EnableWindow(TRUE); pWnd17->ShowWindow(SW_SHOW); } else { pWnd15->EnableWindow(TRUE); pWnd15->ShowWindow(SW_SHOW); } */ CWnd *pWnd = GetDlgItem(IDC_RADIO_PIPETYPE10); if (pWnd == NULL) { return; } std::vector vecPipeName; GetPipeName(vecPipeName); if (m_iPipeType3 == 9) { pWnd->SetWindowText(vecPipeName[0]); } else if (m_iPipeType3 == 10) { pWnd->SetWindowText(vecPipeName[1]); } else if (m_iPipeType3 == 11) { pWnd->SetWindowText(vecPipeName[2]); } else if (m_iPipeType3 == 12) { pWnd->SetWindowText(vecPipeName[3]); } else if (m_iPipeType3 == 13) { pWnd->SetWindowText(vecPipeName[4]); } else if (m_iPipeType3 == 14) { pWnd->SetWindowText(_T("其它管")); } else if (m_iPipeType3 == 15) { pWnd->SetWindowText(vecPipeName[5]); } else if (m_iPipeType3 == 16) { pWnd->SetWindowText(vecPipeName[6]); } else if (m_iPipeType3 == 29) { pWnd->SetWindowText(vecPipeName[7]); } else if (m_iPipeType3 == 30) { pWnd->SetWindowText(vecPipeName[8]); } else if (m_iPipeType3 == 31) { pWnd->SetWindowText(vecPipeName[9]); } else if (m_iPipeType3 == 32) { pWnd->SetWindowText(vecPipeName[10]); } else if (m_iPipeType3 == 33) { pWnd->SetWindowText(vecPipeName[11]); } else if (m_iPipeType3 == 34) { pWnd->SetWindowText(vecPipeName[12]); } CString sText; pWnd->GetWindowText(sText); if (sText.Find(_T("↓")) == -1) { sText+=_T("↓"); pWnd->SetWindowText(sText); } m_csDim10 = g_csPipeDim[m_iPipeType3]; // 更新下拉菜单当前项对应的标注文字 } void CDrawStandPipeDlg::OnClose() { CModelessDialog::OnClose(); acedPostCommand(_T("\33\33")); } TPipeSys::SysType CDrawStandPipeDlg::GetPipeSysType() { UpdateData(); if(m_iPipeType == 0) { //cet 2011.12.6 modify //return TPipeSys::kFeedWater; if (m_iPos == 0) { return TPipeSys::kFeedWater; } else if (m_iPos == 1) { return TPipeSys::kFeedWater2; } else { return TPipeSys::kFeedWater3; } } else if(m_iPipeType == 1) { //cet 2011.12.6 modify //return TPipeSys::kHeatFeedWater; if (m_iPos == 0) { return TPipeSys::kHeatFeedWater; } else if (m_iPos == 1) { return TPipeSys::kHeatFeedWater2; } else { return TPipeSys::kHeatFeedWater3; } } else if(m_iPipeType == 2) { //cet 2011.12.6 modify //return TPipeSys::kHeatBackWater; if (m_iPos == 0) { return TPipeSys::kHeatBackWater; } else if (m_iPos == 1) { return TPipeSys::kHeatBackWater2; } else { return TPipeSys::kHeatBackWater3; } } else if(m_iPipeType == 3) return TPipeSys::kDirtWater; else if(m_iPipeType == 4) return TPipeSys::kUselessWater; else if(m_iPipeType == 5) return TPipeSys::kRainWater; else if(m_iPipeType == 6) { //cet 2011.12.6 modify //return TPipeSys::kUsedWater; if (m_iPos == 0) { return TPipeSys::kUsedWater; } else if (m_iPos == 1) { return TPipeSys::kUsedWater2; } else { return TPipeSys::kUsedWater3; } } else if(m_iPipeType == 7) { //cet 2011.12.6 modify //return TPipeSys::kFireFighting; if (m_iPos == 0) { return TPipeSys::kFireFighting; } else if (m_iPos == 1) { return TPipeSys::kFireFighting2; } else { return TPipeSys::kFireFighting3; } } else if(m_iPipeType == 8) { //cet 2011.12.6 modify //return TPipeSys::kSprinkle; if (m_iPos == 0) { return TPipeSys::kSprinkle; } else if (m_iPos == 1) { return TPipeSys::kSprinkle2; } else { return TPipeSys::kSprinkle3; } } else if(m_iPipeType == 9) return TPipeSys::kCoagulate; else if(m_iPipeType == 10) return TPipeSys::kDrink; else if(m_iPipeType == 11) return TPipeSys::kPressDirt; else if(m_iPipeType == 12) return TPipeSys::kPressUseless; else if(m_iPipeType == 13) return TPipeSys::kPressRain; else if(m_iPipeType == 14) return TPipeSys::kOther; else if(m_iPipeType == 15) return TPipeSys::kCivilFeed; else if(m_iPipeType == 16) return TPipeSys::kCycleFeed; else if (m_iPipeType == 29) // cet 2011.12.1 add 29-34 { return TPipeSys::kUser3; } else if (m_iPipeType == 30) { return TPipeSys::kUser4; } else if (m_iPipeType == 31) { return TPipeSys::kUser5; } else if (m_iPipeType == 32) { return TPipeSys::kUser6; } else if (m_iPipeType == 33) { return TPipeSys::kUser7; } else if (m_iPipeType == 34) { return TPipeSys::kUser8; } else return TPipeSys::kUnknownSys; } const TCHAR* CDrawStandPipeDlg::GetLayer() { UpdateData(); if(m_iPipeMode == 1){ if(m_iPipeType == 0) { if(m_iPos == 0) return LAY_VPIPE_FEED; else if(m_iPos == 1) return LAY_VPIPE_FEED2; else if(m_iPos == 2) return LAY_VPIPE_FEED3; } else if(m_iPipeType == 1) { if(m_iPos == 0) return LAY_VPIPE_HEADFEED; else if(m_iPos == 1) return LAY_VPIPE_HEADFEED2; else if(m_iPos == 2) return LAY_VPIPE_HEADFEED3; } else if(m_iPipeType == 2) { if(m_iPos == 0) return LAY_VPIPE_HEADBACK; else if(m_iPos == 1) return LAY_VPIPE_HEADBACK2; else if(m_iPos == 2) return LAY_VPIPE_HEADBACK3; } else if(m_iPipeType == 3) return LAY_VPIPE_DIRT; else if(m_iPipeType == 4) return LAY_VPIPE_USELESS; else if(m_iPipeType == 5) return LAY_VPIPE_RAIN; else if(m_iPipeType == 6) { if(m_iPos == 0) return LAY_VPIPE_USED; else if(m_iPos == 1) return LAY_VPIPE_USED2; else if(m_iPos == 2) return LAY_VPIPE_USED3; } else if(m_iPipeType == 7) { if(m_iPos == 0) return LAY_VPIPE_FIRE; else if(m_iPos == 1) return LAY_VPIPE_FIRE2; else if(m_iPos == 2) return LAY_VPIPE_FIRE3; } else if(m_iPipeType == 8) { if(m_iPos == 0) return LAY_VPIPE_SPRINKLE; else if(m_iPos == 1) return LAY_VPIPE_SPRINKLE2; else if(m_iPos == 2) return LAY_VPIPE_SPRINKLE3; } else if(m_iPipeType == 9) return LAY_VPIPE_COAGULATE; else if(m_iPipeType == 10) return LAY_VPIPE_DRINK; else if(m_iPipeType == 11) return LAY_VPIPE_PRESSDIRT; else if(m_iPipeType == 12) return LAY_VPIPE_PRESSUSELESS; else if(m_iPipeType == 13) return LAY_VPIPE_PRESSRAIN; else if(m_iPipeType == 14) return LAY_VPIPE_OTHER; else if(m_iPipeType == 15) return LAY_VPIPE_USER1; else if(m_iPipeType == 16) return LAY_VPIPE_USER2; else if (m_iPipeType == 29) // cet 2011.12.1 add 29-34 { return LAY_VPIPE_USER3; } else if (m_iPipeType == 30) { return LAY_VPIPE_USER4; } else if (m_iPipeType == 31) { return LAY_VPIPE_USER5; } else if (m_iPipeType == 32) { return LAY_VPIPE_USER6; } else if (m_iPipeType == 33) { return LAY_VPIPE_USER7; } else if (m_iPipeType == 34) { return LAY_VPIPE_USER8; } else return _T(""); } else{ if(m_iPipeType == 0) { if(m_iPos == 0) return LAY_PIPE_FEED; else if(m_iPos == 1) return LAY_PIPE_FEED2; else if(m_iPos == 2) return LAY_PIPE_FEED3; } else if(m_iPipeType == 1) { if(m_iPos == 0) return LAY_PIPE_HEADFEED; else if(m_iPos == 1) return LAY_PIPE_HEADFEED2; else if(m_iPos == 2) return LAY_PIPE_HEADFEED3; } else if(m_iPipeType == 2) { if(m_iPos == 0) return LAY_PIPE_HEADBACK; else if(m_iPos == 1) return LAY_PIPE_HEADBACK2; else if(m_iPos == 2) return LAY_PIPE_HEADBACK3; } else if(m_iPipeType == 3) return LAY_PIPE_DIRT; else if(m_iPipeType == 4) return LAY_PIPE_USELESS; else if(m_iPipeType == 5) return LAY_PIPE_RAIN; else if(m_iPipeType == 6) { if(m_iPos == 0) return LAY_PIPE_USED; else if(m_iPos == 1) return LAY_PIPE_USED2; else if(m_iPos == 2) return LAY_PIPE_USED3; } else if(m_iPipeType == 7) { if(m_iPos == 0) return LAY_PIPE_FIRE; else if(m_iPos == 1) return LAY_PIPE_FIRE2; else if(m_iPos == 2) return LAY_PIPE_FIRE3; } else if(m_iPipeType == 8) { if(m_iPos == 0) return LAY_PIPE_SPRINKLE; else if(m_iPos == 1) return LAY_PIPE_SPRINKLE2; else if(m_iPos == 2) return LAY_PIPE_SPRINKLE3; } else if(m_iPipeType == 9) return LAY_PIPE_COAGULATE; else if(m_iPipeType == 10) return LAY_PIPE_DRINK; else if(m_iPipeType == 11) return LAY_PIPE_PRESSDIRT; else if(m_iPipeType == 12) return LAY_PIPE_PRESSUSELESS; else if(m_iPipeType == 13) return LAY_PIPE_PRESSRAIN; else if(m_iPipeType == 14) return LAY_PIPE_OTHER; else if(m_iPipeType == 15) return LAY_PIPE_USER1; else if(m_iPipeType == 16) return LAY_PIPE_USER2; else if (m_iPipeType == 29) // cet 2011.12.1 add 29-34 { return LAY_PIPE_USER3; } else if (m_iPipeType == 30) { return LAY_PIPE_USER4; } else if (m_iPipeType == 31) { return LAY_PIPE_USER5; } else if (m_iPipeType == 32) { return LAY_PIPE_USER6; } else if (m_iPipeType == 33) { return LAY_PIPE_USER7; } else if (m_iPipeType == 34) { return LAY_PIPE_USER8; } else return _T(""); } return _T(""); } //返回全局pipe index int CDrawStandPipeDlg::GetPipeIdx() { int ret = 0; if(m_iPipeType == 0) { if(m_iPos == 0) ret = 0; else if(m_iPos == 1) ret = 17; else if(m_iPos == 2) ret = 18; } else if(m_iPipeType == 1) { if(m_iPos == 0) ret = 1; else if(m_iPos == 1) ret = 19; else if(m_iPos == 2) ret = 20; } else if(m_iPipeType == 2) { if(m_iPos == 0) ret = 2; else if(m_iPos == 1) ret = 21; else if(m_iPos == 2) ret = 22; } else if(m_iPipeType == 3) ret = 3; else if(m_iPipeType == 4) ret = 4; else if(m_iPipeType == 5) ret = 5; else if(m_iPipeType == 6) { if(m_iPos == 0) ret = 6; else if(m_iPos == 1) ret = 27; else if(m_iPos == 2) ret = 28; } else if(m_iPipeType == 7) { if(m_iPos == 0) ret = 7; else if(m_iPos == 1) ret = 23; else if(m_iPos == 2) ret = 24; } else if(m_iPipeType == 8) { if(m_iPos == 0) ret = 8; else if(m_iPos == 1) ret = 25; else if(m_iPos == 2) ret = 26; } else if(m_iPipeType == 9) ret = 9; else if(m_iPipeType == 10) ret = 10; else if(m_iPipeType == 11) ret = 11; else if(m_iPipeType == 12) ret = 12; else if(m_iPipeType == 13) ret = 13; else if(m_iPipeType == 14) ret = 14; else if(m_iPipeType == 15) ret = 15; else if(m_iPipeType == 16) ret = 16; else if (m_iPipeType == 29) // cet 2011.12.1 add 29-34 { ret = 29; } else if (m_iPipeType == 30) { ret = 30; } else if (m_iPipeType == 31) { ret = 31; } else if (m_iPipeType == 32) { ret = 32; } else if (m_iPipeType == 33) { ret = 33; } else if (m_iPipeType == 34) { ret = 34; } else return 0; return ret; } void CDrawStandPipeDlg::OnRadioPlace1() { UpdateData(); PostCommand(_T("V "), false); } void CDrawStandPipeDlg::OnRadioPlace2() { UpdateData(); PostCommand(_T("V "), false); } void CDrawStandPipeDlg::OnRadioPlace3() { UpdateData(); PostCommand(_T("V "), false); } void CDrawStandPipeDlg::ResetRegion() { // UpdateData(); CWnd *pWnd1 = GetDlgItem(IDC_RADIO_POS1); CWnd *pWnd2 = GetDlgItem(IDC_RADIO_POS2); CWnd *pWnd3 = GetDlgItem(IDC_RADIO_POS3); //cet 2011.12.1 modify //if(m_iPipeType == 0 || m_iPipeType == 1 || m_iPipeType == 2 || m_iPipeType == 6 || m_iPipeType == 7 || m_iPipeType == 8) if(m_iPipeType2 == 0 || m_iPipeType2 == 1 || m_iPipeType2 == 2 || m_iPipeType2 == 6 || m_iPipeType2 == 7 || m_iPipeType2 == 8) { pWnd1->EnableWindow(TRUE); pWnd2->EnableWindow(TRUE); pWnd3->EnableWindow(TRUE); } else { pWnd1->EnableWindow(FALSE); pWnd2->EnableWindow(FALSE); pWnd3->EnableWindow(FALSE); } } void CDrawStandPipeDlg::OnRadioPipetype1() { UpdateData(); m_iPipeType = 0; UpdateData(FALSE); ResetRegion(); PostCommand(_T("V "), false); } void CDrawStandPipeDlg::OnRadioPipetype2() { UpdateData(); m_iPipeType = 1; UpdateData(FALSE); ResetRegion(); PostCommand(_T("V "), false); } void CDrawStandPipeDlg::OnRadioPipetype3() { UpdateData(); m_iPipeType = 2; UpdateData(FALSE); ResetRegion(); PostCommand(_T("V "), false); } void CDrawStandPipeDlg::OnRadioPipetype4() { UpdateData(); m_iPipeType = 3; UpdateData(FALSE); ResetRegion(); PostCommand(_T("V "), false); } void CDrawStandPipeDlg::OnRadioPipetype5() { UpdateData(); m_iPipeType = 4; UpdateData(FALSE); ResetRegion(); PostCommand(_T("V "), false); } void CDrawStandPipeDlg::OnRadioPipetype6() { UpdateData(); m_iPipeType = 5; UpdateData(FALSE); ResetRegion(); PostCommand(_T("V "), false); } void CDrawStandPipeDlg::OnRadioPipetype7() { UpdateData(); m_iPipeType = 6; UpdateData(FALSE); ResetRegion(); PostCommand(_T("V "), false); } void CDrawStandPipeDlg::OnRadioPipetype8() { UpdateData(); m_iPipeType = 7; UpdateData(FALSE); ResetRegion(); PostCommand(_T("V "), false); } void CDrawStandPipeDlg::OnRadioPipetype9() { UpdateData(); m_iPipeType = 8; UpdateData(FALSE); ResetRegion(); PostCommand(_T("V "), false); } void CDrawStandPipeDlg::PullMenu() { // if(m_iPipeType < 9)//sr 2009-10-20 有时候无缘无故会激发这个出来,比如选图上管线,系统从其它跳到指定管线系统 // return; CWnd *pWnd = GetDlgItem(IDC_RADIO_PIPETYPE10); // GetDlgItem(IDC_RADIO_PIPETYPE15) cet 2011.12.1 modify CRect rc; pWnd->GetWindowRect(rc); if(m_pMenu) { m_pMenu->DestroyMenu(); m_pMenu->CreatePopupMenu(); } else { m_pMenu = new CMenu; m_pMenu->CreatePopupMenu(); } /* cet 2011.12.1 modify m_pMenu->AppendMenu(MF_STRING, PipeMenuID + 1, g_csPipeName[0]); m_pMenu->AppendMenu(MF_STRING, PipeMenuID + 2, g_csPipeName[1]); m_pMenu->AppendMenu(MF_STRING, PipeMenuID + 3, g_csPipeName[2]); m_pMenu->AppendMenu(MF_STRING, PipeMenuID + 4, g_csPipeName[3]); m_pMenu->AppendMenu(MF_STRING, PipeMenuID + 5, g_csPipeName[4]); m_pMenu->AppendMenu(MF_STRING, PipeMenuID + 6, g_csPipeName[5]); m_pMenu->AppendMenu(MF_STRING, PipeMenuID + 7, g_csPipeName[6]); m_pMenu->AppendMenu(MF_STRING, PipeMenuID + 8, _T("其 它 管")); */ std::vector vecPipeName; GetPipeName(vecPipeName); m_pMenu->AppendMenu(MF_STRING, PipeMenuID + 1, vecPipeName[0]); m_pMenu->AppendMenu(MF_STRING, PipeMenuID + 2, vecPipeName[1]); m_pMenu->AppendMenu(MF_STRING, PipeMenuID + 3, vecPipeName[2]); m_pMenu->AppendMenu(MF_STRING, PipeMenuID + 4, vecPipeName[3]); m_pMenu->AppendMenu(MF_STRING, PipeMenuID + 5, vecPipeName[4]); m_pMenu->AppendMenu(MF_STRING, PipeMenuID + 6, vecPipeName[5]); m_pMenu->AppendMenu(MF_STRING, PipeMenuID + 7, vecPipeName[6]); m_pMenu->AppendMenu(MF_STRING, PipeMenuID + 8, vecPipeName[7]); m_pMenu->AppendMenu(MF_STRING, PipeMenuID + 9, vecPipeName[8]); m_pMenu->AppendMenu(MF_STRING, PipeMenuID + 10, vecPipeName[9]); m_pMenu->AppendMenu(MF_STRING, PipeMenuID + 11, vecPipeName[10]); m_pMenu->AppendMenu(MF_STRING, PipeMenuID + 12, vecPipeName[11]); m_pMenu->AppendMenu(MF_STRING, PipeMenuID + 13, vecPipeName[12]); m_pMenu->AppendMenu(MF_STRING, PipeMenuID + 14, _T("其 它 管")); m_pMenu->TrackPopupMenu( TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_VERTICAL, rc.left, rc.bottom, this, &rc); PostCommand(_T("V "), false); // if(m_iPipeMode == 1) // PostCommand(_T("W "), false); } void CDrawStandPipeDlg::OnRadioPipetype10() { // cet 2012.10.19 add 判断鼠标点是否在控件上 CPoint pt; ::GetCursorPos(&pt); CRect rect; GetDlgItem(IDC_RADIO_PIPETYPE10)->GetWindowRect(rect); if (!rect.PtInRect(pt)) { return; } UpdateData(); // cet 2011.12.6 add m_iPipeType = m_iPipeType3; ResetRegion(); PullMenu(); } /* cet 2011.12.1 del void CDrawStandPipeDlg::OnRadioPipetype11() { UpdateData(); ResetRegion(); PullMenu(); } void CDrawStandPipeDlg::OnRadioPipetype12() { UpdateData(); ResetRegion(); PullMenu(); } void CDrawStandPipeDlg::OnRadioPipetype13() { UpdateData(); ResetRegion(); PullMenu(); } void CDrawStandPipeDlg::OnRadioPipetype14() { UpdateData(); ResetRegion(); PullMenu(); } void CDrawStandPipeDlg::OnRadioPipetype15() { UpdateData(); ResetRegion(); PullMenu(); } void CDrawStandPipeDlg::OnRadioPipetype16() { UpdateData(); ResetRegion(); PullMenu(); } void CDrawStandPipeDlg::OnRadioPipetype17() { UpdateData(); ResetRegion(); PullMenu(); } */ void CDrawStandPipeDlg::OnButtonSetting() { CTemporaryResourceOverride vTemp; CPipeSettingFrameDlg dlg; if(dlg.DoModal() != IDOK) return; m_csDim1 = g_csPipeDim[0]; m_csDim2 = g_csPipeDim[1]; m_csDim3 = g_csPipeDim[2]; m_csDim4 = g_csPipeDim[3]; m_csDim5 = g_csPipeDim[4]; m_csDim6 = g_csPipeDim[5]; m_csDim7 = g_csPipeDim[6]; m_csDim8 = g_csPipeDim[7]; m_csDim9 = g_csPipeDim[8]; UpdateData(FALSE); } #define GET_WM_COMMAND_CMD(wp, lp) HIWORD(wp) #define GET_WM_COMMAND_ID(wp, lp) LOWORD(wp) #define GET_WM_COMMAND_HWND(wp, lp) ((HWND)lp) BOOL CDrawStandPipeDlg::OnCommand(WPARAM wParam, LPARAM lParam) { CString csCommand; //2010-9-2 SR 增加以下7句。对话框启动的时候m_iPipeType有1个默认值,会临时产生单击事件,更换管线类型后点击其他控件,会无缘无故引发这个消息从而改变管线类型 int nID = GET_WM_COMMAND_ID(wParam,lParam); UINT nCodeNotify = GET_WM_COMMAND_CMD(wParam,lParam); HWND hwndCtl = GET_WM_COMMAND_HWND(wParam,lParam); CPoint pt; ::GetCursorPos(&pt); if (hwndCtl != ::WindowFromPoint(pt) && (nID >= IDC_RADIO_PIPETYPE1 && nID <= IDC_RADIO_PIPETYPE9)) return TRUE;//如果点所在的控件不是当前控件,终止消息执行 // cet 2013.3.13 add 处理立管编号菜单 if (m_iPipeMode == 1 && m_pMenuSerial != NULL && m_bOpeningMenuSerial) { m_bOpeningMenuSerial = false; std::map >::iterator it, itEnd = m_mapSerial.end(); it = m_mapSerial.find(nID); if (it != itEnd) { CWnd *pWnd = GetDlgItem(IDC_EDIT_NAME); if (pWnd != NULL) { pWnd->SetFocus(); } // 选项没有变化 if (it->second.second) { return TRUE; } std::map >::iterator itBegin; for (itBegin = m_mapSerial.begin(); itBegin != itEnd; ++itBegin) { if (itBegin != it) { itBegin->second.second = false; } else { itBegin->second.second = true; } } m_nSelSerialID = nID; UpdateSpinVisible(); PostCommand(_T("V "), false); return TRUE; } } // cet 2012.3.16 add 处理角度菜单 int nAngleID = PipeMenuID + 15; if (nAngleID <= nID && nID < nAngleID + m_mapAngle.size()) { if (m_pMenuAngle != NULL) { m_pMenuAngle->GetMenuString(wParam, csCommand, MF_BYCOMMAND); double dAngle = _tstof(csCommand); if (!SelectAngleMenuItem(dAngle)) { return CDialog::OnCommand(wParam, lParam); } else if (m_bSendCmdKeyToCAD) { PostCommand(_T("T "), false); } } else { return CDialog::OnCommand(wParam, lParam); } } // cet 2010.6.23 if (m_pMenuEle != NULL) { m_pMenuEle->GetMenuString(wParam, csCommand, MF_BYCOMMAND); if (csCommand.Compare(_T("自动读取前一管线标高")) == 0) { m_bEle = true; } else if (csCommand.Compare(_T("不读取前一管线标高")) == 0) { m_bEle = false; } } if(m_pMenu == NULL) { return CModelessDialog::OnCommand(wParam, lParam); } // return TRUE; m_pMenu->GetMenuString(wParam, csCommand, MF_BYCOMMAND); //判断用户是否点的是弹出菜单 if(csCommand.IsEmpty()){ return CModelessDialog::OnCommand(wParam, lParam); } /* cet 2011.12.1 modify CWnd *pWnd1 = GetDlgItem(IDC_RADIO_PIPETYPE10); CWnd *pWnd2 = GetDlgItem(IDC_RADIO_PIPETYPE11); CWnd *pWnd3 = GetDlgItem(IDC_RADIO_PIPETYPE12); CWnd *pWnd4 = GetDlgItem(IDC_RADIO_PIPETYPE13); CWnd *pWnd5 = GetDlgItem(IDC_RADIO_PIPETYPE14); CWnd *pWnd6 = GetDlgItem(IDC_RADIO_PIPETYPE15); CWnd *pWnd7 = GetDlgItem(IDC_RADIO_PIPETYPE16); CWnd *pWnd8 = GetDlgItem(IDC_RADIO_PIPETYPE17); pWnd1->ShowWindow(SW_HIDE); pWnd2->ShowWindow(SW_HIDE); pWnd3->ShowWindow(SW_HIDE); pWnd4->ShowWindow(SW_HIDE); pWnd5->ShowWindow(SW_HIDE); pWnd6->ShowWindow(SW_HIDE); pWnd7->ShowWindow(SW_HIDE); pWnd8->ShowWindow(SW_HIDE); pWnd1->EnableWindow(FALSE); pWnd2->EnableWindow(FALSE); pWnd3->EnableWindow(FALSE); pWnd4->EnableWindow(FALSE); pWnd5->EnableWindow(FALSE); pWnd6->EnableWindow(FALSE); pWnd7->EnableWindow(FALSE); pWnd8->EnableWindow(FALSE); if(csCommand == g_csPipeName[0]){ m_iPipeType = 9; pWnd1->ShowWindow(SW_SHOW); pWnd1->EnableWindow(TRUE); pWnd1->SetWindowText(g_csPipeName[0]); } else if(csCommand == g_csPipeName[1]){ m_iPipeType = 10; pWnd2->EnableWindow(TRUE); pWnd2->ShowWindow(SW_SHOW); pWnd2->SetWindowText(g_csPipeName[1]); } else if(csCommand == g_csPipeName[2]){ m_iPipeType = 11; pWnd3->EnableWindow(TRUE); pWnd3->ShowWindow(SW_SHOW); pWnd3->SetWindowText(g_csPipeName[2]); } else if(csCommand == g_csPipeName[3]){ m_iPipeType = 12; pWnd4->ShowWindow(SW_SHOW); pWnd4->EnableWindow(TRUE); pWnd4->SetWindowText(g_csPipeName[3]); } else if(csCommand == g_csPipeName[4]){ m_iPipeType = 13; pWnd5->EnableWindow(TRUE); pWnd5->ShowWindow(SW_SHOW); pWnd5->SetWindowText(g_csPipeName[4]); } else if(csCommand == _T("其 它 管")){ m_iPipeType = 14; pWnd6->EnableWindow(TRUE); pWnd6->ShowWindow(SW_SHOW); } else if(csCommand == g_csPipeName[5]){ m_iPipeType = 15; pWnd7->EnableWindow(TRUE); pWnd7->ShowWindow(SW_SHOW); pWnd7->SetWindowText(g_csPipeName[5]); } else if(csCommand == g_csPipeName[6]){ m_iPipeType = 16; pWnd8->EnableWindow(TRUE); pWnd8->ShowWindow(SW_SHOW); pWnd8->SetWindowText(g_csPipeName[6]); } m_csDim10 = g_csPipeDim[m_iPipeType]; */ std::vector vecPipeName; GetPipeName(vecPipeName); CWnd *pWnd = GetDlgItem(IDC_RADIO_PIPETYPE10); if(csCommand == vecPipeName[0]){ m_iPipeType = 9; pWnd->SetWindowText(vecPipeName[0]); } else if(csCommand == vecPipeName[1]){ m_iPipeType = 10; pWnd->SetWindowText(vecPipeName[1]); } else if(csCommand == vecPipeName[2]){ m_iPipeType = 11; pWnd->SetWindowText(vecPipeName[2]); } else if(csCommand == vecPipeName[3]){ m_iPipeType = 12; pWnd->SetWindowText(vecPipeName[3]); } else if(csCommand == vecPipeName[4]){ m_iPipeType = 13; pWnd->SetWindowText(vecPipeName[4]); } else if(csCommand == _T("其 它 管")){ m_iPipeType = 14; pWnd->SetWindowText(_T("其 它 管")); } else if(csCommand == vecPipeName[5]){ m_iPipeType = 15; pWnd->SetWindowText(vecPipeName[5]); } else if(csCommand == vecPipeName[6]){ m_iPipeType = 16; pWnd->SetWindowText(vecPipeName[6]); } else if(csCommand == vecPipeName[7]){ m_iPipeType = 29; pWnd->SetWindowText(vecPipeName[7]); } else if(csCommand == vecPipeName[8]){ m_iPipeType = 30; pWnd->SetWindowText(vecPipeName[8]); } else if(csCommand == vecPipeName[9]){ m_iPipeType = 31; m_iPipeType2 = 9; pWnd->SetWindowText(vecPipeName[9]); } else if(csCommand == vecPipeName[10]){ m_iPipeType = 32; pWnd->SetWindowText(vecPipeName[10]); } else if(csCommand == vecPipeName[11]){ m_iPipeType = 33; pWnd->SetWindowText(vecPipeName[11]); } else if(csCommand == vecPipeName[12]){ m_iPipeType = 34; pWnd->SetWindowText(vecPipeName[12]); } m_csDim10 = g_csPipeDim[m_iPipeType]; m_iPipeType3 = m_iPipeType; m_iPipeType2 = 9; CString sText; pWnd->GetWindowText(sText); if (sText.Find(_T("↓")) == -1) { sText+=_T("↓"); pWnd->SetWindowText(sText); } UpdateData(FALSE); if(m_iPipeMode == 1) PostCommand(_T("V "), false); return CModelessDialog::OnCommand(wParam, lParam); } void CDrawStandPipeDlg::ReadWriteData(bool bRead) { UpdateData(TRUE); CRegProperty reg(GetRegLocation(), _T("DrawPipe")); // reg.SetTopRootKey(HKEY_LOCAL_MACHINE); // cet 2010.7.19 del 存储位置错误 reg.SetTopRootKey(HKEY_CURRENT_USER); // cet 2010.7.19 add if (bRead) { if(!reg.GetValue(_T("Elevation"), m_bEle)) { m_bEle = false; } if (!reg.GetValue(_T("LockAngle"), m_bLockAngle)) // cet 2011.7.27 add { m_bLockAngle = FALSE; } } else { reg.SetValue(_T("Elevation"), m_bEle); reg.SetValue(_T("LockAngle"), m_bLockAngle); // cet 2011.7.27 add } } void CDrawStandPipeDlg::OnButtonMenu() { CWnd *pWnd = GetDlgItem(IDC_BUTTON_MENU); CRect rc; pWnd->GetWindowRect(rc); if(m_pMenuEle != NULL) { m_pMenuEle->DestroyMenu(); m_pMenuEle->CreatePopupMenu(); } else { m_pMenuEle = new CMenu; m_pMenuEle->CreatePopupMenu(); } if (m_bEle) { m_pMenuEle->AppendMenu(MF_CHECKED, PipeMenuID + 11, _T("自动读取前一管线标高")); m_pMenuEle->AppendMenu(MF_UNCHECKED, PipeMenuID + 12, _T("不读取前一管线标高")); } else { m_pMenuEle->AppendMenu(MF_UNCHECKED, PipeMenuID + 11, _T("自动读取前一管线标高")); m_pMenuEle->AppendMenu(MF_CHECKED, PipeMenuID + 12, _T("不读取前一管线标高")); } m_pMenuEle->TrackPopupMenu( TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_VERTICAL, rc.left, rc.bottom, this, &rc); } void CDrawStandPipeDlg::OnButtonSerial() { CWnd *pWnd = GetDlgItem(IDC_BTN_SERIAL); if (pWnd == NULL) { return; } CRect rect; pWnd->GetWindowRect(&rect); if (m_pMenuSerial == NULL) { m_pMenuSerial = new CMenu; } else { m_pMenuSerial->DestroyMenu(); } m_pMenuSerial->CreatePopupMenu(); std::map >::iterator it, itEnd = m_mapSerial.end(); for (it = m_mapSerial.begin(); it != itEnd; ++it) { UINT nflag = it->second.second ? MF_CHECKED : MF_UNCHECKED; m_pMenuSerial->AppendMenu(nflag, it->first, it->second.first); } m_pMenuSerial->TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_VERTICAL, rect.left, rect.bottom, this, &rect); m_bOpeningMenuSerial = true; } void CDrawStandPipeDlg::OnButtonAngleMenu() { CWnd *pWnd = GetDlgItem(IDC_BUTTON_ANGLEMENU); CRect rc; pWnd->GetWindowRect(rc); if(m_pMenuAngle != NULL) { m_pMenuAngle->DestroyMenu(); m_pMenuAngle->CreatePopupMenu(); } else { m_pMenuAngle = new CMenu; m_pMenuAngle->CreatePopupMenu(); } CString sAngle; int nID = PipeMenuID + 15; std::map::iterator it; for (it = m_mapAngle.begin(); it != m_mapAngle.end(); it++) { sAngle.Format(_T("%.3f"), it->first); sAngle.TrimRight(_T("0")); sAngle.TrimRight(_T(".")); m_pMenuAngle->AppendMenu(it->second ? MF_CHECKED : MF_UNCHECKED, nID++, (LPCTSTR)sAngle); } m_pMenuAngle->TrackPopupMenu( TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_VERTICAL, rc.left, rc.bottom, this, &rc); } void CDrawStandPipeDlg::OnDestroy() { CModelessDialog::OnDestroy(); ReadWriteData(false); } void CDrawStandPipeDlg::GetPipeName(std::vector &vecPipeName) { CString sTemp; if(GetLayerReMark(LAY_PIPE_COAGULATE, sTemp) && !sTemp.IsEmpty()) { vecPipeName.push_back(sTemp); } else { vecPipeName.push_back(_T("凝结")); } if(GetLayerReMark(LAY_PIPE_DRINK, sTemp) && !sTemp.IsEmpty()) { vecPipeName.push_back(sTemp); } else { vecPipeName.push_back(_T("直饮")); } if(GetLayerReMark(LAY_PIPE_PRESSDIRT, sTemp) && !sTemp.IsEmpty()) { vecPipeName.push_back(sTemp); } else { vecPipeName.push_back(_T("压力污")); } if(GetLayerReMark(LAY_PIPE_PRESSUSELESS, sTemp) && !sTemp.IsEmpty()) { vecPipeName.push_back(sTemp); } else { vecPipeName.push_back(_T("压力废")); } if(GetLayerReMark(LAY_PIPE_PRESSRAIN, sTemp) && !sTemp.IsEmpty()) { vecPipeName.push_back(sTemp); } else { vecPipeName.push_back(_T("压力雨")); } if(GetLayerReMark(LAY_PIPE_USER1, sTemp) && !sTemp.IsEmpty()) { vecPipeName.push_back(sTemp); } else { vecPipeName.push_back(_T("用户1管线")); } if(GetLayerReMark(LAY_PIPE_USER2, sTemp) && !sTemp.IsEmpty()) { vecPipeName.push_back(sTemp); } else { vecPipeName.push_back(_T("用户2管线")); } if(GetLayerReMark(LAY_PIPE_USER3, sTemp) && !sTemp.IsEmpty()) { vecPipeName.push_back(sTemp); } else { vecPipeName.push_back(_T("用户3管线")); } if(GetLayerReMark(LAY_PIPE_USER4, sTemp) && !sTemp.IsEmpty()) { vecPipeName.push_back(sTemp); } else { vecPipeName.push_back(_T("用户4管线")); } if(GetLayerReMark(LAY_PIPE_USER5, sTemp) && !sTemp.IsEmpty()) { vecPipeName.push_back(sTemp); } else { vecPipeName.push_back(_T("用户5管线")); } if(GetLayerReMark(LAY_PIPE_USER6, sTemp) && !sTemp.IsEmpty()) { vecPipeName.push_back(sTemp); } else { vecPipeName.push_back(_T("用户6管线")); } if(GetLayerReMark(LAY_PIPE_USER7, sTemp) && !sTemp.IsEmpty()) { vecPipeName.push_back(sTemp); } else { vecPipeName.push_back(_T("用户7管线")); } if(GetLayerReMark(LAY_PIPE_USER8, sTemp) && !sTemp.IsEmpty()) { vecPipeName.push_back(sTemp); } else { vecPipeName.push_back(_T("用户8管线")); } } //****************************************************************************** //****************************************************************************** int TPipeEdJig::m_iUnit = 0; TPipeEdJig::TPipeEdJig(XPoint pt, double nRadius) { m_iType = 1; m_pt1 = pt; m_pt2 = pt; m_nRadius = nRadius; m_pPipe = new TDbPipe; m_pPipe->SetDnDiameter(25); m_pPipe->SetStartPoint(m_pt1); m_pt2.z += 3000; m_pPipe->SetEndPoint(m_pt2); m_pPipe->SetRadius(nRadius); m_bLock = FALSE; m_bInit = TRUE; m_iUnit = 0; m_nLockAng = -1; m_bGreen = false; // cet 2010.6.23 add m_dWatchScale = 15; // cet 2011.7.27 add m_pDlg = NULL; // cet 2011.7.27 add m_pVirtualPipe = new TdbVirtualPipe; // cet 2011.7.27 add m_pVirtualPipe->SetPipe(m_pPipe); // cet 2011.7.27 add m_vtWatch = AcGeVector3d::kXAxis; // cet 2011.7.28 add m_vtWatch.rotateBy(Ucs2Wcs(0.0), AcGeVector3d::kZAxis); // cet 2011.8.2 add m_dViewSize = GetViewSize(); // cet 2011.8.1 add m_ptViewCenter = GetViewCenter(); // cet 2011.8.1 add } TPipeEdJig::TPipeEdJig(XPoint pt, double nRadius, AcGeVector3d vectBase)//沿线布置 { m_iType = 3; m_ptRef = pt; m_pt1 = pt; m_pt2 = pt; m_nRadius = nRadius; m_pPipe = new TDbPipe; m_pPipe->SetDnDiameter(25); m_pPipe->SetStartPoint(m_pt1); m_pt2.z += 3000; m_pPipe->SetEndPoint(m_pt2); m_pPipe->SetRadius(nRadius); m_bLock = FALSE; m_bInit = TRUE; m_iUnit = 0; m_nLockAng = -1; m_vectBase = vectBase; m_bGreen = false; // cet 2010.6.23 add m_dWatchScale = 15; // cet 2011.7.27 add m_pDlg = NULL; // cet 2011.7.27 add m_pVirtualPipe = new TdbVirtualPipe; // cet 2011.7.27 add m_pVirtualPipe->SetPipe(m_pPipe); // cet 2011.7.27 add m_vtWatch = AcGeVector3d::kXAxis; // cet 2011.7.28 add m_vtWatch.rotateBy(Ucs2Wcs(0.0), AcGeVector3d::kZAxis); // cet 2011.8.2 add m_dViewSize = GetViewSize(); // cet 2011.8.1 add m_ptViewCenter = GetViewCenter(); // cet 2011.8.1 add } TPipeEdJig::TPipeEdJig(XPoint pt1, XPoint pt2) { m_iType = 2; m_pt1 = pt1; m_pt2 = pt2; m_pPipe = new TDbPipe; m_pPipe->SetDnDiameter(25); m_pPipe->SetStartPoint(m_pt1); m_pPipe->DrawPropertyText(TRUE); m_pPipe->SetEndPoint(m_pt2); m_pPipe->setColorIndex(1); m_bLock = TRUE; m_bInit = TRUE; m_nLockAng = -1; m_bGreen = false; // cet 2010.6.23 add m_dWatchScale = 15; // cet 2011.7.27 add m_pDlg = NULL; // cet 2011.7.27 add m_pVirtualPipe = new TdbVirtualPipe; // cet 2011.7.27 add m_pVirtualPipe->SetPipe(m_pPipe); // cet 2011.7.27 add m_vtWatch = AcGeVector3d::kXAxis; // cet 2011.7.28 add m_vtWatch.rotateBy(Ucs2Wcs(0.0), AcGeVector3d::kZAxis); // cet 2011.8.2 add m_dViewSize = GetViewSize(); // cet 2011.8.1 add m_ptViewCenter = GetViewCenter(); // cet 2011.8.1 add } TPipeEdJig::TPipeEdJig(XPoint pt1, XPoint pt2, double nRadius) { m_iType = 0; m_pt1 = pt1; m_pt2 = pt2; m_nRadius = nRadius; m_pPipe = new TDbPipe; m_pPipe->SetDnDiameter(25); m_pPipe->SetStartPoint(m_pt1); m_pPipe->DrawPropertyText(TRUE); m_pPipe->SetEndPoint(m_pt2); m_pPipe->SetRadius(nRadius); m_pPipe->setColorIndex(1); m_bLock = TRUE; m_bInit = TRUE; m_nLockAng = -1; m_bGreen = false; // cet 2010.6.23 add m_dWatchScale = 15; // cet 2011.7.27 add m_pDlg = NULL; // cet 2011.7.27 add m_pVirtualPipe = new TdbVirtualPipe; // cet 2011.7.27 add m_pVirtualPipe->SetPipe(m_pPipe); // cet 2011.7.27 add m_vtWatch = AcGeVector3d::kXAxis; // cet 2011.7.28 add m_vtWatch.rotateBy(Ucs2Wcs(0.0), AcGeVector3d::kZAxis); // cet 2011.8.2 add m_dViewSize = GetViewSize(); // cet 2011.8.1 add m_ptViewCenter = GetViewCenter(); // cet 2011.8.1 add } TPipeEdJig::~TPipeEdJig() { if(m_pPipe) delete m_pPipe; } AcEdJig::DragStatus TPipeEdJig::GetPoint(XPoint &pt) { if(m_bInit){ m_bInit = FALSE; if(!m_ptRef) return acquirePoint(pt); else { XPoint ptTmp = m_ptRef; ptTmp.z = 0; return acquirePoint(pt, ptTmp); } } if(!m_ptRef || m_iUnit != 0){ return acquirePoint(pt); } else return acquirePoint(pt, m_ptRef); } void TPipeEdJig::SetStartPoint(XPoint pt) { m_pt1 = pt; m_pPipe->SetStartPoint(m_pt1); } int TPipeEdJig::DoIt(int *keyIndex) { int nRet = TSymbEdJig::DoIt(keyIndex); return nRet; } XPoint TPipeEdJig::GetCorrectPt() { XPoint ptTmp = m_ptResult; if(m_bLock && m_iUnit>=5){ XPoint ptTmp2 = m_pt1; ptTmp2.z = 0; // 2008-2-18 轴锁支持UCS double dUcs = Radian2Angle(Ucs2Wcs(0.0)); XPoint ptStartUcs = Wcs2Ucs(ptTmp2); XPoint ptEndUcs = Wcs2Ucs(m_ptResult); double nAngle = ads_angle(ptStartUcs, ptEndUcs); //注意,ads_angle必须是UCS // double nAngle = ads_angle(ptTmp2, m_ptResult); int Ang = (int)Radian2Angle(nAngle); double nDist = ads_distance(ptTmp2, m_ptResult); int nTmp = Ang % m_iUnit; int multiple = Ang / m_iUnit; if(nTmp > m_iUnit / 2) nAngle = m_iUnit * (multiple + 1); else nAngle = m_iUnit * multiple; nAngle = nAngle + dUcs; nAngle = nAngle / 180 * PI; ads_polar(m_pt1, nAngle, nDist, ptTmp); } else if(!m_bLock && m_nLockAng > -1){ m_ptRef = XPoint(); XPoint ptTmp2 = m_pt1; ptTmp2.z = 0; XPoint ptTmp3 = m_ptResult; ptTmp3.z = 0; double nAngle = ads_angle(ptTmp2, m_ptResult) - m_nLockAng; double nDist = ads_distance(ptTmp2, ptTmp3); if(nAngle > PI/2 && nAngle < PI/2*3) ads_polar(m_pt1, m_nLockAng, -nDist, ptTmp); else ads_polar(m_pt1, m_nLockAng, nDist, ptTmp); } // cet 2011.7.27 add 普通管线,有角度盘时调整点位置 if (m_pDlg != NULL && m_iType == 0 && m_pDlg->m_bLockAngle) { double dAngle = 0.0; GetWatchPt(TADSGePoint3d(ptTmp), ptTmp, dAngle); } return ptTmp; } // 更新实体数据 Adesk::Boolean TPipeEdJig::update() { Adesk::Boolean bRet=Adesk::kTrue; m_ptPick = m_ptResult; XPoint ptTmp = m_ptResult; if(m_iType == 1){ m_pt1 = m_ptResult; m_pt2 = m_ptResult; m_pPipe->SetStartPoint(m_pt1); m_pt2.z += 3000; m_pPipe->SetEndPoint(m_pt2); } else if(m_iType == 2){ XArc arc(m_pt1, m_ptResult, m_pt2); XPoint ptArcS, ptArcE; arc.GetStartPoint(ptArcS); arc.GetEndPoint(ptArcE); if(m_pt1 == ptArcS) m_pPipe->SetPoints(m_pt1, m_pt2, arc.Bulge()); else m_pPipe->SetPoints(m_pt1, m_pt2, -arc.Bulge()); } else if(m_iType == 3){//沿线布置立管 AcGeVector3d vectTmp(m_ptPick.x - m_ptRef.x, m_ptPick.y - m_ptRef.y, 0); double dAng = m_vectBase.angleTo(vectTmp, AcGeVector3d::kZAxis); //求橡皮筋向量投影到 以m_vectBase为法向量的 平面 AcGeVector3d vtOrtho = vectTmp.orthoProject(m_vectBase); vtOrtho.normalize(); vtOrtho *= m_nLockAng; m_pt1 = m_ptRef; m_pt1 += vtOrtho; m_pt2 = m_pt1; m_pt2.z += 3000; m_pPipe->SetStartPoint(m_pt1); m_pPipe->SetEndPoint(m_pt2); m_ptPick = m_pt1; } else{ if(m_bLock && m_iUnit>=5 ){ ptTmp = GetCorrectPt(); } else if(!m_bLock && m_nLockAng > -1){ ptTmp = GetCorrectPt(); } m_pt2 = ptTmp; // cet 2011.7.27 add 调整值 if (m_pDlg != NULL && m_pDlg->m_bLockAngle) { double dAngle = 0.0; GetWatchPt(m_pt2, ptTmp, dAngle); m_pVirtualPipe->SetAngleDim(m_pt2, dAngle); } m_pVirtualPipe->ShowAngleDim((m_pDlg != NULL && m_pDlg->m_bLockAngle) ? true : false); m_pPipe->SetEndPoint(ptTmp); } // cet 2010.6.23 if (m_bGreen) { m_pPipe->setColorIndex(3); } // cet 2011.7.27 add 普通管线,有角度盘时调整点位置 double dViewSize = GetViewSize(); AcGePoint3d ptViewCenter = GetViewCenter(); if (m_pDlg != NULL && m_iType == 0 && m_pDlg->m_bLockAngle && m_ptWatch.Distance(m_pt1) > _DIST_SNAP || (m_pDlg != NULL && m_iType == 0 && fabs(dViewSize - m_dViewSize) > 0.00001 && m_pDlg->m_bLockAngle) || (m_pDlg != NULL && m_iType == 0 && ptViewCenter.distanceTo(m_ptViewCenter) > _DIST_SNAP && m_pDlg->m_bLockAngle)) { m_dViewSize = dViewSize; m_ptViewCenter = ptViewCenter; m_ptWatch = m_pt1; DrawDuctWatch(m_ptWatch); } return bRet; } AcDbEntity* TPipeEdJig::entity() const { // return (AcDbEntity *)m_pPipe; cet 2011.7.27 modify return (AcDbEntity*)m_pVirtualPipe; } // 绘制刻度盘 void TPipeEdJig::DrawDuctWatch(const AcGePoint3d& ptCenter) { if (Is3DView()) // 三维下不绘制 { return; } double dScale = m_dWatchScale * PI / 180.0; int iSegs = (int)(0.5 * PI / dScale); if (iSegs < 1) iSegs = 1; dScale = 0.5 * PI / iSegs; // 刻度盘支持0~180之间的任意角度 double dScale2 = m_dWatchScale * PI / 180.0; int iSegs2 = (int)(PI * 2 / dScale2); if(1e-6 < PI * 2 - iSegs2 * dScale2) iSegs2++; AcGeVector3d vt = m_vtWatch * PixelToWcs(40); AcGePoint3d pt1, pt2, pt3, pt4; pt1 = ptCenter + vt; ads_point ptS, ptE; if(EQUAL_ZERO(dScale2 - dScale)) { for (int i = 0; i < iSegs * 4; i++) { pt3 = pt1 + vt / 10.0; pt4 = pt1 - vt / 10.0; ptS[0] = pt3.x; ptS[1] = pt3.y; ptS[2] = pt3.z; ptE[0] = pt4.x; ptE[1] = pt4.y; ptE[2] = pt4.z; acdbWcs2Ucs(ptS, ptS, FALSE); acdbWcs2Ucs(ptE, ptE, FALSE); acedGrDraw(ptS, ptE, -1, 0); vt.rotateBy(dScale, AcGeVector3d::kZAxis); pt2 = ptCenter + vt; ptS[0] = pt1.x; ptS[1] = pt1.y; ptS[2] = pt1.z; ptE[0] = pt2.x; ptE[1] = pt2.y; ptE[2] = pt2.z; acdbWcs2Ucs(ptS, ptS, FALSE); acdbWcs2Ucs(ptE, ptE, FALSE); acedGrDraw(ptS, ptE, -1, 0); pt1 = pt2; } } else { AcGePoint3d ptEnd = pt1; for (int i = 0; i < iSegs2; i++) { pt3 = pt1 + vt / 10.0; pt4 = pt1 - vt / 10.0; ptS[0] = pt3.x; ptS[1] = pt3.y; ptS[2] = pt3.z; ptE[0] = pt4.x; ptE[1] = pt4.y; ptE[2] = pt4.z; acdbWcs2Ucs(ptS, ptS, FALSE); acdbWcs2Ucs(ptE, ptE, FALSE); acedGrDraw(ptS, ptE, -1, 0); vt.rotateBy(dScale2, AcGeVector3d::kZAxis); pt2 = ptCenter + vt; if(iSegs2 - 1 == i) pt2 = ptEnd; ptS[0] = pt1.x; ptS[1] = pt1.y; ptS[2] = pt1.z; ptE[0] = pt2.x; ptE[1] = pt2.y; ptE[2] = pt2.z; acdbWcs2Ucs(ptS, ptS, FALSE); acdbWcs2Ucs(ptE, ptE, FALSE); acedGrDraw(ptS, ptE, -1, 0); pt1 = pt2; } } } void TPipeEdJig::GetWatchPt(const TADSGePoint3d pt1, TADSGePoint3d &pt, double &dAngleRet) { if (Is3DView()) { pt = pt1; dAngleRet = 0.0; return; } if (!m_ptWatch) // 第一次使用直接返回,防止出现错误管线 { return; } AcGeVector3d vt = pt1 - m_ptWatch; if(vt.isZeroLength()) // cet 2011.8.23 add { return; } AcGeVector3d vtX = m_vtWatch; double dAngle = vtX.angleTo(vt, AcGeVector3d::kZAxis); dAngle *= 180 / PI; double dAngle1 = 0.0; while(dAngle > dAngle1) // 找到大于dAngle的角度 { dAngle1 += m_dWatchScale; } // 获得角度盘上小于dAngle的最大角度 double dMax = dAngle1 - m_dWatchScale; // 获得角度盘上大于dAngle的最小角度 double dMin = dAngle1; if (dMin > 2 * 180) { dMin = 2 * 180; } if (fabs(dAngle - dMax) < fabs(dAngle - dMin)) { vt.rotateBy((dMax - dAngle) * PI / 180, AcGeVector3d::kZAxis); dAngleRet = dMax; } else { vt.rotateBy((dMin - dAngle) * PI / 180, AcGeVector3d::kZAxis); dAngleRet = dMin; } if (dAngleRet > 180) { dAngleRet = 180 - (dAngleRet - 180); } pt = m_ptWatch + vt; } void TPipeEdJig::SetDlg(CDrawStandPipeDlg *pDlg) { m_pDlg = pDlg; } void TPipeEdJig::SetPipeDir(const AcGeVector3d &vt) { m_vtWatch = vt; } double TPipeEdJig::GetViewSize() { struct resbuf rb = {NULL, RTREAL, 0}; acedGetVar(_T("VIEWSIZE"), &rb); double dViewSize = rb.resval.rreal; return dViewSize; } AcGePoint3d TPipeEdJig::GetViewCenter() { struct resbuf rb = {NULL, RT3DPOINT, 0}; acedGetVar(_T("VIEWCTR"), &rb); AcGePoint3d ptViewCenter = asPnt3d(rb.resval.rpoint); return ptViewCenter; } bool TPipeEdJig::Is3DView() { struct resbuf rb = {NULL, RT3DPOINT, 0}; acedGetVar(_T("VIEWDIR"), &rb); AcGePoint3d ptView = asPnt3d(rb.resval.rpoint); AcGeVector3d vtView = ptView.asVector(); return !vtView.isCodirectionalTo(AcGeVector3d::kZAxis); } // cet 2012.3.16 add 设置角度盘角度 void TPipeEdJig::SetWatchAngle( double dAngle ) { m_dWatchScale = dAngle; } void TPipeEdJig::RedrawWatch() { acedRedraw(NULL, 0); // 清除当前表盘 DrawDuctWatch(m_ptWatch); } BOOL CDrawStandPipeDlg::PreTranslateMessage(MSG* pMsg) { return CModelessDialog::PreTranslateMessage(pMsg); } void CDrawStandPipeDlg::OnCheckLockangle() { UpdateData(TRUE); // cet 2012.3.16 modify 操作角度盘时发送关键字 // if (!m_bLockAngle) // { // PostCommand(_T("L "), false); // cet 2011.8.1 add 刷新 // } if (m_bSendCmdKeyToCAD) { PostCommand(_T("L "), false); } // cet 2012.3.15 add EnableAngleMenu(m_bLockAngle); } void CDrawStandPipeDlg::OnRadioPos1() { UpdateData(TRUE); m_csDim1 = g_csPipeDim[0]; m_csDim2 = g_csPipeDim[1]; m_csDim3 = g_csPipeDim[2]; m_csDim7 = g_csPipeDim[6]; m_csDim8 = g_csPipeDim[7]; m_csDim9 = g_csPipeDim[8]; UpdateData(FALSE); //PostCommand(_T("V "), false); // zxl 2013.10.17 add if (m_bInitDlg) { PostCommand(_T("V "), false); } } void CDrawStandPipeDlg::OnRadioPos2() { UpdateData(TRUE); m_csDim1 = g_csPipeDim[17]; m_csDim2 = g_csPipeDim[19]; m_csDim3 = g_csPipeDim[21]; m_csDim7 = g_csPipeDim[27]; m_csDim8 = g_csPipeDim[23]; m_csDim9 = g_csPipeDim[25]; UpdateData(FALSE); //PostCommand(_T("V "), false); // zxl 2013.10.17 add if (m_bInitDlg) { PostCommand(_T("V "), false); } } void CDrawStandPipeDlg::OnRadioPos3() { UpdateData(TRUE); m_csDim1 = g_csPipeDim[18]; m_csDim2 = g_csPipeDim[20]; m_csDim3 = g_csPipeDim[22]; m_csDim7 = g_csPipeDim[28]; m_csDim8 = g_csPipeDim[24]; m_csDim9 = g_csPipeDim[26]; UpdateData(FALSE); //PostCommand(_T("V "), false); // zxl 2013.10.17 add if (m_bInitDlg) { PostCommand(_T("V "), false); } } void CDrawStandPipeDlg::UpdateDimText() { if (m_iPos == 0) { OnRadioPos1(); } else if (m_iPos == 1) { OnRadioPos2(); } else if (m_iPos == 2) { OnRadioPos3(); } } void CDrawStandPipeDlg::InitAngleData() { if (m_mapAngle.empty()) { m_mapAngle.insert(std::make_pair(15, true)); m_mapAngle.insert(std::make_pair(22.5, false)); m_mapAngle.insert(std::make_pair(30, false)); m_mapAngle.insert(std::make_pair(45, false)); m_mapAngle.insert(std::make_pair(60, false)); } } void CDrawStandPipeDlg::EnableAngleMenu( BOOL bEnable ) { // 设置角度菜单 cet 2012.3.15 CWnd *pWnd = GetDlgItem(IDC_BUTTON_ANGLEMENU); if (pWnd != NULL) { pWnd->EnableWindow(bEnable); } } BOOL CDrawStandPipeDlg::SelectAngleMenuItem( double dAngle ) { std::map::iterator it; it = m_mapAngle.find(dAngle); if (it != m_mapAngle.end()) { std::map::iterator itM; for (itM = m_mapAngle.begin(); itM != m_mapAngle.end(); itM++) { if (it != itM) { itM->second = false; } else { itM->second = true; } } return TRUE; } else { return FALSE; } } double CDrawStandPipeDlg::GetAngleFromMenu() { double dRet = 0.0; std::map::iterator it; for (it = m_mapAngle.begin(); it != m_mapAngle.end(); it++) { if(it->second) { dRet = it->first; break; } } return dRet; } BOOL CDrawStandPipeDlg::IsLockAngle() { return m_bLockAngle; } void CDrawStandPipeDlg::EnableSendKeyToCAD( BOOL bSend ) { m_bSendCmdKeyToCAD = bSend; } void CDrawStandPipeDlg::EnableLockAngle( BOOL bEanble ) { m_bLockAngle = bEanble; EnableAngleMenu(bEanble); } void CDrawStandPipeDlg::UpdatePipeDn( BOOL bRead /*= TRUE*/, BOOL bCmbSel /*= FALSE*/ ) { CWnd *pWnd = GetDlgItem(IDC_COMBO_DN); if (pWnd == NULL) { return; } if (bRead) { if (bCmbSel) { CComboBox *pBox = (CComboBox*)pWnd; if (pBox != NULL) { int nIndex = pBox->GetCurSel(); if (nIndex != -1) { pBox->GetLBText(nIndex, m_csDn); } } } else { pWnd->GetWindowText(m_csDn); } } else { pWnd->SetWindowText(m_csDn); } } void CDrawStandPipeDlg::OnEditChangeComboDn() { UpdateData(TRUE); UpdatePipeDn(); } void CDrawStandPipeDlg::OnSelchangeComboDn() { UpdateData(TRUE); UpdatePipeDn(TRUE, TRUE); } void CDrawStandPipeDlg::OnEditChangeFloorName() { // cet 2013.3.18 modify 不能连续输入 // UpdateData(TRUE); // // 更新编号 // PostCommand(_T("V "), false); UpdateData(TRUE); m_csName = ::GetCurSerial(GetLayer(), m_csFloorName, GetCurSerialFormat(), m_ssEnt); UpdateData(FALSE); } void CDrawStandPipeDlg::InitMenuSerial() { m_mapSerial.clear(); DWORD id = WM_USER + 1; CString sName = _T("数字编号递增"); m_mapSerial.insert(std::make_pair(id, std::make_pair(sName, false))); sName = _T("英文编号递增"); m_mapSerial.insert(std::make_pair(++id, std::make_pair(sName, false))); std::map >::iterator it; std::map >::iterator itEnd = m_mapSerial.end(); it = m_mapSerial.find(m_nSelSerialID); if (it != itEnd) { it->second.second = true; } else { std::map >::iterator itBegin = m_mapSerial.begin(); itBegin->second.second = true; } } void CDrawStandPipeDlg::UpdateSpinVisible() { CWnd *pWnd = GetDlgItem(IDC_SPIN_NAME); if (pWnd == NULL) { return; } CWnd *pWndSerial = GetDlgItem(IDC_EDIT_NAME); if (pWndSerial == NULL) { return; } CRect rect; pWnd->GetWindowRect(&rect); CRect rectNew; pWndSerial->GetWindowRect(&rectNew); ScreenToClient(&rectNew); ScreenToClient(&rect); if (m_nSelSerialID == WM_USER + 1) { pWnd->ShowWindow(SW_SHOW); rectNew.right = rect.left; pWndSerial->MoveWindow(&rectNew); } else if (m_nSelSerialID == WM_USER + 2) { pWnd->ShowWindow(SW_HIDE); rectNew.right = rect.right; pWndSerial->MoveWindow(&rectNew); } } CString CDrawStandPipeDlg::GetCurSerialFormat() { CString sRet; if (m_nSelSerialID == WM_USER + 1) { sRet = _T("1"); } else if (m_nSelSerialID == WM_USER + 2) { sRet = _T("A"); std::map > ::iterator it; int nPipeIdx = GetPipeIdx(); it = m_mapPipeSerial.find(nPipeIdx); if (it != m_mapPipeSerial.end()) { std::map::iterator itTemp; itTemp = it->second.find(m_csFloorName); if (itTemp != it->second.end()) { sRet = itTemp->second; } } } return sRet; } void CDrawStandPipeDlg::SetPickset( PickSet &ssPipe ) { m_ssEnt.Free(); m_ssEnt += ssPipe; } void CDrawStandPipeDlg::UpdateSerial() { // 只更新英文编号 if (m_nSelSerialID != WM_USER + 2) { return; } m_csName = IncreaseSerial(m_csName); int nPipeIdx = GetPipeIdx(); std::map > ::iterator it; it = m_mapPipeSerial.find(nPipeIdx); if (it != m_mapPipeSerial.end()) { std::map::iterator it1; it1 = it->second.find(m_csFloorName); if (it1 != it->second.end()) { it1->second = m_csName; } else { it->second.insert(std::make_pair(m_csFloorName, m_csName)); } } else { std::map mapTemp; mapTemp.insert(std::make_pair(m_csFloorName, m_csName)); m_mapPipeSerial.insert(std::make_pair(nPipeIdx, mapTemp)); } }