明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2712|回复: 5

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

[复制链接]
发表于 2013-3-20 16:16:01 | 显示全部楼层 |阅读模式
本帖最后由 tengte 于 2013-3-20 16:21 编辑

  我有个程序,要把筛选后的图元(数比较大,可能达几千个)置为当前选中状态,现在用的方法是:先用ssadd创建一个空选择集,再一个一个地加入其中,然后用sssetfirst实现。若图元数量少(几百以内)没什么问题,数量大时就会很慢。
  我的优化方案是:用VBA的SelectionSet来创建选择集,再用AddItems方法可一次性加入全部需要的图元(我认为这样可能会快很多),然后SelectionSet置为当前。
  现在的问题就是:有没有办法将VBA的SelectionSet置为当前?根据资料ActiveSelectionSet属性是可读写的,但没有vla-put-ActiveSelectionSet函数。还有就是有没有办法将VBA的SelectionSet直接转换为LISP对象,然后用sssetfirst来实现?
  不知道论坛中有没有高手能指点一下,谢谢啦!
发表于 2013-3-20 17:28:31 | 显示全部楼层
帮顶一下,vba与lisp交互要学习一下。
发表于 2013-3-20 20:33:59 | 显示全部楼层
ActiveSelectionSet属性是只读的!选择集对象再从VBA对象转换到Lisp对象,速度会很慢!所以基本无解!只能直接用选择集!
 楼主| 发表于 2013-3-21 09:18:47 | 显示全部楼层
本帖最后由 tengte 于 2013-3-21 09:21 编辑
Gu_xl 发表于 2013-3-20 20:33
ActiveSelectionSet属性是只读的!选择集对象再从VBA对象转换到Lisp对象,速度会很慢!所以基本无解!只能直 ...


  的确,ActiveSelectionSet属性是只读的,我平时用的明经翻译版,后来查了英文原版的,此处果然有误。
  我后来又计时测试了一下,发现速度慢不是由于用ssadd一个一个地加入选择集,而时间主要是消耗在(sssetfirst nil nil)和(sssetfirst nil SS)两处。当之前选择的对象很多时,前一句消耗大量的时间;若筛选后要选中的对象很多时,后一句会消耗大量的时间。
  可能有人会说只要(sssetfirst nil SS)如何?经我的简单测试,不加(sssetfirst nil nil)时速度更慢。
  不知道论坛有没有人对这个函数有过深入的研究?
发表于 2013-5-14 22:49:12 | 显示全部楼层
我经常用(sssetfirst nil SS) 没发现很慢 。可能没有遇到你说的几千个对象。几千个对象的时候,cad也不会显示出来吧。不建议这么做。不知道你这样操作的下一步要干嘛。
 楼主| 发表于 2013-5-17 09:21:30 | 显示全部楼层
做了一个选择集管理的程序,用于保存需要的选择集,并实现浏览、提取等操作。功能已经实现,就是选择集的对象比较多时,可能出现(sssetfirst nil nil) 和(sssetfirst nil SS) 很慢的情况,我想优化一下。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 13:17 , Processed in 0.203938 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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