明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1472|回复: 12

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

[复制链接]
发表于 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个图层名,上面哪个是选不中的,

本帖子中包含更多资源

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

x
发表于 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图元名指向的是唯一的实体本身
 楼主| 发表于 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项选择呢。
 楼主| 发表于 2023-12-20 08:48:09 | 显示全部楼层
本帖最后由 wanchr 于 2023-12-20 10:01 编辑
wzg356 发表于 2023-12-19 21:32
只针对字符串--文本进行转换 ,先搞懂通配符、命名规则--知道为什么要转义(比如文本中的#是代表其他意义 ...
  1. (setq filters '())
  2.   (if (setq aa(cons 2(transsfilter(cdr(assoc 2(entget e))))))
  3.   (setq filters(cons aa filters))
  4.   (setq filters)))

这句(setq aa(cons 2(transsfilter(cdr(assoc 2(entget e))))))不能当if条件,当2组元不存在它返回的是个什么东东


找到了,用(car (assoc 2(entget e)))能当条件。
发表于 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))))
 楼主| 发表于 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")))

确实是这个#反引号,$上的反引号可以去掉,能说说这是个什么问题吗,或者还有其字符吗
发表于 2023-12-19 18:20:46 | 显示全部楼层
发表于 2023-12-19 18:58:21 | 显示全部楼层
怎么可能
那个转义函数不是已费给你了吗
(ssget "x" '((8 . "XS`-8`#基础$0$pile")))
 楼主| 发表于 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)) 怎么加回过滤器报错
发表于 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?mo ... mp;page=1#pid966058

(setq e(car(entsel)))
(setq filters(list(cons 8(transsfilter(cdr(assoc 8(entget e)))))))
(ssget filters)
发表于 2023-12-19 19:30:17 | 显示全部楼层
  1. (defun c:tt ()
  2.   (setq qf '((8 . "XS-8`#基础$0$pile")))
  3.   (if (setq ss (ssget qf))
  4.     (progn
  5.       (setq nn (sslength ss))
  6.       (princ (strcat "\n 一共" (itoa nn) "个"))
  7.     )
  8.   )
  9.   (princ)
  10. )
 楼主| 发表于 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)))
...

果然好了,谢谢你。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-26 02:47 , Processed in 0.264062 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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