jmerch 发表于 2022-7-6 09:57:35

在Lisp中设置默认值

我创建了一个简单的lisp,可以将某些对象拉伸到完工地板以上的给定高度。现在,我觉得如果它还允许用户输入与我设置的不同的地板高度,那么使用它会更好。我在这上面找不到任何东西。我想要的是,当用户启动命令时,它会显示“当前存根高度为”,其中X是默认值。因此,如果用户继续并单击CAD中的某个点,它将继续执行该命令;如果用户没有继续,则只需键入一个新数字,然后输入,然后继续执行该命令。有道理?
 
这是最初的lisp,它要求用户输入高度,就像我说的那样,很简单。
 
;;; === Stretch Stub - User Input ===
;;; Asks user for height in inches above finished floor to stretch stub
;;; Copyright 2010 Josh Merchant

(defun c:sta (/)
(setq coord "@0,0,")
(setq height (getstring T"\nEnter stub up height in inches AFF:"))
(command "stretch" "c" pause pause "" "node" pause "from" ".z" "0,0,0" "0,0,0" (strcat coord height))
(princ)
)

asos2000 发表于 2022-7-6 10:04:01

此链接可能对您有所帮助

Lee Mac 发表于 2022-7-6 10:08:19

谢谢哈桑
 
JMerch,我建议您使用getdist获得“存根高度”,然后将这个数值转换为字符串,如果您想将其与“coord”变量连接起来。

jmerch 发表于 2022-7-6 10:14:27

麻生太郎,谢谢你的链接。。。我不知道我在想什么,在我问问题之前不去李的网站。
 
李,首先感谢你网站上的教程。现在说到眼前的问题。看最后一个例子,我觉得这就是我需要走的路线(仍然使用getint)。也就是说,我无法让我的strcat读取“ans”。我也用getdist重新做了一遍,但仍然无法让它阅读。
 
(defun c:sta (/)
(setq coord "@0,0,")
(setq *ans*
   (cond
   (
       (getint
         (strcat "\nSpecify Stub Up Height <"
         (itoa
             (setq *ans*
               (cond ( *ans* ) ( 8 ))
             )
         )
         ">: "
         )
       )
   )
   ( *ans* )
   )
)
(princ)
(command "stretch" "c" pause pause "" "node" pause "from" ".z" "0,0,0" "0,0,0" (strcat coord *ans*))
)

Lee Mac 发表于 2022-7-6 10:21:55

不客气,杰默奇
 
提示:想想变量“*ans*”持有什么数据类型,以及“coord”持有什么数据类型。

jmerch 发表于 2022-7-6 10:25:36

 
好的,最初我以为接受itoa是答案,但事实并非如此。我将getint改为getstring,并尝试了另一种方法(strcat“@0,0,”*ans*)。前者奏效了。现在,我今天下午一直在努力学习你的教程(我的眼睛很紧张,大脑不再沉浸在信息中),不知道如何将8设为默认值,用户只需在“输入存根高度”出现后右键单击或按enter键。
 
(defun c:sta (/)
(setq coord "@0,0,")
(setq *ans*
(cond
   (
   (getstring
       (strcat "\nEnter Stub Up Height <"
         (setq *ans*
             (cond ( *ans* ) ( 8 ))
         )
         ">: "
       )
   )
   )
   ( *ans* )
)
)
(princ)
(command "stretch" "c" pause pause "" "node" pause "from" ".z" "0,0,0" "0,0,0" (strcat coord *ans*))
)

pBe 发表于 2022-7-6 10:32:37

getstring-->“8”
getint------>8
 
命令:(setq x(getint))

命令:(setq x(getstring))
""

Lee Mac 发表于 2022-7-6 10:33:38

如果要使用getint,需要记住变量*ans*包含一个整数。如果要继续使用将其与“坐标”字符串连接的方法,则需要进行转换:
 
这可能看起来有点多余,正如你可能会说的——“为什么不把*ans*存储为字符串?”则不需要在提示符/命令中进行转换。但是,在提示输入整数时,将默认值存储为整数似乎更符合逻辑。
 
然而,在这种情况下,我倾向于使用getdist:
 
每个人都有一个
 

pBe 发表于 2022-7-6 10:37:55

所以你给了李一个建议,有一段时间我觉得你只需要给点提示就可以了
新年快乐,我的朋友

Lee Mac 发表于 2022-7-6 10:47:02

 
事实上,我不能再让他受苦了
 
 
对你也是
页: [1] 2
查看完整版本: 在Lisp中设置默认值