64,685
社区成员
发帖
与我相关
我的任务
分享
AcArray<AcDbObjectId> selectedIds;
while(true)
{
ads_name ename;
ads_point pickPt;
acedInitGet(NULL, NULL);
int rc = acedEntSel(_T("\nSelect Entity"), ename, pickPt);
if(rc == RTCAN || rc == RTERROR)
break;
if(rc == RTNORM)
{
AcDbObjectId entId;
acdbGetObjectId(entId, ename);
selectedIds.append(entId);
}
}
if(selectedIds.length() == 0)
return;
static AcDbObjectIdArray GetAllEntityId()
{
AcDbDatabase *pDb = acdbHostApplicationServices()->workingDatabase();
resbuf clyr;
acedGetVar(_T("clayer"), &clyr);
TCHAR *layername = clyr.resval.rstring;
AcDbObjectIdArray entIds;
bool bFilterlayer = false;
AcDbObjectId layerId;
if (layername != NULL)
{
AcDbLayerTable *pLayerTbl = NULL;
pDb->getSymbolTable(pLayerTbl, AcDb::kForRead);
if (!pLayerTbl->has(layername))
{
pLayerTbl->close();
return entIds;
}
pLayerTbl->getAt(layername, layerId);
pLayerTbl->close();
bFilterlayer = true;
}
//获得表块
AcDbBlockTable *pBlkTbl = NULL;
pDb->getSymbolTable(pBlkTbl, AcDb::kForRead);
//表块记录
AcDbBlockTableRecord *pBlkTblRcd = NULL;
pBlkTbl->getAt(ACDB_MODEL_SPACE, pBlkTblRcd, AcDb::kForRead);
pBlkTbl->close();
//创建遍历器 依次访问模型空间中的每个实体
AcDbBlockTableRecordIterator *it = NULL;
pBlkTblRcd->newIterator(it);
for (it->start(); !it->done(); it->step())
{
AcDbEntity *pEnt = NULL;
Acad::ErrorStatus es = it->getEntity(pEnt, AcDb::kForRead);
if (es == Acad::eOk)
{
if (bFilterlayer)
{
if (pEnt->layerId())
entIds.append(pEnt->objectId());
}
else
{
pEnt->close();
}
}
}
delete it;
pBlkTblRcd->close();
return entIds;
}