请教各位老师,在lisp程序中如何处理ESE键
<p>以下是很简单的一个画线程序:</p><p>(defun c:ltemp (/ p1 p2 osold)<br/> (command "_undo" "be")<br/> (setvar "cmdecho" 0)<br/> (setq osold "osmode") <br/> (setvar "osmode" 0)<br/> (setq p1 (getpoint "\n第一点:"))<br/> (setq p2 (getpoint "\n第二点:"))<br/> (command "line" p1 p2 "")<br/> (setvar "osmode" osold)<br/> (command "_undo" "e") <br/> (princ)<br/>)<br/></p><p>我的愿意想在程序结束时让一些变量(如OSMODE)的值回到程序前,但在画线的输点的过程中若按ESC键,则达不到效果。请问我该怎么写。</p> AutoCAD所附的范例程序有您要的答案<br/>关键在 *ERROR* ..... <p>这个对我来说有点难度啊,哪位好心人能指点指点,</p> <p>(defun c:<strong><u>你的命令</u></strong> ( / oor osn ucsi)<br/>;;; -=<*>=- -=<*>=- -=<*>=- Main Functions BEGIN <br/>;;;-------------**begin-->>initialize**----------------<br/> (COMMAND "._UNDO" "BE")<br/> (setq orerr *error*)<br/> (setq *error* errsub) <br/> (setvar "cmdecho" 0)<br/> (setq osn (getvar "osmode"))<br/> (setq oor (getvar "orthomode" ))<br/> (setq ucsi (getvar "UCSICON" ))<br/> (setq oldclyer (getvar "clayer"))<br/> (setvar "osmode" 0)<br/> (setvar "orthomode" 0)<br/> (setvar "UCSICON" 0)<br/> (command "._ucs" "world")<br/>;---->---->---->---->---->---->---->---->---->---->----><br/> <strong><u>你的程序代码</u></strong></p><p>;<----<----<----<----<----<----<----<----<----<----<----<br/>;;;-------------**renew-->>initialize**----------------<br/> (command "._ucs" "p")<br/> (setvar "osmode" osn)<br/> (setvar "orthomode" oor)<br/> (setvar "UCSICON" ucsi)<br/> (setvar "clayer" oldclyer)<br/> (setq *error* orerr)<br/> (COMMAND "._UNDO" "E")<br/>(prin1)<br/>)<br/>(princ)<br/>;;; -=<*>=- -=<*>=- -=<*>=- Main Functions END<br/>;;=-=-=-==-=--==user-defined-->>*error*-=-=-=-=-=-=-=-=-<br/> (defun errsub (msg) <br/> (if <br/> (not <br/> (member <br/> msg <br/> '("console break" "Function cancelled" "quit / exit abort" "") <br/> ) <br/> ) <br/> (princ (strcat "\nError: " msg)) <br/> ) ; if <br/> (command "._ucs" "p")<br/> (setvar "osmode" osn)<br/> (setvar "orthomode" oor)<br/> (setvar "UCSICON" ucsi)<br/> (setvar "clayer" oldclyer)<br/> (setq *error* orerr)<br/> (prin1)<br/>)<br/>(princ)</p> <p>又学了一招!!</p> 问一下这里面(COMMAND "._UNDO" "E")的“._”有什么作用?不明白呀!<br/>先谢谢! "._"的作用:主要是兼容不同CAD版本! <p>谢谢<strong><font face="Verdana" color="#61b713">jaminth的解答!明白了!谢谢!</font></strong></p> 非常感谢jaminth的回答, 请问一下,为什么调用一个errsub()函数就不会出现变量不还原的问题了?
页:
[1]
2