使用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
我有什么遗漏吗?
谢谢
奥利 奥利,
如果要将变量传递给选择集,则需要使用列表而不是引号
这应该行得通
(setq BLOCKNAME "Testblock")
(setq sset (ssget "X" (list (cons 2 BLOCKNAME))))
LIST和QUOTE之间的主要区别在于,QUOTE返回一个表达式而不进行求值。使用LIST可以在创建实际列表之前计算所有表达式
在您的第一个示例中,您可以声明要搜索的块名。无需计算任何内容,AutoCAD只需假设选择过滤器正确,并搜索相关对象
在第二个示例中,您试图将变量传递到选择集中。为了理解这一点,AutoCAD首先需要评估过滤器,然后搜索对象。在这种情况下,列表是合适的
希望这有点道理
当做
杰米 杰米:谢谢,效果很好。还感谢您详细介绍了它的工作原理。我从中学到了很多
奥利 有件有趣的事。尝试键入:
(键入“某物”)
在命令行中,查看返回的内容。将其与以下内容进行比较:
(键入“某物”)
此外,请尝试在AutoLISP帮助文件中查找(vl符号名称)和(读取)函数。
没问题,欢迎光临!很乐意帮忙
杰米
页:
[1]