乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 32|回复: 10

[编程交流] vl捕捉全部应用(捕捉

[复制链接]

23

主题

117

帖子

87

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
123
发表于 2022-7-6 09:56:49 | 显示全部楼层 |阅读模式
我收到一条错误消息(自动错误。未找到密钥)
 
一些研究告诉我,我的宏所寻找的东西并不存在。我发现了一些使用“vl catch all apply”的示例代码,但在如何在代码中使用它时迷失了方向。我发现的示例在形式上似乎有点简单或复杂,我不知道如何将其应用到我的代码中。
 
我可以要求一些关于使用vl catch all apply的指导吗
 
谢谢
 
 
  1. (defun C:CleanPlot ()
  2. (vl-load-com)
  3.     (setq
  4.       acadObject                 (vlax-get-acad-object)
  5.       acadActiveDocument    (vla-get-ActiveDocument acadObject)
  6.       acadActiveLayout        (vla-get-ActiveLayout acadActiveDocument)
  7.       acadLayers                 (vla-get-Layers acadActiveDocument)
  8.     )
  9. (vlax-for Layer acadLayers
  10.    (if
  11.      (wcmatch (vla-get-PlotStyleName Layer) "Normal,Style_1")
  12.      (vla-put-PlotStyleName Layer "As Drawn")
  13.    )
  14. )
  15. (princ)
  16. )
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 10:05:39 | 显示全部楼层
尝试一下:
 
  1. (defun C:CleanPlot  (/ layerTable)
  2. (vl-load-com)
  3. (vla-startundomark
  4.    (cond (*activeDoc*)
  5.          ((setq *activeDoc*
  6.                  (vla-get-activedocument
  7.                    (vlax-get-acad-object))))))
  8. (if (setq layerTable (vla-get-layers *activeDoc*))
  9.    (vlax-for layer layerTable
  10.      (if (vl-position (vla-get-PlotStyleName layer) '("Normal" "Style_1"))
  11.       (vl-catch-all-apply
  12.         '(lambda (x)
  13.            (prompt (strcat "\n  <!>  layer Fixed   <!>  " (vla-get-name layer)))
  14.            (vla-put-PlotStyleName x "As Drawn"))
  15.         (list layer))
  16.        (prompt (strcat "\n  >>  layer Skipped  >>   " (vla-get-name layer))))))
  17. (vla-endundomark *activeDoc*)
  18. (princ))

 
 
我的两分钱……”“捕捉错误”与“缓解”或“处理错误”不同。
 
例如:
 
如果阻止在命令行上显示,则无法完成任务。
 
  1. _$
  2. ; error: Automation Error. The drawing is in color dependent plot style mode

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

使用道具 举报

23

主题

117

帖子

87

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
123
发表于 2022-7-6 10:09:34 | 显示全部楼层
谢谢Renderman
 
这对很多人都有帮助。
 
感谢大家对“捕捉错误”、“缓解错误”和“处理错误”的关注
回复

使用道具 举报

23

主题

117

帖子

87

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

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

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

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

使用道具 举报

23

主题

117

帖子

87

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
123
发表于 2022-7-6 10:26:56 | 显示全部楼层

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

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:35:31 | 显示全部楼层
注意,我的代码使用“As_draw”,而不是“As draw”
回复

使用道具 举报

23

主题

117

帖子

87

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
123
发表于 2022-7-6 10:40:14 | 显示全部楼层
 
是的,我抓到了,我想我得到了一个格里姆林,因为这一切看起来似乎都应该工作。
 
我正在处理的这个文件唯一不同的地方是它是一个TurboCAD到ACAD的翻译,我将pstyles从ctb转换为stb,出于某种原因,它是qwerky。
 
无论如何,这对我来说是一个学习错误捕捉的好机会,
 
谢谢
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:49:34 | 显示全部楼层
不客气
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 10:53:59 | 显示全部楼层
 
别担心,李。
 
正如我的签名所说——被真理冒犯的人,在寻求智慧的人中没有地位。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-7 00:09 , Processed in 0.721380 second(s), 83 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表