LLXXZZ 发表于 2011-5-27 12:54:53

求助:怎么修改活动选择集?

(vla-get-activeselectionset   
(vla-get-activedocument (vlax-get-acad-object))
    )
以上代码可以获得当前活动的选择集,
但如何修改当前活动的选择集,比如,想把未选中的选择集置为当前(即:反选)
vla-put-activeselectionset没这个函数.

语法 object.ActiveSelectionSet objectDocument
使用该属性的对象。 ActiveSelectionSetSelectionSet 对象; 可读写
图形的活动选择集。

jicqj 发表于 2011-5-27 13:30:47

(sssetfirst gripset ss);;;将选择集设置为当前
(setqss(cadr (ssgetfirst)));;;;获得当前活动选择集

caoyin 发表于 2011-5-28 02:28:54

本帖最后由 caoyin 于 2011-5-28 02:39 编辑

;;你只要把ActiveSelectionSet的选集内容理解为(ssget "p")就好了
(if (setq ss (ssget))
(setq axss (vla-get-activeselectionset   
             (vla-get-activedocument (vlax-get-acad-object))
    )
)
);;这时候ss和axss包含的对象完全一致,只不过ss用alisp访问,axss则要用vlax访问:
;;例1:查看长度
(sslength ss)
(vla-get-count axss)
;;例2:转换为图元列表:

(defun c:tt1 ()
(vl-remove-if-not '(lambda(x)(eq (type x)'ENAME))(mapcar 'cadr (ssnamex ss)))
)
(defun c:tt2 (/ lst)
(vlax-for x axss (setq lst (cons (vlax-vla-object->ename x) lst)))
)

LLXXZZ 发表于 2011-5-28 10:03:16

非常感谢,
提这个问题的原因是想做一个部分显示的程序.
现在我程序的做法是根据从全部数据中减去所选的对象,然后处理的减去后的对象,
把它们的可见性设为,:vla-false(单词可能不对)
程序是可以用了,但老感觉这样去计算反选的对象效率不高,就考虑了当前活动的对象.

jicqj 发表于 2011-5-28 18:02:46

回复 jicqj 的帖子

感谢caoyin版主指导。我把当前选择集 和选择集设为选中状态理解成一个事情了 哈

669423907 发表于 2011-6-2 00:35:52

真是高!深!啊!

gtj116600 发表于 2013-7-19 13:18:25

跟高手学习
页: [1]
查看完整版本: 求助:怎么修改活动选择集?