Daniel, for reference your latest runs 0.156 seconds on my system.
I hadn't noticed that it was just blasting throught the BTR and I
wrote one that does the same except without smart pointers, with
a run time of 0.094 seconds.
CLapseTime ltTotal;
AcDbDatabase * pDb = acdbHostApplicationServices()->workingDatabase();
AcDbBlockTableRecord * pRec;
if(acdbOpenAcDbObject((AcDbObject *&) pRec,pDb->currentSpaceId(), AcDb::kForWrite) == Acad::eOk)
{
AcDbBlockTableRecordIterator * pIter;
if(pRec->newIterator(pIter) == Acad::eOk) {
for(pIter->start(); !pIter->done(); pIter->step()) {
AcDbObjectId objId;
AcDbEntity * pEnt;
if(pIter->getEntity(pEnt, AcDb::kForRead) == Acad::eOk) {
AcDbPoint * pPoint = AcDbPoint::cast(pEnt);
if(pPoint) {
AcDbCircle * pCircle = new AcDbCircle(pPoint->position(), pPoint->normal(), 15.0);
if(pCircle) {
if(pRec->appendAcDbEntity(pCircle) == Acad::eOk)
pCircle->close();
else
delete pCircle;
}
}
pEnt->close();
}
}
delete pIter;
}
pRec->close();
}
acutPrintf(_T("\nTotal run time: %.3f seconds"), ltTotal.LapseTimeSeconds());