bpdav1 发表于 2022-7-6 07:39:38

使用列表设置变量

您好,我正在学习Autolisp,并试图创建一个简单的程序,但遇到了以下问题。我试图绘制一条用户定义长度的线,因此希望创建一个变量,允许用户输入线的长度。
 
当我试图给“p1”赋值时,没有引号,它会说“错误:坏函数:”如果我把引号放进去(如下所示),它会使第一个条目字面上是字符串“Length”,而不是可变长度的值。我想用用户输入的值分配p1的第一个条目,因此如果在长度中输入“1000”,p1将显示为“1000,0”,因此我可以将其用作Line命令的坐标。
 
(defun C:Line (/ Length p1)
(setq Length (getint "Enter Length of Line: "))
(setq p1 (list '(Length 0)))
(princ p1)
(princ)
)

MSasu 发表于 2022-7-6 08:09:50

这是因为使用了quote而不是LIST函数来计算列表,因为该列表包含一个变量。
(defun C:LineX ( / theLength p1)
(setq theLength (getint "Enter Length of Line: "))
(setq p1 (list (list theLength 0)))
(princ p1)
(princ)
)
此外,在为变量/函数指定名称时,请特别注意,并避免使用保留名称!
在代码中,您将重新定义内置的行命令,并替换长度函数。这可能会产生严重错误。我已经重命名了上面例子中的那些。
 
然而,要获得如您所说的字符串,您需要使用STRCAT函数;注意只接受字符串作为参数,所以用户的输入应该被转换。
(defun C:LineX ( / theLength p1 )
(setq theLength (getint "Enter Length of Line: "))
(setq p1 (strcat (itoa theLength) ",0"))
(princ p1)
(princ)
)

MSasu 发表于 2022-7-6 08:47:42

我重写了你的例行公事:
(defun C:LineX( / theLength pointStart pointEnd )
(if (and (setq pointStart (getpoint "\nStarting point: "))
         (setq theLength(getint "\nEnter Length of Line: ")))
(progn
(setq pointEnd (polar pointStart 0.0 theLength))
(command "_.LINE" "_non" pointStart "_non" pointEnd "")
)
)
(princ)
)
如果要调整直线的角度,应在帮助中检查极轴函数。
页: [1]
查看完整版本: 使用列表设置变量