明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 964|回复: 2

[提问] 对象反应器的反应对象删除后如何恢复反应器。

[复制链接]
发表于 2015-1-7 15:52:17 | 显示全部楼层 |阅读模式
本帖最后由 zhaochang71 于 2015-1-7 16:51 编辑



如图,建立反应器,圆跟随线动,圆周长等于线长。当圆被删除后,再次移动线时,如何恢复圆?
自己的思路是:回调函数中查看圆是否有信息,如无表示圆已被删除,重新绘制圆,并建立反应器。但此时的反应器总是不行。线再次移动每次都新绘制一个圆。
下面是我想要的效果:文字为图形面积,随图面积改变。文字删除后,面积变,文字重新注记并可随图变化。
  1. (VL-Load-Com)
  2. (Defun Line-C(notifier-object reactor-object parameter-list)
  3.   
  4. (SetQ cen(HandEnt(VLR-Data reactor-object)))

  5. (SetQ len(VLAX-VLA-Object->EName notifier-object)
  6.    lel(EntGet len)
  7.    pt1(Cdr(Assoc 10 lel))
  8.    pt2(Cdr(Assoc 11 lel))
  9. )
  10. (prin1 "len-obj=")(prin1 (VLAX-EName->VLA-Object len))
  11. (prin1 "cen=")(prin1 cen)
  12. (setq aa (EntGet cen))
  13. (prin1 "aa=")(prin1 aa)
  14. (if (/= aa nil)
  15.   (progn
  16.     (SetQ cel(EntGet cen)
  17.       cel(Subst(VL-List* 10 pt2)(Assoc 10 cel)cel)
  18.       cel(Subst(VL-List* 40(/ (Distance pt1 pt2)Pi 2))
  19.       (Assoc 40 cel)
  20.       cel
  21.       )
  22.     )(EntMod cel)
  23.   )
  24.   (progn
  25.     (entmake (list (cons 0 "circle") (cons 10 pt2)(cons 40  (/ (Distance pt1 pt2)Pi 2))))(EntMod cel)
  26.     (SetQ chl(Cdr(Assoc 5(EntGet(EntLast)))))
  27.     (prin1 "chl=")(prin1 chl)
  28.      (SetQ rlt(Cons notifier-object '()))
  29.      (prin1 "chl=")(prin1 chl)(prin1 "rlt=")(prin1 rlt)
  30.     (td notifier-object chl)
  31.   )
  32.   )

  33. )
  34. (defun td(notifier-object chl / )
  35.      (DelReactorAll notifier-object)(SetQ rlt(Cons notifier-object '()))
  36.     (SetQ vrl(VLR-Pers(VLR-Object-Reactor rlt chl '((:vlr-modified . Line-C)))))
  37. )
  38. (Defun C:Tt()
  39. (SetQ pt1(GetPoint "\n 起点)")
  40.   pt2(GetPoint pt1 "\n 末点)")
  41. )
  42. (Command "line" pt1 pt2 "")
  43. (SetQ len(EntLast))
  44. (Command "circle" pt2(/(Distance pt1 pt2)Pi 2))
  45. (SetQ chl(Cdr(Assoc 5(EntGet(EntLast)))))
  46. (SetQ rlt(Cons(VLAX-EName->VLA-Object len)'()))
  47. (SetQ vrl(VLR-Pers(VLR-Object-Reactor rlt chl
  48.        '((:vlr-modified . Line-C))
  49.       )
  50.    )
  51. )
  52. (PrinC "\n 已建立的反应器有: ")(PrinC(VLR-Reactors))
  53. (PrinC)
  54. )
  55. (defun DelReactorAll (enObj)
  56.   (foreach a (vlr-reactors :VLR-Object-Reactor) ;_ 所有对象反应器
  57.     (foreach b (cdr a) ;_ 各类反应器对象
  58.       (vl-some (function
  59.                  (lambda (c)
  60.                    (if (equal c enobj)
  61.                      (vlr-remove b)
  62.                    )
  63.                  )
  64.                )
  65.                (vlr-owners b) ;_ 反应器拥有者对象
  66.       )
  67.     )
  68.   )
  69. )

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2015-1-7 16:34:59 | 显示全部楼层
删除了就没有了。如果还想恢复,可以停止反应器,然后再启用反应器
 楼主| 发表于 2015-1-7 16:44:35 | 显示全部楼层
删除圆以后反应器还是存在的。可通过(PrinC "\n 已建立的反应器有: ")(PrinC(VLR-Reactors))查询。我上面的代码就是你的思路,如发现圆已删除,清除线的反应器,再生成圆,建立反应器。但达不到所需的效果。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-23 10:09 , Processed in 0.188379 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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