ollie 发表于 2022-7-6 13:55:13

vlr-*

大家好
 
我最近一直在试着研究反应堆。我现在的主要问题是;是否可以在不运行选择函数或类似操作的情况下确定高亮显示了哪些实体?
 
谢谢

Lee Mac 发表于 2022-7-6 14:17:02

你是说用户当前选择了哪些实体?
 
如果是这样,您可以使用:
 

(setq ss (cadr (ssgetfirst)))

 

ollie 发表于 2022-7-6 14:25:08

 
不完全是
 
当你选择一个实体而不采取任何行动时,我想启动一个反应堆

Lee Mac 发表于 2022-7-6 14:32:32

嗯,我想你可以使用一个对象反应器,使用:
:vlr openedForModify
 
 
但我不确定它是否有效。

Lee Mac 发表于 2022-7-6 14:54:45

刚刚使用以下工具测试了上述理论:
 

(defun c:ObjON ()
(vl-load-com)
(if (not *Obj)
   (setq *Obj
   (vlr-object-reactor
       (mapcar 'vlax-ename->vla-object
         (mapcar 'cadr (ssnamex (ssget "_X")))) nil
       (list
         (cons :vlr-openedforModify 'ModObj)))))
(princ))

(defun ModObj (Obj Rea Arg)
(princ
   (vl-princ-to-string Obj))
(princ))


 
从这一点可以明显看出,它并没有完全在你想要的时候点火。
 
我不知道你还能尝试什么。。。

Lee Mac 发表于 2022-7-6 15:00:51

再想一想,这可能是你想要的:
 

(defun c:ObjON ()
(vl-load-com)
(if (not *Obj)
   (setq *Obj
   (vlr-miscellaneous-reactor nil
       (list
         (cons :vlr-pickfirstModified 'ModObj)))))
(princ))

(defun ModObj (Reac Args)
(alert "Selected!")
(princ))

(defun c:ObjOFF ()
(if *Obj
   (progn
   (vlr-remove *Obj)
   (setq *Obj nil)))
(princ))

 
使用一个杂项反应器,带有:vlr pickfirstModified回调。
页: [1]
查看完整版本: vlr-*