Files
envi-code/SourceCode/Code2026/tg_shs/shs_TwtKernal/PipeEditDlg.cpp
T
gjm 164968b62e chore
把非utf8-bom编码的cpp/h文件改为 utf8 bom 编码, msvc识别utf8编码时,如果不是bom格式的,会使用当前cp_oem来解码.
2026-10-04 00:04:20 +08:00

2020 lines
51 KiB
C++

// PipeEditDlg.cpp : implementation file
//
#include "stdafx.h"
#include <dbPipeValve.h>
#include <DbEquipment.h>
#include <dbSymbolAnnotate.h>
#include <DbPump.h>
#include <TAPI.h>
#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<std::pair<Entity, XPoint> > 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<std::pair<Entity, XPoint> >::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("<or"),
-4, _T("<and"), RTDXF0, _T("ATS_ARROW"), 8, LAY_OTHER_DIM, -4, _T("and>"),
-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;j<len1;j++){
Entity entTmp = ss[j];
CString csTmp = ReadXdata(entTmp, _T("TG-BINDPIPE"));
if(csPipeName == csTmp){
OPENOBJ_BEGIN(entTmp, AcDb::kForWrite, TDbSymbArrow, pDim);
if(pDim){
pDim->SetText(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<int>(dSpare);
CString sTemp;
sTemp.Format(_T("%d"), iDimType);
nLenType = static_cast<int>(_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<AcDbObjectId> lstAttachment;
pPipe->GetAttachments(lstAttachment);
int len = lstAttachment.Length();
for(int m=0;m<len;m++){
AcDbObjectId idTmp = *lstAttachment[m];
OPENOBJ_BEGIN(idTmp, AcDb::kForWrite, TDbPipeAttachment, pValve);
if(pValve){
XPoint ptLoc = pValve->GetLocation();
// 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<double>(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<AcDbObjectId> lstAttachment;
pPipe->GetAttachments(lstAttachment);
int len = lstAttachment.Length();
for(int m=0;m<len;m++){
AcDbObjectId id = *lstAttachment[m];
OPENOBJ_BEGIN(id, AcDb::kForWrite, TDbPipeValve, pValve);
if(pValve){
pValve->SetSysType(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标高和坡度不匹配,是否更新标高<Y>:"), 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;j<len;j++){
Entity ent = ss[j];
dAllCuba += GetPipeCuba(ent);
}
double dMeter(1);
if(!DocGetMeterUnitDraw())
dMeter = 1000;
// zxl 2013.1.6 add 调整管线标注样式
int nDnType = 0;
int nLenType = 0;
int nGradientType = 0;
int nLabelType = 0;
int nDrawType = 0;
double nElevation(0), nElevation2(0);
Entity ent = ss[0L];
CString csLayer, csLineType, csDnType, csDimType;
int iColor(0), iMaterial(0), iHideLevel(0), iInsulate(0);
double nWidth(0), nPipeDn(0), nGradient(0), nSpare(0);
BOOL bDrawLabel(0);
OPENOBJ_BEGIN(ent, AcDb::kForRead, TDbPipe, pPipe);
if(pPipe){
TCHAR *layer, *szLineType;
XPoint ptTmp = pPipe->StartPoint();
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;i<len;i++){
Entity entTmp = ss[i];
if(dlg.m_bGradient){
UpdateGradientDim(entTmp, _tstof(dlg.m_csGradient));
}
OPENOBJ_BEGIN(entTmp, 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){ 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<AcDbObjectId> lstAttachment;
// pPipe->GetAttachments(lstAttachment);
// int len = lstAttachment.Length();
// for(int m=0;m<len;m++){
// AcDbObjectId idTmp = *lstAttachment[m];
// OPENOBJ_BEGIN(idTmp, AcDb::kForWrite, TDbPipeAttachment, pValve);
// if(pValve){
// XPoint ptLoc = pValve->GetLocation();
// 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<double>(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<AcDbObjectId> lstAttachment;
pPipe->GetAttachments(lstAttachment);
int len = lstAttachment.Length();
for(int m=0;m<len;m++){
AcDbObjectId id = *lstAttachment[m];
OPENOBJ_BEGIN(id, AcDb::kForWrite, TDbPipeValve, pValve);
if(pValve){
pValve->SetSysType(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;i<m_lstWireLay.Length();i++){
m_comboLay.AddString(m_lstWireLay[i]);
}
UpdateData(FALSE);
m_spinWidth.SetRange(0, 10);
m_spinHide.SetRange(-255, 255);
int iold = m_iMaterial;
// cet 2011.6.20 add
CWnd *pWnd = GetDlgItem(IDC_COMBO_DN2);
if (pWnd != NULL)
{
pWnd->SetWindowText(m_csDnName);
}
if(m_iColor == 256)
m_iColor = GetLayerColorIdx(GetLayer());
DrawStatic();
ResetLineCombox();
XStringList lstMat;
GetPipeMaterialList(lstMat);
for(i=0;i<lstMat.Length();i++){
m_comboMat.AddString(lstMat[i]);
}
m_iMaterial = iold;
UpdateData(FALSE);
SetEnable();
SetBtnText(); // zxl 2013.01.06 add
// if(m_bHideOther)
// {
// CWnd *pWnd1 = GetDlgItem(IDC_EDIT_HIDE);
// CWnd *pWnd2 = GetDlgItem(IDC_SPIN_HIDE);
// pWnd1->EnableWindow(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;i<m_lstLineTypeComment.Length();i++){
m_comboLineType.AddString(CString(m_lstLineTypeName[i]) + _T(" ") +m_lstLineTypeComment[i]);
}
m_iLineType = m_lstLineTypeName.Index(m_csLineType, 0);
UpdateData(FALSE);
}
void CPipeEditDlg::OnOK()
{
UpdateData(TRUE);
if(m_iLineType < 0)
m_iLineType = 0;
m_csLineType=m_lstLineTypeName[m_iLineType];
// if(m_bDrawLabel)
// {
// if(m_iDimType == 0)
// m_csDimType = _T("");
// else if(m_iDimType == 1)
// m_csDimType = _T("i=0.003L=12.3m");
// else if(m_iDimType == 2)
// m_csDimType = _T("-0.003-12.3m");
// else if(m_iDimType == 3)
// m_csDimType = _T("0.00312.3m");
// else if(m_iDimType == 4)
// m_csDimType = _T("i=0.003");
// else if(m_iDimType == 5)
// m_csDimType = _T("-0.003");
// else if(m_iDimType == 6)
// m_csDimType = _T("0.003");
// else if(m_iDimType == 7)
// m_csDimType = _T("L=12.3m");
// else if(m_iDimType == 8)
// m_csDimType = _T("-12.3m");
// else if(m_iDimType == 9)
// m_csDimType = _T("12.3m");
// }
// cet 2011.5.23 add 设置标高值
CWnd *pWnd1 = GetDlgItem(IDC_EDIT_ELEVATION);
CWnd *pWnd2 = GetDlgItem(IDC_EDIT_ELEVATION2);
CString sEle;
if (pWnd1 != NULL)
{
pWnd1->GetWindowText(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();
}
}