来源:CATIA小蚂蚁
StartCommand是vba一个很好玩的命令。您只需传递要作为参数启动的命令的名称,然后CATIA就可以启动它,就好像您单击了其图标或在“命令栏”框中键入了命令一样。如下是其语法:CATIA.StartCommand“命令名称”
如何知道命令名称呢?
将鼠标悬停在图标上方,或者看CATIA窗口右下角的小文本框.会看到显示的命令名称。命令名称之前会有一个c :,这不是命令名称的一部分,不应该在VB代码中使用。c:语法仅在您手动输入命令栏以告知CATIA正在输入命令时使用。其实下拉菜单和右键菜单中的很多命令也是可以通过startcommand命令来实现.
查找命令名称的另一种方法是通过自定义中的“命令列表”选项卡。这里列出的命令名通常可以由CATIA.StartCommand方法识别。如果您在列表中选择一个项目,通常在对话框底部显示有关该命令的一些有用信息,以帮助您了解其功能。
需要考虑命令有无用户输入要求:
一些命令可以用这种方式直接启动,并且将执行一些任务而无需任何用户输入。但是,大多数命令将需要一些实际的用户输入,因此可能需要制定处理此问题的策略。一般来说,一个命令的用户输入要求将分为四类(按照自动化难度越来越大的顺序列出)
1、没有用户输入要求
2、在命令运行之前需要进行选择参考
3、启动命令后需要简单的击键(可能只需点击确定)
4、需要广泛的用户交互
我们依次进行简单解释:
1、没有用户输入要求
这显然是代码中最简单的命令类型,因为您只需调用命令即可完成。比如,我们需要开发一个批量截图零件并导入到excel文件中的小程序,屏幕截图时,查看器可能会放大,以至于一切都不适合窗口。每次保存图像时,都需要重新设置以确保所有可查看的几何图形都在屏幕上。在这种情况下,“Fit All In”可以帮助我们解决这个问题,并且不需要任何用户输入。(即相当于我们点击了fit all in 这个图标)
CATIA.StartCommand“Fit All In”
执行代码后的动图演示如下
2.在命令运行之前需要进行选择参考
一些需要用户选择的命令实际上允许在命令启动之前进行这些选择。这种情况下一个比较典型的例子就是,提前预选一个元素,然后执行cut命令,其实这种情况完全不需要人机交互,我们可以直接在代码中自动完成即可(需要我们定义一个selection对象,并将要cut的元素加入到selection),代码如下:
动图演示:
3.启动命令后需要简单的击键
某些命令可能会显示一个对话框,您只需发送一个简单的按键,例如按下ENTER键即可完成任务。请注意,要发送击键,您将需要在一个CATIA VBA项目内或在单独的可执行文件之外运行您的代码。脚本语言(CATScript和catvbs)不能向CATIA发送击键。
将曲面元素进行拆解的代码如下(disassemble sendkey enter ),
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sub CATMain()
Set objPart = CATIA.ActiveDocument.Part
Set objSurf = objPart.HybridBodies.Item(1).HybridShapes.Item("Join.1")
Set objSel = CATIA.ActiveDocument.Selection
objSel.Clear
objSel.Add objSurf
CATIA.StartCommand "Disassemble"
Sleep 1000
CATIA.RefreshDisplay = True
SendKeys "{ENTER}"
End Sub
动图如下所示
4.需要广泛的用户交互
如果真的想完全自动化一个更复杂的命令,将不得不使用Windows API,通常称为WinAPI。这是一个高级主题,所以我只介绍这个概念。如果你想了解更多,也许从百度页面开始。WinAPI非常庞大,为了缩小范围,我正在讨论百度页面上的“概述 - 用户界面”中描述的功能。
如您所知,Windows应用程序由各种窗口,工具栏,对话面板和控件(如按钮,复选框,组合框等)组成。Window包涵许多每个所谓句柄的对象(您可以在任务管理器看到有多少在任一给定时间)。因此,如果您想将鼠标单击到特定对话框上的特定按钮,您只需要知道它是否处理,并且您可以使用Windows API来向其发送点击。应用程序真的不知道点击是否由鼠标完成,或者您是否使用WinAPI通过程序发送了点击 - 它们对两者的响应都是相同的。虽然这个概念听起来很简单,但最难的部分是获得您想要使用的特定控件的句柄。
了解命令执行行为
当使用CATIA.StartCommand执行需要用户进行选择或交互的命令后,CATIA不会等待该命令完成,然后继续执行程序的其余部分。这时候需要我们用到延时函数sleep或者如下的延时代码,等对话框完全弹出后,再执行sendkey,或者说我们应该直接去获得弹出对话框的句柄来激活我们的后续事件
'T = Timer
'Do While Timer - T < 2
'CATIA.RefreshDisplay = True
'DoEvents
'Loop
好的 关与startcommand的介绍就到此为止吧!