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测得的所有参数。

CATIA VBA二次开发工具 | 批量导出边界盒尺寸


大致的编程思路如下:

1)批量获取XXX的思路有哪些?

2)如何获取到边界盒的尺寸?

3)如果通过测量获取,如何调用“Measure Inertia”命令。

4)使用StartCommand “命令”方式调用。

5)如何用代码获取到边界盒尺寸值?

6)如何关闭“Measure Inertia”命令对话框,以便进行下一次测量。

7)如何将结果导出到Excel中?

8)如何新建Excel,设置格式等?

9)测试,修复Bug,提前规避Error。


3批量获取边界盒尺寸的思路


批量获取边界盒尺寸的思路有如下几种:


1)遍历文件夹中的零部件,打开后获取,再关闭。


下面的程序实现的功能是:

运行程序,然后选择文件夹,程序会自动打开文件夹中的所有零件和装配。接下来,我们根据需要在这个代码基础上加上测量边界盒的尺寸就可以了。剩下的代码大家可以动手写写,这里就不过多说了。


CATIA VBA二次开发工具 | 批量导出边界盒尺寸


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的。

但是结构树里我们可以看到参数中是有这个值的。


CATIA VBA二次开发工具 | 批量导出边界盒尺寸


并且公式里也是找的到的。


CATIA VBA二次开发工具 | 批量导出边界盒尺寸


由此,我们不难猜出,通过参数索引的方式是可以获取到边界盒尺寸的。

参数索引有两种方法:

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”键,那么对话框就可以干掉了。


CATIA VBA二次开发工具 | 批量导出边界盒尺寸


接下来我们用代码来模拟上述过程,代码如下:

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"’提示消息


CATIA VBA二次开发工具 | 批量导出边界盒尺寸



8代码详解-批量导出装配件的边界盒尺寸OpenInNewWindow


通过调用“Open in New window”命令,刚好可以关闭“Measure Inertia”命令的对话框,并且不会真真打开一个新的窗口。这种方法测试后,得到的结果还是比较稳定的。


>>>详细代码如下

CATIA VBA二次开发工具 | 批量导出边界盒尺寸

CATIA VBA二次开发工具 | 批量导出边界盒尺寸

CATIA VBA二次开发工具 | 批量导出边界盒尺寸

CATIA VBA二次开发工具 | 批量导出边界盒尺寸


9代码详解-批量导出装配件的边界盒尺寸Sendkeys


使用Sendkeys+延时来关闭“Measure Inertia”命令的对话框。这种方法时灵时不了的,测得的结果不太稳定。


>>>详细代码如下

CATIA VBA二次开发工具 | 批量导出边界盒尺寸

CATIA VBA二次开发工具 | 批量导出边界盒尺寸

CATIA VBA二次开发工具 | 批量导出边界盒尺寸

CATIA VBA二次开发工具 | 批量导出边界盒尺寸

10附录代码-选择装配件在新窗口打开后显示边界盒尺寸


通过打开新的窗口,在新的窗口里调用“Measure Inertia”命令的对话框,然后通过Save文档来关闭“Measure Inertia”命令的对话框。


>>>视频演示


CATIA VBA二次开发工具 | 批量导出边界盒尺寸


>>>显示结果如下图


CATIA VBA二次开发工具 | 批量导出边界盒尺寸


>>>详细代码如下

CATIA VBA二次开发工具 | 批量导出边界盒尺寸

CATIA VBA二次开发工具 | 批量导出边界盒尺寸

CATIA VBA二次开发工具 | 批量导出边界盒尺寸


11SendKeys的使用方法


资料来源:

https://docplayer.net/22331804-Vb-scripting-for-catia-v5-sendkeys-example-by-emmett-ross-may-2015.html


CATIA VBA二次开发工具 | 批量导出边界盒尺寸

CATIA VBA二次开发工具 | 批量导出边界盒尺寸

CATIA VBA二次开发工具 | 批量导出边界盒尺寸

CATIA VBA二次开发工具 | 批量导出边界盒尺寸

CATIA VBA二次开发工具 | 批量导出边界盒尺寸


>>>详细代码如下

CATIA VBA二次开发工具 | 批量导出边界盒尺寸


12参考资料


  1. DSYAutomation.chm帮助文档

  2. CATIA二次开发技术基础+电子工业出版社_200....pdf

  3. Eng-tips论坛

    https://www.eng-tips.com/viewthread.cfm?qid=34453

    https://www.eng-tips.com/viewthread.cfm?qid=341826

  4. Sendkeys用法

    https://docplayer.net/22331804-Vb-scripting-for-catia-v5-sendkeys-example-by-emmett-ross-may-2015.html

  5. 本文涉及到的代码请访问如下链接下载:

    https://pan.baidu.com/s/1nBDibAgV5DtMZG3NFytRwQ
    提取码:mozy
    复制这段内容后打开百度网盘手机App,操作更方便哦



lingshuying1991

星空不问赶路人,岁月不负有心人。

笔耕不辍,致力于参与并引领行业发展!





以上是关于CATIA VBA二次开发工具 | 批量导出边界盒尺寸的主要内容,如果未能解决你的问题,请参考以下文章

录音盒那家 支持二次开发,并且可以电脑上可以批量拨号,耳麦通话的?

NX二次开发-将工程图视图+尺寸的最大边界导出图片

怎样用VB对AutoCAD 进行二次开发?急!急!急!

Automation(以下简称自动化)与CAA的区别--Catia 二次开发方法比较

vbscript 批量导出VBA文件

使用VBA代码访问CATIA中的用户定义属性