明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: andycong

[ARX]我建立了一个选择集,如何从选择集中遍历实体?

  [复制链接]
 楼主| 发表于 2003-12-29 10:28:00 | 显示全部楼层
这两天有事情,没有过来,看到大家这样帮助小弟,感激涕零啊!
谢谢!
发表于 2003-12-29 14:57:00 | 显示全部楼层
其实,我们不必在此谈孔乙己的一个字有几种写法,关键在于对问题的正确认识,任何事物都有他的正反面。
如果你只是单纯的遍历选择集里的对象,而不用涉及到n,就可以修改n的值。如果了解计算机原理和汇编语言的话,就可以知道这些指令的寻址时间和执行时间以及执行的方式-如果你不考虑速度的问题,不做大数据量的操作,就无所谓了。
但是要涉及到n的值,情况就不同了。比如要套一层循环,外层遍历对象,内层判断和该对象的关系:
{
   struct resbuf *rb=NULL;
   rb=acutBuildList(RTDXF0,"LINE",RTNONE);
   if(rb==NULL)
      return;

   long ssname[2];
   if(acedSSGet("X",NULL,NULL,rb,ssname)!=RTNORM)
   {
      acutRelRb(rb);
      return;
   }

   long ncount=0,enta[2],entb[2];
   acedSSLength(ssname,&ncount);
   long i,j;
   for(i=0;i<ncount;i++)
   {
      acedSSName(ssname,i,enta);
      //...
      for(j=0;j<ncount;j++)
      {
         if(j==i)
            continue;
         //...
      }
   }
   acutRelRb(rb);
   acedSSFree(ssname);
}
这样可能在理解上容易些,思路也比较清楚。当然也有其他的方法和技巧,具体问题具体分析。
基本的理论+灵活的运用,这就是C/C++的优势所在-自由,思维开放。
不象VB,如果用FOR I=0 TO N想从中间直接跳出进入下个循环,我真的还没想到其他的好办法,只能用goto!
for i=0 to n
   for j=0 to n
      if j=i then goto continue_j
      '...
   next j
continue_j:
next i
如果用:
for i=0 to n
   for j=0 to n
      if j<>i then
         '如果这里处理的较多,从代码的编写和阅读上又不太合理,
         '只有写函数,又涉及到参数问题。另外,如果n较大,在反复调用函数的过程中因进栈和出栈
         '会影响执行效率,这又是一个问题。所以这是矛盾的东西。
      end if
   next j
continue_j:
next i

好了,多谢各位的批评指正,良药苦口利于病!也希望彼此之间多多交流!
在此祝各位新年快乐,在新的一年里,更上一层楼!
发表于 2004-4-11 10:14:00 | 显示全部楼层
这篇帖子现在看来还是很好啊!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-26 02:28 , Processed in 0.153017 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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