乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 127|回复: 5

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

[复制链接]

21

主题

72

帖子

6

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

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

使用道具 举报

110

主题

324

帖子

10

银币

中流砥柱

Rank: 25

铜币
764
发表于 2013-3-20 17:28:00 | 显示全部楼层
帮顶一下,vba与lisp交互要学习一下。
回复

使用道具 举报

39

主题

1451

帖子

19

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1598
发表于 2013-3-20 20:33:00 | 显示全部楼层
ActiveSelectionSet属性是只读的!选择集对象再从VBA对象转换到Lisp对象,速度会很慢!所以基本无解!只能直接用选择集!
回复

使用道具 举报

21

主题

72

帖子

6

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
156
发表于 2013-3-21 09:18:00 | 显示全部楼层

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

使用道具 举报

3

主题

42

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
54
发表于 2013-5-14 22:49:00 | 显示全部楼层
我经常用(sssetfirst nil SS) 没发现很慢 。可能没有遇到你说的几千个对象。几千个对象的时候,cad也不会显示出来吧。不建议这么做。不知道你这样操作的下一步要干嘛。
回复

使用道具 举报

21

主题

72

帖子

6

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
156
发表于 2013-5-17 09:21:00 | 显示全部楼层
做了一个选择集管理的程序,用于保存需要的选择集,并实现浏览、提取等操作。功能已经实现,就是选择集的对象比较多时,可能出现(sssetfirst nil nil) 和(sssetfirst nil SS) 很慢的情况,我想优化一下。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-6-29 17:59 , Processed in 1.614698 second(s), 75 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表