请教各位:
大家知道,用 vla-get-ActiveSelectionSet 可以获取当前激活的选择集,我用如下代码
试图实现删除选择集操作,但只能删除被激活的选择集,而不一定是我所要的选择集:
(vlax-for x (vla-get-ActiveSelectionSet (vla-get-activedocument (vlax-get-acad-object))) (vla-delete x))
问题1:怎样将选择集(PICKSET)设为激活的选择集
问题2:怎样将 vla-get-ActiveSelectionSet 获取的激活选择集转换为 PICKSET
网友答: (sssetfirst nil ss)(ssget)
遗憾的是,这两个函数做成透明命令,不能执行。
不知道有没有VLISP方法,实现“ vla-PUT-ActiveSelectionSet”?网友答:
小菜123 发表于 2011-6-11 22:30
测试不成功,程序如下 vl-load-com)
(defun lst2arr (obj_lst / obj_arr)
(setq obj_arr (vlax-make- ...
最近,想用(setq blkss (ssget '((0 . "INSERT") (2 . "*U*,~*/*,~*\\*")))),框选筛选出,除外部参照块之外的所有块,用(entget (car (entsel))),对比了外部参照块和普通块的组码列表,发现无法区别,因此又想用vla方式解决。偶然发现此贴,不知道大师解决了吗?我将以前偶然发现的解决办法共享一下。
(vl-load-com)
(setq ss1 (ssget))
(setq ss2 (ssget))
(setq ss3 (ssget))
;以上建立3个选集
(sssetfirst nil ss2);此处可以是ss1 或ss2 或ss3,均可。亮显选集内对象并将选集作为当前活动选集。
(setq vlaSel (vla-get-ActiveSelectionSet(vla-get-ActiveDocument (vlax-get-acad-object))))
此处已将sssetfirst中ss2设置为当前选集,以后即可使用vlax-for item01 vlaSel
此外,发现vla-Select建立选集,仍需要用dxf组码作为过滤条件转成变体,作为vla-Select的参数,使用不如ssget方便。网友答: 最近,想用(setq blkss (ssget '((0 . "INSERT") (2 . "*U*,~*/*,~*\\*")))),框选筛选出,除外部参照块之外的所有块,用(entget (car (entsel))),对比了外部参照块和普通块的组码列表,发现无法区别,因此又想用vla方式解决。偶然发现此贴,不知道大师解决了吗?我将以前偶然发现的解决办法共享一下。
(vl-load-com)
(setq ss1 (ssget))
(setq ss2 (ssget))
(setq ss3 (ssget))
;以上建立3个选集
(sssetfirst nil ss2);此处可以是ss1 或ss2 或ss3,均可。亮显选集内对象并将选集作为当前活动选集。
(setq vlaSel (vla-get-ActiveSelectionSet(vla-get-ActiveDocument (vlax-get-acad-object))))
此处已将sssetfirst中ss2设置为当前选集,以后即可使用vlax-for item01 vlaSel
此外,发现vla-Select建立选集,仍需要用dxf组码作为过滤条件转成变体,作为vla-Select的参数,使用不如ssget方便。网友答:
vla-get-ActiveSelectionSet 好象是得到最近一次的(SSGET)的选择集,你的问题不知我是否理解的对不对?
(defun Active->
ICKSET ( / #ss )
(setq #ss (ssadd))
(vlax-for x (vla-get-ActiveSelectionSet (vla-get-activedocument (vlax-get-acad-object))) (ssadd (vlax-vla-object->ename x) #ss))
)
(defun PICKSET->Active (ss )
(sssetfirst nil ss)
(ssget)
)
你没理解我的意思。
vla-get-ActiveSelectionSet 是得到最近一次的(SSGET)的选择集
这句话没错
假如我在操作之前,已知变量 SS 为一个选择集,但最后一次 (ssget)得到的是选择集 SS2
这时候我想对 SS 操作,而不是 SS2
---------------------------
1. Active->
ICKSET 只是把激活选择集加入到新的选择集 #SS,而非把 #SS 设为激活的选择集
2. PICKSET->Active 中的sssetfirst 只是把已知 SS 设置为被选取,而非激活的 PICKSET
网友答:1. Active->
ICKSET 只是把激活选择集加入到新的选择集 #SS,而非把 #SS 设为激活的选择集
这名话不知道怎么理解,#SS已经是激活的选择集,还要……
2. PICKSET->Active把已知 SS 设置为被选取,(ssget)已经把SS转为激活的 PICKSET
网友答:你的意思我完全明白,
但是 vla-get-ActiveSelectionSet 的激活是 ActiveX 的概念,和 sssetfirst 是两种含义
(defun ss_del (ss / x)
;...这里应该加上一段代码,要求把参数 ss 转换为 ActiveX 的激活选择集,而替代红色部分
(vlax-for x (vla-get-ActiveSelectionSet (vla-get-activedocument (vlax-get-acad-object)))
(vla-delete x)
)
)
多谢 byghbcx 的热心帮助!程序修改如下
(defun ss_del (ss / x)
(sssetfirst nil ss)
(ssget)
(vlax-for x (vla-get-ActiveSelectionSet (vla-get-activedocument (vlax-get-acad-object)))
(vla-delete x)
)
)
高手间的过招
网友答: 07年的问题,我居然今年同样问了一次.网友答: 现在看不懂,只能先收藏了!