请教各位:

大家知道,用 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年的问题,我居然今年同样问了一次.

网友答: 现在看不懂,只能先收藏了!
  • 上一篇:CAD排版插件联系不上版主,无法登陆
  • 下一篇:没有了