求助 程序在正交动作后不能自动返回极轴
正交拉伸后自返回极轴捕捉
(defun c:s()
(setq orth(getvar"orthomode"))
(setvar"orthomode"1)(setvar"autosnap"55)(setvar"osmode"16383)
(command"stretch" "C")
(while(=(logand(getvar"CmdActive")1)1)(command pause))
(setvar"autosnap"63))
不能先选择后执行,中途退出时不能返回极轴
正交移动后自返回极轴捕捉
(defun c:mn()
(setvar"orthomode"1)(setvar"autosnap"55)(setvar"osmode"16383)
(command "move"(ssget)""")(getpoint "\n基点:)
(while(=(logand(getvar"CmdActive")1)1)(command pause))
(setvar"autosnap"63))
不能返回极轴
中途退出时不能返回极轴的原因是没有作出错处理,需要定义出错处理函数,以便程序出错或用户退出时进行处理,可参考我最近贴的些程序。
第二的程序的(command "move"(ssget)""")(getpoint "\n基点:)
应该为(command "move"(ssget)"")(getpoint "\n基点:")
回复 zhynt 的帖子
谢谢大师的帮助,我试试看。 回复 zhynt 的帖子
在坛里搜了一打“出错处理”.........“洞口”,看不懂啊
还望zhynt大师指点
正交拉伸后自返回极轴捕捉
(defun c:s()
(setvar"orthomode"1)
(command"stretch"(ssget)"")
(while(=(logand(getvar"CmdActive")1)1)(command pause))
(setvar"autosnap"63)(setvar"osmode"16383)(princ))
正交移动后自返回极轴捕捉
(defun c:mn()
(setvar"orthomode"1)
(command "move"(ssget)"")
(while(=(logand(getvar"CmdActive")1)1)(command pause))
(setvar"autosnap"63)(setvar"osmode"16383)(princ))
正交镜像后自返回极轴捕捉
(defun c:im()
(setvar"orthomode"1)
(command"mirror"(ssget)"")
(while(=(logand(getvar"CmdActive")1)1)(command pause))
(setvar"autosnap"63)(setvar"osmode"16383)(princ)) 类似这样:
;;出错处理
(defun err (s)
(if (and (/= s "console break")
(/= s "Function cancelled")
(/= s "quit/exit abort")
)
(progn
(setvar "osmode" oldos)
(setvar "autosnap" oldosn)
(setvar "orthomode" oldor)
(setq *error* olderr)
(command "_.undo" "e")
(setvar "cmdecho" oldcmd)
(princ (strcat "\n程序出错或用户退出:" s))
)
)
)
;;;备份系统变量
(defun bak ()
(setq oldcmd (getvar "cmdecho"))
(setvar "cmdecho" 0)
(command "_.undo" "be")
(setq oldos (getvar "osmode")
oldosn (getvar "autosnap")
oldor (getvar "orthomode")
olderr *error*
*error* err
)
(setvar "orthomode" 1)
)
;;恢复系统变量
(defun rebak ()
(setvar "osmode" oldos)
(setvar "autosnap" oldosn)
(setvar "orthomode" oldor)
(setq *error* olderr)
(command "_.undo" "e")
(setvar "cmdecho" oldcmd)
)
;;正交拉伸后自返回极轴捕捉
(defun c:ss ()
(bak)
(command "stretch" (ssget) "")
(while (= (logand (getvar "CmdActive") 1) 1)
(command pause)
)
(rebak)
(princ)
)
本帖最后由 669423907 于 2011-7-2 17:08 编辑
回复 zhynt 的帖子
还zhynt大师帮忙看看,我在 (rebak) 的后面加了(setvar"autosnap"63)(setvar"osmode"16383),
中途按 ESC 退出可以返回极轴了。
但是发现以下问题:
1,不能先选择后操作了
2,( ss )拉伸时中途按右键退出,图形会变形
3,( mn )移动时中途按右键退出,图形会会跑
4,选择对象后,要按两次 ESC 才能完全退出
麻烦 zhynt大师有空时再帮看看,不胜感激了。
;;出错处理
(defun err (s)
(if (and (/= s "console break")
(/= s "Function cancelled")
(/= s "quit/exit abort")
)
(progn
(setvar "osmode" oldos)
(setvar "autosnap" oldosn)
(setvar "orthomode" oldor)
(setq *error* olderr)
(command "_.undo" "e")
(setvar "cmdecho" oldcmd)
(princ (strcat "\n程序出错或用户退出:" s))
)
)
)
;;;备份系统变量
(defun bak ()
(setq oldcmd (getvar "cmdecho"))
(setvar "cmdecho" 0)
(command "_.undo" "be")
(setq oldos (getvar "osmode")
oldosn (getvar "autosnap")
oldor (getvar "orthomode")
olderr *error*
*error* err
)
(setvar "orthomode" 1)
)
;;恢复系统变量
(defun rebak ()
(setvar "osmode" oldos)
(setvar "autosnap" oldosn)
(setvar "orthomode" oldor)
(setq *error* olderr)
(command "_.undo" "e")
(setvar "cmdecho" oldcmd)
)
;;正交拉伸后自返回极轴捕捉
(defun c:ss()
(bak)
(command "stretch" (ssget) "")
(while (= (logand (getvar "CmdActive") 1) 1)
(command pause)
)
(rebak)(setvar"autosnap"63)(setvar"osmode"16383)
(princ)
)
正交移动后自返回极轴捕捉
(defun c:mn()
(bak)
(command"move"(ssget)"")
(while(=(logand(getvar"CmdActive")1)1)(command pause))
(rebak)(setvar"autosnap"63)(setvar"osmode"16383)
(princ))
正交镜像后自返回极轴捕捉
(defun c:im()
(bak)
(command"mirror"(ssget)"")
(while(=(logand(getvar"CmdActive")1)1)(command pause))
(rebak)(setvar"autosnap"63)(setvar"osmode"16383)
(princ))
页:
[1]