Lee Mac 发表于 2022-7-6 14:50:07

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))


 
非常感谢您的帮助和时间!
 
干杯
 

wizman 发表于 2022-7-6 15:00:40

你错过了一个mapcar lee,代替vl catch all apply
 
 
 
我认为没有必要捕捉错误,因为您只处理一个层,即第0层。如果它被锁定(第0层),则不会处理所有内容。您需要在开始时解锁层0,因为从层0传输到另一层是您的目标。

Lee Mac 发表于 2022-7-6 15:12:15

谢谢Wizman-
 
但是,即使我想使用这种错误捕获方法——我认为vl catch all apply以与“mapcar”相同的方式执行,我错了吗?
 
是的,如果被锁定,也许我应该包括解锁第0层的编码。
 
干杯
 

wizman 发表于 2022-7-6 15:24:43

 
它的功能更像“应用”功能。当你用它的另一种形式写的时候,你会看到它。
 
 

(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))
               )
         )

Lee Mac 发表于 2022-7-6 15:31:49

啊,我现在明白了——我想线索就在名字里
 
 
像往常一样为威兹曼干杯
 

leos98 发表于 2022-7-6 15:40:14

你好,李,
我看到了这个帖子,很高兴你能找出代码中的错误。我还想问你关于解锁零层的问题。你能在我的另一个线程中发布一个修改代码,在移动所有实体之前解锁零层吗?
 
谢谢

Lee Mac 发表于 2022-7-6 15:58:19

 
 
没问题,狮子座-可以
页: [1]
查看完整版本: Can';t找出这个错误