keyzero 发表于 2007-11-8 09:57:00

请教各位老师,在lisp程序中如何处理ESE键

<p>以下是很简单的一个画线程序:</p><p>(defun c:ltemp (/ p1 p2 osold)<br/>&nbsp;(command "_undo" "be")<br/>&nbsp;(setvar "cmdecho" 0)<br/>&nbsp;(setq osold "osmode") <br/>&nbsp;(setvar "osmode" 0)<br/>&nbsp;(setq p1 (getpoint "\n第一点:"))<br/>&nbsp;(setq p2 (getpoint "\n第二点:"))<br/>&nbsp;(command "line" p1 p2 "")<br/>&nbsp;(setvar "osmode" osold)<br/>&nbsp;(command "_undo" "e")&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;(princ)<br/>)<br/></p><p>我的愿意想在程序结束时让一些变量(如OSMODE)的值回到程序前,但在画线的输点的过程中若按ESC键,则达不到效果。请问我该怎么写。</p>

Andyhon 发表于 2007-11-8 10:05:00

AutoCAD所附的范例程序有您要的答案<br/>关键在 *ERROR* .....

keyzero 发表于 2007-11-8 15:17:00

<p>这个对我来说有点难度啊,哪位好心人能指点指点,</p>

jaminth 发表于 2007-11-8 19:43:00

<p>(defun c:<strong><u>你的命令</u></strong> ( / oor osn ucsi)<br/>;;; -=&lt;*&gt;=- -=&lt;*&gt;=- -=&lt;*&gt;=- Main Functions BEGIN <br/>;;;-------------**begin--&gt;&gt;initialize**----------------<br/>&nbsp; (COMMAND "._UNDO" "BE")<br/>&nbsp; (setq orerr *error*)<br/>&nbsp; (setq *error* errsub) <br/>&nbsp; (setvar "cmdecho" 0)<br/>&nbsp; (setq osn (getvar "osmode"))<br/>&nbsp; (setq oor (getvar "orthomode" ))<br/>&nbsp; (setq ucsi (getvar "UCSICON" ))<br/>&nbsp; (setq oldclyer (getvar "clayer"))<br/>&nbsp; (setvar "osmode" 0)<br/>&nbsp; (setvar "orthomode" 0)<br/>&nbsp; (setvar "UCSICON" 0)<br/>&nbsp; (command "._ucs" "world")<br/>;----&gt;----&gt;----&gt;----&gt;----&gt;----&gt;----&gt;----&gt;----&gt;----&gt;----&gt;<br/>&nbsp;<strong><u>你的程序代码</u></strong></p><p>;&lt;----&lt;----&lt;----&lt;----&lt;----&lt;----&lt;----&lt;----&lt;----&lt;----&lt;----<br/>;;;-------------**renew--&gt;&gt;initialize**----------------<br/>&nbsp; (command "._ucs" "p")<br/>&nbsp; (setvar "osmode" osn)<br/>&nbsp; (setvar "orthomode" oor)<br/>&nbsp; (setvar "UCSICON" ucsi)<br/>&nbsp; (setvar "clayer" oldclyer)<br/>&nbsp; (setq&nbsp; *error* orerr)<br/>&nbsp; (COMMAND "._UNDO" "E")<br/>(prin1)<br/>)<br/>(princ)<br/>;;; -=&lt;*&gt;=- -=&lt;*&gt;=- -=&lt;*&gt;=- Main Functions END<br/>;;=-=-=-==-=--==user-defined--&gt;&gt;*error*-=-=-=-=-=-=-=-=-<br/>&nbsp; (defun errsub (msg) <br/>&nbsp;&nbsp;&nbsp; (if <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (not <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (member <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; msg <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '("console break" "Function cancelled" "quit / exit abort" "") <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (princ (strcat "\nError: " msg)) <br/>&nbsp;&nbsp;&nbsp; ) ; if <br/>&nbsp; (command "._ucs" "p")<br/>&nbsp; (setvar "osmode" osn)<br/>&nbsp; (setvar "orthomode" oor)<br/>&nbsp; (setvar "UCSICON" ucsi)<br/>&nbsp; (setvar "clayer" oldclyer)<br/>&nbsp; (setq&nbsp; *error* orerr)<br/>&nbsp;&nbsp;&nbsp; (prin1)<br/>)<br/>(princ)</p>

bamboo79 发表于 2007-11-9 16:32:00

<p>又学了一招!!</p>

xhq1954425 发表于 2007-11-12 18:58:00

问一下这里面(COMMAND "._UNDO" "E")的“._”有什么作用?不明白呀!<br/>先谢谢!

jaminth 发表于 2007-11-13 07:49:00

"._"的作用:主要是兼容不同CAD版本!

xhq1954425 发表于 2007-11-13 07:56:00

<p>谢谢<strong><font face="Verdana" color="#61b713">jaminth的解答!明白了!谢谢!</font></strong></p>

keyzero 发表于 2007-11-13 16:02:00

非常感谢jaminth的回答,

keyzero 发表于 2007-11-13 16:21:00

请问一下,为什么调用一个errsub()函数就不会出现变量不还原的问题了?
页: [1] 2
查看完整版本: 请教各位老师,在lisp程序中如何处理ESE键