Can';t找出这个错误
大家好,这段代码来自另一个线程(最近),但是,由于它有点偏离主题,我认为它应该有一个新的线程。
我最初发布这段代码是为了将所有实体从层“0”移动到层“0-From0”,但它一直显示错误,我无法找出原因:
(defun c:0to0(/ ss layers 0lay 0Nlay err)
(if (setq ss (ssget "X" '((8 . "0"))))
(progn
(setq layers (vla-get-layers
(vla-get-ActiveDocument
(vlax-get-acad-object))))
(vlax-for laylayers
(cond ((eq "0" (vla-get-name lay))
(setq 0lay lay))
((eq "0-From0" (vla-get-name lay))
(setq 0Nlay lay))))
(if (not 0Nlay)
(setq 0Nlay (vla-add layers "0-From0")))
(vla-put-color 0Nlay (vla-get-color 0lay))
(vla-put-linetype 0Nlay (vla-get-linetype 0lay))
(vla-put-lineweight 0Nlay (vla-get-lineweight 0lay))
(if (vl-catch-all-error-p
(setq err (vl-catch-all-apply
'(lambda (x) (vla-put-layer x "0-From0"))
(mapcar 'vlax-ename->vla-object
(mapcar 'cadr (ssnamex ss))))))
(princ (strcat "\nError: " (vl-catch-all-error-message err)))))
(princ "\n<!> No Objects Found on Layer \"0\" <!>"))
(princ))
我发布了这段代码,只是为了让我过得去,但原来的代码把我逼疯了,因为我无法找出错误的来源!
(defun c:0to0(/ ss layers 0lay 0Nlay)
(if (setq ss (ssget "X" '((8 . "0"))))
(progn
(setq layers (vla-get-layers
(vla-get-ActiveDocument
(vlax-get-acad-object))))
(vlax-for laylayers
(cond ((eq "0" (vla-get-name lay))
(setq 0lay lay))
((eq "0-From0" (vla-get-name lay))
(setq 0Nlay lay))))
(if (not 0Nlay)
(setq 0Nlay (vla-add layers "0-From0")))
(vla-put-color 0Nlay (vla-get-color 0lay))
(vla-put-linetype 0Nlay (vla-get-linetype 0lay))
(vla-put-lineweight 0Nlay (vla-get-lineweight 0lay))
(mapcar '(lambda (x) (vla-put-layer x "0-From0"))
(mapcar 'vlax-ename->vla-object
(mapcar 'cadr (ssnamex ss)))))
(princ "\n<!> No Objects Found on Layer \"0\" <!>"))
(princ))
非常感谢您的帮助和时间!
干杯
李 你错过了一个mapcar lee,代替vl catch all apply
我认为没有必要捕捉错误,因为您只处理一个层,即第0层。如果它被锁定(第0层),则不会处理所有内容。您需要在开始时解锁层0,因为从层0传输到另一层是您的目标。 谢谢Wizman-
但是,即使我想使用这种错误捕获方法——我认为vl catch all apply以与“mapcar”相同的方式执行,我错了吗?
是的,如果被锁定,也许我应该包括解锁第0层的编码。
干杯
李
它的功能更像“应用”功能。当你用它的另一种形式写的时候,你会看到它。
(mapcar
'(lambda (x)
(if
(vl-catch-all-error-p
(setq err
(vl-catch-all-apply
'vla-put-layer
(list x "0-From0")
)
)
)
(princ (strcat "\nError: "
(vl-catch-all-error-message err)
)
)
)
)
(mapcar 'vlax-ename->vla-object
(mapcar 'cadr (ssnamex ss))
)
)
啊,我现在明白了——我想线索就在名字里
像往常一样为威兹曼干杯
李 你好,李,
我看到了这个帖子,很高兴你能找出代码中的错误。我还想问你关于解锁零层的问题。你能在我的另一个线程中发布一个修改代码,在移动所有实体之前解锁零层吗?
谢谢
没问题,狮子座-可以
页:
[1]