669423907 发表于 2011-6-29 23:55:35

求助 程序在正交动作后不能自动返回极轴


正交拉伸后自返回极轴捕捉
(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))
不能返回极轴

zhynt 发表于 2011-6-30 00:29:51

中途退出时不能返回极轴的原因是没有作出错处理,需要定义出错处理函数,以便程序出错或用户退出时进行处理,可参考我最近贴的些程序。
第二的程序的(command "move"(ssget)""")(getpoint "\n基点:)
应该为(command "move"(ssget)"")(getpoint "\n基点:")

669423907 发表于 2011-6-30 13:08:23

回复 zhynt 的帖子

谢谢大师的帮助,我试试看。

669423907 发表于 2011-7-1 23:02:05

回复 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))

zhynt 发表于 2011-7-1 23:47:44

类似这样:
;;出错处理
(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:02:19

本帖最后由 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]
查看完整版本: 求助 程序在正交动作后不能自动返回极轴