#include "stdafx.h" #include "HydrantSetting.h" #include "DbEquipment.h" #include //设置消火栓的颜色 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 &vecId, int nColor) { if (!vecId.empty()) { std::vector::iterator iter = vecId.begin(); for (; iter != vecId.end(); iter++) { SetHydrantColor(*iter, nColor); int i = 0; } } } //根据B值即消火栓的宽度为消火栓排序 void CHydrantSetting::Compositor(std::vector &vecId, std::multimap &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 &mapId, std::vector &vecId1, std::vector &vecId2) { AcDbObjectId idHydrant = AcDbObjectId::kNull; std::map::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(); } } }