| 会员登录 立即注册
关注公众号

关注公众号拿干货

CATIA论坛公众号
加入联盟

扫微信(sakula)入联盟

CATIA软件
风格切换

catia教程

搜索

CATIA联盟论坛

[CATIA参数化设计] CATIA VBA二次开发工具|批量导出边界盒尺寸

[复制链接]
lgy_103 发表于 2019-2-12 11:03:06 | 显示全部楼层 |阅读模式
lgy_103
2019-2-12 11:03:06 3076 0 看全部
  前言:本文主要探讨如何基于CATIA VBA实现键导出批量导出装配件的边界盒尺寸到Excel的功能。此外,还将探讨如何终止StartCommand命令调用的命令对话框的方法。

  0视频演示
  

  一、目录

  1. 视频演示

  2. 编程思路

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

  4. 如何获取边界盒尺寸

  5. 如何中止StartCommand调用的命令对话框

  6. VBA中如何延时

  7. 如何设置命令提示栏的消息

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

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

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

  11. SendKeys的使用方法

  12. 参考资料

  二、编程思路

  先在Excel中设计好我们想要导出的模板,然后直接录制宏,完成Excel部分的代码。设计的样式如下图,事实上,我们可以导出Measure Inertia测得的所有参数。
   CATIA VBA二次开发工具|批量导出边界盒尺寸59

  大致的编程思路如下:

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

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

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

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

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

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

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

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

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

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

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

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

  下面的程序实现的功能是:运行程序,然后选择文件夹,程序会自动打开文件夹中的所有零件和装配。接下来,我们根据需要在这个代码基础上加上测量边界盒的尺寸就可以了。剩下的代码大家可以动手写写,这里就不过多说了。
   CATIA VBA二次开发工具|批量导出边界盒尺寸76

  2)在打开的装配文档中,遍历结构树中的一级部品,在新窗口中打开后测量。

  这部分代码大家可以参考文末的如下部分:(有视频演示)

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

  代码实现的功能是,在打开的装配件中,运行脚本,先选择要测量的一级部品,然后程序自动在新的窗口中打开该一级部品,调用“测量惯量“,最后显示边界盒尺寸。

  3)在打开的装配文档中,遍历结构树中的一级部品,直接测量。

  这种方法要解决一个问题,就是如何关闭“Measure Inertia”命令的对话框,后面的内容会详细介绍,先简要说明思路:

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

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

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

  测试的时候还会发现两个问题:

  a.设置高速缓存,打开显示化模式,批量测量时结果不稳定,设计模式稳定。

  b.手动测量报错,自动测量时也会报错。

  四、如何获取边界盒尺寸

  使用测量惯量命令,该命令弹出的命令对话框中是找不到边界盒尺寸BBLx/BBLy/BBLz的。

  但是结构树里我们可以看到参数中是有这个值的。
   CATIA VBA二次开发工具|批量导出边界盒尺寸5

  并且公式里也是找的到的。
   CATIA VBA二次开发工具|批量导出边界盒尺寸64

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

  参数索引有两种方法:

  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 循环显示出所有的参数名称和值,或者直接在结构树上的测量惯量下面数参数顺序,这两种都可以获得我们想要的结果。

  五、如何中止StartCommand调用的命令对话框

  根据目前查过的资料,StartCommand调用的命令对话框是没有办法直接End的。但是有其他替代的办法。目前找到的两种办法分享给大家。

  1)  保存文档时,命令的对话框可以干掉。

  该方法使用如下语句:CATIA.ActiveDocument.Save

  2)  用Sendkeys发送Enter键点击命令的对话框中的确定或者取消按钮

  对于测量惯量,我们发现一个规律,当“Measure Inertia”命令对话框激活时,光标会自动显示在OK按钮上,这个时候如果我们按一个“Enter”键,那么对话框就可以干掉了。
   CATIA VBA二次开发工具|批量导出边界盒尺寸10

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

  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”命令的对话框,并且不会真真打开一个新的窗口。

  第叁种方法测试后,得到的结果还是比较稳定的。

  六、VBA中如何延时

  目前查到的有两种办法,当然肯定还有其他种方法。

  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

  七、如何设置命令提示栏的消息

  CATIA.StatusBar = "MacroFinished"’提示消息
   CATIA VBA二次开发工具|批量导出边界盒尺寸27

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

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

  >>>详细代码如下
   CATIA VBA二次开发工具|批量导出边界盒尺寸61 CATIA VBA二次开发工具|批量导出边界盒尺寸85 CATIA VBA二次开发工具|批量导出边界盒尺寸62 CATIA VBA二次开发工具|批量导出边界盒尺寸83

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

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

  >>>详细代码如下
   CATIA VBA二次开发工具|批量导出边界盒尺寸66 CATIA VBA二次开发工具|批量导出边界盒尺寸93 CATIA VBA二次开发工具|批量导出边界盒尺寸54 CATIA VBA二次开发工具|批量导出边界盒尺寸46

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

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

  >>>视频演示
  

  >>>显示结果如下图
   CATIA VBA二次开发工具|批量导出边界盒尺寸35

  >>>详细代码如下
   CATIA VBA二次开发工具|批量导出边界盒尺寸46 CATIA VBA二次开发工具|批量导出边界盒尺寸25 CATIA VBA二次开发工具|批量导出边界盒尺寸83

  十一、SendKeys的使用方法
CATIA VBA二次开发工具|批量导出边界盒尺寸34 CATIA VBA二次开发工具|批量导出边界盒尺寸13 CATIA VBA二次开发工具|批量导出边界盒尺寸9 CATIA VBA二次开发工具|批量导出边界盒尺寸12 CATIA VBA二次开发工具|批量导出边界盒尺寸77

  >>>详细代码如下

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

  • 您可能感兴趣
您需要登录后才可以回帖 登录 | 立即注册  

本版积分规则 返回列表

lgy_103
限制会员给TA私信

查看:3076 | 回复:0

CATIA教程| CATIA视频| CATIA培训| CATIA下载| CATIA命令| CATIA安装| CATIA插件| CATIA入门| CATIA V5| CATIA论坛
联系电话:18982019507 地址:成都市青羊区二环路西一段155号天祥广场4栋1801
版权所有 ©软易达 •( 蜀ICP备14018086号 )Copyright © 2001-2013 Comsenz Inc. All Rights Reserved.   Powered by Discuz! X3.4
折叠

Sakula小海浪


千人CATIA技术群

加入我们,一起进步

咨询热线
18982019507
微信关注"catia联盟"