复杂循环
我有一个问题,循环一个函数到前一个点。我写了一个小程序
1、选择图层名称
2、检查是否存在层all ready
如果有
3a。告诉用户它存在
3b。询问他们是否要添加到现有层。
3c。如果要添加,请将其设置为当前。
-如果他们不想添加到它,则返回到选择层名称
4.如果该层不存在,则创建它。
(DEFUN C:SETLAYER ()
(SETQ PREVLAYER(GETVAR "CLAYER"))
**********
(SETQ LAYERNAME(GETSTRING "\n ENTER NAME FOR NEW LAYER : "))
(SETQ CHECKLAYER (TBLSEARCH "LAYER" LAYERNAME ))
( IF CHECKLAYER
(PROGN
(PROMPT "\n LAYER ALREADY EXISTS : ")
(SETQ CONTINUE (GETSTRING "\n ADD TO CURRENT LAYER? : "))
(IF ( = CONTINUE Y )
(COMMAND "-LAYER" "M" LAYERNAME "")
(-------)
)
)
(COMMAND "-LAYER" "M" LAYERNAME "")
)
(PRINC)
)
(PRINC)
在代码中,我想从(------)循环
仅当他们选择N时,才备份到*****。
我希望有人能帮忙。因为我在拔头发。剩下的是什么:x:x:x:x:x
试试这个:您可以根据自己的选择更改函数名。
(DEFUN C:SETLAYER ()
(SETQ PREVLAYER(GETVAR "CLAYER"))
(INPUT)
)
(DEFUN INPUT ()
(SETQ LAYERNAME(GETSTRING "\n ENTER NAME FOR NEW LAYER : "))
(SETQ CHECKLAYER (TBLSEARCH "LAYER" LAYERNAME ))
( IF CHECKLAYER
(PROGN
(PROMPT "\n LAYER ALREADY EXISTS : ")
(SETQ CONTINUE (GETSTRING "\n ADD TO CURRENT LAYER? : "))
(IF ( = CONTINUE Y )
(COMMAND "-LAYER" "M" LAYERNAME "")
(INPUT)
)
)
(COMMAND "-LAYER" "M" LAYERNAME "")
)
(PRINC)
)
(PRINC) 非常感谢你
一直在寻找各种各样的地方,寻找一种特殊的循环功能。
:\没有找到一个tho
再次感谢 这可能会为您提供对循环行为的最大控制:
(defun c:setlayer (/ lay)
(while
(progn
(setq lay (getstring t "\nSpecify Layer Name: "))
(cond ((eq "" lay) nil) ; Exit loop
((not (snvalid lay))
(princ "\n** Invalid Layer Name **"))
((tblsearch "LAYER" lay)
(princ "\n** Layer Already Exists **")
(initget "Yes No")
(if (eq "No" (getkword "\nAdd to Current Layer? <Yes> : "))
nil ; Exit loop
(not (setvar "CLAYER" lay)))) ; Exit loop
(t (command "_.-layer" "_M" lay "") nil)))) ; Exit Loop
(princ))
走的路,李! hrmmm有趣
我知道它的基本功能,但你能解释一下
((非(snvalid lay))
和
((eq“”lay)无)
以及每个部分的工作原理。
我在过去几周才开始使用lisps。
非常感谢
snvalid检查符号表名称中的有效字符
((eq“”lay)nil)表示如果提供了输入或空白信息,则退出循环。
所有这些都是更好的错误捕捉。
很像Buzzard说的,
snvalid将检查不可靠的字符,例如层名称中的*。
如果用户在图层名提示中点击enter,则返回一个空字符串(“”),因此循环将退出。Tbh,它只是一个长包装的测试表达式,没有函数在主“循环”中执行。
我倾向于使用vla add或entmake创建层,因为它更快、更可靠,但如果您刚刚开始,(命令“_.-layer”。)快速简单
页:
[1]