乐筑天下

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

[编程交流] 统计属性值

[复制链接]

171

主题

447

帖子

276

银币

中流砥柱

Rank: 25

铜币
860
发表于 2022-7-5 18:33:36 | 显示全部楼层 |阅读模式
块名称门标记
标签XF
值D06
 
如何计算具有上述值的块数。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 18:47:17 | 显示全部楼层
试试这个:
 
  1. (defun c:test (/ no)
  2. ;; Tharwat 30.9.2015        ;;
  3. (setq no 0)
  4. (vlax-for lay (vla-get-layouts
  5.                  (vla-get-activedocument (vlax-get-acad-object))
  6.                )
  7.    (vlax-for spc (vla-get-block lay)
  8.      (if (and (eq (vla-get-objectname spc) "AcDbBlockReference")
  9.               (eq (vla-get-effectivename spc) "DOOR TAG")
  10.               (eq (vla-get-hasattributes spc) :vlax-true)
  11.               (vl-some '(lambda (x)
  12.                           (and (eq (vla-get-tagstring x) "XF")
  13.                                (eq (vla-get-textstring x) "D06")
  14.                           )
  15.                         )
  16.                        (vlax-invoke spc 'getattributes)
  17.               )
  18.          )
  19.        (setq no (1+ no))
  20.      )
  21.    )
  22. )
  23. (princ (if (< 0 no) (strcat "\nNumber of Blocks < " (itoa no) " > .") "\nZero found !"))
  24. (princ)
  25. )(vl-load-com)
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 18:52:55 | 显示全部楼层
未经测试的一点粗糙可以做得更好,未经测试
 
  1. (vl-load-com)
  2. (defun c:blocknum ( / bname tagname )
  3. (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
  4. (setq bname (strcase (getstring "\nEnter block name")))
  5. (setq tagname (strcase (getstring "\nEnter Block tag")))
  6. (vlax-for block (vla-get-blocks adoc)
  7. (if (= (strcase (vla-get-name block)) bname)
  8. (progn
  9.   (foreach att block 'getattributes)
  10.        (if (= tagname (strcase (vla-get-tagstring att)))
  11.        (setq x (+ 1x))
  12.        )
  13.    )
  14. ) ; progn
  15. ) ;_ end of if
  16. ) ;_ end of vlax-for block
  17. (alert (strcat blockname " has " (rtos x 2 0) "with tag " tagname))
  18. (princ)
  19. ) ;-end of defun
  20. (princ)
回复

使用道具 举报

6

主题

249

帖子

247

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-5 19:01:20 | 显示全部楼层
 
*的目的是什么??此lisp是否适用于只有一个标记的块?我在一个有两个标签的街区上试过了,但没法用?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 19:04:26 | 显示全部楼层
以下是一个通用程序,用于计算具有给定标记/值的属性块,仅使用Vanilla AutoLISP在Mac上兼容:
  1. (defun c:countattblocks ( / blk ent enx idx rtn sel tag val )
  2.    (while
  3.        (not
  4.            (or
  5.                (= "" (setq blk (strcase (getstring t "\nSpecify block name: "))))
  6.                (tblsearch "block" blk)
  7.            )
  8.        )
  9.        (princ (strcat "\nBlock " blk " not found."))
  10.    )
  11.    (if (and (/= "" blk) (setq tag (strcase (getstring "\nSpecify attribute tag: "))))
  12.        (progn
  13.            (setq val (strcase (getstring t "\nSpecify attribute value: "))
  14.                  rtn 0
  15.            )
  16.            (if
  17.                (and
  18.                    (setq sel
  19.                        (ssget "_X"
  20.                            (list
  21.                               '(00 . "INSERT")
  22.                               '(66 . 1)
  23.                                (cons 02 (strcat "`*U*," blk))
  24.                                (if (= 1 (getvar 'cvport))
  25.                                    (cons 410 (getvar 'ctab))
  26.                                   '(410 . "Model")
  27.                                )
  28.                            )
  29.                        )
  30.                    )
  31.                    (progn
  32.                        (repeat (setq idx (sslength sel))
  33.                            (setq ent (ssname sel (setq idx (1- idx))))
  34.                            (if (= blk (strcase (LM:name->effectivename (cdr (assoc 2 (entget ent))))))
  35.                                (progn
  36.                                    (setq ent (entnext ent)
  37.                                          enx (entget  ent)
  38.                                    )
  39.                                    (while
  40.                                        (and (= "ATTRIB" (cdr (assoc 0 enx)))
  41.                                            (not
  42.                                                (and
  43.                                                    (= tag (strcase (cdr (assoc 2 enx))))
  44.                                                    (= val (strcase (cdr (assoc 1 enx))))
  45.                                                    (setq rtn (1+ rtn))
  46.                                                )
  47.                                            )
  48.                                        )
  49.                                        (setq ent (entnext ent)
  50.                                              enx (entget  ent)
  51.                                        )
  52.                                    )
  53.                                )
  54.                            )
  55.                        )
  56.                        (< 0 rtn)
  57.                    )
  58.                )
  59.                (princ
  60.                    (strcat
  61.                        "\nFound " (itoa rtn) " " blk " block" (if (= 1 rtn) "" "s")
  62.                        " with attribute tag " tag " with value " val "."
  63.                    )
  64.                )
  65.                (princ (strcat "\nNo " blk " blocks found with attribute tag " tag " with value " val "."))
  66.            )
  67.        )
  68.    )
  69.    (princ)
  70. )
  71. ;; Block Name -> Effective Block Name  -  Lee Mac
  72. ;; blk - [str] Block name
  73. (defun LM:name->effectivename ( blk / rep )
  74.    (if
  75.        (and (wcmatch blk "`**")
  76.            (setq rep
  77.                (cdadr
  78.                    (assoc -3
  79.                        (entget
  80.                            (cdr (assoc 330 (entget (tblobjname "block" blk))))
  81.                           '("AcDbBlockRepBTag")
  82.                        )
  83.                    )
  84.                )
  85.            )
  86.            (setq rep (handent (cdr (assoc 1005 rep))))
  87.        )
  88.        (cdr (assoc 2 (entget rep)))
  89.        blk
  90.    )
  91. )
  92. (princ)
回复

使用道具 举报

6

主题

249

帖子

247

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-5 19:13:49 | 显示全部楼层
绝对,绝对整洁!!thx李
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 19:23:42 | 显示全部楼层
 
谢谢你Steve
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 19:29:49 | 显示全部楼层
对不起,伙计们,当我粘贴的时候,一些额外的字符出现了,但不知道为什么。
 
Tharwat你一定在我面前张贴了秒,我不会张贴。
 
 
李像往常一样在班上名列前茅。
回复

使用道具 举报

22

主题

74

帖子

39

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
125
发表于 2022-7-5 19:40:55 | 显示全部楼层
是否可以通过单击进行块和属性选择?也许这个选项会更有效率?
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-12 13:28 , Processed in 0.441453 second(s), 70 queries .

© 2020-2025 乐筑天下

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