Jef! 发表于 2022-7-5 23:12:14

间歇性错误:自动化

多亏了LM的站点,我知道错误是由“程序试图使用vla集合对象的item方法访问该集合中不存在的项”引起的
 
 
第一件事:它是长程序的一部分(我设法找到了我出错的确切点)。
第二件事:我所有的文件都在(同一个)机顶盒打印样式表上
第三件事:在所有文件中,冒犯层列表是正确的(我的dcl ie返回的所有非黑色层列表(“0”Defpoints“BOLT”),以及(层)(包含#)也是正确的
第四件事:红色是产生误差的vla函数
 
 
(defun ApplyBlackPS ( $offendinglayerlistfromdcl$ / l)
(vlax-for l (layers)
   (if (and (not (equal (vlax-get-property l 'PlotStyleName) "Black"));case sensitive!
             (member (vla-get-name l) $offendinglayerlistfromdcl$)
         )
         (vlax-put-property l 'PlotStyleName "Black")
   )
)
)使用(applyblackps冒犯层列表)。。。在“我的文件”(共3个)的1个上,它按预期工作,并将打印样式更改为黑色。在其他2个(共3个)文件中,我得到“错误:自动错误。找不到密钥”
也许我必须“刷新”属性?我试图寻找,但没有找到。我检查了所有文件中图层的dxf列表,没有任何差异。我一无所知,需要一些指导。谢谢
 
 
编辑:如果我手动更改打印样式表并将其放置在除黑色以外的任何其他颜色上,则错误文件的结果相同。但如果我手动将其更改为黑色,然后更改为其他内容,那么它将按预期工作。。。所以我必须“以编程方式刷新”层的属性?怎样

Jef! 发表于 2022-7-5 23:43:40

我找到了vlax put属性失败的原因,但我不确定我做错了什么来实现我得到的结果。让我解释一下这些大台词。
 
 
我以编程方式将ctb转换为stb,然后应用我们的标准。stb文件到每个布局。问题是,在这样做之后,在“错误文件”上,即使图层特性管理器中有“黑色”打印样式,我也发现plotstylename字典不是最新的。
如果我在图层特性管理器中将任何图层打印样式更改为黑色,然后查看字典,它仍然不是完全最新的,但已添加黑色。
因此,字典需要以某种方式更新。。。我的感觉告诉我,如果我试图手动更新字典,它可能(将)导致灾难。我会做我必须做的事,但我宁愿避免走进雷区
 
我有什么选择?
评论、建议和建议比以往任何时候都更受欢迎。

Jef! 发表于 2022-7-6 00:17:06

即使我没有收到回复,因为我收到了100多个视图,我想有些人可能有兴趣了解我找到的解决方法。。
 
 
我在动作贴片中使用了if语句。如果字典里有布莱克,我会按照最初的设计进行处理。如果字典中没有黑色,我将列表存储到forceblackintodictflag变量中,而不是将要处理的层列表提供给将其更改为黑色的函数。然后关闭对话框。卸载对话框后,如果变量存在,我将其转移到另一个函数:
这个函数。。。
我不能百分之百确定在“”中检索可用的打印样式的位置在-layer命令中,与图层特性管理器中一样,将列出表格的每个打印样式(即使不在字典中)。将活动层更改为黑色,然后将其更改回字典中的条目。之后,我将列表转发给ApplyBlackPS函数,瞧!
 
 
我现在在lisp中使用的命令不多,但在那一个上,我没有找到任何其他方法来实现我只需要使用lisp/vlisp/activeX来实现的目标。。。。(尚未)。
页: [1]
查看完整版本: 间歇性错误:自动化