明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2191|回复: 5

[求助]如何利用反应器让自己反应?

[复制链接]
发表于 2009-11-10 13:36:00 | 显示全部楼层 |阅读模式

如何解决反应器不能让OWNERS(VLA 对象的 AutoLISP 表,标识要观察的图形对象。)反应?

换个通俗点的说法:

在图形中写数字TEXT:"1",如何让TEXT随着数字的变化,自动修改自身的颜色。如TEXT改为:2,变色为黄色。

(defun TEXT-COLOR (OWNERS DATA PAR)
  (setq TEXT_OBJ (vlax-ename->vla-object (handent (vlr-data DATA))))
  ;;TEXT_OBJ 等同于 OWNERS
  (if (and (not (vlax-erased-p OWNERS))
    (not (vlax-erased-p TEXT_OBJ))
      )
    (vla-put-color
      TEXT_OBJ
      (fix (read (vla-get-textstring OWNERS)))
    )
    (vlr-remove REACTOR)
  )
  (princ)
)

(defun C:TT (/ TEXT TEXT_DATA TEXT_OWNER)
  (command "._TEXT" "J" "M" '(0 0 0) "" "" "1")
  (setq TEXT (entlast))
  (setq TEXT_OWNER (list (vlax-ename->vla-object TEXT)))
  (setq TEXT_DATA (cdr (assoc 5 (entget TEXT))))
  (vlr-pers
    (vlr-object-reactor
      TEXT_OWNER
      TEXT_DATA
      '((:vlr-modified . TEXT-COLOR))
    )
  )
  (princ "\n已建立的反应器有: ")
  (princ (vlr-reactors))
  (princ)
)

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2009-11-10 15:36:00 | 显示全部楼层

在修改颜色之前,先判断一下原来的颜色是什么,如果已经符合要求了,就不要再改了。

否则回调函数会不停地调用自身。

 楼主| 发表于 2009-11-10 18:34:00 | 显示全部楼层
mmmmmm发表于2009-11-10 15:36:00在修改颜色之前,先判断一下原来的颜色是什么,如果已经符合要求了,就不要再改了。否则回调函数会不停地调用自身。

非常感谢。

发表于 2009-11-10 18:34:00 | 显示全部楼层
二楼正解
发表于 2009-11-11 08:01:00 | 显示全部楼层

最好不要用永久反應器

(defun TEXT-COLOR (OWNERS DATA PAR)
  (setq TEXT_OBJ (vlax-ename->vla-object (handent (vlr-data DATA))))
  ;|
  ;;TEXT_OBJ 等同於 OWNERS
  (if (and (not (vlax-erased-p OWNERS))
    (not (vlax-erased-p TEXT_OBJ))
      )
    (vla-put-color
      TEXT_OBJ
      (fix (read (vla-get-textstring OWNERS)))
    )
    (vlr-remove REACTOR)
  )|;
  (princ)
)

(if (not COLORREACTOR2)
  (setq COLORREACTOR2
  (vlr-editor-reactor
    NIL
    '((:vlr-commandended . COLOR2))
  )
  )
)

(defun COLOR2 (OBJREACTOR LSTCOMMAND)
  (if (and TEXT_OBJ
    (not (vlax-erased-p TEXT_OBJ))
    (not (vl-catch-all-error-p
    (vl-catch-all-apply
      'vla-put-color
      (list TEXT_OBJ
     (vl-catch-all-apply
       'fix
       (list (read (vla-get-textstring TEXT_OBJ)))
     )
      )
    )
  )
    )
      )
    (setq TEXT_OBJ NIL)
  )
)

(defun C:TT (/ TEXT TEXT_DATA TEXT_OWNER)
  (command "._TEXT" "J" "M" '(0 0 0) "" "" "1")
  (setq TEXT (entlast))
  (setq TEXT_OWNER (list (vlax-ename->vla-object TEXT)))
  (setq TEXT_DATA (cdr (assoc 5 (entget TEXT))))
  (vlr-pers
    (vlr-object-reactor
      TEXT_OWNER
      TEXT_DATA
      '((:vlr-modified . TEXT-COLOR))
    )
  )
  (princ "\n已建立的反應器有: ")
  (princ (vlr-reactors))
  (princ)
)

发表于 2011-1-16 18:05:18 | 显示全部楼层
     正要学习,谢了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-10-2 18:20 , Processed in 0.177708 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表