cadman6735 发表于 2022-7-6 09:56:49

vl捕捉全部应用(捕捉

我收到一条错误消息(自动错误。未找到密钥)
 
一些研究告诉我,我的宏所寻找的东西并不存在。我发现了一些使用“vl catch all apply”的示例代码,但在如何在代码中使用它时迷失了方向。我发现的示例在形式上似乎有点简单或复杂,我不知道如何将其应用到我的代码中。
 
我可以要求一些关于使用vl catch all apply的指导吗
 
谢谢
 
 

(defun C:CleanPlot ()

(vl-load-com)

    (setq
      acadObject               (vlax-get-acad-object)
      acadActiveDocument    (vla-get-ActiveDocument acadObject)
      acadActiveLayout      (vla-get-ActiveLayout acadActiveDocument)
      acadLayers               (vla-get-Layers acadActiveDocument)
    )

(vlax-for Layer acadLayers
   (if
   (wcmatch (vla-get-PlotStyleName Layer) "Normal,Style_1")
   (vla-put-PlotStyleName Layer "As Drawn")
   )
)

(princ)
)

BlackBox 发表于 2022-7-6 10:05:39

尝试一下:
 

(defun C:CleanPlot(/ layerTable)
(vl-load-com)
(vla-startundomark
   (cond (*activeDoc*)
         ((setq *activeDoc*
               (vla-get-activedocument
                   (vlax-get-acad-object))))))
(if (setq layerTable (vla-get-layers *activeDoc*))
   (vlax-for layer layerTable
   (if (vl-position (vla-get-PlotStyleName layer) '("Normal" "Style_1"))
      (vl-catch-all-apply
      '(lambda (x)
         (prompt (strcat "\n<!>layer Fixed   <!>" (vla-get-name layer)))
         (vla-put-PlotStyleName x "As Drawn"))
      (list layer))
       (prompt (strcat "\n>>layer Skipped>>   " (vla-get-name layer))))))
(vla-endundomark *activeDoc*)
(princ))

 
 
我的两分钱……”“捕捉错误”与“缓解”或“处理错误”不同。
 
例如:
 
如果阻止在命令行上显示,则无法完成任务。
 

_$
; error: Automation Error. The drawing is in color dependent plot style mode

 
 
诚然,我在上面遇到的错误可能是由于我的办公室使用了不同的标准。
 
希望这有帮助!

cadman6735 发表于 2022-7-6 10:09:34

谢谢Renderman
 
这对很多人都有帮助。
 
感谢大家对“捕捉错误”、“缓解错误”和“处理错误”的关注

cadman6735 发表于 2022-7-6 10:18:44

(vl catch all apply)是否捕捉错误或错误对象,如果错误不存在(vl catch all apply)将返回nil,或者在这种情况下,层固定或层跳过
 
 
我运行了宏,得到了每个图层名的列表,图层已修复,但我的所有图层仍保持PlotStyleName Style\u 1
 
我本来以为我会得到一个跳过的每个图层名的列表,因为我的PlotStyleName仍然是Style\u 1
 
 
 
如果宏会发现错误,我会收到错误对象的错误消息吗?

Lee Mac 发表于 2022-7-6 10:21:31

我想:
 
Renderman,
 
关于您的代码:
 
 
层表将始终存在(并且永远不会为空),因此我认为这个IF语句是不相关的。
 
 
在上面的代码中,没有测试错误,并且将始终打印“Layer Fixed”消息。
 
在这种情况下不需要lambda函数-函数vla put plotstylename可以直接应用于参数列表。最好测试错误对象,如果存在,则通知用户。
 
 
然而,我同意这一点——在大多数情况下,我认为vl-catch-all-apply函数是一种“懒人”方法,因为人们总是可以将整个程序封装在其中,并且没有任何错误捕获。。。也就是说,这些事情是有时间和地点的:例如,在代码中,导致错误的条件可能无法由开发人员直接确定,可能会保证其使用。
 
对不起,所有的批评

cadman6735 发表于 2022-7-6 10:26:56


 
你的代码运行得很好,但现在我的问题围绕着我收到的错误消息。
 
一切看起来都很好,但当我运行我的代码时,我得到了一个自动错误。未找到密钥。但有趣的是,如果我手动将一层更改为“绘制时”,然后运行我的代码,它就会工作。
 
如果“绘制时”不是我的活动打印样式表的一部分,但它是的话,我会理解的。
 
有什么想法吗?
 
谢谢

Lee Mac 发表于 2022-7-6 10:35:31

注意,我的代码使用“As_draw”,而不是“As draw”

cadman6735 发表于 2022-7-6 10:40:14

 
是的,我抓到了,我想我得到了一个格里姆林,因为这一切看起来似乎都应该工作。
 
我正在处理的这个文件唯一不同的地方是它是一个TurboCAD到ACAD的翻译,我将pstyles从ctb转换为stb,出于某种原因,它是qwerky。
 
无论如何,这对我来说是一个学习错误捕捉的好机会,
 
谢谢

Lee Mac 发表于 2022-7-6 10:49:34

不客气

BlackBox 发表于 2022-7-6 10:53:59

 
别担心,李。
 
正如我的签名所说——被真理冒犯的人,在寻求智慧的人中没有地位。
页: [1] 2
查看完整版本: vl捕捉全部应用(捕捉