chavlji 发表于 2022-7-6 14:50:24

直到按下enter?

我想做一个“多”类的命令,将不断要求用户“选择对象”,改变它,并要求另一个。直到用户点击“回车”或“空格”(当然也可以是esc,但这不是重点)。
 
类似这样:
(while (setq SS (ssget)) (ChangeObj SS) )
 
但即使用户试图选择某个内容,但他单击了空白区域->选择为零,此代码也会存在。我不想那样。
 
Trim命令的工作方式与我希望的一样:
它会提示用户选择要剪切的边。
即使用户点击空白区域,它也会要求用户再次选择边缘。
直到用户点击“回车”、“空格”或“Esc”。
 
怎么做?

CmdrDuh 发表于 2022-7-6 15:08:11

我不是一个Lisp程序的专家,但你想要什么都可以做到。我有一个多圆角命令,它的工作原理与您的要求类似。也许这会给你一些启示
(DEFUN C:MFILT ()
(setvar "filletrad" 0.125)
(SETQ A (ENTSEL "\nPick Master Line: ")
B (ENTSEL "\nPick Secondary Line: ")
)
(COMMAND "FILLET" A B)
(WHILE B
   (SETQ B (ENTSEL "\nPick Secondary Line: "))
   (COMMAND "FILLET" A B)
)
)

alanjt 发表于 2022-7-6 15:24:07

 
 
只有右键单击或选择某个内容,ssget才会退出。
如果您正在寻找单选样式,这将起作用:
(setvar "errno" 0)
(while (and (/= (getvar "errno") 52)
         (not Ent)
         )
(setq Ent (entsel "\nSelect some stuff: "))
(princ "\nMissed, try again.")
)

Lee Mac 发表于 2022-7-6 15:38:07

如果您真的想要多个选择,但您的函数使用了单个ENT:
 
大概
 

(setvar "errno" 0)
(while (and (/= (getvar "errno") 52)
       (not ss))
(setq ss (ssget)))
(mapcar    'ChangeObj
(vl-remove-if 'listp
   (mapcar 'cadr (ssnamex ss))))

 
艾伦,你有关于“errno”变量的信息吗?我从未真正使用过它,我想了解更多
 
干杯
 

David Bethel 发表于 2022-7-6 15:47:15

李,
 
这是我对厄尔诺的看法。多年来,人们一直怀疑它的可靠性。也许这已经改变了一些。此外,它是一个关联列表,而不是位标志。
 
 
大卫

Lee Mac 发表于 2022-7-6 15:50:40

非常感谢大卫,这正是我想要的-谢谢你的时间
页: [1]
查看完整版本: 直到按下enter?