循环直到层“0”上出现圆弧
我正在编写一个lisp,它将提示用户选择一个弧。。。我遇到的问题是,我不知道如何确保用户通过循环选择位于层“0”上的圆弧,直到满足该标准。提前感谢您的帮助。 KRBeckman,
根据您的简要描述,似乎您可能希望关闭除“0”之外的所有层,以便用户无法从错误的层中进行选择。还是我不明白他的意图? 怎么样:
(ssget "_:S" '((0 . "ARC") (8 . "0")))
或者更具体地说,在循环中:
(while (not ss)
(setq ss (ssget "_:S" '((0 . "ARC") (8 . "0")))))
但一定要本地化“ss”。
你介意解释一下while函数是如何工作的吗?更具体地说,为什么
使其循环。 在用户做出有效选择之前,变量“ss”为零,因此(不是ss)返回T,迫使While继续。
为了尽可能简洁地解释WHILE,在每个循环之前对测试表达式进行求值,并且仅当文本表达式返回非nil值时才对测试表达式后面的语句进行求值。 啊,当我看到(不是ss)时,我想它是在检查ss是否等于零,当用户没有选择正确类型的对象时,这将是错误的。我现在明白了。。。(非ss)检查ss是否等于零。和我想象的有点倒退,但我明白了。那么你可以用(=ss nil)替换(不是ss),对吗?
是的,但没有那么优雅 对,我只是想确定我做对了。我必须开始使用它。再次感谢您的帮助。 不要忘记额外的编码。 如果你更喜欢entsel的行为,还有两种方法:
(while
(progn
(setq ent (car (entsel "\nSelect Arc: ")))
(cond ((eq 'ENAME (type ent))
(if (not (and (eq "ARC" (cdr (assoc 0 (entget ent))))
(eq "0" (cdr (assoc 8 (entget ent))))))
(princ "\n** Object is not an Arc on Layer \"0\" **")))
((princ "\n** Nothing Selected **")))))
(while (not ss)
(setq ss (ssget "_+.:E:S" '((0 . "ARC") (8 . "0")))))
李
页:
[1]
2