明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 6933|回复: 22

永久物件反應器例子

  [复制链接]
发表于 2006-11-16 10:05 | 显示全部楼层 |阅读模式
  1. ;|  Adds a persistant reactor to a pline object that
  2.     updates a selected text object to the plines area
  3.     in square feet.  You will have to have the subs loaded
  4.     in everydrawing for it to work, so that it know what
  5.     to do with the reactor, because it is saved with the
  6.     drawing. If the text object is deleted, then the
  7.     program will remove the reactor related to the pline.
  8.     v1.0 4/2006  LUCAS(龙龙仔)
  9. |;
  10. (vl-load-com)
  11. (if (and (not ALL_LIST_LAI)
  12.   (setq LST (cdar (vlr-reactors :vlr-object-reactor)))
  13.     )
  14.   (mapcar '(lambda (X)
  15.       (if (= (vlr-data X) "Area_Reactor")
  16.         (setq ALL_LIST_LAI (cons X ALL_LIST_LAI))
  17.       )
  18.     )
  19.    LST
  20.   )
  21. )
  22. (if (not ENDOUT)
  23.   (setq ENDOUT
  24.   (vlr-dwg-reactor
  25.     NIL
  26.     '((:vlr-beginsave . ENDBEGIN) (:vlr-savecomplete . ENDSAVE))
  27.   )
  28.   )
  29. )
  30. (defun ENDBEGIN (OBJ REACT)
  31.   (foreach I ALL_LIST_LAI
  32.     (if (or (vlax-erased-p (car (vlr-owners I)))
  33.      (vlax-erased-p (cadr (vlr-owners I)))
  34. )
  35.       (progn
  36. (vlr-pers-release I)
  37. (vlr-remove I)
  38.       )
  39.     )
  40.   )
  41. )
  42. (defun ENDSAVE (OBJ REACT)
  43.   (foreach I ALL_LIST_LAI (vlr-add I) (vlr-pers I))
  44.   (princ)
  45. )
  46. (defun C:AREA_REACTOR (/ ENT POLYOBJ TEXTOBJ)
  47.   (if
  48.     (and
  49.       (setq ENT (entsel "\n Select Pline to get area of: "))
  50.       (setq POLYOBJ (vlax-ename->vla-object (car ENT)))
  51.       (wcmatch (vla-get-objectname POLYOBJ)
  52.         "AcDb2dPolyline,AcDbPolyline"
  53.       )
  54.       (setq ENT (entsel "\n Select Text of hold area value: "))
  55.       (setq TEXTOBJ (vlax-ename->vla-object (car ENT)))
  56.       (wcmatch (vla-get-objectname TEXTOBJ) "AcDbText,AcDbMText")
  57.     )
  58.      (progn
  59.        (vla-put-textstring
  60.   TEXTOBJ
  61.   (strcat (rtos (/ (vla-get-area POLYOBJ) 1000000.0) 2 4)
  62.    "㎡"
  63.   )
  64.        )
  65.        (setq ALL_LIST_LAI
  66.        (cons (vlr-pers
  67.         (vlr-object-reactor
  68.    (list POLYOBJ TEXTOBJ)
  69.    "Area_Reactor"
  70.    '((:vlr-modified . MODREACTOR))
  71.         )
  72.       )
  73.       ALL_LIST_LAI
  74.        )
  75.        )
  76.      )
  77.   )
  78.   (princ)
  79. )
  80. (defun MODREACTOR (OBJ REACT NOTSURE)
  81.   (if (and (wcmatch (getvar "cmdnames") "SCALE,STRETCH,GRIP_STRETCH")
  82.     (vlax-property-available-p OBJ 'AREA)
  83.       )
  84.     (setq MODIFY_OBJ (cons (cons OBJ REACT) MODIFY_OBJ))
  85.   )
  86.   (princ)
  87. )
  88. (if (not ADTEXTCOMEND)
  89.   (setq ADTEXTCOMEND
  90.   (vlr-command-reactor
  91.     NIL
  92.     '((:vlr-commandended . ADTEXTOBJ))
  93.   )
  94.   )
  95. )
  96. (defun ADTEXTOBJ (OBJ REACT)
  97.   (if MODIFY_OBJ
  98.     (progn
  99.       (foreach OBJ MODIFY_OBJ
  100. (if (and (not (vlax-erased-p (car OBJ)))
  101.    (not (vlax-erased-p (car (vlr-owners (cdr OBJ))))
  102.    )
  103.      )
  104.    (vla-put-textstring
  105.      (car (vlr-owners (cdr OBJ)))
  106.      (strcat (rtos (/ (vla-get-area (car OBJ)) 1000000.0) 2 4)
  107.       "㎡"
  108.      )
  109.    )
  110. )
  111.       )
  112.       (setq MODIFY_OBJ NIL)
  113.     )
  114.   )
  115. )
  116. (princ "\nType Area_Reactor,By Lucas")
  117. (princ)

评分

参与人数 2威望 +1 明经币 +1 金钱 +10 贡献 +5 激情 +5 收起 理由
yanshengjiang + 1
mccad + 1 + 10 + 5 + 5 【精华】好程序

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2006-11-16 10:12 | 显示全部楼层

沙发。

谢谢楼主。收了。

 楼主| 发表于 2006-11-16 15:57 | 显示全部楼层

注意:程序不能编译为独立变量空间程序!为甚么不行?

主要是独立变量空间中只能存放一个永久反应器物件,当程序產生多於一个永久反应器物件,程序并不能取得其他的永久反应器物件!!

即(vlr-reactors :vlr-object-reactor)没法取得其他的永久反应器物件!!

发表于 2006-11-16 16:09 | 显示全部楼层

版 主能不能解释一下独立空间的特点,

(acad_colordlg)函数在独立空间下竟然是未知命令。我昏。

 楼主| 发表于 2006-11-16 17:13 | 显示全部楼层

独立空间----编译时加在程序最前面

(if (findfile "acapp.arx")
  (progn
    (arxload "acapp.arx" NIL)
    (vl-arx-import "acapp.arx")
  )
)

发表于 2007-6-11 14:55 | 显示全部楼层

程序很精彩。。我更想知道"㎡"里面的平方米是怎么一次就可以打得出来啊!

我只能打出"m2"

发表于 2007-6-12 07:28 | 显示全部楼层
从Word或Excel里复制㎡
发表于 2007-6-12 08:35 | 显示全部楼层
hhc发表于2007-6-12 7:28:00从Word或Excel里复制㎡

这个方法我试过了。先在word里面写入"m2",然后让"2"成为上标,是这样子吧?

复制到VLISP编辑器里面的话,自动变回成"m2"....

发表于 2007-7-24 07:13 | 显示全部楼层
本帖最后由 作者 于 2007-7-24 7:20:33 编辑

请问版主

假如说是选取 "PLINE" 自动产生 "TEXT" 物件并带有面积数值,
且当进行 "PLINE" 物件 "复制" ,可自动关联产生 "TEXT" 物件,
并内容是其面积值,该怎样做到复制的反应动作呢?

是要使用 vlr-object-reactor 的 vlr-copied ,
还是 vlr-editor-reactor 或是其他 ?
因为资料有现,不知道哪里还有其他的介绍 ?
希望版主或是其他高手可以解答一下.
谢谢!

 楼主| 发表于 2007-7-24 12:36 | 显示全部楼层

1.选取 "PLINE" 自动产生 "TEXT" 物件并带有面积数值

=>你應可自已解決  8-)

2.且当进行 "PLINE" 物件 "复制" ,可自动关联产生 "TEXT" 物件

=>使用vlr-copied

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

本版积分规则

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

GMT+8, 2024-4-25 09:48 , Processed in 2.433007 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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