CATIA VBA二次开发工具 | 批量导出边界盒尺寸
Posted CATIA杂货铺
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CATIA VBA二次开发工具 | 批量导出边界盒尺寸相关的知识,希望对你有一定的参考价值。
点击标题下「蓝色微信名」可快速关注
前言:本文主要探讨如何基于CATIA VBA实现键导出批量导出装配件的边界盒尺寸到Excel的功能。此外,还将探讨如何终止StartCommand命令调用的命令对话框的方法。
0视频演示
高清视频请访问如下链接查看:
https://pan.baidu.com/s/1zdmQ7lz2saMPqVTRkOIx7Q
1目录
目录
1. 视频演示
2. 编程思路
3. 批量获取边界盒尺寸的思路
4. 如何获取边界盒尺寸
5. 如何中止StartCommand调用的命令对话框
6. VBA中如何延时
7. 如何设置命令提示栏的消息
8. 代码详解-批量导出装配件的边界盒尺寸OpenInNewWindow
9. 代码详解-批量导出装配件的边界盒尺寸Sendkeys
10. 附录代码-选择装配件在新窗口打开后显示边界盒尺寸
11. SendKeys的使用方法
12. 参考资料
2编程思路
先在Excel中设计好我们想要导出的模板,然后直接录制宏,完成Excel部分的代码。设计的样式如下图,事实上,我们可以导出Measure Inertia测得的所有参数。
大致的编程思路如下:
1)批量获取XXX的思路有哪些?
2)如何获取到边界盒的尺寸?
3)如果通过测量获取,如何调用“Measure Inertia”命令。
4)使用StartCommand “命令”方式调用。
5)如何用代码获取到边界盒尺寸值?
6)如何关闭“Measure Inertia”命令对话框,以便进行下一次测量。
7)如何将结果导出到Excel中?
8)如何新建Excel,设置格式等?
9)测试,修复Bug,提前规避Error。
3批量获取边界盒尺寸的思路
批量获取边界盒尺寸的思路有如下几种:
1)遍历文件夹中的零部件,打开后获取,再关闭。
下面的程序实现的功能是:
运行程序,然后选择文件夹,程序会自动打开文件夹中的所有零件和装配。接下来,我们根据需要在这个代码基础上加上测量边界盒的尺寸就可以了。剩下的代码大家可以动手写写,这里就不过多说了。
2)在打开的装配文档中,遍历结构树中的一级部品,在新窗口中打开后测量。
这部分代码大家可以参考文末的如下部分:(有视频演示)
>>>9.附录代码-选择装配件在新窗口打开后显示边界盒尺寸
代码实现的功能是,在打开的装配件中,运行脚本,先选择要测量的一级部品,然后程序自动在新的窗口中打开该一级部品,调用“测量惯量“,最后显示边界盒尺寸。
3)在打开的装配文档中,遍历结构树中的一级部品,直接测量。
这种方法要解决一个问题,就是如何关闭“Measure Inertia”命令的对话框,后面的内容会详细介绍,先简要说明思路:
a.使用Sendkeys+延时来关闭“Measure Inertia”命令的对话框。这种方法时灵时不了的,测得的结果不太稳定。
b.通过调用“Open in New window”命令,刚好可以关闭“Measure Inertia”命令的对话框,并且不会真真打开一个新的窗口。这种方法测试后,得到的结果还是比较稳定的。
c.通过打开新的窗口,在新的窗口里调用“Measure Inertia”命令的对话框,然后通过Save文档来关闭“Measure Inertia”命令的对话框。
测试的时候还会发现两个问题:
a.设置高速缓存,打开显示化模式,批量测量时结果不稳定,设计模式稳定。
b.手动测量报错,自动测量时也会报错。
4如何获取边界盒尺寸
使用测量惯量命令,该命令弹出的命令对话框中是找不到边界盒尺寸
BBLx/BBLy/BBLz的。
但是结构树里我们可以看到参数中是有这个值的。
并且公式里也是找的到的。
由此,我们不难猜出,通过参数索引的方式是可以获取到边界盒尺寸的。
参数索引有两种方法:
1).通过名称搜索
.Parameters.GetItem("BBLx").Value
2) 通过数字搜索
.Parameters.GetItem(数字).Value
我在装配结构树中遍历一级部品,先调用测量惯量的命令,然后通过
CATIA.ActiveDocument.Parameters.GetItem("BBLx").Value方法获取每个一级部品的边界盒尺寸时,遇到了一个很难处理的Err,所有的一级部品获取的边界盒的值都是一样的。
接下来,通过CATIA.ActiveDocument.Parameters.GetItem("BBLx").Name查找原因。发现,当前激活的文档中包括了所有一级部品的参数,所以当前
CATIA.ActiveDocument.Parameters.GetItem("BBLx").Value只会获取到调用的第一个测量惯量里的边界盒的尺寸值。也就是说,我们能对每个一级部品调用测量惯量进行测量,虽然结构树上显示的测量惯量的值也是正确的,但是我却没有办法获取到正确的测量惯量下面的边界盒尺寸。大家应该有好的办法,如果能分享给我就更好了。
后来想了一个替代的办法。思路分享给大家。
CATIA.ActiveDocument.Parameters这里面包括了所有一级部品的边界盒尺寸,我们知道每次调用测量惯量命令,新增加的测量惯量里的值都是加到CATIA.ActiveDocument.Parameters参数顺序里的最后的。
那么,我们用“CATIA.ActiveDocument.Parameters.Count-边界盒参数的倒数位数”就能得到正确的边界盒的索引值,然后CATIA.ActiveDocument.Parameters.Item(索引值).Value就能得到我们想要的结果。
至于边界盒参数的倒数位数怎么计算,我们可以用for next 循环显示出所有的参数名称和值,或者直接在结构树上的测量惯量下面数参数顺序,这两种都可以获得我们想要的结果。
5如何中止StartCommand调用的命令对话框
根据目前查过的资料,StartCommand调用的命令对话框是没有办法直接End的。但是有其他替代的办法。目前找到的两种办法分享给大家。
1) 保存文档时,命令的对话框可以干掉。
该方法使用如下语句:
CATIA.ActiveDocument.Save
2) 用Sendkeys发送Enter键点击命令的对话框中的确定或者取消按钮
对于测量惯量,我们发现一个规律,当“Measure Inertia”命令对话框激活时,光标会自动显示在OK按钮上,这个时候如果我们按一个“Enter”键,那么对话框就可以干掉了。
接下来我们用代码来模拟上述过程,代码如下:
PrivateDeclare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
'Conectto Wscript
DimWshShell
SetWshShell = CreateObject("WScript.Shell")
CATIA.RefreshDisplay= True 'Refresh to delay
CallSleep(3000) 'Delay 3s
CallWshShell.AppActivate("Measure Inertia", True) 'Active Frame
'CallWshShell.SendKeys("%{TAB}", True) '% is Alt
CallWshShell.SendKeys("{ENTER}", True) 'Enter
3)通过调用“Open in New window”命令,刚好可以关闭“Measure Inertia”命令的对话框,并且不会真真打开一个新的窗口。
第三种方法测试后,得到的结果还是比较稳定的。
6VBA中如何延时
目前查到的有两种办法,当然肯定还有其他种方法。
1)执行DoEvents事件进行循环
For =1 to 20000
DoEvents ’无意义事件
Next
2)调用Windows APl Sleep延迟
PrivateDeclare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Call Sleep(3000) 'Delay 3s
7如何设置命令提示栏的消息
CATIA.StatusBar = "MacroFinished"’提示消息
8代码详解-批量导出装配件的边界盒尺寸OpenInNewWindow
通过调用“Open in New window”命令,刚好可以关闭“Measure Inertia”命令的对话框,并且不会真真打开一个新的窗口。这种方法测试后,得到的结果还是比较稳定的。
>>>详细代码如下
9代码详解-批量导出装配件的边界盒尺寸Sendkeys
使用Sendkeys+延时来关闭“Measure Inertia”命令的对话框。这种方法时灵时不了的,测得的结果不太稳定。
>>>详细代码如下
10附录代码-选择装配件在新窗口打开后显示边界盒尺寸
通过打开新的窗口,在新的窗口里调用“Measure Inertia”命令的对话框,然后通过Save文档来关闭“Measure Inertia”命令的对话框。
>>>视频演示
>>>显示结果如下图
>>>详细代码如下
11SendKeys的使用方法
资料来源:
https://docplayer.net/22331804-Vb-scripting-for-catia-v5-sendkeys-example-by-emmett-ross-may-2015.html
>>>详细代码如下
12参考资料
DSYAutomation.chm帮助文档
CATIA二次开发技术基础+电子工业出版社_200....pdf
Eng-tips论坛
https://www.eng-tips.com/viewthread.cfm?qid=34453
https://www.eng-tips.com/viewthread.cfm?qid=341826
Sendkeys用法
https://docplayer.net/22331804-Vb-scripting-for-catia-v5-sendkeys-example-by-emmett-ross-may-2015.html
本文涉及到的代码请访问如下链接下载:
https://pan.baidu.com/s/1nBDibAgV5DtMZG3NFytRwQ
提取码:mozy
复制这段内容后打开百度网盘手机App,操作更方便哦
lingshuying1991
星空不问赶路人,岁月不负有心人。
笔耕不辍,致力于参与并引领行业发展!
以上是关于CATIA VBA二次开发工具 | 批量导出边界盒尺寸的主要内容,如果未能解决你的问题,请参考以下文章
录音盒那家 支持二次开发,并且可以电脑上可以批量拨号,耳麦通话的?