竹天 发表于 2024-2-2 14:55:29

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

用过跟多批量选择的插件,贱人工具箱的不支持选择名称有特殊字符的以及动态块,小菜版选择易功能强大,但对于我需要频繁使用的部分需求来说,小菜版选择易的操作还是相对有些繁琐,所以抽空攒了这么个插件。

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

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

烟花丝雨 发表于 2024-2-2 16:39:05

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

xyp1964 发表于 2024-2-2 20:20:19


(defun xyp-dxf (code e) (cdr (assoc code (entget e))))
(defun GetBn (s1) (vla-get-EffectiveName (vlax-ename->vla-object s1)))
(defun c:XK-KX () ;按块名框选同名快
(if (and (setq s1 (car (entsel "\请选择一个图块: ")))
           (= (xyp-DXF 0 s1) "INSERT")
           (setq bn (GetBn s1))
           (setq ss (ssget (list '(0 . "insert") (cons 2 bn))))
      )
    (progn
      (sssetfirst nil ss)
      (princ (strcat "\n共选中 |"(itoa (sslength ss))"| 个块,块名 |" bn "| "))
    )
)
(princ)
)
(defun c:XK-QX () ;按块名全选同名快
(if (and (setq s1 (car (entsel "\请选择一个图块: ")))
           (= (xyp-DXF 0 s1) "INSERT")
           (setq bn (GetBn s1))
           (setq ss (ssget "X" (list '(0 . "insert") (cons 2 bn))))
      )
    (progn
      (sssetfirst nil ss)
      (princ (strcat "\n共选中 |"(itoa (sslength ss))"| 个块,块名 |" bn "| "))
    )
)
(princ)
)

(defun c:dK-KX () ;按块名框选同名快删除
(if (and (setq s1 (car (entsel "\请选择一个图块: ")))
           (= (xyp-DXF 0 s1) "INSERT")
           (setq bn (GetBn s1))
           (setq ss (ssget (list '(0 . "insert") (cons 2 bn))))
      )
    (command "erase" ss "")
)
(princ)
)
(defun c:dK-QX () ;按块名全选同名快删除
(if (and (setq s1 (car (entsel "\请选择一个图块: ")))
           (= (xyp-DXF 0 s1) "INSERT")
           (setq bn (GetBn s1))
           (setq ss (ssget "X" (list '(0 . "insert") (cons 2 bn))))
      )
    (command "erase" ss "")
)
(princ)
)

你有种再说一遍 发表于 2024-2-3 21:23:31

看起来bug是因为过滤器实现了,但是没有重构选择集
页: [1]
查看完整版本: 关于窗口选择与窗交选择重复计算图元数量的问题