;;;QQ1:当面积文字删除时,如何恢复面积文字?
;;;;;;;;;答:(entdel pl-txt)即可。
;;;QQ2:当档案存档关闭或关闭CAD后,于下次开启时如何恢复反应器呢?
;;;;;;;;;答:1.思路一般来说,设置成永久反映器就可以自动恢复。
但回调函数就需要自己想办法加载了。
既然如此,不如索性设置成临时反映器,将其与回调函数统一考虑。
2.实现方法:在数据库某一特殊位置,将反映器和回调函数写入其中;以一个统一的用户定义的可以自动加载的例行程序对其进行控制。
这样格式就相当的灵活了,你可以尽情的根据需要进行组织。
事实上,CAD系统也是这样对待永久性反映器的,只不过它好象忘记了回调函数也是要加载的。
<br>
将楼主的代码修改后如下:

- (vl-load-com)
- (defun C:PLAREARO ()
- (if (setq pt (getpoint "\n 点选面积文字放置:"))
- (if (setq EN (CAR (ENTSEL "\n 选取PLINE物件:")))
- (progn
- (setq acaddocument
- (vla-get-activedocument (vlax-get-acad-object))
- )
- (command "-BOUNDARY" pt "")
- (setq vla-en (cons (vlax-ename->vla-object en) '()))
- (command "area" "o" en)
- (command "layer" "m" "tmp" "c" "1" "" "")
- (command "chprop" en "" "la" "tmp" "")
- (setq txt (strcat (rtos (/ (getvar "area") 10000) 2 2) "㎡")
- )
- (command "layer" "m" "AREA-TEXT" "c" "4" "" "")
- (command "text" "j" "MC" pt "30" "0" txt)
- (setq vla-area-txt (cdr (assoc 5 (entget (entlast)))))
- (setq vla-rot (vlr-pers
- (vlr-object-reactor
- vla-en
- vla-area-txt
- '((:vlr-modified . area-txt))
- )
- )
- )
- (vlr-type vla-rot)
- (princ "\n已建立的反应器有: ")
- (princ (vlr-reactors))
- )
- )
- )
- (princ)
- )
- ;;回调函数
- (defun area-txt (notifier-object reactor-object parameter-list)
- (setq pl-txt (handent (vlr-data reactor-object)))
- (if (setq txt (vlax-ename->vla-object pl-txt))
- ()
- (setq txt (vlax-ename->vla-object (entdel pl-txt)))
- )
- (setq obj-area (vla-get-area notifier-object))
- (setq txt-nub (strcat (rtos (/ obj-area 10000) 2 2) "㎡"))
- (princ "\n面积:")
- (princ obj-area)
- (vla-put-TextString txt txt-nub)
- )
|