objectARX,c++实现将界面中的所有图层获取并存入数组
代码如下:
CStringArray layerNames;
AcDbLayerTable* pLayerTbl = NULL;
if (acdbHostApplicationServices()->workingDatabase()->getLayerTable(pLayerTbl, AcDb::kForRead) != Acad::eOk)
{
return;
}
AcDbLayerTableIterator* pLayerIter = NULL;
if (pLayerTbl->newIterator(pLayerIter) != Acad::eOk)
{
return;
}
int i = 0;
for (; !pLayerIter->done(); pLayerIter->step())
{
AcDbLayerTableRecord* pLayerTblRcd = NULL;
if (pLayerIter->getRecord(pLayerTblRcd, AcDb::kForRead) != Acad::eOk)
{
return;
}
ACHAR *pLayerName;
if (pLayerTblRcd->getName(pLayerName) != Acad::eOk)
{
return;
}
layerNames.Add(pLayerName);
pLayerTblRcd->close();
i++;
}
delete pLayerIter;
pLayerTbl->close();
类似,我们可以获取当前图形的所有实体的Id,并存放到id数组中
AcDbObjectIdArray m_EntIds;
AcDbBlockTable *pBlkTbl = NULL;
if (acdbHostApplicationServices()->workingDatabase()->getSymbolTable(pBlkTbl, AcDb::kForRead) != Acad::eOk)
{
return;
}
AcDbBlockTableRecord *pBlkTblRcd = NULL;
if (pBlkTbl->getAt(ACDB_MODEL_SPACE, pBlkTblRcd, AcDb::kForRead) != Acad::eOk)
{
return;
}
pBlkTbl->close();
AcDbBlockTableRecordIterator *iter = NULL;
pBlkTblRcd->newIterator(iter);
for(; !iter->done; iter->step())
{
AcDbEntity *pEnt = NULL;
Acad::ErrorStatus es = iter->getEntity(pEnt, AcDb::kForRead);
if (es != Acad::eOk)
{
return;
}
m_EntIds.append(pEnt->objectId());
pEnt->close();
}
delete iter;