找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 464|回复: 3

[求助]:请问如何遍历当前图中所有实体(直线)呢?

[复制链接]
发表于 2003-5-27 13:13:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
我想通过遍历的方法获取当前图中所有直线实体,该如何实现呢?
如果可以的话,我想进一步筛选,遍历后获得含有我事先指定的扩展属性的直线的实体集和该如何实现呢?谢谢大家。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 145个

财富等级: 日进斗金

发表于 2003-5-27 13:22:40 | 显示全部楼层

Re: [求助]:请问如何遍历当前图中所有实体(直线)呢?

最初由 saintlzh 发布
[B]我想通过遍历的方法获取当前图中所有直线实体,该如何实现呢?
如果可以的话,我想进一步筛选,遍历后获得含有我事先指定的扩展属性的直线的实体集和该如何实现呢?谢谢大家。 [/B]


打开模型空间块表记录, 建立迭代指针 AcDbBlockTableRecordIterator, 循环遍历, 用getEntity(..)得到实体对象,然后,判断对象是否是需要的实体,如直线.

  1. <normalfont>
  2. if (pEnt->isKindOf(AcDbLine::desc())
  3. {
  4.        .... //在这里在加上你要获得指定信息的处理代码.
  5. }
  6. </normalfont>
复制代码


另外如果你的实体带有扩展实体定义,你需要通过这些扩展实体定义数据过滤实体, 你可以直接用 ads_ssget(....) 得到指定实体的选择集, 具体看看联机帮助和实例代码, 帮助里面都有的.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-5-28 14:03:52 | 显示全部楼层
谢谢指点,不过我对打开模型空间块表记录不是很明白,能不能稍微详细一点?
是不是像下面这样?
        Acad::ErrorStatus          es;
        AcDbBlockTable*                pBlockTable;
  AcDbBlockTableRecord*  pSpaceRecord;
        AcDbBlockTableRecordIterator*  pRecord;
  AcDbEntity* pEntity;
       
    if (acdbHostApplicationServices()->workingDatabase()==NULL)
        return;
   
    if ((es = acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlockTable, AcDb::kForRead))==Acad::eOk)
    {
      pBlockTable->getAt(ACDB_MODEL_SPACE, pSpaceRecord, AcDb::kForWrite);
      
      pSpaceRecord->newIterator(pRecord);
      for (; !pRecord->done(); pRecord->step())
      {
        pRecord->getEntity(pEntity,AcDb::kForRead);
                  if(pEntity->isKindOf(AcDbLine::desc()))
                  {
              //AfxMessageBox("t1");
              //((AcDbLine*)pEntity)->setColorIndex(2);
              listXrecord(pEntity);
                  }
        //AfxMessageBox("t1");
        pEntity->close();
      }
      
    }
    pSpaceRecord->close();
    delete pRecord;
    pBlockTable->close();

是不是这样呢?不过功能是实现了,不知道用的方法对不对?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-1-8 15:23:07 | 显示全部楼层
ads_name ent;
ads_name entName;
long numEnt=0;

struct resbuf *rbFilter;        //limit the types of the entitys those are selected.
rbFilter = acutBuildList(        -4,"<or",-4,"<and",RTDXF0,"LINE",-4,"and>",-4,"or>",0 );

int stat = acedSSGet("A",NULL,NULL,rbFilter,ent);
if(stat == RTNORM){
    acedSSLength(ent, &numEnt);
    for(i=0; i<numEnt; i++)
   {
        acedSSName(ent, i, entName);
       AcDbObjectId id;
       if( acdbGetObjectId(id, entName) != Acad::eOk)eturn -1;
       自己的代码
    }
}
acedSSFree(ent);
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-9-21 11:08 , Processed in 0.192905 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表