乐筑天下

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

有没有好办法对动态图块块名用ssget选择过滤?

[复制链接]

7

主题

132

帖子

9

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
157
发表于 2011-3-9 14:02:00 | 显示全部楼层
可以试试
(setq ss1 (ssget '((0 . "INSERT") (2 . "`*U*") )))
但是没法分辨出不同的动态块
回复

使用道具 举报

12

主题

44

帖子

8

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
90
发表于 2011-3-9 14:30:00 | 显示全部楼层

在萝卜的基础上改了一下(效率低主要是在enamel转换为object上),代码如下:
  1. (defun ssget-dynblk->ents (ss name / ents)
  2.   (if ss
  3.     (vlax-for n        (vla-get-activeselectionset (vla-get-activedocument (vlax-get-acad-object)))
  4.       (if (and (= (vla-get-isdynamicblock n) :vlax-true) (= (vla-get-effectivename n) name))
  5.         (setq ents (cons n ents))
  6.       ) ;_ 结束if
  7.     ) ;_ 结束vlax-for
  8.   ) ;_ 结束if
  9.   ents
  10. ) ;_ 结束defun
  11. (defun C:TT (/ ss ents)
  12.   (vla-eval (vlax-get-acad-object) "Thisdrawing.Activeselectionset.Delete")
  13.   (if (setq ss (ssget '((0 . "INSERT"))))
  14.     (progn (setq ents (ssget-dynblk->ents ss "树 - 英制"))
  15.            (print ents)
  16.     ) ;_ 结束progn
  17.   ) ;_ 结束if
  18.   (princ)
  19. ) ;_ 结束defun
回复

使用道具 举报

7

主题

132

帖子

9

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
157
发表于 2011-3-10 10:40:00 | 显示全部楼层

我这里也有别人的代码分享下,是用两个函数完成的
  1. (defun test ( block )
  2.   (ssget
  3.     (list
  4.       (cons 0 "INSERT")
  5.       (cons 2
  6.         (
  7.           (lambda ( s )
  8.             (foreach anon (LM:AnonymousInstancesof block)
  9.               (setq s (strcat s ",`" anon))
  10.             )
  11.             s
  12.           )
  13.           block
  14.         )
  15.       )
  16.     )
  17.   )
  18. )
  19. (defun LM:AnonymousInstancesof ( block / def rec nme ref lst )
  20.   (while (setq def (tblnext "BLOCK" (null def)))
  21.     (if (= 1 (logand 1 (cdr (assoc 70 def))))
  22.       (progn
  23.         (setq rec
  24.           (entget
  25.             (cdr
  26.               (assoc 330
  27.                 (entget
  28.                   (tblobjname "BLOCK" (setq nme (cdr (assoc 2 def))))
  29.                 )
  30.               )
  31.             )
  32.           )
  33.         )
  34.         (while (setq ref (assoc 331 rec))
  35.           (if
  36.             (and
  37.               (eq block (vla-get-effectivename (vlax-ename->vla-object (cdr ref))))
  38.               (not (member nme lst))
  39.             )
  40.             (setq lst (cons nme lst))
  41.           )
  42.           (setq rec (cdr (member (assoc 331 rec) rec)))
  43.         )
  44.       )
  45.     )
  46.   )
  47.   (reverse lst)
  48. )
最后调用(test "动态块块名"),返回选择集 这是leemac的,但是在图中有表格的时候会没有反应,我自己又重写了一个。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-4 01:35 , Processed in 0.607677 second(s), 56 queries .

© 2020-2025 乐筑天下

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