明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: redcat

数据关联求和与解除

    [复制链接]
发表于 2013-6-16 10:04:37 | 显示全部楼层
在AutoCAD04中试用很好,谢谢楼主分享。
发表于 2014-11-16 10:35:12 | 显示全部楼层
用了反应器,如果很多的话会不会很慢?
发表于 2015-2-4 11:21:24 | 显示全部楼层
学习学习永久反应器
发表于 2015-2-4 21:48:03 | 显示全部楼层
Gu_xl 发表于 2012-7-13 13:39
数字关联示例代码:

连加是这样,连乘怎么改?
发表于 2015-2-4 22:27:43 | 显示全部楼层
(+ val (atof (dxf en 1)))改为(* val (atof (dxf en 1)))
发表于 2015-2-6 17:03:00 | 显示全部楼层
zhaochang71 发表于 2015-2-4 22:27
(+ val (atof (dxf en 1)))改为(* val (atof (dxf en 1)))

这样改,不行啊,出现0.000
发表于 2015-2-7 17:49:49 | 显示全部楼层
bai2000 发表于 2015-2-6 17:03
这样改,不行啊,出现0.000

  1. (defun c:tt  (/  SS VAL N EN OBJ DATA PT TEXT HAND)
  2.     (princ "\n选择文字:")
  3.   (setq ss (ssget '((0 . "text"))))
  4.   (if ss
  5.     (progn
  6.       (setq val 1)
  7.       (repeat (setq n (sslength ss))
  8.         (setq en   (ssname ss (setq n (1- n)))
  9.               obj  (vlax-ename->vla-object en)
  10.               data (cons (dxf en 5) data)
  11.               val  (* val (atof (dxf en 1)))
  12.               )
  13.         )
  14.       (setq pt (getpoint "\n文字位置:"))
  15.       (entmake (list '(0 . "text")
  16.                      (cons 10 pt)
  17.                      (cons 1 (rtos val 2))
  18.                      (cons 40 (dxf en 40))))
  19.       (setq text (entlast))
  20.       (setq hand (dxf text 5))
  21.       
  22.       (repeat (setq n (sslength ss))
  23.         (setq en (ssname ss (setq n (1- n))))
  24.         (vlr-pers ;_ 设置永久反应器
  25.           (VLR-Object-Reactor
  26.             (list (vlax-ename->vla-object en))
  27.             data ;_ 关联的对象索引
  28.             '((:VLR-modified . text-change) ;_ 回调函数
  29.               )
  30.             )
  31.           )
  32.         (VLAX-LDATA-PUT
  33.           (vlax-ename->vla-object En)
  34.           "data"
  35.           (entget text)
  36.           ) ;_ 将关联文字数据保存在词典里
  37.         )
  38.       )
  39.     )
  40.   )
  41. (defun dxf  (e i)
  42.     (cdr (assoc i (entget e)))
  43.     )
  44. ;;回调函数
  45. (defun text-change  (Object         Reactor-Object                 Parameter-list
  46.                      /                 hand             ent         val
  47.                      data         dxfs)
  48.   (setq data (vlr-data Reactor-Object))
  49.   (setq
  50.     hand (cdr (assoc 5 (setq dxfs (VLAX-LDATA-get Object "data")))))
  51.   (if (and
  52.       hand
  53.         (setq ent (handent hand))
  54.         (setq el (entget ent))
  55.         )
  56.     (progn
  57.       (setq val
  58.              (apply '*
  59.                     (mapcar
  60.                       '(lambda (x / e)
  61.                          (if
  62.                            (and
  63.                              (setq e (handent x))
  64.                              (entget e)
  65.                              )
  66.                             (atof (dxf e 1))
  67.                             0
  68.                             )
  69.                          )
  70.                       data
  71.                       )
  72.                     )
  73.             )
  74.       (entmod (subst (cons 1 (rtos val 2)) (assoc 1 el) el))
  75.       )
  76.     (progn
  77.       (setq val
  78.              (apply '*
  79.                     (mapcar
  80.                       '(lambda (x / e)
  81.                          (if
  82.                            (and
  83.                              (setq e (handent x))
  84.                              (entget e)
  85.                              )
  86.                             (atof (dxf e 1))
  87.                             0
  88.                             )
  89.                          )
  90.                       data
  91.                       )
  92.                     )
  93.             )
  94.       (entmake (subst (cons 1 (rtos val 2)) (assoc 1 dxfs) dxfs)) ;_ 恢复关联文字
  95.       (setq text (entget (entlast)))
  96.       (foreach h  data
  97.         (if (and
  98.               (setq en (handent h))
  99.               (entget en)
  100.               )
  101.           (VLAX-LDATA-PUT (vlax-ename->vla-object En) "data" text) ;_ 重置数据
  102.           )
  103.         )
  104.       )
  105.     )
  106.   (princ)
  107.   )
发表于 2015-2-7 17:52:41 | 显示全部楼层
bai2000 发表于 2015-2-6 17:03
这样改,不行啊,出现0.000

(setq val 0)改为(setq val 1.0)
两个  (apply '+ 改为(apply '*
发表于 2015-2-7 21:59:16 | 显示全部楼层
谢楼上,好用。怎么把小数点后的0000取消啊?
发表于 2015-8-25 11:56:20 | 显示全部楼层
谢谢了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-12-24 01:30 , Processed in 0.154731 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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