找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1225|回复: 7

[求助] [求助]:程序中途退出如何让原设置不变

[复制链接]
发表于 2007-4-28 11:20:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
下面是我编的小程序,程序执行没有问题,如果程序中途退出,如何让图层也能返回0层,颜色随层,捕捉保存原来的设置?
(defun mid_pt (a b)
(mapcar
'(lambda (a b) (/ (+ a b) 2))
a
b
)
)
(defun c:TB (/ pt1 pt2 pt3 pt4 p1 ku1 str)
       (setq olderr *error*
           *error* at_err)
;;保存系统变量设置
    (setq old_OS  (getvar "OSMODE")
      old_CMD (getvar "CMDECHO")
    )   
       (setvar "osmode" 0)
(command "-layer" "m" "文字"
                  "C" "10" """")
       (setq pt1 (getpoint "\n定位点:"))
       (setq pt2 (getpoint pt1 "\n定位点:"))
       (command "line" pt1 pt2 "")
       (setq pt3 (getpoint pt2 "\n定位点:"))
       (setq ku1 (angle pt2 pt3))
       (setq pt4 (polar pt2 ku1 2100))
       (command "line" pt2 pt4 "")
       (setq pt_mid (mid_pt pt2 pt4))
(setq p1 (polar pt_mid (* 0.5 pi) 100)) ;;文字起点   
       (setq str (getstring "\n请输入详图号/页数<1/48>:"))
(if (= str "") (setq str (strcat "TB2005-" "1/48")) (setq str (strcat "TB2005-" str)))
       (command "text" "j" "c" p1 300 0 str)
       (setvar "osmode" 33)
       (setq *error* olderr)
;;恢复系统变量设置
    (setvar "CMDECHO" old_CMD)
    (setvar "OSMODE" old_OS)
   ;执行完毕返回0层
(setvar "clayer" "0")
       (princ)
       )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2007-4-28 12:15:19 | 显示全部楼层
(defun *error* (msg)
;;; 爱干什么就干什么
(prnc msg)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-4-28 15:08:56 | 显示全部楼层
楼上的朋友,是否在程序中加入上述语句?加在何处,请明示.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-4-28 15:32:36 | 显示全部楼层
;;;通用子程序                                               
;;;------------------------ CMDLA0 -------------------------
;;;------------------------ CMDLASC0 -----------------------
;;;                    保存用户系统变量                     
;;;方式 : (CMDLA0)
(defun CMDLASC0        ()
  (CMDLA0)
  (if (null sc)
    (SETBL)
  )
)
(defun CMDLA0 ()
  (defun *error* (msg)
    (princ "错误 : ")
    (princ msg)
    (CMDLA1)
  )
  (SetQ        **SysVarNL**
                     '("AUNITS"             "AUPREC"           "ATTDIA"
                       "BLIPMODE"    "CECOLOR"           "CELTYPE"
                       "CLAYER"             "CMDECHO"           "DIMZIN"
                       "EXPERT"             "HIGHLIGHT"   "LUNITS"
                       "LUPREC"             "OSMODE"           "ORTHOMODE"
                       "TEXTSTYLE"   "PLINEWID"           "dimdec"
                       "dimadec"     "regenmode"   "pickbox"
                      )
        #time1             (rtos (getvar "cdate") 2 16)
        start-time   (substr (rtos (getvar "cdate") 2 16) 7)
  )
  (SetIErr)
  (command "ucs" "")
  (command ".undo" "BE")
  (princ)
)


(Defun SetIErr (/ sv)
  (If (= 'LIST (Type *error*))
    (Alert "错误:最后一个(SetIErr)函数没有配对的(ReErr)!")
    (Progn
      (SetQ **svarl** '())
      (ForEach sv **SysVarNL**
        (SetQ **svarl** (Cons (GetVar sv) **svarl**))
      )
      (ForEach sv '("ATTDIA"           "BLIPMODE"          "CMDECHO"
                    "ORTHOMODE"           "DIMZIN"          "plinewid"
                    "regenmode"
                   )
        (SetVar sv 0)
      )
      (setvar "ATTREQ" 1)
      (SetVar "EXPERT" 5)
      (setvar "pickbox" 5)
      (setvar "pickadd" 1)
      (setvar "aperture" 5)
      (Defun-Q *error* (st) (ReErr))
    )
  )
)
(Defun ReErr ()
  (If (= 'LIST (Type *error*))
    (Progn
      (MapCar 'SetVar **SysVarNL** (Reverse **svarl**))
      (SetQ *error* nil)
      (SetVar "modemacro" ".")
    )
  )
)

;;;------------------------ CMDLA1 -------------------------
;;;                     恢复用户系统变量                    
;;;方式 : (CMDLA1)                                          
(defun CMDLA1 ()
  (command ".undo" "E")
  (command "ucs" "")
  (ReErr)
  (princ)
)


;;; ---------------------- setbl ---------------------------
;;;                    设置出图比例                        
;;;方式 : (setbl)
(defun setbl ()
  (if (= (getvar "UserI1") 0)
    (setvar "UserI1" 1)
  )
  (if (= (getvar "UserR1") 0)
    (setvar "UserR1" 1.0)
  )
  (setq        bl (ureal 1 "" "\n输入出图比例1 " bl)
        SC (/ bl 100.0)
  )
  (setvar "UserR1" (/ 1.0 sc))
  (command "modemacro"
           (strcat " 当前出图比例 1:"
                   (rtos bl 2 1)
           )
  )
  (princ)
)


http://p4.xdcad.net/forum/showthread.php?s=&threadid=486574
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

发表于 2007-4-28 19:07:50 | 显示全部楼层
我一直的观点就是:在小东东中不要轻易去设置错误处理,应通过采用适当的结构去避免错误的发生。

<br>
楼主szx025  在1楼的代码我不知其具体用途,根据我的理解将其改动如下,
若有不妥,请回复告知。

  1. ;;;===========================================
  2. (defun mid_pt (a b)
  3.     (mapcar
  4.         '(lambda (a b) (/ (+ a b) 2))
  5.         a
  6.         b
  7.     )
  8. )
  9. ;;;===========================================
  10. (defun c:TB (/ pt1 pt2 pt3 pt4 p1 ku1 str)
  11.     ;;保存系统变量设置
  12.     (setq old_OS  (getvar "OSMODE")
  13.           old_CMD (getvar "CMDECHO")
  14.     )
  15.     (setvar "OSMODE" 0)
  16.     (setvar "CMDECHO" 0)
  17.     (command "-layer" "m" "文字" "C" "10" "" "")
  18.     (if        (and (setq pt1 (getpoint "\n定位点:"))
  19.              (setq pt2 (getpoint pt1 "\n定位点:"))
  20.         )
  21.         (progn
  22.             (setvar "OSMODE" 0)
  23.             (command "_.line" pt1 pt2 "")
  24.             (if        (setq pt3 (getpoint pt2 "\n定位点:"))
  25.                 (progn
  26.                     (setq ku1 (angle pt2 pt3)
  27.                           pt4 (polar pt2 ku1 2100)
  28.                     )
  29.                     (setvar "OSMODE" 0)
  30.                     (command "_.line" pt2 pt4 "")
  31.                     (setq pt_mid (mid_pt pt2 pt4)
  32.                           p1         (polar pt_mid (* 0.5 pi) 100)
  33.                     )
  34.                     ;;文字起点
  35.                     (setq str (getstring "\n请输入详图号/页数<1/48>:"))
  36.                     (if        (= str "")
  37.                         (setq str "TB2005-1/48")
  38.                         (setq str (strcat "TB2005-" str))
  39.                     )
  40.                     (setvar "OSMODE" 0)
  41.                     (command "text" "j" "c" p1 300 0 str)
  42.                 )
  43.                 ;;若退出,则删去 pt1 pt2 间的连线
  44.                 (command "_.erase" (entlast) "")
  45.             )
  46.         )
  47.     )

  48.     ;;恢复系统变量设置
  49.     (setvar "CMDECHO" old_CMD)
  50.     (setvar "OSMODE" old_OS)
  51.     ;;执行完毕返回0层
  52.     (setvar "clayer" "0")
  53.     (princ)
  54. )
  55. ;;;===========================================
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6个

财富等级: 恭喜发财

发表于 2007-4-28 19:11:35 | 显示全部楼层
(command "_.line" "non" pt1 "non"  pt2 "")
这样就很好小小程序没有必去搞那么复杂~~
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

发表于 2007-4-28 19:20:45 | 显示全部楼层
这样是否更好一些:

  1. ;;;===========================================
  2. (defun mid_pt (a b)
  3.     (mapcar
  4.         '(lambda (a b) (/ (+ a b) 2))
  5.         a
  6.         b
  7.     )
  8. )
  9. ;;;===========================================
  10. (defun c:TB (/ pt1 pt2 pt3 pt4 p1 ku1 str)
  11.     ;;保存系统变量设置
  12.     (setq old_CMD (getvar "CMDECHO"))
  13.     (setvar "CMDECHO" 0)
  14.     (if        (and (setq pt1 (getpoint "\n定位点:"))
  15.              (setq pt2 (getpoint pt1 "\n定位点:"))
  16.              (not (grdraw pt1 pt2 10))
  17.              (setq pt3 (getpoint pt2 "\n定位点:"))
  18.         )
  19.         (progn
  20.             ;;刷新图形窗口
  21.             (redraw)
  22.             (setq ku1 (angle pt2 pt3)
  23.                   pt4 (polar pt2 ku1 2100)
  24.             )
  25.             (command "-layer" "m" "文字" "C" "10" "" "")
  26.             (command "_.line" "non" pt1 "non" pt2 "non" pt4 "")
  27.             (setq pt_mid (mid_pt pt2 pt4)
  28.                   p1         (polar pt_mid (* 0.5 pi) 100)
  29.             )
  30.             ;;文字起点
  31.             (setq str (getstring "\n请输入详图号/页数<1/48>:"))
  32.             (if        (= str "")
  33.                 (setq str "TB2005-1/48")
  34.                 (setq str (strcat "TB2005-" str))
  35.             )
  36.             (command "text" "j" "c" "non" p1 300 0 str)
  37.             ;;执行完毕返回0层
  38.             (setvar "clayer" "0")
  39.         )
  40.     )
  41.     ;;刷新图形窗口
  42.     (redraw)
  43.     (setvar "CMDECHO" old_CMD)

  44.     (princ)
  45. )
  46. ;;;===========================================
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-4-28 19:56:20 | 显示全部楼层
谢谢楼上的朋友,要的就是这个效果,
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-17 13:22 , Processed in 0.273368 second(s), 45 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表