teknomatika 发表于 2022-7-6 07:21:27

如何继续执行t

尊敬的各位大师。
将UCS“OB”设置为继续执行例程后?
一旦完成循环,如何重置以前的UCS?
 
;;teknomatika
(defun c:asna (/ hdist vdist divn distseg pti1 pts1 pti2)
(command "ucs" "OB" "pause" "");;The execution is stopping here.
(setq hdist (getdist "\nHorizontal Distance: "))
(setq vdist(getdist "\nVertical Distance "))
(setq divn (getint "\nDivisons Number: "))
(setq distseg (/ hdist divn))
(setq pti1 (getpoint "\nStart Point: "))
(setq pts1 (list (+(car pti1)distseg)(+(cadr pti1)vdist)(caddr pti1)))
(setq pti2 (list (+(car pti1)distseg)(cadr pti1)(caddr pti1)))
(repeat divn
(command "_.line" "_non" pti1 "_non" pts1 "_non" pti2 "_non""")
(setq pti1 (list (+(car pti1)distseg)(cadr pti1)(caddr pti1)))
(setq pts1 (list (+(car pts1)distseg)(cadr pts1)(caddr pti1)))
(setq pti2 (list (+(car pti1)distseg)(-(cadr pts1)vdist)(caddr pti1)))   
(princ)
);repeat
)
(prompt "\nTo invoque command type ASNA ")

Lee Mac 发表于 2022-7-6 07:29:52

(command "_.ucs" "_P")

teknomatika 发表于 2022-7-6 07:36:21

 
李,
那,回到以前的UCS?
但是在设置UCS“OB”后允许继续执行例程?
 
(command "ucs" "OB" "pause" "");;The execution is stopping here.

MSasu 发表于 2022-7-6 07:39:06

你需要这样写:
(command "_UCS" "_OB" pause)

teknomatika 发表于 2022-7-6 07:42:31

储罐。
Ok有效。但它以一个奇怪的“命令:零”结束
是这样吗?
 
 
;;teknomatika
(defun c:asna (/ oldclay hdist vdist divn distseg pti1 pts1 pti2)
(setq oldclay (getvar "clayer"))
(command "layer" "new" "asnas" "color" "8" "asnas" "")
(command "layer" "set" "asnas" "")
;;(command "_.ucs" "_P");; Not work
(command "_UCS" "_OB" pause)
(setq hdist (getdist "\nHorizontal Distance: "))
(setq vdist(getdist "\nVertical Distance "))
(setq divn (getint "\nDivisons Number: "))
(setq distseg (/ hdist divn))
(setq pti1 (getpoint "\nStart Point: "))
(setq pts1 (list (+(car pti1)distseg)(+(cadr pti1)vdist)(caddr pti1)))
(setq pti2 (list (+(car pti1)distseg)(cadr pti1)(caddr pti1)))
(repeat divn
(command "_.line" "_non" pti1 "_non" pts1 "_non" pti2 "_non""")
(setq pti1 (list (+(car pti1)distseg)(cadr pti1)(caddr pti1)))
(setq pts1 (list (+(car pts1)distseg)(cadr pts1)(caddr pti1)))
(setq pti2 (list (+(car pti1)distseg)(-(cadr pts1)vdist)(caddr pti1)))   
(princ)
);repeat
(setvar "clayer" oldclay)
(command "_.ucs" "_P")
)
(prompt "\nTo invoque command type ASNA ")

MSasu 发表于 2022-7-6 07:47:37

我对你的代码做了一些修改:
 
[列表]
[*]结束命令调用时,无需禁用AutoOsnap,
[*]重复PRINC调用没有用
[*]为了让例程悄悄退出,您需要添加一个PRINC调用作为最后一个语句;这将消除最后的零。
[/列表]
...
(command "_.line" "_non" pti1 "_non" pts1 "_non" pti2 "_non" "")
(setq pti1 (list (+(car pti1)distseg)(cadr pti1)(caddr pti1)))
(setq pts1 (list (+(car pts1)distseg)(cadr pts1)(caddr pti1)))
(setq pti2 (list (+(car pti1)distseg)(-(cadr pts1)vdist)(caddr pti1)))
(princ)
);repeat
(setvar "clayer" oldclay)
(command "_.ucs" "_P")
(princ)
)

teknomatika 发表于 2022-7-6 07:55:40

 
米尔恰,
 
坦克求救!

Lee Mac 发表于 2022-7-6 08:00:17

teknomatika,
 
旁白:您理解为什么在原始代码中“nil”返回到命令行吗?

teknomatika 发表于 2022-7-6 08:04:23

 
李,
我认为是这样。
对于Mircea的解释,也是因为我在循环中(Princ)的糟糕位置是一个错误。
 
坦克的帮助。

Lee Mac 发表于 2022-7-6 08:06:33

 
为了向您澄清:在原始代码中,nil返回到命令行,因为defun表达式中包含的最后一个计算表达式是命令表达式,并且命令函数始终返回nil(如文档中所述)。
 
请注意有关defun函数的Visual LISP IDE帮助文档中的此行为:
 
 
定义“子功能”时,这种固有行为是直观的,例如:
当使用数值参数调用时,上述函数将返回函数定义(defun)内最后一个表达式的计算结果,即对+函数的调用,返回提供的参数加2:
请注意,这是defun函数的一个属性,因此适用于以这种方式定义的所有函数。符号名前缀为c:的函数以完全相同的方式处理-c:前缀只允许直接从命令行将函数作为命令调用。
页: [1] 2
查看完整版本: 如何继续执行t