明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1517|回复: 8

[基础] [求助]請教一個關於中斷出錯的問題

[复制链接]
发表于 2010-11-15 13:34:00 | 显示全部楼层 |阅读模式
各位老大,我寫一個以零件名及版本號做為文件名的分圖程序,正常運行沒有問題。可是如果中途按"ESC"鍵退出的話,"Filedia"沒有總是沒有辦法回到值1。請各位指點一下如何解決。謝謝了

本帖子中包含更多资源

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

x
发表于 2010-11-15 15:49:00 | 显示全部楼层
(setq $orr *error*     *error* MyErr)
放到程序的第一行即可.
  1. (Defun Myerr(S)
  2.   (Princ);繰纐癶
  3.   (Setvar "Filedia" 1)
  4.   )
  5. (Defun C:Ww(/ Part-X Part Rev-X Rev Directory Filename Part-Ucs)
  6.   (setq $orr *error*     *error* MyErr)  
  7.   (Setq Part-X (Entget (Car(Entsel"\n 匡拒箂ン絪腹:"))))
  8.   (Setq Part (Cdr (Assoc 1 Part-X)))
  9.     (If (= (Substr Part 1 11) "O");家腹い丁琌"稼"
  10.         (Setq Part (Strcat (Substr Part 1 10) "0" (Substr Part 12 6)));ノ"箂"蠢
  11.         (Setq Part Part)
  12.       )
  13.   (Setq Rev-X (Entget (Car(Entsel"\n 匡拒セ:"))))
  14.     (If (= (Cdr (Assoc 0 Rev-X)) "INSERT");セ腹琌遏
  15.         (Setq Rev "O");セ腹"稼"
  16.          (If (= (Cdr (Assoc 1 Rev-X)) "1");セ腹"箂"
  17.          (Setq Rev "O");セ腹"稼"
  18.              (Setq Rev (Cdr (Assoc 1 Rev-X)))
  19.        )
  20.       )
  21.   (Setq Directory (Strcat "F:/FT/" (Substr Part 1 12) "/"))
  22.   (Setq Filename (Strcase (Strcat Directory Part "-REV-" Rev;|"-Rev-O"|;)))
  23.   (Setq Part-Ucs (Cdr (Assoc 10 Part-X)))
  24.   (Setvar "Filedia" 0)  
  25.   (Vl-Cmdf "-Wblock" Filename "" Part-Ucs Pause)
  26.   (setq *error* $orr);確岿玡砞竚
  27.   (Setvar "Filedia" 1)
  28.   ;(Setvar "Cmdecho" 1)
  29.   (Princ)
  30.   )
 楼主| 发表于 2010-11-15 16:31:00 | 显示全部楼层
再請教一下,現在還有一個問題,因為零件圖是從總圖中剪切分出去的,分完之後還要復原。如果在分完一個零件圖後馬上UNDO,一樣會出現"FILEDIA"的值無法回到1的問題
发表于 2010-11-15 16:48:00 | 显示全部楼层
例五是一段程序出错函数与Undo处理的示例。
************************************************
;;例五
(defun newerr (s)                                    ;出错函数
  (if s
    (progn
      (term_dialog)                                 ;使用对话框时使用     
      (if oldvar (setvar ... oldvar))               ;系统变量恢复
      (if olderr (setq *error* olderr))             ;出错函数恢复
      (command "_.undo" "_e")                       ;Undo编组结束
    )
  )
  (princ)
)
 
(defun c:my(/ ...)                                  ;主程序(主函数)
  (setvar "cmdecho" 0)                              ;取消命令回显提示
  (command "_.undo" "_BE")                          ;Undo编组开始
  (setq olderr *error* *error* newerr)              ;调用自定义出错函数
  (setq oldvar (getvar ...))                        ;保存相关系统变量
  (setvar ...                                       ;设置系统变量
  ...                                               ;程序段
  ...
  (setvar ... oldvar)                               ;恢复系统变量
  (setq *error* olderr)                             ;恢复出错函数
  (command "_.undo" "_E")                           ;结束Undo命令编组
  (princ)                                           ;取消程序返回值
)
************************************************
 楼主| 发表于 2010-11-15 17:31:00 | 显示全部楼层
謝謝。請問這句 (if oldvar (setvar ... oldvar))               ;系统变量恢复"怎麼理解?
发表于 2010-11-15 21:04:00 | 显示全部楼层
就是如果oldvar有值就恢复变量
 楼主| 发表于 2010-11-16 11:42:00 | 显示全部楼层
謝謝兩位老大
 楼主| 发表于 2010-11-22 16:50:00 | 显示全部楼层
再請教一下各位老大,為什麼這個程序總是會我多按幾次"ESC"鍵就會在指令行中出大許多"錯“字,然後CAD就崩潰退出的現象?不是每次都會,只是會經常出現。
 楼主| 发表于 2010-11-23 16:58:00 | 显示全部楼层
有沒有大俠指定一點一下啊?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-2-24 00:43 , Processed in 0.285900 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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