乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 89|回复: 7

[编程交流] 总结Pa的具体数据

[复制链接]

16

主题

50

帖子

34

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
80
发表于 2022-7-5 19:49:49 | 显示全部楼层 |阅读模式
好的,伙计们,这就是我要找的,我想写一个lisp或修改现有的lisp,它将在给定的选择框架内选择块,并在图形或excel文件中总结表中的属性数据。
 
我找到了LeeMac的很棒的程序“计算属性值”,但我的问题是,现在它仍然在我的脑海中,所以我很难理解它。此外,我想将其限制为具有特定名称的块,然后在该块中仅总结一个特定属性,因为这些块具有计数属性,这是不必要的。
 
如果有人能给我一些指导或我可以在此基础上建立的东西,我将不胜感激。
 
此外,我知道EATTEXT可以做到这一点,但我正在寻找更快的东西。
回复

使用道具 举报

0

主题

99

帖子

99

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-5 20:05:52 | 显示全部楼层
  1. ;;-----------------=={ Count Attribute Values }==-------------;;
  2. ;;                                                            ;;
  3. ;;  Counts the number of occurrences of attribute values in a ;;
  4. ;;  selection of attributed blocks. Displays result in an     ;;
  5. ;;  AutoCAD Table object.                                     ;;
  6. ;;------------------------------------------------------------;;
  7. ;;  Author: Lee Mac, Copyright © 2011 - www.lee-mac.com       ;;
  8. ;;------------------------------------------------------------;;
  9. (defun c:CAV nil (c:CountAttributeValues))
  10. (defun c:CountAttributeValues ( / _Dxf _Assoc++ _SumAttributes s ss i e alist bnlist attlist)
  11. (setq bnlist '([color="blue"]"BN1" "BN2" "BN3"[/color]) [color="red"];; BLOCK NAME HERE[/color]
  12.      attlist '([color="blue"]"ATT1" "ATT2" "ATT3" "ATT4"[/color]) [color="red"];; ATTRIBUTES HERE[/color]
  13. )
  14. (defun _Dxf ( key alist ) (cdr (assoc key alist)))
  15. (defun _Assoc++ ( key alist )
  16.    (
  17.      (lambda ( pair )
  18.        (if pair
  19.          (subst (list key (1+ (cadr pair))) pair alist)
  20.          (cons  (list key 1) alist)
  21.        )
  22.      )
  23.      (assoc key alist)
  24.    )
  25. )
  26. (defun _SumAttributes ( entity alist / eqlist)
  27.    (while
  28.      (not
  29.        (eq "SEQEND"
  30.          (_dxf 0
  31.            (entget
  32.              (setq entity
  33.                (entnext entity)
  34.              )
  35.            )
  36.          )
  37.        )
  38.      )
  39.     (setq alist (_Assoc++ (_Dxf 1 (reverse (entget entity))) alist))
  40.    )
  41. (setq alist  (vl-remove-if (function (lambda (a) (not (member (car a) attlist)))) alist))
  42. )
  43. (if
  44.    (setq s (ssget '((0 . "INSERT") (66 . 1))))
  45.    (progn
  46.      (setq ss (ssadd))     
  47.      (repeat
  48.        (setq i (sslength s))
  49.        (if
  50.          (member
  51.            (vla-get-effectivename
  52.              (vlax-ename->vla-object
  53.                (setq e
  54.                  (ssname s
  55.                    (setq i (1- i))
  56.                  )
  57.                )
  58.              )
  59.            )
  60.            bnlist
  61.          )
  62.          (ssadd e ss))
  63.      )
  64.    
  65. (cond
  66.    (
  67.      (not
  68.        (vlax-method-applicable-p
  69.          (setq space
  70.            (vlax-get-property
  71.              (setq doc
  72.                (vla-get-ActiveDocument (vlax-get-acad-object))
  73.              )
  74.              (if (= 1 (getvar 'CVPORT)) 'Paperspace 'Modelspace)
  75.            )
  76.          )
  77.          'AddTable
  78.        )
  79.      )
  80.      (princ "\n** This Version of AutoCAD Does not Support Tables **")
  81.    )
  82.    (
  83.      (and
  84.         (repeat (setq i (sslength ss))
  85.         (setq alist (_SumAttributes (ssname ss (setq i (1- i))) alist))
  86.         )
  87.         (setq pt (getpoint "\nPick Point for Table: "))
  88.      )
  89.    
  90.      (LM:AddTable space (trans pt 1 0) "Attribute Totals"
  91.        (cons '("Value" "Total")
  92.          (vl-sort
  93.            (mapcar
  94.              (function
  95.                (lambda ( pair )
  96.                  (list (car pair) (itoa (cadr pair)))
  97.                )
  98.              )
  99.              alist
  100.            )
  101.            (function (lambda ( a b ) (< (strcase (car a)) (strcase (car b)))))
  102.          )
  103.        )
  104.      )
  105.    )
  106. ))
  107. )
  108. (princ)
  109. )
  110. ;;---------------------=={ Add Table }==----------------------;;
  111. ;;                                                            ;;
  112. ;;  Creates a VLA Table Object at the specified point,        ;;
  113. ;;  populated with title and data                             ;;
  114. ;;------------------------------------------------------------;;
  115. ;;  Author: Lee Mac, Copyright © 2011 - www.lee-mac.com       ;;
  116. ;;------------------------------------------------------------;;
  117. ;;  Arguments:                                                ;;
  118. ;;  space - VLA Block Object                                  ;;
  119. ;;  pt    - Insertion Point for Table                         ;;
  120. ;;  title - Table title                                       ;;
  121. ;;  data  - List of data to populate the table                ;;
  122. ;;------------------------------------------------------------;;
  123. ;;  Returns:  VLA Table Object                                ;;
  124. ;;------------------------------------------------------------;;
  125. (defun LM:AddTable ( space pt title data / _itemp ) (vl-load-com)
  126. (defun _itemp ( collection item )
  127.    (if
  128.      (not
  129.        (vl-catch-all-error-p
  130.          (setq item
  131.            (vl-catch-all-apply 'vla-item (list collection item))
  132.          )
  133.        )
  134.      )
  135.      item
  136.    )
  137. )
  138. (
  139.    (lambda ( table ) (vla-put-StyleName table (getvar 'CTABLESTYLE)) (vla-SetText table 0 0 title)
  140.      (
  141.        (lambda ( row )
  142.          (mapcar
  143.            (function
  144.              (lambda ( rowitem ) (setq row (1+ row))
  145.                (
  146.                  (lambda ( column )
  147.                    (mapcar
  148.                      (function
  149.                        (lambda ( item )
  150.                          (vla-SetText table row
  151.                            (setq column (1+ column)) item
  152.                          )
  153.                        )
  154.                      )
  155.                      rowitem
  156.                    )
  157.                  )
  158.                  -1
  159.                )
  160.              )
  161.            )
  162.            data
  163.          )
  164.        )
  165.        0
  166.      )
  167.      table
  168.    )
  169.    (
  170.      (lambda ( textheight )
  171.        (vla-AddTable space (vlax-3D-point pt) (1+ (length data)) (length (car data)) (* 1.8 textheight)
  172.          (* textheight
  173.            (apply 'max
  174.              (cons (/ (strlen title) (length (car data)))
  175.                (mapcar 'strlen (apply 'append data))
  176.              )
  177.            )
  178.          )
  179.        )
  180.      )
  181.      (vla-getTextHeight
  182.        (_itemp
  183.          (_itemp
  184.            (vla-get-Dictionaries
  185.              (vla-get-ActiveDocument (vlax-get-acad-object))
  186.            )
  187.            "ACAD_TABLESTYLE"
  188.          )
  189.          (getvar 'CTABLESTYLE)
  190.        )
  191.        acDataRow
  192.      )
  193.    )
  194. )
  195. )
  196. (princ)
回复

使用道具 举报

16

主题

50

帖子

34

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
80
发表于 2022-7-5 20:07:35 | 显示全部楼层
谢谢Jdiala,
尝试了两种不同的方法,但都没有成功。没有出错,只是在我选择对象后什么都不做。反复检查我是否有正确的块名和属性几次。
回复

使用道具 举报

0

主题

99

帖子

99

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-5 20:17:06 | 显示全部楼层
我修改了上面的代码。
 
对不起,李把你的代码弄乱了。如果不使用另一个选择集,则无法找到它。
回复

使用道具 举报

16

主题

50

帖子

34

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
80
发表于 2022-7-5 20:31:11 | 显示全部楼层
它对你有用吗?我还是没有一张桌子。
回复

使用道具 举报

0

主题

99

帖子

99

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-5 20:38:50 | 显示全部楼层
是的,它确实对我有用。你能寄一张样图吗。
回复

使用道具 举报

16

主题

50

帖子

34

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
80
发表于 2022-7-5 20:45:59 | 显示全部楼层
那太好了。。。我可能在做一些愚蠢的事。
 
您的代码和我的块名:CountAttributeValuesALT1。lsp
 
我的测试图:测试摘录。图纸
回复

使用道具 举报

0

主题

99

帖子

99

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-5 20:55:22 | 显示全部楼层
对不起,我的错。我以为你想计算属性值。
试试这个。
 
  1. ;;-----------------=={ Count Attribute Values }==-------------;;
  2. ;;                                                            ;;
  3. ;;  Counts the number of occurrences of attribute values in a ;;
  4. ;;  selection of attributed blocks. Displays result in an     ;;
  5. ;;  AutoCAD Table object.                                     ;;
  6. ;;------------------------------------------------------------;;
  7. ;;  Author: Lee Mac, Copyright © 2011 - www.lee-mac.com       ;;
  8. ;;------------------------------------------------------------;;
  9. (defun c:CAV nil (c:CountAttributeValues))
  10. (defun c:CountAttributeValues ( / _Dxf _Assoc++ _SumAttributes s ss i e  bnlist alist att)
  11. (setq bnlist '("KIT-ID" "KITID") ;; BLOCK NAME HERE
  12.      att "XXXX" ;;; atribute here
  13. )
  14. (defun _Dxf ( key alist ) (cdr (assoc key alist)))
  15. (defun _Assoc++ ( key alist )
  16.    (
  17.      (lambda ( pair )
  18.        (if pair
  19.          (subst (list key (1+ (cadr pair))) pair alist)
  20.          (cons  (list key 1) alist)
  21.        )
  22.      )
  23.      (assoc key alist)
  24.    )
  25. )
  26. (defun LM:vl-getattributes ( blk )
  27.    (mapcar '(lambda ( att ) (cons (vla-get-tagstring att) (vla-get-textstring att)))
  28.        (vlax-invoke blk 'getattributes)
  29.    )
  30. )
  31. (defun _SumAttributes ( entity alist)
  32.    (while
  33.      (not
  34.        (eq "SEQEND"
  35.          (_dxf 0
  36.            (entget
  37.              (setq entity
  38.                (entnext entity)
  39.              )
  40.            )
  41.          )
  42.        )
  43.      )
  44.      (setq alist
  45.        (vl-remove-if
  46.          (function
  47.            (lambda (a)
  48.              (and
  49.                (not
  50.                  (= att
  51.                    (vla-get-tagstring
  52.                      (vlax-ename->vla-object entity)
  53.                    )         
  54.                  )
  55.                )                                
  56.                (eq  
  57.                  (cdr
  58.                    (assoc 1
  59.                      (entget entity)
  60.                    )
  61.                  )
  62.                  (car a)
  63.                )
  64.              )
  65.            )
  66.          )   
  67.          (_Assoc++
  68.            (_Dxf 1
  69.              (reverse  
  70.                (entget entity)
  71.              )
  72.            )
  73.            alist
  74.          )
  75.        )  
  76.      )
  77.    )
  78. )
  79. (if
  80.    (setq s (ssget '((0 . "INSERT") (66 . 1))))
  81.    (progn
  82.      (setq ss (ssadd))     
  83.      (repeat
  84.        (setq i (sslength s))
  85.        (if
  86.          (member
  87.            (vla-get-effectivename
  88.              (vlax-ename->vla-object
  89.                (setq e
  90.                  (ssname s
  91.                    (setq i (1- i))
  92.                  )
  93.                )
  94.              )
  95.            )
  96.            bnlist
  97.          )
  98.          (ssadd e ss))
  99.      )
  100.      
  101.    
  102. (cond
  103.    (
  104.      (not
  105.        (vlax-method-applicable-p
  106.          (setq space
  107.            (vlax-get-property
  108.              (setq doc
  109.                (vla-get-ActiveDocument (vlax-get-acad-object))
  110.              )
  111.              (if (= 1 (getvar 'CVPORT)) 'Paperspace 'Modelspace)
  112.            )
  113.          )
  114.          'AddTable
  115.        )
  116.      )
  117.      (princ "\n** This Version of AutoCAD Does not Support Tables **")
  118.    )
  119.    (
  120.      (and
  121.         (repeat (setq i (sslength ss))
  122.         (setq alist (_SumAttributes (ssname ss (setq i (1- i))) alist))
  123.         )
  124.         (setq pt (getpoint "\nPick Point for Table: "))
  125.         (princ alist)
  126.      )
  127.    
  128.      (LM:AddTable space (trans pt 1 0) "Attribute Totals"
  129.        (cons '("Value" "Total")
  130.          (vl-sort
  131.            (mapcar
  132.              (function
  133.                (lambda ( pair )
  134.                  (list (car pair) (itoa (cadr pair)))
  135.                )
  136.              )
  137.              alist
  138.            )
  139.            (function (lambda ( a b ) (< (strcase (car a)) (strcase (car b)))))
  140.          )
  141.        )
  142.      )
  143.    )
  144. ))
  145. )
  146. (princ)
  147. )
  148. ;;---------------------=={ Add Table }==----------------------;;
  149. ;;                                                            ;;
  150. ;;  Creates a VLA Table Object at the specified point,        ;;
  151. ;;  populated with title and data                             ;;
  152. ;;------------------------------------------------------------;;
  153. ;;  Author: Lee Mac, Copyright © 2011 - www.lee-mac.com       ;;
  154. ;;------------------------------------------------------------;;
  155. ;;  Arguments:                                                ;;
  156. ;;  space - VLA Block Object                                  ;;
  157. ;;  pt    - Insertion Point for Table                         ;;
  158. ;;  title - Table title                                       ;;
  159. ;;  data  - List of data to populate the table                ;;
  160. ;;------------------------------------------------------------;;
  161. ;;  Returns:  VLA Table Object                                ;;
  162. ;;------------------------------------------------------------;;
  163. (defun LM:AddTable ( space pt title data / _itemp ) (vl-load-com)
  164. (defun _itemp ( collection item )
  165.    (if
  166.      (not
  167.        (vl-catch-all-error-p
  168.          (setq item
  169.            (vl-catch-all-apply 'vla-item (list collection item))
  170.          )
  171.        )
  172.      )
  173.      item
  174.    )
  175. )
  176. (
  177.    (lambda ( table ) (vla-put-StyleName table (getvar 'CTABLESTYLE)) (vla-SetText table 0 0 title)
  178.      (
  179.        (lambda ( row )
  180.          (mapcar
  181.            (function
  182.              (lambda ( rowitem ) (setq row (1+ row))
  183.                (
  184.                  (lambda ( column )
  185.                    (mapcar
  186.                      (function
  187.                        (lambda ( item )
  188.                          (vla-SetText table row
  189.                            (setq column (1+ column)) item
  190.                          )
  191.                        )
  192.                      )
  193.                      rowitem
  194.                    )
  195.                  )
  196.                  -1
  197.                )
  198.              )
  199.            )
  200.            data
  201.          )
  202.        )
  203.        0
  204.      )
  205.      table
  206.    )
  207.    (
  208.      (lambda ( textheight )
  209.        (vla-AddTable space (vlax-3D-point pt) (1+ (length data)) (length (car data)) (* 1.8 textheight)
  210.          (* textheight
  211.            (apply 'max
  212.              (cons (/ (strlen title) (length (car data)))
  213.                (mapcar 'strlen (apply 'append data))
  214.              )
  215.            )
  216.          )
  217.        )
  218.      )
  219.      (vla-getTextHeight
  220.        (_itemp
  221.          (_itemp
  222.            (vla-get-Dictionaries
  223.              (vla-get-ActiveDocument (vlax-get-acad-object))
  224.            )
  225.            "ACAD_TABLESTYLE"
  226.          )
  227.          (getvar 'CTABLESTYLE)
  228.        )
  229.        acDataRow
  230.      )
  231.    )
  232. )
  233. )
  234. (princ)
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-12 13:25 , Processed in 0.471847 second(s), 68 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表