zhaochang71 发表于 2015-1-7 15:52:17

对象反应器的反应对象删除后如何恢复反应器。

本帖最后由 zhaochang71 于 2015-1-7 16:51 编辑



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

(SetQ cen(HandEnt(VLR-Data reactor-object)))

(SetQ len(VLAX-VLA-Object->EName notifier-object)
   lel(EntGet len)
   pt1(Cdr(Assoc 10 lel))
   pt2(Cdr(Assoc 11 lel))
)
(prin1 "len-obj=")(prin1 (VLAX-EName->VLA-Object len))
(prin1 "cen=")(prin1 cen)
(setq aa (EntGet cen))
(prin1 "aa=")(prin1 aa)
(if (/= aa nil)
(progn
    (SetQ cel(EntGet cen)
      cel(Subst(VL-List* 10 pt2)(Assoc 10 cel)cel)
      cel(Subst(VL-List* 40(/ (Distance pt1 pt2)Pi 2))
      (Assoc 40 cel)
      cel
      )
    )(EntMod cel)
)
(progn
    (entmake (list (cons 0 "circle") (cons 10 pt2)(cons 40(/ (Distance pt1 pt2)Pi 2))))(EntMod cel)
    (SetQ chl(Cdr(Assoc 5(EntGet(EntLast)))))
    (prin1 "chl=")(prin1 chl)
   (SetQ rlt(Cons notifier-object '()))
   (prin1 "chl=")(prin1 chl)(prin1 "rlt=")(prin1 rlt)
    (td notifier-object chl)
)
)

)
(defun td(notifier-object chl / )
   (DelReactorAll notifier-object)(SetQ rlt(Cons notifier-object '()))
    (SetQ vrl(VLR-Pers(VLR-Object-Reactor rlt chl '((:vlr-modified . Line-C)))))
)
(Defun C:Tt()
(SetQ pt1(GetPoint "\n 起点)")
pt2(GetPoint pt1 "\n 末点)")
)
(Command "line" pt1 pt2 "")
(SetQ len(EntLast))
(Command "circle" pt2(/(Distance pt1 pt2)Pi 2))
(SetQ chl(Cdr(Assoc 5(EntGet(EntLast)))))
(SetQ rlt(Cons(VLAX-EName->VLA-Object len)'()))
(SetQ vrl(VLR-Pers(VLR-Object-Reactor rlt chl
       '((:vlr-modified . Line-C))
      )
   )
)
(PrinC "\n 已建立的反应器有: ")(PrinC(VLR-Reactors))
(PrinC)
)
(defun DelReactorAll (enObj)
(foreach a (vlr-reactors :VLR-Object-Reactor) ;_ 所有对象反应器
    (foreach b (cdr a) ;_ 各类反应器对象
      (vl-some (function
               (lambda (c)
                   (if (equal c enobj)
                     (vlr-remove b)
                   )
               )
               )
               (vlr-owners b) ;_ 反应器拥有者对象
      )
    )
)
)

自贡黄明儒 发表于 2015-1-7 16:34:59

删除了就没有了。如果还想恢复,可以停止反应器,然后再启用反应器

zhaochang71 发表于 2015-1-7 16:44:35

删除圆以后反应器还是存在的。可通过(PrinC "\n 已建立的反应器有: ")(PrinC(VLR-Reactors))查询。我上面的代码就是你的思路,如发现圆已删除,清除线的反应器,再生成圆,建立反应器。但达不到所需的效果。
页: [1]
查看完整版本: 对象反应器的反应对象删除后如何恢复反应器。