yanshengjiang 发表于 2011-10-6 15:44:40


(defun C:TT (/ *ERROR* OS PT1 PT2 PT3 PT4);;¿ÉÒÔ°Ñ*ERROR*·ÅÔÚÕâÀÕâʱºòº¯ÊýÄÚÍâµÄ
                                          ;;*ERROR*¾ÍÇø±ð¿ªÁË£¬¸ú¶ÀÁ¢Ãû³Æ¿Õ¼äµÄ¸ÅÄîÒ»Ñù
;;*ERROR*ºÍÆäËûº¯Êý×îÖØÒªµÄÇø±ð¾ÍÊDzÎÊýµÄ´«µÝÊÇϵͳ
;;×Ô¶¯Íê³ÉµÄ£¬¶ø²»ÊÇÎÒÃÇÈÎÒâÖÆ¶¨µÄ¡£²ÎÊýMSGÊÇϵͳ´òÓ¡µÄ´íÎóÐÅÏ¢¡£
;;Ö®ËùÒÔ´ó¼ÒÒªÖØ¶¨Òå*ERROR*£¬1.ÐÞ¸ÄMSG»òÕß²»´òÓ¡MSG¡£
;;2.Ö´ÐÐ×Ô¶¨Òå³ö´í»Ö¸´µÄÏà¹Ø´úÂ룬ÈçÏÂÃæµÄÀý×Ó(or OS (setqvar "osmode" os))
;;¾ÍÊÇÎÒÏëÔÚ³ö´íºó»¹Ô­OSMODEµÄÖµ
(defun *ERROR* (MSG)
    (if OS(setvar "osmode" os))
    (princ "12312");;;;;;;´íÎóÌáʾ
    )
(setq os (getvar "osmode"))
(setvar "osmode" 0)
(setq PT1 (getpoint "\nµÚÒ»µã: "));;--
(setq PT2 (getpoint "\nµÚÒ»µã: "));;|------ÕâËÄÐдúÂë
(setq PT3 (getpoint "\nµÚÈýµã: "));;|      Ö´Ðйý³ÌÖÐÈç¹û°´ESC£¬³ÌÐò¾Í²»»áÍùÏÂÖ´ÐУ¬¶ø
(setq PT4 (getpoint "\nµÚËĵã: "));;--       ÊÇ×Ô¶¯¼¤»î*ERROR*
(command "_.pline" pt1 pt2 pt3 pt4 "c")
(setvar "osmode" os);;ÕâÒ»ÐÐÊÇÔÚ²»³ö´íµÄÇé¿öÏÂÖ´Ðеġ£
(princ)
)

yanshengjiang 发表于 2011-10-6 15:46:17

乱码不是我的错。。哈哈

已c版程序为例。
如果你要出错后执行什么
(defun *ERROR* (MSG)
    (if OS(setvar "osmode" os))
    (princ "12312")
    )

像上面princ位置,随便加你想要的东西呵呵

zoubo604 发表于 2011-10-6 15:50:39

为什么我7楼加的红色部分没有执行呢?

zoubo604 发表于 2011-10-6 16:58:57

cabinsummer 发表于 2011-10-5 22:39 static/image/common/back.gif


我晕了.昨晚以为对了.结果今天再试,又不对了.
昨天不出来花纹,是因为这句(setvar "osmode" 0),后面为0,有可能不对,CAD按F2可看到很多提示,循环6次,提示6次,叫我输入什么参数.我看到有些地方是"OFF".因为一个花纹也没出来,所以CAD没崩溃.
还有这里
(defun myerr (msg)
(setqvar "osmode" os)
(setq *error* olderr)
(princ)
)
setqvar是不是多了一个q啊.怎么好象也不对.改和不改.现在CAD都要崩溃了.崩溃与否的原因可能是前面捕捉那里的0.
把前面的0改为"OFF"后,ERROR函数每次都执行了.我加入的ALERT语句就在循环里执行了6次.

功夫佬 发表于 2012-4-17 22:27:24

caoyin 发表于 2011-10-5 23:45 static/image/common/back.gif
;;;原理跟上面一样,其实很多人把*ERROR*想得复杂了
(defun C:TT2 (/ OS PT1 PT2 PT3 PT4)
(vl-catch-a ...

除了用这段 (setq os (getvar "osmode"))
还用别的方法吗?
程序运行中按ESC中断可不可以用*ERROR*来解决呢?

laiz3000 发表于 2012-4-18 08:53:09

学习学习,呵呵

312735894 发表于 2013-12-22 22:08:18

cabinsummer 发表于 2011-10-6 05:40 static/image/common/back.gif
(setq olderr *error* *error* myerr)就是
(setq olderr *eoor*);;;保存系统错误处理函数
(setq *error ...

老大,您的这句“任何程序错误,系统都会调用*error*函数,但是默认的*error*函数不一定是我们需要的。”真是说的精髓,让我拨开了重重迷雾,得见阳光!

老大威武,道法高深!

lanjqka 发表于 2013-12-24 10:48:46

原来setq可以这样用
_$ (setq mymul *)
#<SUBR @0c7ef588 *>
_$ (mymul 2 3)
6
页: 1 [2]
查看完整版本: 求*ERROR*函数指导