如何继续执行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 ") (command "_.ucs" "_P")
李,
那,回到以前的UCS?
但是在设置UCS“OB”后允许继续执行例程?
(command "ucs" "OB" "pause" "");;The execution is stopping here. 你需要这样写:
(command "_UCS" "_OB" pause) 储罐。
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 ") 我对你的代码做了一些修改:
[列表]
[*]结束命令调用时,无需禁用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,
旁白:您理解为什么在原始代码中“nil”返回到命令行吗?
李,
我认为是这样。
对于Mircea的解释,也是因为我在循环中(Princ)的糟糕位置是一个错误。
坦克的帮助。
为了向您澄清:在原始代码中,nil返回到命令行,因为defun表达式中包含的最后一个计算表达式是命令表达式,并且命令函数始终返回nil(如文档中所述)。
请注意有关defun函数的Visual LISP IDE帮助文档中的此行为:
定义“子功能”时,这种固有行为是直观的,例如:
当使用数值参数调用时,上述函数将返回函数定义(defun)内最后一个表达式的计算结果,即对+函数的调用,返回提供的参数加2:
请注意,这是defun函数的一个属性,因此适用于以这种方式定义的所有函数。符号名前缀为c:的函数以完全相同的方式处理-c:前缀只允许直接从命令行将函数作为命令调用。
页:
[1]
2