我以前说过。“预防措施”
说到错误,我通常使用函数(cond((and…))
(defun c:Test(/ a b c)
(cond
((and
(setq a (car (entsel "\Select Line:")))
(setq b (eq (cdr (Assoc 0 (entget a))) "LINE"))
(setq c (getint "\nEnter Number of Cars: "))
(setq d (getpoint "\nPick Point on screen: "))
(princ "\nDone All Three:")
)))
(princ)
)
但我的大多数人都会问
我做错了什么?在我做了这个或没有做那个之后它就停止了!
我错过了什么?
错误消息在哪里?"
所以我想出了一个_error\u mesage例程
(defun c:Test(/ a b c)
(defun _errorMsg(lst / NilVal)
(while (eval (setq NilVal (car (car lst))))
(setq lst (cdr lst)))
(if lst
(alert (cadr (assoc NilVal lst))))
)
(cond
((and
(setq a (car (entsel "\Select Line:")))
(setq b (eq (cdr (Assoc 0 (entget a))) "LINE"))
(setq c (getint "\nEnter Number of Cars: "))
(setq d (getpoint "\nPick Point on screen: "))
(princ "\nDone All Three:")
)))
(_errorMsg
(list '(a "Failed to select Object")
'(b "Not a Line Entity")
'(c "Failed to Enter Number")
'(d "Failed ot pick a point")
))
(princ)
)
我知道这听起来可能很奇怪,但您如何将vl catch all apply与getpoint结合使用来捕捉错误?
通常我使用initget/if,甚至有一次我使用了ggread
我对错误处理函数不是很有效,有时我会使用好的ol
(setq*Error*oldError)thingy。为了爱我,我似乎无法理解vl-catch-apply/vl-catch-all-error-p背后的想法
以下是我认为我会使用vl错误捕捉的内容
(vl-catch-all-error-p
(vl-catch-all-apply 'cadr
(setq fp (getpoint "\nPick point:"))))
但是,在两种情况下都出现了拾取点和不拾取点的结果是T,给出了什么?
-一盎司预防胜于一磅治疗
好主意pBe
使用vl,您可以将其缩短为:
(defun c:Test ( / _errormsg a b c d )
(defun _errormsg ( lst / x )
(if (setq x (vl-some '(lambda ( x ) (if (null (eval (car x))) (cadr x))) lst))
(alert x)
)
)
(cond
(
(and
(setq a (car (entsel "\nSelect Line:")))
(setq b (eq (cdr (assoc 0 (entget a))) "LINE"))
(setq c (getint "\nEnter Number of Cars: "))
(setq d (getpoint "\nPick Point on screen: "))
(princ "\nDone All Three:")
)
)
( t
(_errormsg
'(
(a "Failed to select Object")
(b "Not a Line Entity")
(c "Failed to Enter Number")
(d "Failed to pick a point")
)
)
)
)
(princ)
)
可以使用以下表达式:
其中是一个函数,当提供null点参数时会出错。
然而,在我看来,我觉得这是一种糟糕的编程实践,因为你在等待某些东西失败,而不是从一开始就防止错误。
由于vl catch all apply函数采用与apply函数相同的参数,因此每次都会出错。使用上述代码,您将所选点(或nil)作为参数列表传递,这相当于:
(apply 'cadr '(1 2 3)) == (cadr 1 2 3)这将出错。
但是,请注意,cadr函数不需要vl catch all apply构造,因为
11
这真是一个非常聪明的想法。
我可能在不久的将来使用它,希望你不要介意。我可以吗? 12
谢谢你们。RenderMan我只需要添加1作为y比例。现在,通过拾取两点,Autocad为我绘制了一个剖面线管道。谢谢大家。请解释问题。我很乐意学习autolisp课程,但显然我不太喜欢。
很高兴你喜欢这个想法,我把编码优雅的一面留给你。。。。工具箱的另一个例程
谢谢你的信息,李,我会试试的。。。。
当然你可以。。。我一点也不介意。。
干杯
谢谢你,伙计。
和功能:
http://www.cadtutor.net/forum/showthread.php?61672-块属性&p=419102&viewfull=1#post419102
initget:请参阅initget上的VLIDE帮助文档,查找位代码32。
_non=\u none=忽略下一点的所有OSNAP。 谢谢你抽出时间
页:
1
[2]