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)
)
尝试一下:
(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
诚然,我在上面遇到的错误可能是由于我的办公室使用了不同的标准。
希望这有帮助! 谢谢Renderman
这对很多人都有帮助。
感谢大家对“捕捉错误”、“缓解错误”和“处理错误”的关注 (vl catch all apply)是否捕捉错误或错误对象,如果错误不存在(vl catch all apply)将返回nil,或者在这种情况下,层固定或层跳过
我运行了宏,得到了每个图层名的列表,图层已修复,但我的所有图层仍保持PlotStyleName Style\u 1
我本来以为我会得到一个跳过的每个图层名的列表,因为我的PlotStyleName仍然是Style\u 1
如果宏会发现错误,我会收到错误对象的错误消息吗? 我想:
Renderman,
关于您的代码:
层表将始终存在(并且永远不会为空),因此我认为这个IF语句是不相关的。
在上面的代码中,没有测试错误,并且将始终打印“Layer Fixed”消息。
在这种情况下不需要lambda函数-函数vla put plotstylename可以直接应用于参数列表。最好测试错误对象,如果存在,则通知用户。
然而,我同意这一点——在大多数情况下,我认为vl-catch-all-apply函数是一种“懒人”方法,因为人们总是可以将整个程序封装在其中,并且没有任何错误捕获。。。也就是说,这些事情是有时间和地点的:例如,在代码中,导致错误的条件可能无法由开发人员直接确定,可能会保证其使用。
对不起,所有的批评 李
你的代码运行得很好,但现在我的问题围绕着我收到的错误消息。
一切看起来都很好,但当我运行我的代码时,我得到了一个自动错误。未找到密钥。但有趣的是,如果我手动将一层更改为“绘制时”,然后运行我的代码,它就会工作。
如果“绘制时”不是我的活动打印样式表的一部分,但它是的话,我会理解的。
有什么想法吗?
谢谢 注意,我的代码使用“As_draw”,而不是“As draw”
是的,我抓到了,我想我得到了一个格里姆林,因为这一切看起来似乎都应该工作。
我正在处理的这个文件唯一不同的地方是它是一个TurboCAD到ACAD的翻译,我将pstyles从ctb转换为stb,出于某种原因,它是qwerky。
无论如何,这对我来说是一个学习错误捕捉的好机会,
谢谢 不客气
别担心,李。
正如我的签名所说——被真理冒犯的人,在寻求智慧的人中没有地位。
页:
[1]
2