本帖最后由 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) ;_ 反应器拥有者对象
- )
- )
- )
- )
|