获取当前选择集与选择集反应器

作者: admin 分类: C++,CAD,ObjectARX 发布时间: 2021-02-28 13:23

命令: (ssgetfirst)
(nil <Selection set: 616>)

返回表的第二项是预选集(有夹点)

(if (equal (ssgetfirst)'(nil nil))

  (程序a)

 (程序b (cadr(ssgetfirst)));;带选集参数。

)

 

取上一次处理过的选集
(setq las(vla-get-activeselectionset(vla-get-activedocument(vlax-get-acad-object))))
(if(>(vla-get-count las)0)
  (progn
    (setq ss-las(ssadd))
    (vlax-for VLIT las(ssadd(vlax-vla-object->ename VLIT)ss-las))
    ))

转了一大圈我又回来了。
我发现用(ssget "i")就可以了

另外,我发现(ssget "g")好像也可以用,它代表什么意思?

再另外,因为已经解决问题了就没有好好的看BDYCAD版主的回帖,实在不好意思.
现在知道怎样用VLA函数处理选择集,谢谢!
但是,我试了一下,7楼的那段小程序返回的不是当起那选择集.

(ssget "p")

请问如何让已存储的选择集,激活为当前选择集。

不用command 方式! 想让自己的lisp为透明方式,结果lisp中有ssget方式选择。当我执行copy运行自己的定义透明命令时,把我已经选择的实体换成了透明命令lisp中ssget的选择实体了! 求助,多谢!
本帖最后由 自贡黄明儒 于 2013-9-4 15:50 编辑

1 (command "_.select" ss "")
2  (sssetfirst ss ss)(ssget "_I")


方法1:
(sssetfirst nil SS)
(setvar 'PICKFIRST 1)
后面执行的命令即可选中
方法1:
命令行输入选择集的时候如下
!ss


;设为选中状态
(defun cc()
(setq ss (ssget))

(sssetfirst ss ss)
)


acad的命令有两种方式:主谓式和动宾式。
你想实现的是主谓式。
实际上用户最希望的是两种方式都可以同时使用,ACAD的大多数命令都是这样的。
实现两种方式同时使用的方法其实很简单,在命令开始时,用一句(setq ss (ssget))即可。
如果发出命令前有选择,命令发出后就不会提示选择,即主谓方式
如果发出命令前没有选择,命令发出后就会提示选择,即动宾方式




1,如何得到当前选择集
2,如何创建 当前选择集 反应器
3,AcEdInputContextReactor能否实现 当前选择集反应器 功能?
AcEdInputContextReactor的两个函数
AcEdInputContextReactor::beginSSGet,
This function provides notification for the start of an AutoCAD selection set

acquisition operation.
AcEdInputContextReactor::beginEntsel
This function provides notification for the start of an AutoCAD entity selection

operation.
selection set acquisition 与 entity selection 有何区别?

补充:
我说的 当前选择集 不是用 select 命令创建的选择集
而是,在不用命令的情况下, 直接用鼠标选择图形实体 而创建的选择集

我说的 当前选择集 反应器 类似 AutoCAD 属性窗口 中的反应器(当有图形选中时,AutoCAD 属性窗口自动 显示选择的图形的属性)


如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!

发表评论

标签云