CAD开发常用方法实例总结
1. 捕获实体ID办法中:遍历块表和选择集那个效率更高?
edata说:遍历块表更快些
遍历块表
acedGetPoint(NULL,_T("\n选择点: "),pt)
acedSSGet(_T("X"),NULL,NULL,rb,ss)
AcDbObjectIdArray objIds;
for (int i=0;i<nsslen;i++)
{
ads_name ent;
acedSSName(ss,i,ent);
AcDbObjectId objId;
acdbGetObjectId(objId,ent);
if (!objId.isNull())
{
objIds.append(objId);
}
}
选择集
acedGetPoint(NULL,_T("\n选择点: "),pt)
AcGePoint3d p1=asPnt3d(pt);
AcDbBlockTablePointer pBlkTbl(curDoc()->database(),AcDb::kForRead);
AcDbBlockTableIterator *pBlkTblIter=NULL;
Acad::ErrorStatus es= pBlkTbl->newIterator(pBlkTblIter);
AcDbObjectIdArray objIds;
for (pBlkRcdIter->start();!pBlkRcdIter->done();pBlkRcdIter->step())
{
AcDbEntity *pEnt=NULL;
pBlkRcdIter->getEntity(pEnt,AcDb::kForRead);
if (pEnt == NULL)
{
continue;
}
if (pEnt->isKindOf(AcDbPoint::desc()))
{
AcDbPoint *pPoint=AcDbPoint::cast(pEnt);
if (pPoint!=NULL)
{
AcGePoint3d ptTemp=pPoint->position();
if (ptTemp.isEqualTo(p1))
{
objIds.append(pPoint->objectId());
}
}
}
pEnt->close();
}
2.常用鼠标捕获办法总结
后续会一直增加