明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1851|回复: 8

[提问] 块内属性值求和返回并修改另一块的属性值 (测试图已上传)

[复制链接]
发表于 2013-5-23 12:00:39 | 显示全部楼层 |阅读模式
本帖最后由 dennylaw163 于 2013-5-24 15:21 编辑

请各位高手帮忙用LISP编个小程序,如图,块B,块C,块D是同名块,其中值C为数值,希望实现在同一图纸中自动搜寻块B,C,D.....然后自动求所有值C的和并返回块A的值E. 谢谢!!

本帖子中包含更多资源

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

x
 楼主| 发表于 2013-5-23 15:05:58 | 显示全部楼层
;前面的搞出来了,块B,C,D的名叫 part-row, 请高手搞一下后面的.

  1. (defun c:AS ( / _assoc+ doc space ss n lst pt )
  2.   (vl-load-com)
  3.   (defun _assoc+ ( key value lst )
  4.     (
  5.       (lambda ( pair )
  6.         (if pair
  7.           (subst (list key (+ (cadr pair) value)) pair lst)
  8.           (cons  (list key value) lst)
  9.         )
  10.       )
  11.       (assoc key lst)
  12.     )
  13.   )

  14.   (cond
  15.     (
  16.       (not
  17.         (vlax-method-applicable-p
  18.           (setq space
  19.             (vlax-get-property
  20.               (setq doc
  21.                 (vla-get-ActiveDocument
  22.                   (vlax-get-acad-object)
  23.                 )
  24.               )
  25.               (if (= 1 (getvar 'CVPORT)) 'Paperspace 'Modelspace)
  26.             )
  27.           )
  28.           'AddTable
  29.         )
  30.       )

  31.       (princ "\n** This Version of AutoCAD Does not Support Tables **")
  32.     )
  33.     (
  34.       (and (ssget (list'(0 . "INSERT") (cons 2 "part-row")))
  35.         (progn
  36.           (vlax-for obj (setq ss (vla-get-ActiveSelectionSet doc))
  37.             (mapcar
  38.               (function
  39.                 (lambda ( attrib )
  40.                   (if (setq n (distof (vla-get-TextString attrib)))
  41.                     (setq lst (_assoc+ (vla-get-TagString attrib) n lst))
  42.                   )
  43.                 )
  44.               )
  45.               (vlax-invoke obj 'GetAttributes)
  46.             )
  47.           )
  48.           (vla-delete ss)
  49.           (setq lst (mapcar '(lambda ( x ) (list (car x) (rtos (cadr x)))) lst))
  50.         )
发表于 2013-5-23 21:13:36 | 显示全部楼层
传个测试图吧。
 楼主| 发表于 2013-5-23 21:32:03 | 显示全部楼层
还没有完成呢
 楼主| 发表于 2013-5-24 08:24:55 | 显示全部楼层
本帖最后由 dennylaw163 于 2013-5-24 08:35 编辑
004 发表于 2013-5-23 21:13
传个测试图吧。


请帮我看一下如何返回如上图中值C的总和值,第52行返回一个列表(Tag,10),其中Tag是块的是标示,10是运算出来的总和,现在想设一个lst3的值只是后面的总合,请问怎么可以实现?
  1. (defun c:Anew ( / _assoc+ doc space ss n lst pt )
  2.   (vl-load-com)
  3.   (defun _assoc+ ( key value lst )
  4.     (
  5.       (lambda ( pair )
  6.         (if pair
  7.           (subst (list key (+ (cadr pair) value)) pair lst)
  8.           (cons  (list key value) lst)
  9.         )
  10.       )
  11.       (assoc key lst)
  12.     )
  13.   )

  14.   (cond
  15.     (
  16.       (not
  17.         (vlax-method-applicable-p
  18.           (setq space
  19.             (vlax-get-property
  20.               (setq doc
  21.                 (vla-get-ActiveDocument
  22.                   (vlax-get-acad-object)
  23.                 )
  24.               )
  25.               (if (= 1 (getvar 'CVPORT)) 'Paperspace 'Modelspace)
  26.             )
  27.           )
  28.           'AddTable
  29.         )
  30.       )

  31.           )
  32.     (
  33.       (and (ssget "_x" (list'(0 . "INSERT") (cons 2 "part-row")))
  34.         (progn
  35.           (vlax-for obj (setq ss (vla-get-ActiveSelectionSet doc))
  36.             (mapcar
  37.               (function
  38.                 (lambda ( attrib )
  39.                   (if (setq n (distof (vla-get-TextString attrib)))
  40.                     (setq lst (_assoc+ (vla-get-TagString attrib) n lst))
  41.                   )
  42.                 )
  43.               )
  44.               (vlax-invoke obj 'GetAttributes)
  45.             )
  46.           )
  47.           (vla-delete ss)
  48.           (setq lst (mapcar '(lambda ( x ) (list (car x) (rtos (cadr x)))) lst))
  49.         )
  50.            (setq lst2 (cdr lst))
  51.         (setq pt (getpoint "\nPick Point for Table: "))
  52.       )
  53.          )
  54.   )

  55.   (vl-cmdf ".insert" "rev" "S" "1" pt "0" 返回值)

  56.   (princ)
  57. )
发表于 2013-5-24 08:30:35 | 显示全部楼层
一个字
很好
 楼主| 发表于 2013-5-24 08:37:01 | 显示全部楼层
crtrccrt 发表于 2013-5-24 08:30
一个字
很好

看看5楼的回复,能帮我整整不?
发表于 2022-4-2 16:37:32 | 显示全部楼层
楼主,弄好了吗?
发表于 2022-4-2 16:42:56 | 显示全部楼层

大侠些,有没有这种现成的求多个相同块中某个数值的和,插入到指定位置?求分享一个,感激不尽。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-9-29 11:40 , Processed in 0.181063 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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