aytxq 发表于 2010-11-15 13:34:00

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

各位老大,我寫一個以零件名及版本號做為文件名的分圖程序,正常運行沒有問題。可是如果中途按"ESC"鍵退出的話,"Filedia"沒有總是沒有辦法回到值1。請各位指點一下如何解決。謝謝了<div><br/></div>

xshrimp 发表于 2010-11-15 15:49:00

(setq $orr *error*   *error* MyErr)
放到程序的第一行即可.

(Defun Myerr(S)
(Princ);繰纐癶
(Setvar "Filedia" 1)
)
(Defun C:Ww(/ Part-X Part Rev-X Rev Directory Filename Part-Ucs)
(setq $orr *error*   *error* MyErr)
(Setq Part-X (Entget (Car(Entsel"\n 匡拒箂ン絪腹:"))))
(Setq Part (Cdr (Assoc 1 Part-X)))
    (If (= (Substr Part 1 11) "O");家腹い丁琌"稼"
      (Setq Part (Strcat (Substr Part 1 10) "0" (Substr Part 12 6)));ノ"箂"蠢
      (Setq Part Part)
      )
(Setq Rev-X (Entget (Car(Entsel"\n 匡拒セ:"))))
    (If (= (Cdr (Assoc 0 Rev-X)) "INSERT");セ腹琌遏
      (Setq Rev "O");セ腹"稼"
         (If (= (Cdr (Assoc 1 Rev-X)) "1");セ腹"箂"
         (Setq Rev "O");セ腹"稼"
             (Setq Rev (Cdr (Assoc 1 Rev-X)))
       )
      )
(Setq Directory (Strcat "F:/FT/" (Substr Part 1 12) "/"))
(Setq Filename (Strcase (Strcat Directory Part "-REV-" Rev;|"-Rev-O"|;)))
(Setq Part-Ucs (Cdr (Assoc 10 Part-X)))
(Setvar "Filedia" 0)
(Vl-Cmdf "-Wblock" Filename "" Part-Ucs Pause)
(setq *error* $orr);確岿玡砞竚
(Setvar "Filedia" 1)
;(Setvar "Cmdecho" 1)
(Princ)
)

aytxq 发表于 2010-11-15 16:31:00

再請教一下,現在還有一個問題,因為零件圖是從總圖中剪切分出去的,分完之後還要復原。如果在分完一個零件圖後馬上UNDO,一樣會出現"FILEDIA"的值無法回到1的問題

xshrimp 发表于 2010-11-15 16:48:00

<div><font color="#008000">例五是一段程序出错函数与Undo处理的示例。<br/>************************************************<br/>;;例五<br/>(defun
newerr (s)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;出错函数<br/>&nbsp; (if s<br/>&nbsp;&nbsp;&nbsp;
(progn<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (term_dialog)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;使用对话框时使用&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if oldvar (setvar ... oldvar))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;系统变量恢复<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if
olderr (setq *error* olderr))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;出错函数恢复<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (command "_.undo"
"_e")&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;Undo编组结束<br/>&nbsp;&nbsp;&nbsp; )<br/>&nbsp; )<br/>&nbsp;
(princ)<br/>)</font></div>
<div><font color="#008000"></font>&nbsp;</div>
<div><font color="#008000">(defun c:my(/ ...)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
;主程序(主函数)<br/>&nbsp; (setvar "cmdecho" 0)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;取消命令回显提示<br/>&nbsp;
(command "_.undo" "_BE")&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;Undo编组开始<br/>&nbsp; (setq olderr
*error* *error* newerr)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;调用自定义出错函数<br/>&nbsp; (setq oldvar (getvar
...))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;保存相关系统变量<br/>&nbsp; (setvar
...&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;设置系统变量<br/>&nbsp;
...&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;程序段<br/>&nbsp; ...<br/>&nbsp; (setvar ...
oldvar)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;恢复系统变量<br/>&nbsp; (setq *error*
olderr)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;恢复出错函数<br/>&nbsp; (command "_.undo"
"_E")&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;结束Undo命令编组<br/>&nbsp;
(princ)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
;取消程序返回值<br/>)<br/>************************************************</font></div>

aytxq 发表于 2010-11-15 17:31:00

謝謝。請問這句<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; line-height: 24px; ">&nbsp;(if oldvar (setvar ... oldvar))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;系统变量恢复"怎麼理解?</span>

ZZXXQQ 发表于 2010-11-15 21:04:00

就是如果oldvar有值就恢复变量

aytxq 发表于 2010-11-16 11:42:00

謝謝兩位老大

aytxq 发表于 2010-11-22 16:50:00

再請教一下各位老大,為什麼這個程序總是會我多按幾次"ESC"鍵就會在指令行中出大許多"錯“字,然後CAD就崩潰退出的現象?不是每次都會,只是會經常出現。

aytxq 发表于 2010-11-23 16:58:00

有沒有大俠指定一點一下啊?
页: [1]
查看完整版本: [求助]請教一個關於中斷出錯的問題