tengte 发表于 2013-3-20 16:16:01

请教:如何把VBA的SelectionSet置为当前?

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

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

mycad 发表于 2013-3-20 17:28:31

帮顶一下,vba与lisp交互要学习一下。

Gu_xl 发表于 2013-3-20 20:33:59

ActiveSelectionSet属性是只读的!选择集对象再从VBA对象转换到Lisp对象,速度会很慢!所以基本无解!只能直接用选择集!

tengte 发表于 2013-3-21 09:18:47

本帖最后由 tengte 于 2013-3-21 09:21 编辑

Gu_xl 发表于 2013-3-20 20:33 http://bbs.mjtd.com/static/image/common/back.gif
ActiveSelectionSet属性是只读的!选择集对象再从VBA对象转换到Lisp对象,速度会很慢!所以基本无解!只能直 ...

  的确,ActiveSelectionSet属性是只读的,我平时用的明经翻译版,后来查了英文原版的,此处果然有误。
  我后来又计时测试了一下,发现速度慢不是由于用ssadd一个一个地加入选择集,而时间主要是消耗在(sssetfirst nil nil)和(sssetfirst nil SS)两处。当之前选择的对象很多时,前一句消耗大量的时间;若筛选后要选中的对象很多时,后一句会消耗大量的时间。
  可能有人会说只要(sssetfirst nil SS)如何?经我的简单测试,不加(sssetfirst nil nil)时速度更慢。
  不知道论坛有没有人对这个函数有过深入的研究?

jicqj 发表于 2013-5-14 22:49:12

我经常用(sssetfirst nil SS) 没发现很慢 。可能没有遇到你说的几千个对象。几千个对象的时候,cad也不会显示出来吧。不建议这么做。不知道你这样操作的下一步要干嘛。

tengte 发表于 2013-5-17 09:21:30

做了一个选择集管理的程序,用于保存需要的选择集,并实现浏览、提取等操作。功能已经实现,就是选择集的对象比较多时,可能出现(sssetfirst nil nil) 和(sssetfirst nil SS) 很慢的情况,我想优化一下。
页: [1]
查看完整版本: 请教:如何把VBA的SelectionSet置为当前?