明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1400|回复: 7

[提问] 关于过滤的块的程序

[复制链接]
发表于 2023-9-13 15:40:35 | 显示全部楼层 |阅读模式
下面这个程序是完整的,我只是个搬运工,tt命令是我改的,为了方便一些。

输入命令后,选择要选择的块,支持动态快,然后框选所有,就会过滤排除掉其它块了。

但这个程序对我的可见性块(动态快)好像不起作用,也就是无法过滤一个动态快中不同的可见性块,哪位大神出来帮忙修改一下呢

程序如下:


(vl-load-com)
(defun c:tt(/ BLKNAME EN ENT LST OBJ SS SS2 TMPBLKNAME TMPOBJ)
  (if (setq ent (car (entsel "请选择需要过滤的参考图块: ")))
    (progn
      (setq obj (vlax-ename->vla-object ent))
      ;;先获取参考块的真实块名
      (setq blkName (vla-get-EffectiveName obj))
      ;;如果是动态块执行添加动态块的匿名块名进行过滤
      (if (= (vla-get-IsDynamicBlock obj) :vlax-true)
        (progn
          ;;全选所有匿名块
          (if (setq ss (ssget "x" '((0 . "insert")(2 . "`*U*"))))
            (progn
              (setq lst '())
              ;;循环判定匿名块的块名是否是参考块的块名
              (while (setq en (ssname ss 0))
                (setq Tmpobj (vlax-ename->vla-object en))
                (setq TmpblkName (vla-get-EffectiveName Tmpobj))
                (if (= TmpblkName blkName)
                  (progn
                    ;;添加到lst表中
                    (setq lst (cons (vla-get-Name Tmpobj) lst))
                  )
                )
                (ssdel en ss)
              )
              ;;反转表,可省略
              (setq lst (reverse lst))
              (if lst
                (progn
                  ;;将匿名块的块名表连接为一个字符串,并处理*问题.
                  (setq blkName (strcat (apply 'strcat (mapcar '(lambda(x) (strcat "`" x ",")) lst)) blkName))
                )
              )
            )
          )
        )
      )
      ;;执行过滤选择
      (setq ss2 (ssget (list '(0 . "insert") (cons 2 blkName))))
      (if (and ss2 (= 0 (getvar "cmdactive"))) (command "._select" ss2 "" "._pselect" ss2 ""))
    )
  )
)


发表于 2023-9-13 16:13:31 | 显示全部楼层
上图测试呢, 你这个都全选了直接通过比较块名,不是需要的排除
就不需要第二步执行的操作了 (setq ss2 (ssget (list '(0 . "insert") (cons 2 blkName))))
发表于 2023-9-13 16:31:27 | 显示全部楼层
本帖最后由 jun353835273 于 2023-9-13 16:36 编辑
  1. (vl-load-com)
  2. (defun c:tt1(/ i BLKNAME EN ENT LST OBJ SS SS2 TMPBLKNAME TMPOBJ)
  3.   (if (setq ent (car (entsel "请选择需要过滤的参考图块: ")))
  4.     (progn
  5.       (setq obj (vlax-ename->vla-object ent))
  6.       ;;先获取参考块的真实块名
  7.       (setq blkName (vla-get-EffectiveName obj))
  8.       ;;如果是动态块执行添加动态块的匿名块名进行过滤
  9.       (if (= (vla-get-IsDynamicBlock obj) :vlax-true)
  10.         (progn
  11.           ;;全选所有匿名块
  12.           (if (setq ss (ssget "x" '((0 . "insert")(2 . "`*U*"))))
  13.             (progn
  14.               ;;循环判定匿名块的块名是否是参考块的块名
  15.         (setq i -1)
  16.         (setq lst nil)
  17.               (while (setq en (ssname ss (setq i (1+ i))))
  18.                 (setq Tmpobj (vlax-ename->vla-object en))
  19.                 (setq TmpblkName (vla-get-EffectiveName Tmpobj))
  20.                 (if (/= TmpblkName blkName)
  21.                     (setq lst (cons en lst))
  22.                   )
  23.                 )
  24.          (and lst (mapcar (function(lambda(x) (setq ss (ssdel x ss)))) lst))
  25.               )
  26.             )
  27.           )
  28.   (progn
  29.           ;;全选所有名块
  30.           (setq ss (ssget "x" (list '(0 . "insert") (cons 2 blkName))))
  31.           )
  32.         )
  33.       )
  34.       ;;执行过滤选择
  35.       (if (and ss (= 0 (getvar "cmdactive"))) (command "._select" ss "" "._pselect" ss ""))
  36.     )
  37.   )

  38. 改了下,这种结构应该比之前的好一点,不然strcat 那个块名如果太多了,估计也有问题。


本帖子中包含更多资源

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

x
 楼主| 发表于 2023-9-13 18:38:33 | 显示全部楼层

大神,我回头试试
发表于 2023-9-15 23:11:58 | 显示全部楼层
本帖最后由 lingduwx 于 2023-9-15 23:13 编辑

大哥你好,请问如果这种比较复杂的能否一次选择呢
这个是截图详见cad



本帖子中包含更多资源

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

x
发表于 2023-9-16 07:27:42 来自手机 | 显示全部楼层
不懂这个有什么用?快速选择不一样吗?
发表于 2023-9-16 09:22:58 | 显示全部楼层
lingduwx 发表于 2023-9-15 23:11
大哥你好,请问如果这种比较复杂的能否一次选择呢
这个是截图详见cad

块名不一样,应该可以用ssget先选一次需要的那几种类型,后面在过滤
 楼主| 发表于 2023-11-10 15:46:52 | 显示全部楼层

这个程序有点问题,动态不支持了哦
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-17 10:24 , Processed in 0.285881 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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