Lwcdgl 发表于 2020-8-24 15:55:03

cond 函数用法

请教大家,程式运行到Cond这里无法按满足条件执行对应的操作是什么原因
(defun c:aq()
(setq en(entget(car(entsel"\n选择圆:"))))
(setq cid(cdr(assoc 10 en)))
(setq cir(cdr(assoc 40 en)))
(setq n(getint"\n输入多边形<3边>:"))
(initget "C I c i")
(setq side(GETKWORD"\n[内接I]或[外切C]:"))
(setq side(strcase side))
(COND ((setq side C)(command "POLYGON"n cid "c" cir))
        ((setq side I)(command "POLYGON"n cid "I" cir))
        (T (ALERT "未选择圆!"))
)
)

G〆h 发表于 2020-8-24 16:12:27

①(initget "C I")
②尽量设个默认值,如右键为C (if (null key ) (setq key "C"))
③Cond 中,只能是比较符,如(= side C)

Andyhon 发表于 2020-8-24 16:16:30

Try
(setq side C)
--->
(= side "C")

G〆h 发表于 2020-8-24 16:23:53

改进了下,你看下
(defun c:aq(/ en cid cir n side)
(setq en(entget(car(entsel"\n选择圆:"))))
(setq cid(cdr(assoc 10 en)))
(setq cir(cdr(assoc 40 en)))
        (if (not (setq n(getint"\n输入多边形<3边>:")))
                        (setq n 3)
        )
(initget "C I")
(setq side(GETKWORD"\n[内接I]或[外切C]:"))
(if (null side ) (setq side "C"))
        (setq side(strcase side))
(COND
                ((= side "C")(command "POLYGON" n cid "c" cir))
                ((= side "I")(command "POLYGON" n cid "I" cir))
                (T (ALERT "未选择圆!"))
)
)

Lwcdgl 发表于 2020-8-24 16:24:27

Andyhon 发表于 2020-8-24 16:16
Try
(setq side C)
--->


是这个问题导致无法执行,谢谢指教

muwind 发表于 2020-8-24 21:46:23

不知道你到底怎么理解的 (setq side C) ,还是提醒下:
在你的原代码中C 是个变量,本例程中还是没有定义的空变量,也就是nil值 (如果其他例程中没有定义过,因为是全局变量所以提醒下),把变量C的值赋给side变量, 也就是前面两句话无论如何都是nil ,这种操作有点迷茫了,
看您不习惯定义局部变量,如果您在其他例程中定义了C值,到这里会直接赋值给side,这时候会给你惊喜。但是肯定不是你想要的结果

nijiea123 发表于 2020-8-25 09:53:53

来留个名 打个卡

Lwcdgl 发表于 2020-8-25 10:05:07

G〆h 发表于 2020-8-24 16:23
改进了下,你看下
(defun c:aq(/ en cid cir n side)
(setq en(entget(car(entsel"\n选择圆:"))))


你这个改得很好用,谢谢

Lwcdgl 发表于 2020-8-25 10:06:59

muwind 发表于 2020-8-24 21:46
不知道你到底怎么理解的 (setq side C) ,还是提醒下:
在你的原代码中C 是个变量,本例程中还是没有定义 ...

是的,我确实没有定义局部变量的习惯,以后会注意,谢谢提醒.
页: [1]
查看完整版本: cond 函数用法