Zykl0 发表于 2022-7-6 17:12:46

我的基本路线需要帮助

我试着做一个例程(我的第一个),每次调用函数时都切换两层状态。
 
你能告诉我代码有什么问题吗?
 
非常感谢。

neekcotrack 发表于 2022-7-6 17:20:12


(defun c:layswitch (/ layvar)
(setvar "layvar" 1)
(if (=(getvar "layvar") 1)
(command "layer" "A" "R" "T1" "")
(setvar "layvar" 0)
) ;if
(if (=(getvar "layvar") 0)
(command "layer" "A" "R" "T2" "")
(setvar "layvar" 1)
) ;if
(princ)
);defun

 
看起来很快,这就是我看到的,加上什么是LAYVAR?

Zykl0 发表于 2022-7-6 17:22:50

哼一个我创建的变量?对于每次调用函数时在layerstate T1和T2之间切换,是否良好?
 
编辑:这显然与layvar无关。。。我在某个地方读到需要调用defun()括号中的变量。但我想我误解了

Lee Mac 发表于 2022-7-6 17:27:15

 
您可能应该使用“setenv”来设置系统环境变量,或者只使用通常的“setq”来设置局部变量。

Zykl0 发表于 2022-7-6 17:29:23

好的,请问语法有什么问题?
 

(defun c:layswitch ()
(setq "layvar" 1)
(if ("layvar" = 1)
(command "layer" "A" "R" "T1" "")
(setq "layvar" 0)
) ;if
(if ("layvar" = 0)
(command "layer" "A" "R" "T2" "")
(setq "layvar" 1)
) ;if
(princ)
);defun

Lee Mac 发表于 2022-7-6 17:32:07

使用“setq”时,不要在变量名周围使用引号,此外,为了检查等式,请使用:
 
(= xxxx yyy)
 
不是:
 
("xxxx" = yyy)
 
(defun c:layswitch (/ layvar)
(setq layvar 1)
(if (= layvar 1)
(command "layer" "A" "R" "T1" "")
(setq layvar 0)
) ;if
(if (= layvar 0)
(command "layer" "A" "R" "T2" "")
(setq layvar 1)
) ;if
(princ)
);defun

Zykl0 发表于 2022-7-6 17:37:34

太好了谢谢
 
这部分工作正常,
 
现在,每次我运行该函数时,它只将我的层状态设置为T1(而不是T2)
我想这是因为第2行变量总是设置为1。
 
知道吗?

flowerrobot 发表于 2022-7-6 17:42:15

正确,这是你的问题
你把layvar设置为1,所以它总是1
我不确定你想做什么,(咖啡还没有开始)
对不起,我帮不了你多少,但是
你想换层吗?
比如,如果电流层是t1,那么转到t2,如果电流层是t2,那么转到t1?
 
当做

Zykl0 发表于 2022-7-6 17:45:26

 
是的,这就是我要做的

ASMI 发表于 2022-7-6 17:46:44

LISP中的布尔值为nil(false),T(true)不是0和1。在这种情况下,变量“layvar”必须是全局变量。在real LISP中:
 
7
页: [1] 2
查看完整版本: 我的基本路线需要帮助