明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2204|回复: 6

[求助]当用户按Esc时怎么办?

[复制链接]
发表于 2009-3-17 08:30 | 显示全部楼层 |阅读模式

一般我们编写的lisp,总会在开头改变一些系统变量,比如正交、捕捉、图层等等,程序的结尾再将这些变量改回原来的值。

可是当用户使用lisp的时候,如果它在半途中按了Esc,那么就无法恢复系统变量了。当用户再次使用lisp的时候,程序这时候getvar的系统变量不是最初的系统变量,而是你用lisp改变过的系统变量了。

有没有什么办法,在用户按Esc的时候,做一些操作呢?

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2009-3-17 09:00 | 显示全部楼层

使用错误处理

*error*

发表于 2009-3-20 21:10 | 显示全部楼层

就楼上的方法

发表于 2009-3-20 23:36 | 显示全部楼层
能详细讲解吗?
发表于 2009-3-23 10:19 | 显示全部楼层
(
 defun initerr()
 (setvar "cmdecho" 0)
  (setvar "osmode" 0)
  (setvar "orthomode" 0)
  (setq temperr *error*)
  (setq *error* trap)
  (princ)
)
(
 defun reset()
  (setq *error* temperr)
  (setvar "cmdecho" 1)
  (setvar "orthomode" 1)
 (setvar "osmode" 53)
  (princ)
)
(
 defun trap(errmsg)
  (command nil nil nil)
  (
   if(not (member errmsg '("console break" "Function Cancelled")))
    (princ (strcat "\nError: " errmsg))
  )
  (setvar "cmdecho" 1)
  (setvar "orthomode" 1)
  (setvar "osmode" 53)
  (princ "\nError Resetting Enviroment!")
  (terpri)
  (setq *error* temperr)
  (princ)
)
发表于 2009-3-23 10:21 | 显示全部楼层
这是我自己电脑上用的,所以捕捉就只设那几个,不用去getvar "osmode"那些了,直接设53
发表于 2009-3-23 13:47 | 显示全部楼层
  1. 這個也是我經常用的!你可以用來參考一下
  2. (defun SHS-begin (varlst / cmd)
  3.   (setq cmd (getvar "cmdecho"))
  4.    (setvar "cmdecho" 0)
  5.    (setvar "SNAPMODE" 0)
  6.   (command "_.undo" "_begin")   
  7. (setvar "cmdecho" cmd)
  8.   (setq $savvarlst (mapcar '(lambda (x)(list x (getvar x)))varlst)                     
  9. $olderr    *error*  
  10. *error*    SHS-error  
  11.   ))
  12. (defun SHS-error (msg)
  13.   (princ msg)   
  14.   (SHS-end)   
  15.   )
  16. (defun SHS-end (/ cmd)
  17.   (if $savvarlst
  18.     (mapcar '(lambda (x)(apply 'setvar x))        
  19.      $savvarlst
  20.     )     
  21.   )
  22.   (setq *error* $olderr    $savvarlst
  23.   nil   
  24. $olderr nil
  25.   )
  26.   (setq cmd (getvar "cmdecho"))
  27.   (setvar "cmdecho" 0)
  28.   (command "_undo" "_end")
  29.   (setvar "cmdecho" cmd)
  30.   (princ)
  31. )
  32. 在程序第一行加上這個就可以啦!
  33. (shs-begin '("cmdecho"))
  34.   (setvar "cmdecho" 0);关闭回显
最后一行加上(shs-end)就可以啦!

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

本版积分规则

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

GMT+8, 2024-7-2 11:00 , Processed in 0.145792 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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