阿然 发表于 2012-11-15 14:52:56

使用反应器时:vlr-copied遇到的麻烦

在用反应器编程的时候给一个对象添加了
(vlr-object-reactor
   obj-list
   obj-Data
   '(
       (:vlr-modified . objmark-changed)
       (:vlr-copied . objmark-copied)
       (:vlr-erased . objmark-erased)
      )
   ) ;_ end of vlr-object-reactor

三个对象反应器,当obj-list碰到copy时会触发objmark-copied的函数,但是获取不到copy后得到的实体,有什么办法解决?本人主要是学习CAD帮助里面自带的教程,所以很多内容不能很好的理解,请大侠指导下。

Gu_xl 发表于 2012-11-15 15:23:25

本帖最后由 Gu_xl 于 2012-11-15 15:26 编辑

copy后的实体图元名保存在回调函数第三个参数里,但在回调函数里不能对该实体进行任何读写,因为反应器没结束,该实体处于保护状态!
请看测试代码:

(defun c:tt()
(setq e (car(entsel)))
(if e
    (progn
      ;;添加反应器
      (vlr-object-reactor (list (vlax-ename->vla-object e)) nil '((:vlr-copied . obj-copied)))
      )
    )
(princ)
)
;;回调函数
(defun obj-copied (obj vlrobj vlr-list)
(if (= 'ename (type (car vlr-list)))
    (progn
      (princ (car vlr-list))
      (if (vlax-write-enabled-p (car vlr-list))
(princ "可读写")
(princ "不可读写")
)
      ;;此处entget得到的是nil
      (princ (entget (car vlr-list)))
      )
    )
)


阿然 发表于 2012-11-15 15:31:56

谢谢gu大!
是我太着急发贴了,应该多搜索下论坛,前面有帖子谈过这个问题。
下次会注意,不多耽误大伙时间。

zyhandw 发表于 2012-11-15 17:10:46

还不会用反应器,向你学习!
页: [1]
查看完整版本: 使用反应器时:vlr-copied遇到的麻烦