Files
envi-code/SourceCode/Code2026/tg_shs/shs_TwtKernal/Plan2SysDlg.cpp
T

2341 lines
73 KiB
C++
Raw Normal View History

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