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

[分享]遍历块表记录

摘自《AutoCAD ObjectARX2000开发技术指南》


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