脚本错误
大家好几年来,我一直在使用下面的脚本计算dwg中的线条长度,没有问题。
今天我得到了以下错误。。。
“如果未事先调用(*push error using command*),则无法从*error*调用(命令)。
建议将(命令)调用转换为(命令-s)。"
我不是程序员,所以我看不出问题出在哪里。有人知道哪里有问题吗?
非常感谢
抢劫
脚本错误。txt文件
脚本错误。txt文件 结果是我们办公室的其他用户运行这个脚本没有任何问题,所以出现了另一个问题。
我被难住了,时间不多了。 这将有助于张贴在正确的论坛。我已经将您的帖子转移到AutoLISP、Visual LISP和DCL论坛。 很好,谢谢你把它搬过来。 因此,我只不过是将(vl load com)添加到您的“脚本”中,并将所有“命令”重命名为“command-s”,为我测试和工作:
(defun dxf (n ed) (cdr (assoc n ed)))
(defun bom-code (ssfilter / errexit undox restore
*error* olderroldcmdecho %l %t
sset %i en ed p1 p2
ot a1 a2 r
)
(defun errexit (s)
(princ)
(restore)
)
(defun undox ()
(command-s "._undo" "_E")
(setvar "cmdecho" oldcmdecho)
(setq *error* olderr)
(princ)
)
(setq olderr*error*
restore undox
*error* errexit
)
(setq oldcmdecho (getvar "cmdecho"))
(setvar "cmdecho" 0)
(command-s "._UNDO" "_BE")
(setq %i 0
%t 0
)
(vl-load-com)
(setq sset (ssget ssfilter))
(if sset
(progn
(princ "\nLengths:")
(repeat (sslength sset)
(setq en (ssname sset %i))
(setq ed (entget en))
(setq ot (dxf 0 ed))
(setq curve (vlax-ename->vla-object en))
(if (vl-catch-all-error-p
(setq len (vl-catch-all-apply
'vlax-curve-getDistAtParam
(list curve
(vl-catch-all-apply
'vlax-curve-getEndParam
(list curve)
)
)
)
)
)
nil
len
)
(setq %l len)
(setq %i (1+ %i)
%t (+ %l %t)
)
(terpri)
;(princ %l )
(princ (rtos %l (getvar "lunits")(getvar "luprec")))
)
(princ "\nTotal = ")
;(princ %t)
(princ (rtos %t (getvar "lunits")(getvar "luprec")))
(textpage)
)
)
(setq sset nil)
(restore)
)
(defun bom-code-old (ssfilter / errexit undox restore
*error* olderroldcmdecho %l %t
sset %i en ed p1 p2
ot a1 a2 r
)
(defun errexit (s)
(princ)
(restore)
)
(defun undox ()
(command-s "._undo" "_E")
(setvar "cmdecho" oldcmdecho)
(setq *error* olderr)
(princ)
)
(setq olderr*error*
restore undox
*error* errexit
)
(setq oldcmdecho (getvar "cmdecho"))
(setvar "cmdecho" 0)
(command-s "._UNDO" "_BE")
(setq %i 0
%t 0
)
(setq sset (ssget ssfilter))
(if sset
(progn
(princ "\nLengths:")
(repeat (sslength sset)
(setq en (ssname sset %i))
(setq ed (entget en))
(setq ot (dxf 0 ed))
(cond
((= ot "LINE")
(setq p1 (dxf 10 ed)
p2 (dxf 11 ed)
%l (distance p1 p2)
)
)
((= ot "ARC")
(setq a1 (dxf 50 ed)
a2 (dxf 51 ed)
r(dxf 40 ed)
%l (* r (abs (- a2 a1)))
)
)
(t
(command-s "._area" "_obj" en)
(setq %l (getvar "perimeter"))
)
)
(setq %i (1+ %i)
%t (+ %l %t)
)
(terpri)
(princ %l)
)
(princ "\nTotal = ")
(princ %t)
(textpage)
)
)
(setq sset nil)
(restore)
)
(defun c:lmeasure ()
(initget "Lines Arcs Polylines Splines ALL")
(setq ans (getkword
"Enter an option : "
)
)
(cond
((= ans "Lines") (c:bom_lines))
((= ans "Arcs") (c:bom_arcs))
((= ans "Polylines") (c:bom_polylines))
((= ans "Splines") (c:bom_splines))
(t
(bom-code '((-4 . "<OR")
(0 . "LINE")
(0 . "ARC")
(0 . "POLYLINE")
(0 . "LWPOLYLINE")
(0 . "SPLINE")
(-4 . "OR>")
)
)
)
)
(princ)
)
(defun c:bom_lines ()
(bom-code '((0 . "LINE")))
(princ)
)
(defun c:bom_arcs ()
(bom-code '((0 . "ARC")))
(princ)
)
(defun c:bom_polylines ()
(bom-code '((-4 . "<OR")
(0 . "POLYLINE")
(0 . "LWPOLYLINE")
(-4 . "OR>")
)
)
(princ)
)
(defun c:bom_splines ()
(bom-code '((0 . "SPLINE")))
(princ)
)
(vl-load-com)
有趣的代码,我可能会重写它进行练习。 谢谢Grrr,似乎发生了一些奇怪的事情。我不再收到错误消息,但也没有收到值。请参见图。
它再次给了我的同事们想要的结果,所以我的ACADM安装似乎有问题。
至少我知道代码是对的。我前一段时间从Cadtutor那里拿到的,它对我来说是无价的。 回避问题。。。你的系统发生了什么事,你是唯一一个无法运行到现在为止运行完美的脚本的人?最近发生了什么变化?
是否尝试关闭然后重新启动AutoCAD?
您最近下载并使用过任何自定义lisp例程吗?
你最近有没有什么原因不明的电脑问题? 这可能很有趣 这就是我绞尽脑汁想弄明白的。
我关闭并重新启动了不止一次,我重置了ACAD设置,导入了同事设置(脚本在其PC上运行良好),但仍然没有任何乐趣。
绝对没有下载其他自定义lisp例程,也没有遇到任何其他PC问题。
我唯一能想到的是周五我们进行了一些Inventor培训,讲师坐在我的电脑前,插上鼠标,还有他的HD安装了一些额外的内容库,然后开始了Inventor的工作。我已经和他谈过了,他想不出是什么原因导致了我今天的问题,尽管这似乎太巧合了。 Jingles先生,请尝试以下代码以确定是否是visual lisp扩展失败:
(defun C:test ( / s o len )
(alert "\nSelect a line to display its length. ")
(if (setq s (ssget "_+.:E:S" (list (cons 0 "LINE"))))
(progn
(setq o (vlax-ename->vla-object (ssname s 0)))
(setq len (vlax-curve-getDistAtParam o (vlax-curve-getEndParam o)))
(alert (strcat "\nLine length is: " (rtos len 2 2) " units."))
)
)
(princ)
)
(vl-load-com)(princ)
页:
[1]
2