请教:如何把VBA的SelectionSet置为当前?
tengteb
tengteb Lv.3
2013年03月20日 16:16:34
只看楼主

本帖最后由 tengteb 于 2013-3-20 16:21 编辑   我有个程序,要把筛选后的图元(数比较大,可能达几千个)置为当前选中状态,现在用的方法是:先用ssadd创建一个空选择集,再一个一个地加入其中,然后用sssetfirst实现。若图元数量少(几百以内)没什么问题,数量大时就会很慢。  我的优化方案是:用VBA的SelectionSet来创建选择集,再用AddItems方法可一次性加入全部需要的图元(我认为这样可能会快很多),然后SelectionSet置为当前。

本帖最后由 tengteb 于 2013-3-20 16:21 编辑

  我有个程序,要把筛选后的图元(数比较大,可能达几千个)置为当前选中状态,现在用的方法是:先用ssadd创建一个空选择集,再一个一个地加入其中,然后用sssetfirst实现。若图元数量少(几百以内)没什么问题,数量大时就会很慢。
  我的优化方案是:用VBA的SelectionSet来创建选择集,再用AddItems方法可一次性加入全部需要的图元(我认为这样可能会快很多),然后SelectionSet置为当前。
  现在的问题就是:有没有办法将VBA的SelectionSet置为当前?根据资料ActiveSelectionSet属性是可读写的,但没有vla-put-ActiveSelectionSet函数。还有就是有没有办法将VBA的SelectionSet直接转换为LISP对象,然后用sssetfirst来实现?
  不知道论坛中有没有高手能指点一下,谢谢啦!


免费打赏
zhoucheng151
2013年03月20日 16:50:10
2楼
:):):):):):):)
回复
tengteb
2013年03月20日 19:30:06
3楼
本帖最后由 tengteb 于 2013-3-20 19:33 编辑

我以前看到的中文版资料不准确,ActiveSelectionSet属性不是可读写的,而是只读的。
英文原版如下:
ActiveSelectionSet
SelectionSet object; read-only
The active selection set for the drawing.
回复
tengteb
2013年03月21日 09:18:19
4楼
  我后来又计时测试了一下,发现速度慢不是由于用ssadd一个一个地加入选择集,而时间主要是消耗在(sssetfirst nil nil)和(sssetfirst nil SS)两处。当之前选择的对象很多时,前一句消耗大量的时间;若筛选后要选中的对象很多时,后一句会消耗大量的时间。
  可能有人会说只要(sssetfirst nil SS)如何?经我的简单测试,不加(sssetfirst nil nil)时速度更慢。
  不知道论坛有没有人对这个函数有过深入的研究?
回复

相关推荐

APP内打开