明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: zoubo604

求*ERROR*函数指导

  [复制链接]
发表于 2011-10-6 15:44 | 显示全部楼层

(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)
)
发表于 2011-10-6 15:46 | 显示全部楼层
乱码不是我的错。。哈哈

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

像上面princ位置,随便加你想要的东西  呵呵
 楼主| 发表于 2011-10-6 15:50 | 显示全部楼层
为什么我7楼加的红色部分没有执行呢?
 楼主| 发表于 2011-10-6 16:58 | 显示全部楼层
cabinsummer 发表于 2011-10-5 22:39

我晕了.昨晚以为对了.结果今天再试,又不对了.
昨天不出来花纹,是因为这句(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次.

点评

确实如此,多了个q  发表于 2011-10-6 19:38
发表于 2012-4-17 22:27 | 显示全部楼层
caoyin 发表于 2011-10-5 23:45
;;;原理跟上面一样,其实很多人把*ERROR*想得复杂了
(defun C:TT2 (/ OS PT1 PT2 PT3 PT4)
  (vl-catch-a ...

除了用这段 (setq os (getvar "osmode"))
还用别的方法吗?
程序运行中按ESC中断可不可以用*ERROR*来解决呢?
发表于 2012-4-18 08:53 | 显示全部楼层
学习学习,呵呵
发表于 2013-12-22 22:08 | 显示全部楼层
cabinsummer 发表于 2011-10-6 05:40
(setq olderr *error* *error* myerr)就是
(setq olderr *eoor*);;;保存系统错误处理函数
(setq *error ...

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

老大威武,道法高深!
发表于 2013-12-24 10:48 | 显示全部楼层
原来setq可以这样用
_$ (setq mymul *)
#<SUBR @0c7ef588 *>
_$ (mymul 2 3)
6
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-28 19:19 , Processed in 0.293268 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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