ollie 发表于 2022-7-6 14:34:38

使用variabl的SSet过滤器列表

大家好,
 
我曾多次尝试在过滤器列表中使用变量而不是字符串,但都没有成功
 
(setq sset (ssget "X" ' ((2 . "BLOCKNAME"))))
;This works fine

(setq BLOCKNAME "Testblock")
(setq sset (ssget "X" ' (2 . BLOCKNAME))))
;this returns an error along the lines of: Bad filter in ssget
 
我有什么遗漏吗?
 
谢谢
奥利

jammie 发表于 2022-7-6 14:58:19

奥利,
 
如果要将变量传递给选择集,则需要使用列表而不是引号
 
这应该行得通
 
(setq BLOCKNAME "Testblock")
(setq sset (ssget "X" (list (cons 2 BLOCKNAME))))
 
LIST和QUOTE之间的主要区别在于,QUOTE返回一个表达式而不进行求值。使用LIST可以在创建实际列表之前计算所有表达式
 
 
 
在您的第一个示例中,您可以声明要搜索的块名。无需计算任何内容,AutoCAD只需假设选择过滤器正确,并搜索相关对象
 
 
在第二个示例中,您试图将变量传递到选择集中。为了理解这一点,AutoCAD首先需要评估过滤器,然后搜索对象。在这种情况下,列表是合适的
 
希望这有点道理
 
当做
 
杰米

ollie 发表于 2022-7-6 15:18:48

杰米:谢谢,效果很好。还感谢您详细介绍了它的工作原理。我从中学到了很多
 
 
 
奥利

Freerefill 发表于 2022-7-6 15:34:12

有件有趣的事。尝试键入:
 
(键入“某物”)
 
在命令行中,查看返回的内容。将其与以下内容进行比较:
 
(键入“某物”)
 
此外,请尝试在AutoLISP帮助文件中查找(vl符号名称)和(读取)函数。

jammie 发表于 2022-7-6 15:41:34

 
没问题,欢迎光临!很乐意帮忙
 
杰米
页: [1]
查看完整版本: 使用variabl的SSet过滤器列表