原地踏步 发表于 2013-10-3 17:10:02

请问如何屏蔽“错误”提示

在一条线上加了个“移动”反应器,用“E”删除该线,然后再“U”,出现提示:“错误: 参数类型错误: 二维/三维点: nil”。但反应器好像照常可用,没发现什么问题。请问:如何才能屏蔽这个提示?

ZZXXQQ 发表于 2013-10-3 23:52:26

试试定义*error*函数。

Gu_xl 发表于 2013-10-4 11:41:26

既然提示出错,代码肯定有问题!还是要仔细检查下代码!

原地踏步 发表于 2013-10-4 14:23:51

本帖最后由 原地踏步 于 2013-10-4 14:39 编辑

;;
;;本程序可使文字随着直线移动、旋转等。
;;
;;========================= The Main Function ==========================
;;
(defun c:emov (/ blp cde olderr ent1 ent2 pt1 pt2 ang pt txt dst)
(setq blp (getvar "blipmode")
      cde (getvar "cmdecho")
)
;;
;; Internal error handler
;;
(defun emov_err (s)
(if (/= s "Function cancelled")
    (princ (strcat "\n错误: " s))
)
(setvar "blipmode" blp)
(command "_.UNDO" "_END")
(setvar "cmdecho" cde)
(setq *error* olderr)
(princ)
)
(setq olderr *error**error* emov_err)
(setvar "cmdecho" 0)
(command "_.UNDO" "_BEGIN")
(setvar "blipmode" 0)
(setq ent1 (car (entsel "\n选择直线: ")))
(if (and ent1 (= (ai_dxf 0 (setq dxf1 (entget ent1))) "LINE")) (progn
    (setq txt (getstring "\n输入文字: "))
    (if txt (progn
      (setq pt1 (ai_dxf 10 dxf1)
            pt2 (ai_dxf 11 dxf1)
            ang (angle pt1 pt2)
            pt (list (* 0.5 (+ (car pt1) (car pt2)))
                   (* 0.5 (+ (cadr pt1) (cadr pt2)))
                   0
             )
          dst (* 0.75 (getvar "textsize"))
          pt (polar pt (+ ang (/ pi 2)) dst)
       )
       (command "text" "m" pt (getvar "textsize") (* (/ ang pi) 180) txt)
       (setq ent2 (entlast))
       (emov_MkRct)
   ))
))
(setvar "blipmode" blp)
(command "_.UNDO" "_END")
(setvar "cmdecho" cde)
(setq *error* olderr)
(princ)
)
;;

;;======================================================================
;;
;; emov_Make_Reactor_segment
;;
(defun emov_MkRct (/ entLst han)
(setq entLst (list (vlax-ename->vla-object ent1))
      han (ai_dxf 5 (entget ent2))
)
(vlr-pers (vlr-object-reactor entLst han
   '((:vlr-modified . emov_DoRct)))
)
)
;;
;; emov_Do_Reactor_segment
;;
(defun emov_DoRct (notifier-obj reactor-obj parameter-lst / olderr
                   ent1 dxf1 dxf2 pt1 pt2 pt ang dst)
;;
(defun emov_drerr (s)
(if (/= s "Function cancelled")
    (princ (strcat "\n错误: " s))
)
)
;;
(setq olderr *error**error* emov_drerr)
(setq ent1 (vlax-vla-object->ename notifier-obj))
(if ent1 (progn            ;阻止删除ent1时出现错误提示
    (setq dxf1 (entget ent1)
          dxf2 (entget (handent (vlr-data reactor-obj)))
          pt1 (ai_dxf 10 dxf1)
          pt2 (ai_dxf 11 dxf1)
          ang (angle pt1 pt2)
          pt (list (* 0.5 (+ (car pt1) (car pt2)))
                   (* 0.5 (+ (cadr pt1) (cadr pt2)))
                   0
             )
          dst (* 0.75 (ai_dxf 40 dxf2))
          pt (polar pt (+ ang (/ pi 2)) dst)
          dxf2 (subst (cons 11 pt) (assoc 11 dxf2) dxf2)
          dxf2 (subst (cons 50 ang) (assoc 50 dxf2) dxf2)
    )
    (entmod dxf2)
))
(setq *error* olderr)
(princ)
)
;;
(defun ai_dxf (key lst)
(cdr (assoc key lst))
)
;;======================================================================
(princ)

原地踏步 发表于 2013-10-4 14:30:37

不管移动、旋转还是删除命令后,再用"U"退回,均会出现“参数类型错误”。但反应器好像也还在,不知是怎么回事。

原地踏步 发表于 2013-10-12 21:04:33

没人回答吗?郁闷!
页: [1]
查看完整版本: 请问如何屏蔽“错误”提示