乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 13|回复: 0

[分享]遍历块表记录

[复制链接]

12

主题

54

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
102
发表于 2005-1-16 20:38:00 | 显示全部楼层 |阅读模式
摘自《 ObjectARX2000开发技术指南》
                                         我们用下面的例子说明如何使用块表记录遍历器遍历块表记录,并在屏幕上打印出块中所含对象的信息。
                                         程序中用printAll()函数打开一个块表进行读操作,然后根据用户提供的块名打开块表记录,使用一个新块表记录遍历器遍历块表记录。如果记录中含有实体,则遍历器打印出该实体的信息
                                         void
                                         printAll()
                                         {
                                         int rc;
                                         char blkName[50];
                                         rc = acedGetString(Adesk::kTrue,
                                         "请输入块名:",
                                         blkName);
                                         if(rc!=RTNORM)
                                         return;
                                         if(blkName[0]=='\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[20];
                                         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");
                                         }
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-2-5 04:53 , Processed in 0.150587 second(s), 54 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表