wanchr 发表于 2023-12-19 16:53:07

我的选择集问题没有解决,来个帮帮我,请请。

(defun c:aa()
;(setq filter '((8 . "XS-8#基础$0$pile")))
(setq filter '((8 . "0")))
(setq sel (ssget filter)) ; 使用过滤器选择实体
(if sel
    (progn
      (setq num (sslength sel))
      (princ (strcat"\n 一共" (itoa num)"个"))
      (princ))))

2个图层名,上面哪个是选不中的,

wzg356 发表于 2023-12-19 21:32:39

本帖最后由 wzg356 于 2023-12-19 21:45 编辑

wanchr 发表于 2023-12-19 21:02
(setq filters(list(cons 0(transsfilter(cdr(assoc 0(entget e)))))
                  (cons 2(transsfilter(cdr(ass ...
只针对字符串--文本进行转换 ,先搞懂通配符、命名规则--知道为什么要转义(比如文本中的#是代表其他意义还是只是字符#本身),再去找寻方法-才知道这个函数的意义
数字或符号类不管
比如8是整数,8.0是实数,“8”是文本
(setq ee "8")---ee是字符串
(car(entsel))---是图元名-特殊符号,组码0

先加强基本功
查看组码(entget(car(entsel)))
组码有坐标-表 、整数 、实数 字符串、图元名等
100、5、-1码等不能当过滤条件,比如:5句柄 -1图元名指向的是唯一的实体本身

wanchr 发表于 2023-12-19 21:02:17

wzg356 发表于 2023-12-19 19:28
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=189098&page=1#pid966058

(setq e(car(entsel)))
...

(setq filters(list(cons 0(transsfilter(cdr(assoc 0(entget e)))))
                  (cons 2(transsfilter(cdr(assoc 2(entget e)))))
                  (cons 8(transsfilter(cdr(assoc 8(entget e)))))
                  (cons 100(transsfilter(cdr(assoc 100(entget e)))))))
我依据你的代码写了四个条件,你选对的时候能运行,当少项的时候会报错,怎么让他少一项就3项,少二项就按2项选择呢。

wanchr 发表于 2023-12-20 08:48:09

本帖最后由 wanchr 于 2023-12-20 10:01 编辑

wzg356 发表于 2023-12-19 21:32
只针对字符串--文本进行转换 ,先搞懂通配符、命名规则--知道为什么要转义(比如文本中的#是代表其他意义 ...
(setq filters '())
(if (setq aa(cons 2(transsfilter(cdr(assoc 2(entget e))))))
(setq filters(cons aa filters))
(setq filters)))
这句(setq aa(cons 2(transsfilter(cdr(assoc 2(entget e))))))不能当if条件,当2组元不存在它返回的是个什么东东


找到了,用(car (assoc 2(entget e)))能当条件。

tigcat 发表于 2023-12-19 17:32:40


(defun c:aa()
;(setq filter '((8 . "XS-8`#基础`$0`$pile")))
(setq filter '((8 . "0")))
(setq sel (ssget filter)) ; 使用过滤器选择实体
(if sel
    (progn
      (setq num (sslength sel))
      (princ (strcat"\n 一共" (itoa num)"个"))
      (princ))))

wanchr 发表于 2023-12-19 17:44:33

tigcat 发表于 2023-12-19 17:32
(defun c:aa()
;(setq filter '((8 . "XS-8`#基础`$0`$pile")))
(setq filter '((8 . "0")))


确实是这个#反引号,$上的反引号可以去掉,能说说这是个什么问题吗,或者还有其字符吗

Andyhon 发表于 2023-12-19 18:20:46

http://www.lee-mac.com/escapewildcards.html

wzg356 发表于 2023-12-19 18:58:21

怎么可能
那个转义函数不是已费给你了吗
(ssget "x" '((8 . "XS`-8`#基础$0$pile")))

wanchr 发表于 2023-12-19 19:15:56

本帖最后由 wanchr 于 2023-12-19 19:18 编辑

wzg356 发表于 2023-12-19 18:58
怎么可能
那个转义函数不是已费给你了吗
(ssget "x" '((8 . "XS`-8`#基础$0$pile")))
你的我运行不通呢,就是找原因啊,
现在我正在理解你的函数,
(setq filter '((8 . "XS-8#基础$0$pile")))我把这个用你的函数转成
(8 . "XS`-8`#基础$0$pile")了,可是他好像不能直接加到条件里啊,
(setq sel (ssget filter)) 怎么加回过滤器报错

wzg356 发表于 2023-12-19 19:28:09

本帖最后由 wzg356 于 2023-12-19 19:29 编辑

wanchr 发表于 2023-12-19 19:15
你的我运行不通呢,就是找原因啊,
现在我正在理解你的函数,
(setq filter '((8 . "XS-8#基础$0$pile" ...
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=189098&page=1#pid966058

(setq e(car(entsel)))
(setq filters(list(cons 8(transsfilter(cdr(assoc 8(entget e)))))))
(ssget filters)

xyp1964 发表于 2023-12-19 19:30:17

(defun c:tt ()
(setq qf '((8 . "XS-8`#基础$0$pile")))
(if (setq ss (ssget qf))
    (progn
      (setq nn (sslength ss))
      (princ (strcat "\n 一共" (itoa nn) "个"))
    )
)
(princ)
)

wanchr 发表于 2023-12-19 19:51:36

wzg356 发表于 2023-12-19 19:28
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=189098&page=1#pid966058

(setq e(car(entsel)))
...

果然好了,谢谢你。
页: [1] 2
查看完整版本: 我的选择集问题没有解决,来个帮帮我,请请。