明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 973|回复: 3

[提问] 关于窗口选择与窗交选择重复计算图元数量的问题

[复制链接]
发表于 2024-2-2 14:55:29 | 显示全部楼层 |阅读模式
用过跟多批量选择的插件,贱人工具箱的不支持选择名称有特殊字符的以及动态块,小菜版选择易功能强大,但对于我需要频繁使用的部分需求来说,小菜版选择易的操作还是相对有些繁琐,所以抽空攒了这么个插件。

今天突然发现了一个小BUG,复现条件如下
输入命令后,窗口选择一次,再窗交选择一次,如果两次选择(两种选择不分先后顺序)的图元中有重复,重复的图元会在特性面板的总选择数量中重复计入。

程序源码、测试文件和问题录屏演示已上传附件,还请各位大佬不吝赐教

本帖子中包含更多资源

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

x
发表于 2024-2-2 16:39:05 来自手机 | 显示全部楼层
N 在执行 ssget 操作的过程中,为选定图元调用 ssnamex 获得容器块和转换矩阵的附加信息。只有通过窗口、窗交点拾取等图形选择方法选定的图元,这一附加信息才可以使用。
与其他对象选择方法不同,:N 可能会返回选择集中的多个同名图元。例如,如果用户选择了一个复杂图元(如 BlockReference、PolygonMesh 或老式多段线)的子图元,那么 ssget 将查看该子图元是否已被选中。不过,ssget 实际上会将主图元(如 BlockReference 和 PolygonMesh)添加到选择集中。这样就会在选择集中出现多个同名图元,而 ssnamex 获得的每个图元的子图元信息各不相同。

发表于 2024-2-2 20:20:19 | 显示全部楼层
  1. (defun xyp-dxf (code e) (cdr (assoc code (entget e))))
  2. (defun GetBn (s1) (vla-get-EffectiveName (vlax-ename->vla-object s1)))
  3. (defun c:XK-KX () ;按块名框选同名快
  4.   (if (and (setq s1 (car (entsel "\请选择一个图块: ")))
  5.            (= (xyp-DXF 0 s1) "INSERT")
  6.            (setq bn (GetBn s1))
  7.            (setq ss (ssget (list '(0 . "insert") (cons 2 bn))))
  8.       )
  9.     (progn
  10.       (sssetfirst nil ss)
  11.       (princ (strcat "\n共选中 |"(itoa (sslength ss))"| 个块,块名 |" bn "| "))
  12.     )
  13.   )
  14.   (princ)
  15. )
  16. (defun c:XK-QX () ;按块名全选同名快
  17.   (if (and (setq s1 (car (entsel "\请选择一个图块: ")))
  18.            (= (xyp-DXF 0 s1) "INSERT")
  19.            (setq bn (GetBn s1))
  20.            (setq ss (ssget "X" (list '(0 . "insert") (cons 2 bn))))
  21.       )
  22.     (progn
  23.       (sssetfirst nil ss)
  24.       (princ (strcat "\n共选中 |"(itoa (sslength ss))"| 个块,块名 |" bn "| "))
  25.     )
  26.   )
  27.   (princ)
  28. )

  29. (defun c:dK-KX () ;按块名框选同名快删除
  30.   (if (and (setq s1 (car (entsel "\请选择一个图块: ")))
  31.            (= (xyp-DXF 0 s1) "INSERT")
  32.            (setq bn (GetBn s1))
  33.            (setq ss (ssget (list '(0 . "insert") (cons 2 bn))))
  34.       )
  35.     (command "erase" ss "")
  36.   )
  37.   (princ)
  38. )
  39. (defun c:dK-QX () ;按块名全选同名快删除
  40.   (if (and (setq s1 (car (entsel "\请选择一个图块: ")))
  41.            (= (xyp-DXF 0 s1) "INSERT")
  42.            (setq bn (GetBn s1))
  43.            (setq ss (ssget "X" (list '(0 . "insert") (cons 2 bn))))
  44.       )
  45.     (command "erase" ss "")
  46.   )
  47.   (princ)
  48. )
发表于 2024-2-3 21:23:31 | 显示全部楼层
看起来bug是因为过滤器实现了,但是没有重构选择集
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 23:28 , Processed in 0.167561 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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