找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1455|回复: 4

[求助] [求助]面积反应器疑问?烦请高手解答!

[复制链接]
发表于 2007-3-7 00:14:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
请问以下两个问题:
QQ1:当面积文字删除时,如何恢复面积文字?
QQ2:当档案存档关闭或关闭CAD后,于下次开启时如何恢复反应器呢?

以下是我的程序:
(defun C:PLAREARO ()
(vl-load-com)
(setq acaddocument(vla-get-activedocument(vlax-get-acad-object)))
(setq pt (getpoint "\n 点选面积文字放置:"))
(setq EN (CAR(ENTSEL "\n 选取PLINE物件:")))
(command "-BOUNDARY" pt "")
(setq vla-en (cons (vlax-ename->vla-object en) '()))
(if (/= en nil)
      (progn
      (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))
)

(defun area-txt (notifier-object reactor-object parameter-list)
(setq pl-txt (handent (vlr-data reactor-object)))
(setq txt (vlax-ename->vla-object pl-txt))
(setq obj-area (vla-get-area notifier-object))
(setq txt-nub (strcat (rtos (/ obj-area 10000) 2 2) "㎡") )
(vla-put-TextString txt txt-nub )
)

烦请各位高手可以帮忙解答一下.谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2007-3-9 13:12:48 | 显示全部楼层
參考
http://free.ys168.com/?lucas-lai
永久物件反應器例子
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-3-13 01:56:04 | 显示全部楼层
关闭cad后,下次开启文件,需要加载plarearo即可回复反应器功能。
好像第一个问题也可以解决吧。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-3-13 06:59:16 | 显示全部楼层
谢谢回答来去试看看
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

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

  1. (vl-load-com)
  2. (defun C:PLAREARO ()
  3.   (if (setq pt (getpoint "\n 点选面积文字放置:"))
  4.     (if        (setq EN (CAR (ENTSEL "\n 选取PLINE物件:")))
  5.       (progn
  6.         (setq acaddocument
  7.                (vla-get-activedocument (vlax-get-acad-object))
  8.         )
  9.         (command "-BOUNDARY" pt "")
  10.         (setq vla-en (cons (vlax-ename->vla-object en) '()))
  11.         (command "area" "o" en)
  12.         (command "layer" "m" "tmp" "c" "1" "" "")
  13.         (command "chprop" en "" "la" "tmp" "")
  14.         (setq txt (strcat (rtos (/ (getvar "area") 10000) 2 2) "㎡")
  15.         )
  16.         (command "layer" "m" "AREA-TEXT" "c" "4" "" "")
  17.         (command "text" "j" "MC" pt "30" "0" txt)
  18.         (setq vla-area-txt (cdr (assoc 5 (entget (entlast)))))
  19.         (setq vla-rot (vlr-pers
  20.                         (vlr-object-reactor
  21.                           vla-en
  22.                           vla-area-txt
  23.                           '((:vlr-modified . area-txt))
  24.                         )
  25.                       )
  26.         )
  27.         (vlr-type vla-rot)
  28.         (princ "\n已建立的反应器有: ")
  29.         (princ (vlr-reactors))
  30.       )
  31.     )
  32.   )
  33.   (princ)
  34. )

  35. ;;回调函数
  36. (defun area-txt        (notifier-object reactor-object parameter-list)
  37.   (setq pl-txt (handent (vlr-data reactor-object)))
  38.   (if (setq txt (vlax-ename->vla-object pl-txt))
  39.     ()
  40.     (setq txt (vlax-ename->vla-object (entdel pl-txt)))
  41.   )
  42.   (setq obj-area (vla-get-area notifier-object))
  43.   (setq txt-nub (strcat (rtos (/ obj-area 10000) 2 2) "㎡"))
  44.   (princ "\n面积:")
  45.   (princ obj-area)
  46.   (vla-put-TextString txt txt-nub)
  47. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-9-25 10:39 , Processed in 0.510087 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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