JA_JERRY 发表于 2005-1-16 20:38:00

[分享]遍历块表记录

摘自《 ObjectARX2000开发技术指南》
                                       我们用下面的例子说明如何使用块表记录遍历器遍历块表记录,并在屏幕上打印出块中所含对象的信息。
                                       程序中用printAll()函数打开一个块表进行读操作,然后根据用户提供的块名打开块表记录,使用一个新块表记录遍历器遍历块表记录。如果记录中含有实体,则遍历器打印出该实体的信息
                                       void
                                       printAll()
                                       {
                                       int rc;
                                       char blkName;
                                       rc = acedGetString(Adesk::kTrue,
                                       "请输入块名:",
                                       blkName);
                                       if(rc!=RTNORM)
                                       return;
                                       if(blkName=='\0'){
                                       if(acdbHostApplicationServices()->workingDatabase()
                                       ->tilemode() == Adesk::kFalse){
                                       struct resbuf rb;
                                       acedGetVar("cvport",&rb);
                                       if(rb.resval.rint == 1){
                                       strcpy(blkName,ACDB_PAPER_SPACE);
                                       }else{
                                       strcpy(blkName,ACDB_MODEL_SPACE);
                                       }
                                       }else{
                                       strcpy(blkName,ACDB_MODEL_SPACE);
                                       }
                                       }
                                       AcDbBlockTable* pBlockTable;
                                       acdbHostApplicationServices()->workingDatabase()
                                       ->getSymbolTable(pBlockTable,AcDb::kForRead);
                                       AcDbBlockTableRecord *pBlockTableRecord;
                                       pBlockTable->getAt(blkName,pBlockTableRecord,
                                       AcDb::kForRead);
                                       
                                       AcDbBlockTableRecordIterator *pBlockIterator;
                                       pBlockTableRecord ->newIterator(pBlockIterator);
                                       for(;!pBlockIterator->done();
                                       pBlockIterator->step())
                                       {
                                       AcDbEntity *pEntity;
                                       pBlockIterator->getEntity(pEntity,AcDb::kForRead);
                                       AcDbHandle objHandle;
                                       pEntity->getAcDbHandle(objHandle);
                                       char handleStr;
                                       objHandle.getIntoAsciiBuffer(handkeStr);
                                       const char *pCname = pEntity->isA()->name();
                                       acutPrintf("对象ID%lx,名柄%s,类名%s.\n",
                                       pEntity->objId(),handleStr,pCname);
                                       pEntity->close();
                                       }
                                       delete pBlockIterator;
                                       pBlockTableRecord->close();
                                       acutPrintf("\n");
                                       }
页: [1]
查看完整版本: [分享]遍历块表记录