// PipeEditDlg.cpp : implementation file // #include "stdafx.h" #include #include #include #include #include #include "DbVPipeDim.h" #include "PipeEditDlg.h" #include "DimSettingDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif /////////////////////////////////////////////////////////// // cet 2013.4.27 add 更新管线上的立管标注 // void UpdateElevationDim(PickSet &ssPipe); // void UpdateElevationDim(Entity &entPipe); // void UpdateElevationDim(const AcDbObjectId &idPipe) // { // ads_name name; // acdbGetAdsName(name, idPipe); // Entity ent(name); // UpdateElevationDim(ent); // } // // void UpdateElevationDim(Entity &entPipe) // { // PickSet ss(SS_FREE); // ss += entPipe; // UpdateElevationDim(ss); // } // // void UpdateElevationDim(PickSet &ssPipe) // { // RBList rbMark(RTDXF0, _T("ATS_ELEVATION"), NULL); // PickSet ssDim; // ssDim.Get(_T("X"), NULL, NULL, rbMark); // int nDimNum = ssDim.Length(); // if (nDimNum == 0) // { // return; // } // // std::vector > vecDim; // for (long j = 0; j < nDimNum; ++j) // { // OPENOBJ_BEGIN(ssDim[j], AcDb::kForRead, TDbSymbElevation, pDim); // if (pDim != NULL) // { // vecDim.push_back(std::make_pair(ssDim[j], pDim->GetLocation())); // } // OPENOBJ_END(); // } // // std::vector >::iterator it, itEnd = vecDim.end(); // long nLen = ssPipe.Length(); // AcGePoint3d ptS, ptE, ptLoc; // AcGeTol tol; // tol.setEqualPoint(0.001); // double dMeter = 1; // if (!DocGetMeterUnitDraw()) // { // tol.setEqualPoint(1); // dMeter = 0.001; // } // AcGeLine3d line1; // CString sText; // for (long i = 0; i < nLen; ++i) // { // OPENOBJ_BEGIN(ssPipe[i], AcDb::kForRead, TDbPipe, pPipe); // if (pPipe != NULL) // { // if (pPipe->IsVertical()) // { // continue; // } // ptS = pPipe->StartPoint(); // ptE = pPipe->EndPoint(); // ptS.z = 0.0; // ptE.z = 0.0; // line1.set(ptS, ptE); // for (it = vecDim.begin(); it != itEnd; ++it) // { // ptLoc = it->second; // ptLoc.z = 0.0; // if (!line1.isOn(ptLoc, tol)) // { // continue; // } // // double dDist = ptLoc.distanceTo(ptS); // double dLen = ptS.distanceTo(ptE); // double dEle = (pPipe->EndPoint().z - pPipe->StartPoint().z) * ( dDist / dLen) + pPipe->StartPoint().z; // // OPENOBJ_BEGIN(it->first, AcDb::kForWrite, TDbSymbElevation, pDim); // if (pDim != NULL) // { // sText.Format(_T("%.3f"), dEle * dMeter); // pDim->SetText(sText); // } // OPENOBJ_END(); // } // } // OPENOBJ_END(); // } // } ///////////////////////////////////////////////////////////////////////////// // CPipeEditDlg dialog //*************************************************************************************************** // 编辑管线 //*************************************************************************************************** extern int EditVerticalPipe(AcDbObjectId id); //extern void UpdatePipeTextDim(Entity ent, CString csDnType, int nPipeDn); extern BOOL InvokeLineTypeMan(); extern void ModifyPipeEquimentAttachment(TDbPipe *pPipe); // cet 2010.9.27 add //得到管道的水容积 double GetPipeCuba(Entity ent) { double dRet(0); OPENOBJ_BEGIN(ent, AcDb::kForRead, TDbPipe, pPipe); if(pPipe){ int iMaterial = pPipe->GetMaterial(); CString csMat = GetPipeMaterialByIdx(iMaterial); double nPipeDn = pPipe->GetDnDiameter(); double nRetDj = GetPipeDjByDn(csMat, (int)nPipeDn)/2.0; double dLen = pPipe->Length(); // if(!DocGetMeterUnitDraw()) // dLen = dLen/1000.0; dRet = PI*nRetDj*nRetDj*dLen; } OPENOBJ_END(); return dRet; } //更新坡度标注 sr modify 2007-6-14 根据扩展数据:句柄 void UpdateGradientDim(Entity ent, double i) { double nLen(0); CString csPipeName; double nGradient(0); OPENOBJ_BEGIN(ent, AcDb::kForWrite, TDbPipe, pPipe); if(pPipe){ nGradient = pPipe->GetPipeGradient(); if(nGradient > 1) nGradient = 0; nLen = pPipe->Length(); // if(!DocGetMeterUnitDraw()) // nLen = nLen / 1000; AcDbObjectId idPipe = pPipe->objectId(); AcDbHandle handle = idPipe.handle(); TCHAR szHandle[17]=_T(""); handle.getIntoAsciiBuffer(szHandle); csPipeName = szHandle; } OPENOBJ_END(); double nArrowLen = 17*DocGetPScale(); XPoint ptStart, ptEnd, ptText; GetPipePoint(ent, ptStart, ptEnd, ptText); CString csText; int iTmp = int(i * 1000) * 10; int iTmp2 = int(i * 10000); if(iTmp == iTmp2) csText.Format(_T("i=%.3f"), i); else csText.Format(_T("i=%.4f"), i); XPoint ptUcs = Wcs2Ucs(ptText); PickSet ss(SS_FREE); RBList rbMask = ads_buildlist( -4, _T(""), -4, _T("or>"), NULL); XPoint ptTemp1, ptTemp2; ptTemp1.x = ptUcs.x - nLen*1000; ptTemp1.y = ptUcs.y + nLen*1000; ptTemp2.x = ptUcs.x + nLen*1000; ptTemp2.y = ptUcs.y - nLen*1000; ptTemp1.z = 0; ptTemp2.z = 0; ss.Get(_T("C"), ptTemp1, ptTemp2, rbMask); long len1 = ss.Length(); for(long j=0;jSetText(csText); } OPENOBJ_END(); } } } void GetNewDimType(TDbPipe *pPipe, int &nDnType, int &nLenType, int &nGradientType, int &nLabelType, int &nDrawType) { if (pPipe == NULL) { return; } if (pPipe->IsNewDimType()) { nDnType = pPipe->GetPipeDnDimType(); nLenType = pPipe->GetPipeLenDimType(); nGradientType = pPipe->GetPipeGradientDimType(); nLabelType = pPipe->GetPipeDimLableType(); nDrawType = pPipe->GetPipeLableDrawType(); return; } int dSpare = pPipe->GetSpare(); nDrawType = 0; if (dSpare > 100) // 大于100时,十位百位数表示管线长度样式 (8.5及以上版本) { int iDimType = static_cast(dSpare); CString sTemp; sTemp.Format(_T("%d"), iDimType); nLenType = static_cast(_tstof(sTemp.Right(2))); --iDimType; iDimType /= 100; if(iDimType == 1) //DN500 i=0.003 12.3m { nDnType = 1; nGradientType = 1; nLabelType = 0; } else if(iDimType == 2) //DN500-0.003-12.3m { nDnType = 1; nGradientType = 3; nLabelType = 1; } else if(iDimType == 3) //DN500 0.003 12.3m { nDnType = 1; nGradientType = 3; nLabelType = 0; } else if(iDimType == 4) //DN500 i=0.003 { nDnType = 1; nLenType = 0; nGradientType = 1; nLabelType = 0; } else if(iDimType == 5) //DN500-0.003 { nDnType = 1; nLenType = 0; nGradientType = 3; nLabelType = 1; } else if(iDimType == 6) //DN500 0.003 { nDnType = 1; nLenType = 0; nGradientType = 1; nLabelType = 0; } else if(iDimType == 7) //DN500 12.3m { nDnType = 1; nGradientType = 0; nLabelType = 0; } else if(iDimType == 8) //DN500-12.3m { nDnType = 1; nGradientType = 0; nLabelType = 1; } else if(iDimType == 9) //DN500 i0.003 L=12.3m { nDnType = 1; nGradientType = 5; nLabelType = 0; } else if(iDimType == 10) //DN500/12.3 { nDnType = 1; nGradientType = 0; nLabelType = 2; } else if (iDimType == 11) // 12.3m { nDnType = 0; nGradientType = 0; nLabelType = 0; } } else if (dSpare > 0 && dSpare < 11) // 8.2版本 { if (dSpare == 1) { nDnType = 1; nLenType = 1; nGradientType = 1; nLabelType = 0; } else if (dSpare == 2) { nDnType = 1; nLenType = 5; nGradientType = 3; nLabelType = 1; } else if (dSpare == 3) { nDnType = 1; nLenType = 5; nGradientType = 3; nLabelType = 0; } else if (dSpare == 4) { nDnType = 1; nLenType = 0; nGradientType = 1; nLabelType = 0; } else if (dSpare == 5) { nDnType = 1; nLenType = 0; nGradientType = 3; nLabelType = 1; } else if (dSpare == 6) { nDnType = 1; nLenType = 0; nGradientType = 3; nLabelType = 0; } else if (dSpare == 7) { nDnType = 1; nLenType = 1; nGradientType = 0; nLabelType = 0; } else if (dSpare == 8) { nDnType = 1; nLenType = 5; nGradientType = 0; nLabelType = 1; } else if (dSpare == 9) { nDnType = 1; nLenType = 5; nGradientType = 0; nLabelType = 0; } else if (dSpare == 10) { nDnType = 1; nLenType = 3; nGradientType = 5; nLabelType = 0; } } else if (dSpare == 0) { nDnType = 1; nLenType = 0; nGradientType = 0; nLabelType = 0; } else { nDnType = 1; pPipe->EnableDrawLabel(FALSE); } } int EditPipe(AcDbObjectId id) { if(!id) return RTERROR; int iColor(0), iMaterial(0), iHideLevel(0), iInsulate(0);; double nWidth(0), nPipeDn(0), nEle2(0); CString csLayer, csLineType, csDnType, csDimType; double nElevation(0), nGradient(0), nSpare(0); BOOL bDrawLabel(0); // zxl 2013.1.6 add 调整管线标注样式 int nDnType = 0; int nLenType = 0; int nGradientType = 0; int nLabelType = 0; int nDrawType = 0; CTemporaryResourceOverride vTemp; CPipeEditDlg dlg; BOOL IsVertical = FALSE; double dSEle = 0.0, dEEle = 0.0; // cet 2011.11.1 add 记录起点终点原始标高 OPENOBJ_BEGIN(id, AcDb::kForRead, TDbPipe, pPipe); if(!pPipe) return RTERROR; if(pPipe->IsVertical()) IsVertical = TRUE; TCHAR *layer, *szLineType; nElevation = pPipe->StartPoint().z; nEle2 = pPipe->EndPoint().z; dSEle = nElevation; // cet 2011.11.1 add dEEle = nEle2; // cet 2011.11.1 add layer = pPipe->layer(); nPipeDn = pPipe->GetDnDiameter(); szLineType = pPipe->linetype(); iMaterial = pPipe->GetMaterial(); csLayer = layer; csLineType = szLineType; csDnType = pPipe->GetLabel(); delete [] layer; delete [] szLineType; iColor = pPipe->colorIndex(); nWidth = pPipe->GetPipeWeight(); iHideLevel = pPipe->GetHideLevel(); nGradient = pPipe->GetPipeGradient(); bDrawLabel = pPipe->IsDrawLabel(); csDimType = pPipe->GetSpareStr(); // nSpare = pPipe->GetSpare(); iInsulate = (int)pPipe->GetInsulateThick(); // zxl 2013.1.6 add 调整管线标注样式 GetNewDimType(pPipe, nDnType, nLenType, nGradientType, nLabelType, nDrawType); OPENOBJ_END(); if(IsVertical) return EditVerticalPipe(id); double dMeter(1); if(!DocGetMeterUnitDraw()) dMeter = 1000; if(csLineType == _T("CONTINUE")) csLineType = _T("CONTINUOUS"); ads_name entTmp; acdbGetAdsName(entTmp, id); double dCuba = GetPipeCuba(entTmp); dlg.m_csCuba.Format(_T("%.3f"), dCuba); // zxl 2013.01.06 modify // cet 2011.5.20 add 增加了管线长度样式需进行调整 // if (nSpare > 100) // { // nSpare /= 100; // } // dlg.m_iDimType = (int)nSpare; dlg.m_nDnType = nDnType; dlg.m_nLenType = nLenType; dlg.m_nGradientType = nGradientType; dlg.m_nLabelType = nLabelType; dlg.m_nDrawType = nDrawType; dlg.m_csLineType = csLineType; dlg.m_bDimDn = bDrawLabel; dlg.m_csDnName = csDnType; dlg.m_bColor = TRUE; dlg.m_bDn = TRUE; dlg.m_bElevation = TRUE; dlg.m_bLayer = TRUE; dlg.m_bLineType = TRUE; dlg.m_bMaterial = TRUE; dlg.m_bNeedHide = TRUE; dlg.m_bGradient = TRUE; dlg.m_bDnHead = TRUE; dlg.m_bDrawLabel =TRUE; dlg.m_bWidth = TRUE; dlg.m_bInsulate = TRUE; dlg.m_nElevation = nElevation/dMeter; dlg.m_nEle2 = nEle2/dMeter; dlg.m_iInsulate = iInsulate; if(fabs(nElevation - nEle2) > 0.01) dlg.m_bEle2 = TRUE; dlg.m_iLayer = GetPipeLayerIdxByName(csLayer); dlg.m_iColor = iColor; dlg.m_csDn.Format(_T("%.0f"), nPipeDn); dlg.m_nWidth = nWidth; dlg.m_iMaterial = iMaterial; dlg.m_iHide = iHideLevel; // if(iHideLevel == -128) // dlg.m_bHideOther = TRUE; dlg.m_csGradient.Format(_T("%.4f"), nGradient); if(dlg.DoModal() != IDOK){ PickSet ss(SS_FREE); ss += id; UpdateGraphic(ss); return RTNORM; } if(dlg.m_bGradient){ UpdateGradientDim(entTmp, _tstof(dlg.m_csGradient)); } double dCalcEle(0); BOOL bChangeEle = FALSE; OPENOBJ_BEGIN(id, AcDb::kForWrite, TDbPipe, pPipe); if(pPipe){ if(dlg.m_bMaterial){ pPipe->SetMaterial(dlg.m_iMaterial); } if(dlg.m_bGradient){ pPipe->SetPipeGradient(_tstof(dlg.m_csGradient)); } if(dlg.m_bNeedHide) pPipe->SetHideLevel(dlg.m_iHide); if(dlg.m_bInsulate) pPipe->SetInsulateThick(dlg.m_iInsulate); if(dlg.m_bElevation){ XPoint ptTmp = pPipe->StartPoint(); XPoint ptTmp2 = pPipe->EndPoint(); ptTmp.z = dlg.m_nElevation*dMeter; if(dlg.m_bEle2) ptTmp2.z = dlg.m_nEle2*dMeter; else ptTmp2.z = dlg.m_nElevation*dMeter; // cet 2011.11.1 add 标高未改变时,不执行下列操作 CString sTemp; sTemp.Format(_T("%.3f"), dSEle / dMeter); dSEle = _tstof(sTemp) * dMeter; sTemp.Format(_T("%.3f"), dEEle / dMeter); dEEle = _tstof(sTemp) * dMeter; if (ptTmp.z == dSEle && ptTmp2.z == dEEle) // 标高未变化 { // cet 2013.5.17 add 由于管线标高在对话框初始化时,通过字符串格式化处理 // 可能进行了四舍五入,造成精度损失,导致对话框标高与实际管线标高有一定的误差 // 在此进行进一步比较,消除一定误差范围内的造成的影响 // 误差保持在0.1毫米内 double dMeter = 0.1; if (DocGetMeterUnitDraw()) { dMeter *= 0.001; } double dTol1 = fabs(pPipe->StartPoint().z - ptTmp.z ); if ( dTol1 < dMeter && dTol1 > 0.0) { pPipe->SetStartPoint(ptTmp); } double dTol2 = fabs(pPipe->EndPoint().z - ptTmp2.z ); if ( dTol2 < dMeter && dTol2 > 0.0) { pPipe->SetEndPoint(ptTmp2); } goto LABEL; } pPipe->SetStartPoint(ptTmp); pPipe->SetEndPoint(ptTmp2); AcDbObjectId nodeId1(NULL), nodeId2(NULL); nodeId1 = pPipe->GetNode(0); nodeId2 = pPipe->GetNode(1); OPENOBJ_BEGIN(nodeId1, AcDb::kForRead, TDbEquipment, pEquip); if(pEquip && !pEquip->isKindOf(TDbPump::desc())){ if(pEquip->upgradeOpen()==Acad::eOk) { XPoint ptTmp4 = pEquip->GetInsert(); // cet 2010.9.27 modify 考虑坡度 // ptTmp4.z = ptTmp.z; if(ptTmp.Distance2d(ptTmp4) < 1e-3) { ptTmp4.z = ptTmp.z; } else { ptTmp4.z = ptTmp2.z; } pEquip->SetInsert(ptTmp4); XPoint ptTmp3 = pEquip->GetLocation(); // cet 2010.9.27 modify 考虑坡度 // ptTmp3.z = ptTmp.z; if(ptTmp.Distance2d(ptTmp3) < 1e-3) { ptTmp3.z = ptTmp.z; } else { ptTmp3.z = ptTmp2.z; } pEquip->SetLocation(ptTmp3); pEquip->downgradeOpen(); } } OPENOBJ_END(); OPENOBJ_BEGIN(nodeId2, AcDb::kForRead, TDbEquipment, pEquip); if(pEquip && !pEquip->isKindOf(TDbPump::desc())){ if(pEquip->upgradeOpen()==Acad::eOk) { XPoint ptTmp4 = pEquip->GetInsert(); // cet 2010.9.27 modify 考虑坡度 // ptTmp4.z = ptTmp.z; if(ptTmp.Distance2d(ptTmp4) < 1e-3) { ptTmp4.z = ptTmp.z; } else { ptTmp4.z = ptTmp2.z; } pEquip->SetInsert(ptTmp4); XPoint ptTmp3 = pEquip->GetLocation(); // cet 2010.9.27 modify 考虑坡度 // ptTmp3.z = ptTmp.z; if(ptTmp.Distance2d(ptTmp3) < 1e-3) { ptTmp3.z = ptTmp.z; } else { ptTmp3.z = ptTmp2.z; } pEquip->SetLocation(ptTmp3); pEquip->downgradeOpen(); } } OPENOBJ_END(); DList lstAttachment; pPipe->GetAttachments(lstAttachment); int len = lstAttachment.Length(); for(int m=0;mGetLocation(); // cet 2010.9.27 modify 考虑坡度 // ptLoc.z = ptTmp.z; AcDbLine line(ptTmp, ptTmp2); XPoint pt; line.getClosestPointTo(ptLoc, AcGeVector3d::kZAxis, pt); ptLoc = pt; pValve->SetLocation(ptLoc); } OPENOBJ_END(); } } LABEL: // cet 2011.11.1 add if(dlg.m_bDn){ double nDn = _tstof(dlg.m_csDn); pPipe->SetDnDiameter(nDn); } if(dlg.m_bDnHead) pPipe->SetLabel(dlg.m_csDnName); if(dlg.m_bDrawLabel){ pPipe->EnableDrawLabel(dlg.m_bDimDn); // zxl 2013.01.06 modify 调整管线标注样式 //pPipe->SetSpare((double)dlg.m_iDimType); cet 2011.5.20 modify 增加了管线长度样式需进行调整 // int iDimType = dlg.m_iDimType == 0 ? dlg.m_iDimType : dlg.m_iDimType * 100 + g_iDimPipeLen + 1; // pPipe->SetSpare(static_cast(iDimType)); pPipe->SetPipeLableDrawType(dlg.m_nDrawType); pPipe->SetPipeDnDimType(dlg.m_nDnType); pPipe->SetPipeLenDimType(dlg.m_nLenType); pPipe->SetPipeDimLableType(dlg.m_nLabelType); pPipe->SetPipeGradientDimType(dlg.m_nGradientType); } if(dlg.m_bLayer){ InitPipeLayer((const TCHAR*)GetPipeLayerByIdx(dlg.m_iLayer)); CString csLay = GetPipeLayerByIdx(dlg.m_iLayer); if(csLay == _T("")) return RTNORM; pPipe->setLayer((const TCHAR*)csLay); pPipe->setColorIndex(256); pPipe->SetSysType(GetPipeSysByLayer(csLay)); DList lstAttachment; pPipe->GetAttachments(lstAttachment); int len = lstAttachment.Length(); for(int m=0;mSetSysType(GetPipeSysByLayer(csLay)); } OPENOBJ_END(); } } if(dlg.m_bColor){ //读取图层的颜色, 如果对话框颜色和图层的颜色一致,则管线颜色是“随层” 2008-4-3 sr CString csLay = GetPipeLayerByIdx(dlg.m_iLayer); int iColorLay = GetLayerColorIdx(csLay); if(iColorLay == dlg.m_iColor) pPipe->setColorIndex(256); else pPipe->setColorIndex(dlg.m_iColor); } if(dlg.m_bLineType){ LoadTgLineType(dlg.m_csLineType); pPipe->setLinetype(dlg.m_csLineType); } if(dlg.m_bWidth) pPipe->SetPipeWeight(dlg.m_nWidth); //检查坡度和标高的关系 if(pPipe->GetPipeGradient() > 0.000001) { double dLen = pPipe->GetPlanLength(); // XPoint pS = pPipe->StartPoint(); // pS.z = 0; // XPoint pE = pPipe->EndPoint(); // pE.z = 0; // dLen = ads_distance(pS, pE); //这个地方管长必须是投影平面的长度 // if(!DocGetMeterUnitDraw()) // dLen = dLen/1000; TPipeSys::FlowDirection dir = pPipe->GetFlowDir(); if(dir == TPipeSys::kFromStart) dCalcEle = pPipe->StartPoint().z / dMeter; else dCalcEle = pPipe->EndPoint().z / dMeter; dCalcEle = dCalcEle - dLen * pPipe->GetPipeGradient(); if(dir == TPipeSys::kFromStart) { if(fabs(pPipe->EndPoint().z - dCalcEle * dMeter) > 0.0009 * dMeter) // cet 2011.8.24 modify 将精度调整为1mm bChangeEle = TRUE; } else { if(fabs(pPipe->StartPoint().z - dCalcEle * dMeter) > 0.0009 * dMeter) // cet 2011.8.24 modify 将精度调整为1mm bChangeEle = TRUE; } } } OPENOBJ_END(); if(bChangeEle) { TCHAR szTmp[64]; ads_getstring(0, _T("\n标高和坡度不匹配,是否更新标高:"), szTmp); if(_tcsicmp(szTmp, _T("N")) != 0) { OPENOBJ_BEGIN(id, AcDb::kForWrite, TDbPipe, pPipe); if(pPipe){ if(pPipe->GetFlowDir() == TPipeSys::kFromStart) pPipe->EndPoint().z = dCalcEle * dMeter; else pPipe->StartPoint().z = dCalcEle * dMeter; ModifyPipeEquimentAttachment(pPipe); // cet 2010.9.27 add } OPENOBJ_END(); } } if(dlg.m_bDn){ UpdateMultDim(entTmp); UpdatePipeTextDim(entTmp, csDnType, (int)nPipeDn); //更新管线标注(标注立管命令生成的标注) //得到所有的标注 zxl 2012.07.03 add bool bIsDim = false; PickSet ssAll(SS_FREE); RBList rbMaskVPipe(RTDXF0, _T("ATS_VPIPEDIM"),NULL); ssAll.Get(_T("A"),NULL,NULL,rbMaskVPipe); long lLen = ssAll.Length(); PickSet ssRenew(SS_FREE); CString sText; for (long i = 0; i < lLen; ++i) { OPENOBJ_BEGIN(ssAll[i], AcDb::kForRead, TDbVPipeDim, pDim); if (pDim != NULL) { AcDbObjectId idDim = pDim->GetVPipeId(); if (idDim == id) { pDim->upgradeOpen(); pDim->SaveCurText(); pDim->downgradeOpen(); ssRenew += ssAll[i]; bIsDim = true; break; } } OPENOBJ_END(); } UpdateGraphic(ssRenew); } // 更新管线上的标高标注 cet 2013.4.27 add if (g_bIsElevDimChangeByPipeElev) { UpdateElevationDim(id); } return RTNORM; } //*************************************************************************************************** // 修改管线 //*************************************************************************************************** void EditPipeCmd() { RBList rbMask(RTDXF0, _T("ATS_PIPE"), 8, GetLayerNames(_T("管")), NULL); PickSet ss(SS_FREE); if(SelectEntities(_T("\n请选择要修改的管线<退出>"), ss, rbMask) != RTNORM) return; long len = ss.Length(); if(len < 1) return; double dAllCuba(0); for(long j=0;jStartPoint(); nElevation = ptTmp.z; nElevation2 = pPipe->EndPoint().z; layer = pPipe->layer(); nPipeDn = pPipe->GetDnDiameter(); szLineType = pPipe->linetype(); iMaterial = pPipe->GetMaterial(); csDnType = pPipe->GetLabel(); csLayer = layer; csLineType = szLineType; delete [] layer; delete [] szLineType; iColor = pPipe->colorIndex(); nWidth = pPipe->GetPipeWeight(); iHideLevel = pPipe->GetHideLevel(); nGradient = pPipe->GetPipeGradient(); bDrawLabel = pPipe->IsDrawLabel(); csDimType = pPipe->GetSpareStr(); nSpare = pPipe->GetSpare(); iInsulate = (int)pPipe->GetInsulateThick(); // zxl 2013.1.6 add 调整管线标注样式 GetNewDimType(pPipe, nDnType, nLenType, nGradientType, nLabelType, nDrawType); } OPENOBJ_END(); CTemporaryResourceOverride vTemp; CPipeEditDlg dlg; dlg.m_csCuba.Format(_T("%.3f"), dAllCuba); dlg.SetPipes(ss); // cet 2011.5.23 add // zxl 2013.01.07 modify //cet 2011.5.20 add 增加了管线长度样式需进行调整 // if (nSpare > 100) // { // nSpare /= 100; // } dlg.m_nDnType = nDnType; dlg.m_nLenType = nLenType; dlg.m_nGradientType = nGradientType; dlg.m_nLabelType = nLabelType; dlg.m_nDrawType = nDrawType; dlg.m_iDimType = (int)nSpare; dlg.m_csLineType = csLineType; dlg.m_iInsulate = iInsulate; dlg.m_bDimDn = bDrawLabel; dlg.m_csDnName = csDnType; dlg.m_nElevation = nElevation/dMeter; dlg.m_nEle2 = nElevation2/dMeter; dlg.m_iLayer = GetPipeLayerIdxByName(csLayer); dlg.m_iColor = iColor; dlg.m_csDn.Format(_T("%.0f"), nPipeDn); dlg.m_csGradient.Format(_T("%.4f"), nGradient); dlg.m_nWidth = nWidth; dlg.m_iMaterial = iMaterial; dlg.m_iHide = iHideLevel; if(dlg.DoModal() != IDOK) return; for(long i=0;iSetMaterial(dlg.m_iMaterial); if(dlg.m_bGradient) pPipe->SetPipeGradient(_tstof(dlg.m_csGradient)); if(dlg.m_bNeedHide) pPipe->SetHideLevel(dlg.m_iHide); if(dlg.m_bInsulate) pPipe->SetInsulateThick(dlg.m_iInsulate); //if(dlg.m_bElevation){ cet 2011.5.23 add //if (dlg.m_bElevation && !pPipe->IsVertical()) cet 2011.6.15 modify 添加对所选管线均为立管,且起始点标高都设置时,立管标高的修改 if ((dlg.m_bElevation && !pPipe->IsVertical()) || dlg.IsModifyVerPipe()) { XPoint ptTmp = pPipe->StartPoint(); XPoint ptTmp2 = pPipe->EndPoint(); ptTmp.z = dlg.m_nElevation*dMeter; if(dlg.m_bEle2) ptTmp2.z = dlg.m_nEle2*dMeter; else ptTmp2.z = dlg.m_nElevation*dMeter; pPipe->SetStartPoint(ptTmp); pPipe->SetEndPoint(ptTmp2); // cet 2010.9.27 modify 修改管线附件和设备 // AcDbObjectId nodeId1(NULL), nodeId2(NULL); // nodeId1 = pPipe->GetNode(0); // nodeId2 = pPipe->GetNode(1); // OPENOBJ_BEGIN(nodeId1, AcDb::kForWrite, TDbEquipment, pEquip); // if(pEquip && !pEquip->isKindOf(TDbPump::desc())){ // XPoint ptTmp4 = pEquip->GetInsert(); // ptTmp4.z = ptTmp.z; // pEquip->SetInsert(ptTmp4); // XPoint ptTmp3 = pEquip->GetLocation(); // ptTmp3.z = ptTmp.z; // pEquip->SetLocation(ptTmp3); // } // OPENOBJ_END(); // OPENOBJ_BEGIN(nodeId2, AcDb::kForWrite, TDbEquipment, pEquip); // if(pEquip && !pEquip->isKindOf(TDbPump::desc())){ // XPoint ptTmp4 = pEquip->GetInsert(); // ptTmp4.z = ptTmp.z; // pEquip->SetInsert(ptTmp4); // XPoint ptTmp3 = pEquip->GetLocation(); // ptTmp3.z = ptTmp.z; // pEquip->SetLocation(ptTmp3); // } // OPENOBJ_END(); // DList lstAttachment; // pPipe->GetAttachments(lstAttachment); // int len = lstAttachment.Length(); // for(int m=0;mGetLocation(); // ptLoc.z = ptTmp.z; // pValve->SetLocation(ptLoc); // } // OPENOBJ_END(); // } ModifyPipeEquimentAttachment(pPipe); } if(dlg.m_bDn){ // pPipe->SetLabel(dlg.m_csDnName); double nDn = _tstof(dlg.m_csDn); pPipe->SetDnDiameter(nDn); } if(dlg.m_bDnHead) pPipe->SetLabel(dlg.m_csDnName); if(dlg.m_bDrawLabel){ pPipe->EnableDrawLabel(dlg.m_bDimDn); // zxl 2013.01.06 modify 调整管线标注样式 //pPipe->SetSpare((double)dlg.m_iDimType); cet 2011.5.20 modify 增加了管线长度样式需进行调整 // int iDimType = dlg.m_iDimType == 0 ? dlg.m_iDimType : dlg.m_iDimType * 100 + g_iDimPipeLen + 1; // pPipe->SetSpare(static_cast(iDimType)); pPipe->SetPipeLableDrawType(dlg.m_nDrawType); pPipe->SetPipeDnDimType(dlg.m_nDnType); pPipe->SetPipeLenDimType(dlg.m_nLenType); pPipe->SetPipeDimLableType(dlg.m_nLabelType); pPipe->SetPipeGradientDimType(dlg.m_nGradientType); } if(dlg.m_bLayer){ InitPipeLayer((const TCHAR*)GetPipeLayerByIdx(dlg.m_iLayer)); CString csLay = GetPipeLayerByIdx(dlg.m_iLayer); if(csLay == _T("")) return; pPipe->setLayer((const TCHAR*)csLay); pPipe->setColorIndex(256); pPipe->SetSysType(GetPipeSysByLayer(csLay)); DList lstAttachment; pPipe->GetAttachments(lstAttachment); int len = lstAttachment.Length(); for(int m=0;mSetSysType(GetPipeSysByLayer(csLay)); } OPENOBJ_END(); } } if(dlg.m_bColor && !dlg.m_bLayer) pPipe->setColorIndex(dlg.m_iColor); if(dlg.m_bLineType) pPipe->setLinetype(dlg.m_csLineType); if(dlg.m_bWidth) pPipe->SetPipeWeight(dlg.m_nWidth); } OPENOBJ_END(); if(dlg.m_bDn) UpdateMultDim(entTmp); // zxl 2012.07.03 add if (dlg.m_bDn) { //更新管线标注(标注立管命令生成的标注) //得到所有的标注 AcDbObjectId id; acdbGetObjectId(id, entTmp); PickSet ssAll(SS_FREE); RBList rbMaskVPipe(RTDXF0, _T("ATS_VPIPEDIM"),NULL); ssAll.Get(_T("A"),NULL,NULL,rbMaskVPipe); long lLen = ssAll.Length(); PickSet ssRenew(SS_FREE); CString sText; for (long i = 0; i < lLen; ++i) { OPENOBJ_BEGIN(ssAll[i], AcDb::kForRead, TDbVPipeDim, pDim); if (pDim != NULL) { AcDbObjectId idDim = pDim->GetVPipeId(); if (idDim == id) { pDim->upgradeOpen(); pDim->SaveCurText(); pDim->downgradeOpen(); ssRenew += ssAll[i]; break; } } OPENOBJ_END(); } UpdateGraphic(ssRenew); } } // cet 2013.4.27 add 更新管线上的标高标注 if (g_bIsElevDimChangeByPipeElev) { UpdateElevationDim(ss); } } CPipeEditDlg::CPipeEditDlg(CWnd* pParent /*=NULL*/) : CDialog(CPipeEditDlg::IDD, pParent), m_spinWidth(0.05) { //{{AFX_DATA_INIT(CPipeEditDlg) m_bElevation = FALSE; m_bColor = FALSE; m_bLayer = FALSE; m_bLineType = FALSE; m_bWidth = FALSE; m_iLayer = 0; m_iLineType = 0; m_nWidth = 0.35; m_iMaterial = 0; m_bMaterial = FALSE; m_bNeedHide = FALSE; m_iHide = 0; m_bDn = FALSE; m_bGradient = FALSE; m_csDnName = _T(""); m_bEle2 = FALSE; m_bDimDn = FALSE; m_bDrawLabel = FALSE; // m_iDimType = 0; zxl 2013.01.07 del m_bDnHead = FALSE; m_csCuba = _T(""); m_csGradient = _T(""); m_bInsulate = FALSE; m_iInsulate = 0; //}}AFX_DATA_INIT m_spinHide.SetBase(1); m_nElevation = 0.0; // cet 2011.5.23 add m_nEle2 = 0.0; // cet 2011.5.23 add m_bAllVerPipe = FALSE; // cet 2011.6.15 add // zxl 2013.01.06 add m_nDnType = 0; m_nLenType = 0; m_nGradientType = 0; m_nLabelType = 0; m_nDrawType = 0; } void CPipeEditDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CPipeEditDlg) DDX_Control(pDX, IDC_COMBO_LAYER, m_comboLay); DDX_Control(pDX, IDC_COMBO_LINETYPE, m_comboLineType); DDX_Control(pDX, IDC_SPIN_HIDE, m_spinHide); DDX_Control(pDX, IDC_COMBO_MATERIAL, m_comboMat); DDX_Control(pDX, IDC_SPIN_WIDTH, m_spinWidth); DDX_Check(pDX, IDC_CHECK_ELEVATION, m_bElevation); DDX_Check(pDX, IDC_CHECK_COLOR, m_bColor); DDX_Check(pDX, IDC_CHECK_LAYER, m_bLayer); DDX_Check(pDX, IDC_CHECK_LINETYPE, m_bLineType); DDX_Check(pDX, IDC_CHECK_WIDTH, m_bWidth); DDX_CBIndex(pDX, IDC_COMBO_LAYER, m_iLayer); DDX_CBIndex(pDX, IDC_COMBO_LINETYPE, m_iLineType); DDX_Text(pDX, IDC_EDIT_WIDTH, m_nWidth); DDX_CBIndex(pDX, IDC_COMBO_MATERIAL, m_iMaterial); DDX_Check(pDX, IDC_CHECK_MATERIAL, m_bMaterial); DDX_Check(pDX, IDC_CHECK_HIDE, m_bNeedHide); DDX_Text(pDX, IDC_EDIT_HIDE, m_iHide); DDX_Check(pDX, IDC_CHECK_DN, m_bDn); DDX_Check(pDX, IDC_CHECK_GRADIENT, m_bGradient); // DDX_CBString(pDX, IDC_COMBO_DN2, m_csDnName); cet 2011.6.20 del DDX_Check(pDX, IDC_CHECK_ELE2, m_bEle2); DDX_Check(pDX, IDC_CHECK_DIMDN, m_bDimDn); DDX_Check(pDX, IDC_CHECK_DRAWLABEL, m_bDrawLabel); //DDX_CBIndex(pDX, IDC_COMBO_DIM, m_iDimType);zxl 2013.01.07 del DDX_Check(pDX, IDC_CHECK_DN2, m_bDnHead); DDX_Text(pDX, IDC_EDIT_CUBA, m_csCuba); DDX_CBString(pDX, IDC_COMBO_GRADIENT, m_csGradient); DDX_Check(pDX, IDC_CHECK_INSULATE, m_bInsulate); DDX_Text(pDX, IDC_EDIT_INSULATE, m_iInsulate); DDV_MinMaxInt(pDX, m_iInsulate, 0, 9999); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CPipeEditDlg, CDialog) //{{AFX_MSG_MAP(CPipeEditDlg) ON_BN_CLICKED(IDC_CHECK_LINETYPE, OnCheckLinetype) ON_BN_CLICKED(IDC_CHECK_LAYER, OnCheckLayer) ON_BN_CLICKED(IDC_CHECK_COLOR, OnCheckColor) ON_BN_CLICKED(IDC_CHECK_WIDTH, OnCheckWidth) ON_BN_CLICKED(IDC_CHECK_ELEVATION, OnCheckElevation) ON_BN_CLICKED(IDC_STATIC_COLOR, OnStaticColor) ON_CBN_SELCHANGE(IDC_COMBO_LAYER, OnSelchangeComboLayer) ON_WM_PAINT() ON_BN_CLICKED(IDC_CHECK_MATERIAL, OnCheckMaterial) ON_BN_CLICKED(IDC_CHECK_HIDE, OnCheckHide) ON_BN_CLICKED(IDC_CHECK_DN, OnCheckDn) ON_BN_CLICKED(IDC_CHECK_GRADIENT, OnCheckGradient) ON_BN_CLICKED(IDC_BUTTON_NEW, OnButtonNew) ON_BN_CLICKED(IDC_CHECK_ELE2, OnCheckEle2) ON_BN_CLICKED(IDC_CHECK_DRAWLABEL, OnCheckDrawlabel) ON_BN_CLICKED(IDC_CHECK_DN2, OnCheckDn2) ON_BN_CLICKED(IDC_CHECK_INSULATE, OnCheckInsulate) ON_EN_CHANGE(IDC_EDIT_ELEVATION2, OnChangeEditElevation2) ON_EN_CHANGE(IDC_EDIT_ELEVATION, OnChangeEditElevation) ON_CBN_SELCHANGE(IDC_COMBO_MATERIAL, OnSelchangeComboMaterial) ON_CBN_SELCHANGE(IDC_COMBO_DN, OnSelchangeComboDn) ON_CBN_EDITCHANGE(IDC_COMBO_DN, OnEditchangeComboDn) ON_BN_CLICKED(IDC_BTN_OUTDIM, OnBtnOutdim) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CPipeEditDlg message handlers BOOL CPipeEditDlg::OnInitDialog() { CDialog::OnInitDialog(); m_lstWireLay.Append(tstrnew(LAY_PIPE_FEED)); m_lstWireLay.Append(tstrnew(LAY_PIPE_HEADFEED)); m_lstWireLay.Append(tstrnew(LAY_PIPE_HEADBACK)); m_lstWireLay.Append(tstrnew(LAY_PIPE_DIRT)); m_lstWireLay.Append(tstrnew(LAY_PIPE_USELESS)); m_lstWireLay.Append(tstrnew(LAY_PIPE_RAIN)); m_lstWireLay.Append(tstrnew(LAY_PIPE_USED)); m_lstWireLay.Append(tstrnew(LAY_PIPE_FIRE)); m_lstWireLay.Append(tstrnew(LAY_PIPE_SPRINKLE)); m_lstWireLay.Append(tstrnew(LAY_PIPE_COAGULATE)); m_lstWireLay.Append(tstrnew(LAY_PIPE_DRINK)); m_lstWireLay.Append(tstrnew(LAY_PIPE_PRESSDIRT)); m_lstWireLay.Append(tstrnew(LAY_PIPE_PRESSUSELESS)); m_lstWireLay.Append(tstrnew(LAY_PIPE_PRESSRAIN)); m_lstWireLay.Append(tstrnew(LAY_PIPE_OTHER)); m_lstWireLay.Append(tstrnew(LAY_PIPE_USER1)); m_lstWireLay.Append(tstrnew(LAY_PIPE_USER2)); m_lstWireLay.Append(tstrnew(LAY_PIPE_FEED2)); m_lstWireLay.Append(tstrnew(LAY_PIPE_FEED3)); m_lstWireLay.Append(tstrnew(LAY_PIPE_HEADFEED2)); m_lstWireLay.Append(tstrnew(LAY_PIPE_HEADFEED3)); m_lstWireLay.Append(tstrnew(LAY_PIPE_HEADBACK2)); m_lstWireLay.Append(tstrnew(LAY_PIPE_HEADBACK3)); m_lstWireLay.Append(tstrnew(LAY_PIPE_FIRE2)); m_lstWireLay.Append(tstrnew(LAY_PIPE_FIRE3)); m_lstWireLay.Append(tstrnew(LAY_PIPE_SPRINKLE2)); m_lstWireLay.Append(tstrnew(LAY_PIPE_SPRINKLE3)); m_lstWireLay.Append(tstrnew(LAY_PIPE_USED2)); m_lstWireLay.Append(tstrnew(LAY_PIPE_USED3)); // cet 2011.12.6 add m_lstWireLay.Append(tstrnew(LAY_PIPE_USER3)); m_lstWireLay.Append(tstrnew(LAY_PIPE_USER4)); m_lstWireLay.Append(tstrnew(LAY_PIPE_USER5)); m_lstWireLay.Append(tstrnew(LAY_PIPE_USER6)); m_lstWireLay.Append(tstrnew(LAY_PIPE_USER7)); m_lstWireLay.Append(tstrnew(LAY_PIPE_USER8)); for(int i=0;iSetWindowText(m_csDnName); } if(m_iColor == 256) m_iColor = GetLayerColorIdx(GetLayer()); DrawStatic(); ResetLineCombox(); XStringList lstMat; GetPipeMaterialList(lstMat); for(i=0;iEnableWindow(FALSE); // pWnd2->EnableWindow(FALSE); // } // if(m_csDimType == "") // m_iDimType = 0; // else if(m_csDimType == "i=0.003L=12.3m") // m_iDimType = 1; // else if(m_csDimType == "-0.003-12.3m") // m_iDimType = 2; // else if(m_csDimType == "0.00312.3m") // m_iDimType = 3; // else if(m_csDimType == "i=0.003") // m_iDimType = 4; // else if(m_csDimType == "-0.003") // m_iDimType = 5; // else if(m_csDimType == "0.003") // m_iDimType = 6; // else if(m_csDimType == "L=12.3m") // m_iDimType = 7; // else if(m_csDimType == "-12.3m") // m_iDimType = 8; // else if(m_csDimType == "12.3m") // m_iDimType = 9; // cet 2011.6.13 add CWnd *pWnd3 = GetDlgItem(IDC_COMBO_DN); if (pWnd3 != NULL) { pWnd3->SetWindowText(m_csDn); } // cet 2011.5.23 add CWnd *pWnd1 = GetDlgItem(IDC_EDIT_ELEVATION); CWnd *pWnd2 = GetDlgItem(IDC_EDIT_ELEVATION2); CString sEle; if (pWnd1 != NULL) { sEle.Format(_T("%.3f"), m_nElevation); pWnd1->SetWindowText(sEle); } if (pWnd2 != NULL) { sEle.Format(_T("%.3f"), m_nEle2); pWnd2->SetWindowText(sEle); } UpdatePipeBottomEle(FALSE); // cet 2011.5.12 add 设置管内底标高 m_bAllVerPipe = IsSamePipe(TRUE); // cet 2011.6.15 add return TRUE; } // 获取管线管径标注字符 zxl 2012.12.17 add CString GetPipeDnDimStr(int nDnDimType) { CString sText; if (nDnDimType == 0) { return sText; } else if (nDnDimType == 1) { sText = _T("DN500"); } else if (nDnDimType == 2) { sText = _T("500"); } return sText; } // 获取管线长度标注字符 zxl 2012.12.17 add CString GetPipeLenDimStr(int iDimType) { CString sDimPipeLen; if (iDimType == 0) { return sDimPipeLen; } switch(iDimType) { case 1: // L=12.3m { sDimPipeLen = _T("L=12.3m"); break; } case 2: // L=12.3 { sDimPipeLen = _T("L=12.3"); break; } case 3: // L12.3m { sDimPipeLen = _T("L12.3m"); break; } case 4: // L12.3 { sDimPipeLen = _T("L12.3"); break; } case 5: // 12.3m { sDimPipeLen = _T("12.3m"); break; } case 6: // 12.3 { sDimPipeLen = _T("12.3"); break; } } return sDimPipeLen; } // 获取管线坡度标注字符 zxl 2012.12.17 add CString GetPipeGradienDimtStr(int nDimType) { CString csTmp; if (nDimType == 0) { return csTmp; } else if(nDimType == 1) //i=0.003 { csTmp = _T("i=0.003"); } else if (nDimType == 2) { csTmp = _T("i=3‰"); } else if (nDimType == 3) { csTmp = _T("0.003"); } else if (nDimType == 4) { csTmp = _T("3‰"); } else if(nDimType == 5) //i0.003 { csTmp = _T("i0.003"); } else if (nDimType == 6) { csTmp = _T("i3‰"); } return csTmp; } void CPipeEditDlg::SetBtnText() { CString sDimDn = GetPipeDnDimStr(m_nDnType); CString sDimLen = GetPipeLenDimStr(m_nLenType); CString sDimGradient = GetPipeGradienDimtStr(m_nGradientType); CString sLabel; if (m_nLabelType == 0) { sLabel = _T(" "); } else if (m_nLabelType == 1) { sLabel = _T("-"); } else { sLabel = _T("/"); } CString sText; if (m_nDrawType == 1) { sLabel = _T(" "); } sText += sDimDn; if (!sDimDn.IsEmpty() && (!sDimLen.IsEmpty() || !sDimGradient.IsEmpty())) { sText += sLabel; } sText += sDimGradient; if (!sDimLen.IsEmpty() && !sDimGradient.IsEmpty()) { sText += sLabel; sText += sDimLen; } else if (sDimGradient.IsEmpty()) { sText += sDimLen; } if (m_nDrawType == 1) { sText += _T("竖排"); } CWnd *pWnd = GetDlgItem(IDC_BTN_OUTDIM); CButton *pBtn = (CButton *)pWnd; if (pBtn != NULL) { pBtn->SetWindowText(sText); } } void CPipeEditDlg::ResetLineCombox() { UpdateData(TRUE); m_lstLineTypeName.Reset(); m_lstLineTypeComment.Reset(); m_comboLineType.ResetContent(); m_lstLineTypeName.Append(tstrnew(_T("BYLAYER"))); m_lstLineTypeComment.Append(tstrnew(_T("随层"))); GetAllTgLineType(m_lstLineTypeName, m_lstLineTypeComment); for(int i=0;iGetWindowText(sEle); m_nElevation = _tstof(sEle); } if (pWnd2 != NULL) { pWnd2->GetWindowText(sEle); m_nEle2 = _tstof(sEle); } // cet 2011.6.13 add CWnd *pWnd3 = GetDlgItem(IDC_COMBO_DN); if (pWnd3 != NULL) { pWnd3->GetWindowText(m_csDn); } // cet 2011.6.13 add CWnd *pWnd4 = GetDlgItem(IDC_COMBO_DN2); if (pWnd4 != NULL) { pWnd4->GetWindowText(m_csDnName); } CDialog::OnOK(); } void CPipeEditDlg::SetEnable() { UpdateData(TRUE); CWnd *pWnd1 = GetDlgItem(IDC_EDIT_ELEVATION); CWnd *pWnd2 = GetDlgItem(IDC_STATIC_COLOR); CWnd *pWnd3 = GetDlgItem(IDC_COMBO_LAYER); CWnd *pWnd4 = GetDlgItem(IDC_COMBO_LINETYPE); CWnd *pWnd5 = GetDlgItem(IDC_EDIT_WIDTH); CWnd *pWnd6 = GetDlgItem(IDC_SPIN_WIDTH); CWnd *pWnd7 = GetDlgItem(IDC_COMBO_MATERIAL); CWnd *pWnd8 = GetDlgItem(IDC_SPIN_HIDE); CWnd *pWnd9 = GetDlgItem(IDC_EDIT_HIDE); CWnd *pWnd10 = GetDlgItem(IDC_COMBO_DN); CWnd *pWnd11 = GetDlgItem(IDC_COMBO_GRADIENT); CWnd *pWnd12 = GetDlgItem(IDC_BUTTON_NEW); CWnd *pWnd13 = GetDlgItem(IDC_COMBO_DN2); CWnd *pWnd14 = GetDlgItem(IDC_EDIT_ELEVATION2); CWnd *pWnd15 = GetDlgItem(IDC_STATIC_ELE); CWnd *pWnd16 = GetDlgItem(IDC_CHECK_DIMDN); //CWnd *pWnd17 = GetDlgItem(IDC_COMBO_DIM);zxl 2013.01.07 del CWnd *pWnd17 = GetDlgItem(IDC_BTN_OUTDIM); CWnd *pWnd18 = GetDlgItem(IDC_EDIT_INSULATE); if(m_bDrawLabel){ pWnd16->EnableWindow(TRUE); pWnd17->EnableWindow(TRUE); } else{ pWnd16->EnableWindow(FALSE); pWnd17->EnableWindow(FALSE); } if(m_bDnHead) pWnd13->EnableWindow(TRUE); else pWnd13->EnableWindow(FALSE); if(m_bMaterial) pWnd7->EnableWindow(TRUE); else pWnd7->EnableWindow(FALSE); if(m_bGradient) pWnd11->EnableWindow(TRUE); else pWnd11->EnableWindow(FALSE); if(m_bEle2){ pWnd14->EnableWindow(TRUE); pWnd15->SetWindowText(_T("起点标高")); } else{ pWnd14->EnableWindow(FALSE); pWnd15->SetWindowText(_T("管线标高")); } if(m_bElevation){ pWnd1->EnableWindow(TRUE); } else{ pWnd1->EnableWindow(FALSE); } if(m_bColor) pWnd2->EnableWindow(TRUE); else pWnd2->EnableWindow(FALSE); if(m_bLayer) pWnd3->EnableWindow(TRUE); else pWnd3->EnableWindow(FALSE); if(m_bLineType){ pWnd4->EnableWindow(TRUE); pWnd12->EnableWindow(TRUE); } else{ pWnd4->EnableWindow(FALSE); pWnd12->EnableWindow(FALSE); } if(m_bDn){ pWnd10->EnableWindow(TRUE); //pWnd13->EnableWindow(TRUE); } else{ pWnd10->EnableWindow(FALSE); // pWnd13->EnableWindow(FALSE); } if(m_bWidth){ pWnd5->EnableWindow(TRUE); pWnd6->EnableWindow(TRUE); } else{ pWnd5->EnableWindow(FALSE); pWnd6->EnableWindow(FALSE); } if(m_bNeedHide){ pWnd8->EnableWindow(TRUE); pWnd9->EnableWindow(TRUE); } else{ pWnd8->EnableWindow(FALSE); pWnd9->EnableWindow(FALSE); } if(m_bInsulate){ pWnd18->EnableWindow(TRUE); } else{ pWnd18->EnableWindow(FALSE); } } void CPipeEditDlg::OnCheckLinetype() { SetEnable(); } void CPipeEditDlg::OnCheckLayer() { SetEnable(); } void CPipeEditDlg::OnCheckColor() { SetEnable(); } void CPipeEditDlg::OnCheckWidth() { SetEnable(); } void CPipeEditDlg::OnCheckDn() { SetEnable(); } void CPipeEditDlg::OnCheckDn2() { SetEnable(); } void CPipeEditDlg::OnCheckElevation() { SetEnable(); // cet 2011.5.23 add UpdateData(TRUE); if (!m_bElevation) { return; } // cet 2011.6.15 add 都是立管 if (IsSamePipe(TRUE)) { return; } // 是否存在立管 bool bVer = false; for (long i = 0; i < m_ssPipe.Length(); i++) { OPENOBJ_BEGIN(m_ssPipe[i], AcDb::kForRead, TDbPipe, pPipe); if (pPipe != NULL) { if (pPipe->IsVertical()) { bVer = true; } } OPENOBJ_END(); if (bVer) { break; } } if (bVer) { adsout << _T("\n存在立管,将过滤掉立管修改标高!"); } } void CPipeEditDlg::OnCheckMaterial() { SetEnable(); } void CPipeEditDlg::OnCheckHide() { SetEnable(); } void CPipeEditDlg::OnCheckInsulate() { SetEnable(); } void CPipeEditDlg::OnCheckGradient() { SetEnable(); } void CPipeEditDlg::OnCheckEle2() { SetEnable(); UpdatePipeBottomEle(); } void CPipeEditDlg::OnCheckDrawlabel() { SetEnable(); } void CPipeEditDlg::DrawStatic() { CWnd* pWnd = GetDlgItem(IDC_STATIC_COLOR); CRect rect; pWnd->GetClientRect(rect); CDC* pDC = pWnd->GetDC(); CBrush* pNewBrush = new CBrush; pNewBrush->CreateSolidBrush(acedGetRGB(m_iColor)); CBrush* pOldBrush = pDC->SelectObject(pNewBrush); pDC->Rectangle(rect); pDC->SelectObject(pOldBrush); pWnd->ReleaseDC(pDC); delete pNewBrush; } void CPipeEditDlg::OnStaticColor() { if(!m_bColor) return; acedSetColorDialog(m_iColor, Adesk::kFalse, m_iColor); UpdateData(FALSE); DrawStatic(); } void CPipeEditDlg::OnSelchangeComboLayer() { m_iColor = GetLayerColorIdx(GetLayer()); DrawStatic(); } CString CPipeEditDlg::GetLayer() { UpdateData(TRUE); if(m_iLayer < 0) return CString(); CString csLayer[] = {LAY_PIPE_FEED, LAY_PIPE_HEADFEED, LAY_PIPE_HEADBACK, LAY_PIPE_DIRT, LAY_PIPE_USELESS, LAY_PIPE_RAIN, LAY_PIPE_USED, LAY_PIPE_FIRE, LAY_PIPE_SPRINKLE, LAY_PIPE_COAGULATE, LAY_PIPE_DRINK, LAY_PIPE_PRESSDIRT, LAY_PIPE_PRESSUSELESS, LAY_PIPE_PRESSRAIN, LAY_PIPE_OTHER, LAY_PIPE_USER1, LAY_PIPE_USER2, LAY_PIPE_FEED2, LAY_PIPE_FEED3, LAY_PIPE_HEADFEED2, LAY_PIPE_HEADFEED3, LAY_PIPE_HEADBACK2, LAY_PIPE_HEADBACK3, LAY_PIPE_FIRE2, LAY_PIPE_FIRE3, LAY_PIPE_SPRINKLE2, LAY_PIPE_SPRINKLE3,LAY_PIPE_USED2,LAY_PIPE_USED3, LAY_PIPE_USER3, LAY_PIPE_USER4, LAY_PIPE_USER5, LAY_PIPE_USER6, LAY_PIPE_USER7, LAY_PIPE_USER8 // cet 2011.12.6 add user3-user8 }; return csLayer[m_iLayer]; } void CPipeEditDlg::OnPaint() { CPaintDC dc(this); // device context for painting DrawStatic(); } void CPipeEditDlg::OnButtonNew() { InvokeLineTypeMan(); ResetLineCombox(); } //void CPipeEditDlg::OnCheckHidepipe() //{ // UpdateData(); // CWnd *pWnd1 = GetDlgItem(IDC_EDIT_HIDE); // CWnd *pWnd2 = GetDlgItem(IDC_SPIN_HIDE); // if(m_bHideOther) // { // pWnd1->EnableWindow(FALSE); // pWnd2->EnableWindow(FALSE); // m_iHide = -128; // } // else // { // pWnd1->EnableWindow(TRUE); // pWnd2->EnableWindow(TRUE); // m_iHide = 0; // } // UpdateData(FALSE); //} void CPipeEditDlg::UpdatePipeBottomEle(BOOL bVal) { UpdateData(TRUE); XStringList lstMat; GetPipeMaterialList(lstMat); CComboBox *pBox = (CComboBox*)GetDlgItem(IDC_COMBO_DN); if (pBox != NULL) { if (!bVal) { pBox->GetWindowText(m_csDn); } else { int nIndex = pBox->GetCurSel(); if (nIndex == -1) { pBox->GetLBText(0, m_csDn); } else { pBox->GetLBText(nIndex, m_csDn); } } } double dPipeRadius = GetPipeDjByDn(lstMat.GetAt(m_iMaterial), (int)_tstof(m_csDn)) * 0.5; // 内管半径 double dEle1 = 0.0, dEle2 = 0.0; CWnd *pWnd1 = GetDlgItem(IDC_EDIT_ELEVATION); CWnd *pWnd2 = GetDlgItem(IDC_EDIT_ELEVATION2); CString sEle; if (pWnd1 != NULL) { pWnd1->GetWindowText(sEle); dEle1 = _tstof(sEle); } if (pWnd2 != NULL) { pWnd2->GetWindowText(sEle); dEle2 = _tstof(sEle); } CString strEleS, strEleE; if (!m_bEle2) // 管线标高一起设置 { strEleS.Format(_T("%.4f米"), dEle1 - dPipeRadius); strEleE.Format(_T("%.4f米"), dEle1 - dPipeRadius); } else { strEleS.Format(_T("%.4f米"), dEle1 - dPipeRadius); strEleE.Format(_T("%.4f米"), dEle2 - dPipeRadius); } pWnd1 = GetDlgItem(IDC_STATIC_BOTTOMELES); pWnd2 = GetDlgItem(IDC_STATIC_BOTTOMELEE); if (pWnd1 != NULL) { pWnd1->SetWindowText(strEleS); } if (pWnd2 != NULL) { pWnd2->SetWindowText(strEleE); } UpdateData(FALSE); } void CPipeEditDlg::OnChangeEditElevation2() { UpdatePipeBottomEle(); } void CPipeEditDlg::OnChangeEditElevation() { UpdatePipeBottomEle(); } void CPipeEditDlg::OnSelchangeComboMaterial() { UpdatePipeBottomEle(); } void CPipeEditDlg::OnSelchangeComboDn() { UpdatePipeBottomEle(); } void CPipeEditDlg::SetPipes(PickSet &ss) { m_ssPipe.Free(); m_ssPipe += ss; } void CPipeEditDlg::OnEditchangeComboDn() { UpdatePipeBottomEle(FALSE); } BOOL CPipeEditDlg::IsModifyVerPipe() { if (!m_bEle2 || !m_bElevation) { return FALSE; } return m_bAllVerPipe; } BOOL CPipeEditDlg::IsSamePipe(BOOL bVer) { if (m_ssPipe.Length() == 0) { return FALSE; } BOOL bVal = FALSE; for (long i = 0; i < m_ssPipe.Length(); i++) { OPENOBJ_BEGIN(m_ssPipe[i], AcDb::kForRead, TDbPipe, pPipe); if (pPipe != NULL) { if (!pPipe->IsVertical() && bVer || pPipe->IsVertical() && !bVer) { bVal = TRUE; } } OPENOBJ_END(); if (bVal) { return FALSE; } } return TRUE; } void CPipeEditDlg::OnBtnOutdim() { CDimSettingDlg dlg; dlg.m_nDrawType = m_nDrawType; dlg.m_nGradientType = m_nGradientType; dlg.m_nLabelType = m_nLabelType; dlg.m_nLenType = m_nLenType; dlg.m_nDnType = m_nDnType; if (dlg.DoModal() == IDOK) { m_nDrawType = dlg.m_nDrawType; m_nGradientType = dlg.m_nGradientType; m_nLabelType = dlg.m_nLabelType; m_nLenType = dlg.m_nLenType; m_nDnType = dlg.m_nDnType; SetBtnText(); } }