明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1598|回复: 2

麻烦大家给指点指点

[复制链接]
发表于 2009-3-6 11:47:00 | 显示全部楼层 |阅读模式

大家好:

我用创建选择集的方式 和一个for循环得到一个AcDbObjectIdArray  的对象 IdArray

for  (  i  =   0 ; i  <  length ; i  ++ )
          {
           

            ads_name      en;
            acedSSName(ssname,i,en);
   
            acdbGetObjectId(objId, en);
  IDArray.append(objId);

 }
      acutPrintf("\n%d",IDArray.length());

测试了一下 它的长度 这个没问题

接下来我想用循环 根据ID逐个打开

for  (  i  =   0 ; i  <  length ; i++ )
 {
  int n=(int)i;
  acdbOpenObject(pEntity,IDArray[n],AcDb::kForRead);

       if(pEntity->isKindOf(AcDbArc::desc()))

。。。。。。。

满足条件之后将该元素移除

IDArray.removeAt(n);
length--;

大家看看这样做有没有问题,我对 AcDbObjectIdArray 不太了解 那位仁兄能给详细介绍一下

小弟 不胜感激!

发表于 2009-3-6 21:17:00 | 显示全部楼层

逻辑错误,这样做是不对的.试试这样

for  (  i  =   0 ; i  <  IDArray.length() ;)
{

  if(pEntity->isKindOf(AcDbArc::desc()))

  {

    pEntity->erase();

    pEntity->Close();

    IDArray.removeAt(i);

  }

  else

   {

      i++;

   }
}

发表于 2009-3-6 21:20:00 | 显示全部楼层

而且这样做没有必要,一般用ads_sslength得到选择集的长度,直接循环 这个长度就行了,不用存到acdbobjectIdarray.

acdbobjectidArray 其实相当于 CArray<acdbobjectID,acdbobjectID>

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 14:50 , Processed in 0.170189 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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