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

666 lines
18 KiB
C++
Raw Normal View History

2026-09-28 15:28:50 +08:00
#include "StdAfx.h"
#include "LayFireExtinguisherDlg.h"
#include "FireExtinguisherJig.h"
#include "DbEquipment.h"
#include "DbFireExtinguisher.h"
extern XCurveSegment GetEntitySegByPt(XPoint &ptPick, Entity &entWall, AcGeMatrix3d &mat);
void FireExtinguisherEditCmd()
{
g_ssPickFirst.Free();
PickSet ss;
RBList rbMask(RTDXF0, _T("ATS_EQUIPMENT"), 8, LAY_TWT_EXTINGUISHER, NULL);
int nRet = SelectEntities(_T("\n请选择要修改的灭火器:<退出>"), ss, rbMask);
if (nRet != RTNORM)
{
return;
}
CTemporaryResourceOverride vTemp;
CLayFireExtinguisherDlg dlg(2);
dlg.SetPickset(ss);
dlg.DoModal();
}
int EditFireExtinguisher(AcDbObjectId id)
{
if(!id)
return RTERROR;
CString sBlkName, sPec;
int nNum = 0;
double dScale = 0.0;
double dRadius = 0.0;
bool bDim = false;
bool bAutoScale = true;
AcDbObjectId idTextStyle;
double dTextHeight = 0.0;
CString sGrade;
int nScaleType = 0;
int nSpecType = -1;
OPENOBJ_BEGIN(id, AcDb::kForRead, TDbFireExtinguisher, pFireExt);
if(pFireExt != NULL)
{
sBlkName = GetBlkNameById(pFireExt->GetBlock2d());
sPec = pFireExt->GetSpec();
nNum = pFireExt->GetNum();
dScale = pFireExt->GetScale();
dRadius = pFireExt->GetProtectRadius();
bDim = pFireExt->GetIsDim();
idTextStyle = pFireExt->GetTextStyleId();
dTextHeight = pFireExt->GetTextHeight();
sGrade = pFireExt->GetGrade();
nScaleType = pFireExt->GetScaleType();
nSpecType = pFireExt->GetSpecificationType();
}
OPENOBJ_END();
CTemporaryResourceOverride vTemp;
CLayFireExtinguisherDlg dlg(1);
dlg.SetScale(dScale);
dlg.SetTextHeight(dTextHeight);
dlg.m_sProtectRadius.Format(_T("%.2f"), dRadius);
if (dlg.m_sProtectRadius.Find(_T(".")) > -1)
{
dlg.m_sProtectRadius.TrimRight(_T("0"));
dlg.m_sProtectRadius.TrimRight(_T("."));
}
dlg.SetCount(nNum);
dlg.GetSpecTypeByBlkName(sBlkName);
dlg.m_sSpecification = sPec;
dlg.m_sGrade = sGrade;
dlg.m_nScale = nScaleType;
dlg.m_nSpecificationType = nSpecType;
if (bDim)
{
dlg.m_nDimType = 0;
}
else
{
dlg.m_nDimType = 1;
}
OPENOBJ_BEGIN(idTextStyle, AcDb::kForRead, AcDbTextStyleTableRecord, pStyle);
ASSERT(pStyle);
const TCHAR* pName = NULL;
if (pStyle->getName(pName) == Acad::eOk && pName != NULL)
dlg.m_sTextStyle = pName;
OPENOBJ_END();
if (dlg.DoModal() != IDOK)
{
return RTNORM;
}
OPENOBJ_BEGIN(id, AcDb::kForWrite, TDbFireExtinguisher, pFireExt);
if(pFireExt != NULL)
{
sBlkName = dlg.GetSelBlkName();
AcDbObjectId id = GetBlkIdByName(sBlkName);
if (!id.isValid())
{
CString sBlkNum;
CString sDwb = g_csDwbPath + _T("TwtSys");
int nIndex = sBlkName.ReverseFind(_T('$'));
if (nIndex != -1)
{
int nSize = sBlkName.GetLength();
sBlkNum = sBlkName.Right(nSize - nIndex - 1);
}
XString xsTmp;
if(LoadDwbBlock(sDwb, sBlkNum, xsTmp) != RTNORM)
{
return false;
}
}
pFireExt->SetBlock2d(GetBlkIdByName(sBlkName));
pFireExt->SetSpec(dlg.m_sSpecification);
pFireExt->SetNum(dlg.GetCount());
double dScale = dlg.GetScale();
pFireExt->SetScale(dScale);
pFireExt->SetProtectRadius(_tstof(dlg.m_sProtectRadius));
pFireExt->SetIsDim(dlg.IsDim() ? true : false);
pFireExt->SetTextStyleId(GetTextStyleId(dlg.m_sTextStyle));
pFireExt->SetTextHeight(_tstof(dlg.m_sTextHeight));
pFireExt->SetGrade(dlg.m_sGrade);
pFireExt->SetScaleType(dlg.m_nScale);
pFireExt->SetSpecificationType(dlg.m_nSpecificationType);
}
OPENOBJ_END();
return 1;
}
// 图块大小
void GetBlkSize(const AcDbObjectId &idBlk, const AcGeScale3d &scale, double &dWidth, double &dHeight)
{
AcGePoint3d ptIns = AcGePoint3d::kOrigin;
AcDbBlockReference blkRef(ptIns, idBlk);
blkRef.setScaleFactors(scale);
AcDbExtents extent;
blkRef.getGeomExtents(extent);
AcGePoint3d ptMin = extent.minPoint();
AcGePoint3d ptMax = extent.maxPoint();
dWidth = ptMax.x - ptMin.x;
dHeight = ptMax.y - ptMin.y;
}
bool GetBlkSize(const CString &sBlkName, const AcGeScale3d &scale, double &dWidth, double &dHeight)
{
AcDbObjectId idBlk = GetBlockIdFromString(sBlkName);
if (idBlk.isNull())
{
// 加载灭火器图块
CString sDwb = g_csDwbPath + _T("TwtSys");
CString sBlkNum;
int nIndex = sBlkName.ReverseFind(_T('$'));
if (nIndex != -1)
{
int nSize = sBlkName.GetLength();
sBlkNum = sBlkName.Right(nSize - nIndex - 1);
}
XString xsTmp;
if(LoadDwbBlock(sDwb, sBlkNum, xsTmp) != RTNORM)
{
return false;
}
// 重新获取图块id
idBlk = GetBlockIdFromString(sBlkName);
if (idBlk.isNull())
{
return false;
}
}
GetBlkSize(idBlk, scale, dWidth, dHeight);
return true;
}
// 图块插入点距图块0度时外包框底边的距离 cet 2013.4.8 add
double GetPtinsToExtentBottomDist(const CString &sBlkName)
{
AcDbObjectId idBlk = GetBlockIdFromString(sBlkName);
if (idBlk.isNull())
{
// 加载灭火器图块
CString sDwb = g_csDwbPath + _T("TwtSys");
CString sBlkNum;
int nIndex = sBlkName.ReverseFind(_T('$'));
if (nIndex != -1)
{
int nSize = sBlkName.GetLength();
sBlkNum = sBlkName.Right(nSize - nIndex - 1);
}
XString xsTmp;
if(LoadDwbBlock(sDwb, sBlkNum, xsTmp) != RTNORM)
{
return 0.0;
}
return GetPtinsToExtentBottomDist(sBlkName);
}
AcGePoint3d ptIns = AcGePoint3d::kOrigin;
AcDbBlockReference blkRef(ptIns, idBlk);
AcDbExtents extent;
if (blkRef.getGeomExtents(extent) != Acad::eOk)
{
return 0.0;
}
return fabs(extent.minPoint().y);
}
void AddToCurSpace(CLayFireExtinguisherDlg &dlg, TDbFireExtinguisher &fireExtinguisher)
{
// 灭火器数量
int nNum = dlg.GetCount();
if (nNum <= 0)
{
return;
}
TDbFireExtinguisher *pFireExtinguisher = new TDbFireExtinguisher;
pFireExtinguisher->SetNum(nNum);
CString sBlkName = dlg.GetSelBlkName();
//插入点
int nLayDimType = dlg.GetLayDimType();
pFireExtinguisher->SetLayType(nLayDimType);
AcGePoint3d ptIns = fireExtinguisher.GetLocation();
pFireExtinguisher->SetLocation(ptIns);
CString sProtectRadius, sSpecification;
sProtectRadius.Format(_T("%.3f"), fireExtinguisher.GetProtectRadius());
pFireExtinguisher->SetProtectRadius(_tstof(sProtectRadius));
sSpecification = dlg.GetSpecification();
pFireExtinguisher->SetSpec(sSpecification);
pFireExtinguisher->setLayer(InitLayer(LAY_TWT_EXTINGUISHER));
// 文字
pFireExtinguisher->SetIsDim(dlg.IsDim() ? true : false);
pFireExtinguisher->SetDimTextPos(fireExtinguisher.GetDimTextPos());
pFireExtinguisher->SetTextStyleId(GetTextStyleId(dlg.GetTextStyle()));
pFireExtinguisher->SetTextHeight(dlg.GetTextHeight());
double dScale = fireExtinguisher.GetScale();
double dAngle = fireExtinguisher.GetAngle();
pFireExtinguisher->SetAngle(dAngle);
pFireExtinguisher->SetScale(dScale);
pFireExtinguisher->SetScaleType(dlg.m_nScale);
pFireExtinguisher->SetGrade(dlg.m_sGrade);
pFireExtinguisher->SetTextRotation(fireExtinguisher.GetTextRotation());
pFireExtinguisher->SetTextAlignment(fireExtinguisher.GetTextAlignment());
pFireExtinguisher->SetLabelLoc(fireExtinguisher.GetLabelLoc());
pFireExtinguisher->SetTextLayer(InitLayer(LAY_TWT_EXTINGUISHER_TEXT));
pFireExtinguisher->SetBlock2d(GetBlkIdByName(sBlkName));
pFireExtinguisher->SetSpecificationType(dlg.m_nSpecificationType);
AcDbObjectId id = pFireExtinguisher->AddToCSpace(Adesk::kTrue);
}
void LayFireExtinguisher(Entity &entHydrant, TDbFireExtinguisher &entPreview, CLayFireExtinguisherDlg *pDlg)
{
if (pDlg == NULL)
{
return;
}
// 消火栓出入点,角度,尺寸
AcDbObjectId idBlock2d;
XPoint ptLoc;
double dScaleX = 0.0, dScaleY = 0.0, dAngle = 0.0;
BOOL bMirrorX = FALSE;
OPENOBJ_BEGIN(entHydrant, AcDb::kForRead, TDbEquipment, pEuip);
if (pEuip != NULL)
{
idBlock2d = pEuip->GetBlock2d();
//ptLoc = pEuip->GetLocation();// zxl 2013.12.25 modify 改为设备基点,自动比例时,灭火器也要按照对应比例
ptLoc = pEuip->GetInsert();
if (pEuip->IsAutoScale())
{
dScaleX = pEuip->GetScale() * pEuip->GetPScale() / 100;
dScaleY = pEuip->GetYScale() * pEuip->GetPScale() / 100;
}
else
{
dScaleX = pEuip->GetScale();
dScaleY = pEuip->GetYScale();
}
dAngle = pEuip->GetAngle();
bMirrorX = pEuip->IsMirrorByX();
}
OPENOBJ_END();
if (idBlock2d.isNull() && !ptLoc)
{
return;
}
double dWidth = 0.0, dHeight = 0.0;
AcGeScale3d scale(dScaleX, dScaleY, 1);
GetBlkSize(idBlock2d, scale, dWidth, dHeight);
// 布置灭火器
entPreview.SetDimTextPos(true);
if (bMirrorX) // 沿x轴镜像
{
dAngle += PI;
}
AcGeVector3d vtDir = AcGeVector3d::kXAxis;
vtDir.rotateBy(dAngle + PI/2, AcGeVector3d::kZAxis);
dAngle = Wcs2Ucs(dAngle);
dAngle = AngleRangeTo2PI(dAngle);
double dDist = 0.0;
// 考虑图块插入点距图块外包框底边的高差 cet 2013.4.8 add
double dScale = pDlg->GetScale() /** DocGetPScale() / 100*/; // 指定比例 cet 2013.4.8 modify // zxl 2013.12.25 modify
if (pDlg->m_nScale == 0)
{
dScale = pDlg->GetScale() * DocGetPScale() / 100;
}
dDist = GetPtinsToExtentBottomDist(pDlg->GetSelBlkName()) * dScale;
CString sBlkName = pDlg->GetSelBlkName();
double dWidth2 = 0.0, dHeight2 = 0.0;
double dTemp = pDlg->GetScale();
AcGeScale3d scale2(dScale, dScale, 1);
if (!GetBlkSize(sBlkName, scale2, dWidth2, dHeight2))
{
return;
}
entPreview.SetDimTextPos(true);
if (dAngle > PI / 2 + 0.001 && dAngle < PI * 1.5 + 0.001 && pDlg->GetLayPos() == 1) // [PI, PI * 2)
{
dDist = dHeight2 - dDist; // 180度旋转图块,移动距离
dAngle += PI;
dAngle = AngleRangeTo2PI(dAngle);
entPreview.SetDimTextPos(false);
}
dAngle = Ucs2Wcs(dAngle);
dAngle = AngleRangeTo2PI(dAngle);
entPreview.SetAngle(dAngle);
AcGePoint3d ptIns = ptLoc + vtDir * (dHeight * 0.5 + dDist); // 灭火器与消火栓间距为消火栓宽度的高度的一半 // cet 2013.4.8 moidfy 紧贴消火栓
entPreview.SetLocation(ptIns);
XPoint ptTextIns;
vtDir = AcGeVector3d::kXAxis;
vtDir.rotateBy(dAngle, AcGeVector3d::kZAxis);
if (pDlg->GetLayDimType() == 0) // 按数量布置
{
if (!entPreview.GetDimTextPos())
{
vtDir.rotateBy(-PI/2, AcGeVector3d::kZAxis);
ptTextIns = ptIns + vtDir * pDlg->GetTextHeight() * DocGetPScale();
}
else
{
vtDir.rotateBy(PI/2, AcGeVector3d::kZAxis);
ptTextIns = ptIns + vtDir * dHeight2 * 1.2;
}
}
else // 单布
{
ptTextIns = ptIns + vtDir * dWidth2 * 0.7;
}
dAngle = Wcs2Ucs(dAngle);
if(pDlg->GetLayDimType() != 0)
{
if (dAngle - 7 * PI / 4 < 0.001 && dAngle - PI * 3 / 4 > 0.001)
{
ptTextIns = ptIns - vtDir * dWidth2 * 0.7;
}
else
{
ptTextIns = ptIns + vtDir * dWidth2 * 0.7;
}
}
double dAngUcs = dAngle;
XExplodeDraw::TextAlignment align = XExplodeDraw::kBottomCenter;
if (dAngUcs - 7 * PI / 4 < 0.001 && dAngUcs - PI * 3 / 4 > 0.001)
{
dAngUcs -= PI;
if (pDlg->GetLayDimType() == 1)
{
align = XExplodeDraw::kTopLeft;
}
else
{
align = XExplodeDraw::kTopCenter;
if (!entPreview.GetDimTextPos())
{
align = XExplodeDraw::kBottomCenter;
}
}
}
else
{
if (pDlg->GetLayDimType() == 1)
{
align = XExplodeDraw::kBottomLeft;
}
else
{
align = XExplodeDraw::kBottomCenter;
}
}
entPreview.SetTextRotation(Ucs2Wcs(dAngUcs));
entPreview.SetTextAlignment(align);
entPreview.SetLabelLoc(ptTextIns);
entPreview.SetLayType(pDlg->GetLayDimType());
entPreview.SetScale(pDlg->GetScale()); // 原始大小
AddToCurSpace(*pDlg, entPreview); // 将灭火器插入当前模型空间
}
// 当前图纸上所有灭火器 cet 2013.4.22 add
void GetCurAllFireExtinguisher(PickSet &ss)
{
RBList rbMask(RTDXF0, _T("ATS_EQUIPMENT"), 8, LAY_TWT_EXTINGUISHER, NULL);
acedSSGet(_T("A"), NULL, NULL, rbMask, ss);
}
void LayFireExtinguisher()
{
// 获得图纸上所有灭火器 cet 2013.4.22 add
PickSet ss(SS_FREE);
GetCurAllFireExtinguisher(ss);
int n = ss.Length();
g_ssPickFirst.Free();
CTemporaryResourceOverride vTemp;
static CLayFireExtinguisherDlg *pLayFireExtinguisherDlg = NULL;
if (pLayFireExtinguisherDlg == NULL)
{
pLayFireExtinguisherDlg = new CLayFireExtinguisherDlg(IDD_LAY_FIRE_EXTINGUISHER, acedGetAcadFrame());
pLayFireExtinguisherDlg->SetFireExtinguisher(ss);
pLayFireExtinguisherDlg->Create(IDD_LAY_FIRE_EXTINGUISHER, acedGetAcadFrame());
pLayFireExtinguisherDlg->ShowWindow(SW_SHOW);
}
else
{
pLayFireExtinguisherDlg->SetFireExtinguisher(ss);
pLayFireExtinguisherDlg->ReStartForLay(FALSE);
pLayFireExtinguisherDlg->SetFocus();
}
TDbFireExtinguisher *pFireE = new TDbFireExtinguisher; // 预览灭火器对象,可用于创建灭火器
PickSet ssAdd(SS_FREE); // 执行命令过程中产生的灭火器 cet 2013.4.22 add
PickSet ssCir(SS_FREE); // 保护半径显示的圆 cet 2013.4.22 add
while(true)
{
pLayFireExtinguisherDlg->UpdateData(TRUE);
int nLayType = pLayFireExtinguisherDlg->GetLayType(); // 布置方式
if (nLayType == 0) // 框选
{
RBList rbMask(RTDXF0, _T("ATS_EQUIPMENT"), 8, LAY_EQUIP_HYDRANT, NULL);
PickSet ss(SS_FREE);
int nRet = 0;
TCHAR chKey;
nRet = SelectEntities(_T("\n请选择消火栓的范围{选取闭合PLINE(P)}<退出>:"), ss, rbMask, _T("P"), chKey);
if (nRet == RTKWORD) // 闭合PLINE
{
Entity entPoly;
RBList rbMask2(RTDXF0, _T("LWPOLYLINE"), 8, _T("*"), NULL);
if(SelectEntity(_T("\n请选择表示范围的闭合PLINE:<退出>"), entPoly, rbMask2) != RTNORM)
{
continue;
}
XPoly2D poly2(entPoly);
XPoint ptLow3, ptUp3;
poly2.GetExtend(ptLow3, ptUp3);;
poly2.TransUCS(Groups(0), Groups(1));
RBList rbFence = poly2.Fence();
AssureInCurrentView_New(ptLow3, ptUp3);
ss.Get(_T("CP"), rbFence, NULL, rbMask);
}
else if (nRet != RTNORM) // 退出
{
break;
}
ssAdd.IncludeBegin(); // 开始记录命令过程中产生的灭火器 cet 2013.4.22 add
pFireE->SetProtectRadius(pLayFireExtinguisherDlg->GetProtectRadius());
pLayFireExtinguisherDlg->UpdateData(TRUE);
int nLen = ss.Length();
for (long i = 0; i < nLen; ++i)
{
Entity ent(ss[i]);
LayFireExtinguisher(ent, *pFireE, pLayFireExtinguisherDlg);
}
// 更新当前灭火器数量 cet 2013.4.22 add
ssAdd.IncludeEnd();
nLen = ssAdd.Length();
if (ssAdd.Length() > 0)
{
pLayFireExtinguisherDlg->ShowProtectRadius(ssAdd);
ssAdd.Free();
}
}
else if (nLayType == 1)
// 任意布置
{
double dScale = pLayFireExtinguisherDlg->GetScale(), dAngle = Ucs2Wcs(0.0);
pFireE->SetAngle(Ucs2Wcs(0.0));
RANDOM_1:
FireExtinguisherJig jig(pLayFireExtinguisherDlg, pFireE);
//pFireE->ShowProtectRadius(true); // 显示保护半径 cet 2013.4.22 add
jig.SetKeyWord(_T("A E D 1 2 3 4 5 6 7 8 9 = - 0"));
jig.SetTipPrompt(_T("\n请指定灭火器的插入点 [90度旋转(A) /放大(E)/缩小(D)/2具(2)/3具(3)/4具(4)/5具(5)]<退出>"));
int nRet = jig.doIt();
if (nRet == RTKWORD)
{
int nKeyIndex = jig.GetKeyWordIndex();
if (nKeyIndex == 0) // A
{
dAngle += PI / 2;
dAngle = AngleRangeTo2PI(dAngle);
jig.SetRotate(dAngle);
}
else if (nKeyIndex == 1) // E
{
dScale += 0.5;
jig.SetScale(dScale);
pLayFireExtinguisherDlg->SetScale(dScale);
pLayFireExtinguisherDlg->UpdateData(FALSE);
}
else if (nKeyIndex == 2) // D
{
if (dScale > 0.5)
{
dScale -= 0.5;
jig.SetScale(dScale);
pLayFireExtinguisherDlg->SetScale(dScale);
pLayFireExtinguisherDlg->UpdateData(FALSE);
}
}
else if (nKeyIndex >= 3 && nKeyIndex <= 11) // 1 - 9
{
pLayFireExtinguisherDlg->SetCount(nKeyIndex - 2);
pLayFireExtinguisherDlg->UpdateData(FALSE);
}
else if (nKeyIndex == 12) // = 代表加
{
int nCount = pLayFireExtinguisherDlg->GetCount();
pLayFireExtinguisherDlg->SetCount(++nCount);
pLayFireExtinguisherDlg->UpdateData(FALSE);
}
else if (nKeyIndex == 13) // - 代表减
{
int nCount = pLayFireExtinguisherDlg->GetCount();
pLayFireExtinguisherDlg->SetCount(nCount > 1 ? --nCount : 1);
pLayFireExtinguisherDlg->UpdateData(FALSE);
}
// 将0作为关键字不进行任何操作,原因防止等待用户输入点时,键入0并回车后,选中一点插入灭火器
// 此点非用户有意选中
goto RANDOM_1;
}
else if (nRet == RTCAN || nRet == RTNONE || nRet == RTERROR)
{
break;
}
ssAdd.IncludeBegin(); // 开始记录命令过程中产生的灭火器 cet 2013.4.22 add
AddToCurSpace(*pLayFireExtinguisherDlg, *pFireE);
// 更新当前灭火器数量 cet 2013.4.22 add
ssAdd.IncludeEnd();
if (ssAdd.Length() > 0)
{
pLayFireExtinguisherDlg->ShowProtectRadius(ssAdd);
ssAdd.Free();
}
goto RANDOM_1;
}
else// 沿线
{
double dScale = pLayFireExtinguisherDlg->GetScale(), dAngle = Ucs2Wcs(0.0);
bool bBlk = false;
XPoint ptPick;
Entity entWall;
RANDOM_2:
RBList rbMask = ads_buildlist( -4, _T("<or"), RTDXF0, _T("INSERT"), RTDXF0, _T("LWPOLYLINE"), RTDXF0, _T("LINE"), RTDXF0, _T("ARC"), RTDXF0, _T("ATS_WALL"), RTDXF0, _T("ATS_COLUMN"),
-4, _T("or>"), NULL);
int nRet(0);
if (!bBlk)
{
INITGET_BEG(0, _T("R "));
nRet = SelectEntity1(0.3, _T("\n请拾取布置消火栓的外部参照、墙线、柱子、直线、弧线 <退出>"), entWall, ptPick, rbMask);
INITGET_END();
if (nRet != RTNORM && nRet != RTKWORD)
{
break;
}
}
if(entWall.Is(_T("INSERT")) && IsExternalBlock(entWall))
{
bBlk = true;
}
else
{
bBlk = false;
}
ptPick = Ucs2Wcs(ptPick);
XCurveSegment seg; // 得到点所在的线段
AcGeMatrix3d mat;
Entity ent = entWall;
seg = GetEntitySegByPt(ptPick, ent, mat);
if(!seg)
break;
double dAng = GetInsRotate(ptPick, seg);
pFireE->SetAngle(dAng);
pFireE->SetLocation(ptPick);
FireExtinguisherJig jig(pLayFireExtinguisherDlg, pFireE, 1);
jig.m_ptOnLine = ptPick;
jig.SetKeyWord(_T("A E D 1 2 3 4 5 6 7 8 9 = - 0"));
jig.SetTipPrompt(_T("\n请指定灭火器的方向:<退出>"));
nRet = jig.doIt();
if (nRet == RTCAN || nRet == RTNONE || nRet == RTERROR)
{
break;
}
ssAdd.IncludeBegin(); // 开始记录命令过程中产生的灭火器 cet 2013.4.22 add
AddToCurSpace(*pLayFireExtinguisherDlg, *pFireE);
// 更新当前灭火器数量 cet 2013.4.22 add
ssAdd.IncludeEnd();
long nLen = ssAdd.Length();
PickSet ssDel;
for (long i = 0; i < nLen; ++i)
{
if (ssAdd[i].Is(_T("ATS_TEXT")))
{
ssDel += ssAdd[i];
}
}
ssAdd -= ssDel;
if (ssAdd.Length() > 0)
{
ss += ssAdd;
pLayFireExtinguisherDlg->SetFireExtinguisher(ss);
pLayFireExtinguisherDlg->ShowProtectRadius(ssAdd);
ssAdd.Free();
}
goto RANDOM_2;
}
}
if (pFireE != NULL)
{
delete pFireE;
pFireE = NULL;
}
if (!pLayFireExtinguisherDlg->IsReStartForLay())
{
pLayFireExtinguisherDlg->DeleteProtectRadius(); // cet 2013.4.22 add 删除保护半径
pLayFireExtinguisherDlg->DestroyWindow();
delete pLayFireExtinguisherDlg;
pLayFireExtinguisherDlg = NULL;
acedUpdateDisplay();
actrTransactionManager->flushGraphics();
}
//PostCommand(_T("REGEN "));
}