lisp的开头怎么写,相信很多的新手都有这个疑问,当然具体的还是需要学习别人写的代码;带错误恢复捕捉的程序开头和结尾写法(defun c:tt( / )(vl-load-com);错误恢复捕捉(defun *MYERR* (MSG)(setvar "CMDECHO" CMD_OLD)(setvar "OSMODE" OS_OLD)(setq *ERROR* *OLDERR*)(if (= MSG "完美退出。谢谢使用。")(princ (strcat "\\n>>>" MSG))(princ "\\n>>>虽然中途退出了,对象捕捉已经被恢复。"))(princ))(setq *OLDERR* *ERROR**ERROR* *MYERR*OS_OLD (getvar "OSMODE")CMD_OLD (getvar "CMDECHO"));----开始系统变量备份----(setvar "cmdecho" 0);_关闭命令提示(command "._undo" "_begin")(setq osmode_bak (getvar "osmode"));_记录捕捉(setvar "osmode" 0);_关闭捕捉(setq clayer_bak (getvar "clayer"));_记录当前图层;----绘制部分开始----(你的程序);----操作中需要开启捕捉,就增加代码----(setvar "osmode" 【一个数值,具体多少,先打钩捕捉点,再看系统变量osmode】);----绘制部分结束----;----结束系统变量还原----(setvar "osmode" osmode_bak);_还原捕捉(setvar "clayer" clayer_bak);_还原图层(command "._undo" "_end")(setvar "cmdecho" 1);_打开命令提示(princ);_关闭程序返回值);_程序结束(princ "\n**********春婵程序加载完成,启动命令:tt **********")(princ "\n")
(command "._undo" "_begin")意外退出时没有恢复undo 的end,会导致无法使用U回退另外在本程序定义*error*可以采用局部函数形式,没必要做*error*函数备份(备份也行,略显啰嗦),一般做备份的是跨函数调用;;取消捕捉(defun try-osmode0(/ os*error*)(defun os*error* (MSG)(if try-osmode (setvar "osmode" try-osmode))(setq try-osmode nil *error* *#error#*))(setq *#error#* *error* *error* os*error*)(setq try-osmode (getvar "osmode"));记录捕捉系统变量(if (< try-osmode 16384)(setvar "osmode" (+ try-osmode 16384)));判断是否启用了捕捉;按F3关闭捕捉);;恢复捕捉(defun try-osmode1()(setvar "osmode" try-osmode)(setq try-osmode nil *error* *#error#*))我是这样写的,两个函数分别放在开头和结尾,因为独立函数调用,所以才备份*error*,但是我现在基本不用,因为应用场景极少(defun c:tt ()(try-osmode0)你的程序(try-osmode1))
(setvar “osmode” 0);
捕捉设置为0是误人子弟
正确的做法应该是判断用F3来关闭,随便改变原有设置是非常不负责任的做法
(setq try-osmode (getvar “osmode”));记录捕捉系统变量
(if (< try-osmode 16384)(setvar “osmode” (+ try-osmode 16384)));判断是否启用了捕捉,关闭捕捉
