乐筑天下

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

[编程交流] 按名称选择动态块

[复制链接]

30

主题

96

帖子

66

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
150
发表于 2022-7-6 08:57:21 | 显示全部楼层 |阅读模式
大家好,
有没有办法通过拾取一个实例来选择图形中动态块的所有实例?
 
这是一种“按名称选择”的尝试。但是动态块杀死了我下面的代码,因为它们有奇特的命名(如*U24)
 
到目前为止,我在这里。。。
 
  1. (defun c:SB ()
  2. (setq TargEnt (car (entsel "\nSelect block : ")))
  3. (setq blkname (EffectiveName TargEnt))
  4. (setq ss (ssget "_X" (list (cons 0 "insert")(cons 2 blkname))))
  5. (sssetfirst nil ss)
  6. (princ)
  7. )
  8. ;Code below is the courtesy of 'irneb' on http://forums.augi.com/showthread.php?t=114752
  9. (defun EffectiveName (en / ed d1 d2 d3 br)
  10. (setq ed (entget en))
  11. (setq d1 (entget (cdr (assoc 360 (member '(102 . "{ACAD_XDICTIONARY") ed)))))
  12. (setq d2 (entget (cdr (assoc 360 (member '(3 . "AcDbBlockRepresentation") d1)))))
  13. (setq d3 (entget (cdr (assoc 360 (member '(3 . "AcDbRepData") d2)))))
  14. (setq br (entget (cdr (assoc 340 d3))))
  15. (cdr (assoc 2 br))
  16. )
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 09:16:09 | 显示全部楼层
选择单个块实例,提取块的名称,然后创建一个包含所有具有该名称或注释性名称的块的选择集。接下来迭代该选择集,并检查与原始块的EffectiveName和IsDynamicBlock属性的匹配。
 
示例:
  1. ...
  2. (setq ss (ssget "x" (list (cons 2 "[color=red]<BlockName>[/color],`*U*"))))
  3. ...

 
HTH公司
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 09:30:09 | 显示全部楼层
本文演示了获取所需块的选择集的两种方法。这也可能有助于有效块名。
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 09:42:02 | 显示全部楼层
只是为了完整性。。。
 
http://www.theswamp.org/index.php?topic=39260.0
回复

使用道具 举报

11

主题

968

帖子

919

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
99
发表于 2022-7-6 09:55:42 | 显示全部楼层
或者看看我的“旧”SEL函数中的代码:http://www.augi.com/forums/showthread.php?p=827641
回复

使用道具 举报

29

主题

196

帖子

168

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
145
发表于 2022-7-6 09:58:43 | 显示全部楼层
我很久以前问过同样的问题。。。我不记得是谁帮了我。。。
 
  1. (defun c:sb    (/ e name n out ss x rjp-getblockname)
  2. (vl-load-com)
  3. (prompt "\n   Pick BLOCK to acquire its instances in the drawing...")
  4. (defun rjp-getblockname (obj)
  5.    (if    (vlax-property-available-p obj 'effectivename)
  6.      (vla-get-effectivename obj)
  7.      (vla-get-name obj)
  8.    )
  9. )
  10. (if (setq x     (ssget '((0 . "INSERT")))
  11.        x     (ssname x 0)
  12.        name (rjp-getblockname (vlax-ename->vla-object x))
  13.        ss     (ssget "_X" '((0 . "INSERT")))
  14.        n     -1
  15.        out     (ssadd)
  16.      )
  17.    (while (setq e (ssname ss (setq n (1+ n))))
  18.      (if (= (rjp-getblockname (vlax-ename->vla-object e)) name)
  19.    (ssadd e out)
  20.      )
  21.    )
  22. )
  23. (sssetfirst nil out)
  24. (princ)
  25. )
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-7 06:09 , Processed in 0.745732 second(s), 64 queries .

© 2020-2025 乐筑天下

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