109 lines
2.7 KiB
C++
109 lines
2.7 KiB
C++
#include "stdafx.h"
|
|
#include "HydrantSetting.h"
|
|
#include "DbEquipment.h"
|
|
#include <algorithm>
|
|
|
|
//设置消火栓的颜色
|
|
void CHydrantSetting::SetHydrantColor(AcDbObjectId idHydrant, int nColor)
|
|
{
|
|
if (idHydrant.isValid())
|
|
{
|
|
TDbEquipment *pEquip = NULL;
|
|
acdbOpenObject(pEquip, idHydrant, AcDb::kForWrite);
|
|
if (pEquip != NULL)
|
|
{
|
|
AcDbObjectId idBlk = pEquip->GetBlock2d();
|
|
AcDbBlockTableRecord *pBlkTblRec = NULL;
|
|
acdbOpenObject(pBlkTblRec, idBlk, AcDb::kForRead);
|
|
if (pBlkTblRec != NULL)
|
|
{
|
|
AcDbBlockTableRecordIterator *pIter = NULL;
|
|
pBlkTblRec->newIterator(pIter);
|
|
AcDbEntity *pEnt = NULL;
|
|
for (pIter->start(); !pIter->done(); pIter->step())
|
|
{
|
|
Acad::ErrorStatus es = pIter->getEntity(pEnt, AcDb::kForWrite);
|
|
if (pEnt != NULL && es == Acad::eOk)
|
|
{
|
|
pEnt->setColorIndex(nColor);
|
|
pEnt->close();
|
|
}
|
|
}
|
|
delete pIter;
|
|
pIter = NULL;
|
|
|
|
pEquip->SetBlock2d(idBlk);
|
|
pBlkTblRec->close();
|
|
|
|
}
|
|
|
|
pEquip->close();
|
|
}
|
|
}
|
|
}
|
|
|
|
//设置消火栓的颜色
|
|
void CHydrantSetting::SetHydrantColor(std::vector<AcDbObjectId> &vecId, int nColor)
|
|
{
|
|
if (!vecId.empty())
|
|
{
|
|
std::vector<AcDbObjectId>::iterator iter = vecId.begin();
|
|
for (; iter != vecId.end(); iter++)
|
|
{
|
|
SetHydrantColor(*iter, nColor);
|
|
int i = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
//根据B值即消火栓的宽度为消火栓排序
|
|
void CHydrantSetting::Compositor(std::vector<AcDbObjectId> &vecId, std::multimap<double, AcDbObjectId> &mapTemp)
|
|
{
|
|
int nSize = (int)vecId.size();
|
|
TDbEquipment *pEquip = NULL;
|
|
mapTemp.clear();
|
|
for (int i = 0; i < nSize; i++)
|
|
{
|
|
acdbOpenObject(pEquip, vecId[i], AcDb::kForRead);
|
|
if (pEquip != NULL)
|
|
{
|
|
AcGeScale3d sca = pEquip->GetInsertScale();
|
|
double dWidth = fabs(sca.sx);
|
|
mapTemp.insert(std::make_pair(dWidth, vecId[i]));
|
|
pEquip->close();
|
|
}
|
|
}
|
|
}
|
|
|
|
//根据小火栓类型将其分为两类: 水平接,上接
|
|
void CHydrantSetting::Sort(std::map<AcDbObjectId, AcDbObjectId> &mapId, std::vector<AcDbObjectId> &vecId1, std::vector<AcDbObjectId> &vecId2)
|
|
{
|
|
AcDbObjectId idHydrant = AcDbObjectId::kNull;
|
|
std::map<AcDbObjectId, AcDbObjectId>::iterator iter = mapId.begin();
|
|
TDbEquipment *pEquip = NULL;
|
|
vecId1.clear();
|
|
vecId2.clear();
|
|
|
|
for (; iter != mapId.end(); iter++)
|
|
{
|
|
idHydrant = iter->first;
|
|
if (idHydrant.isValid())
|
|
{
|
|
acdbOpenObject(pEquip, idHydrant, AcDb::kForRead);
|
|
if (pEquip != NULL)
|
|
{
|
|
double dPipeLength = pEquip->GetPipeLength();
|
|
if (fabs(dPipeLength) < 1e-6) //消火栓类型为水平接
|
|
{
|
|
vecId1.push_back(idHydrant);
|
|
}
|
|
else if (fabs(dPipeLength - 250) < 1e-6) //消火栓类型为上接
|
|
{
|
|
vecId2.push_back(idHydrant);
|
|
}
|
|
}
|
|
pEquip->close();
|
|
}
|
|
}
|
|
}
|