如何使用StartCommand方法
https://v5vb.wordpress.com/2010/01/20/startcommand/
在本文中,我将展示如何从您的代码中启动几乎所有交互式CATIA命令。当我需要在程序中使用的命令未通过自动化API公开时,有时会使用此方法。在少数情况下,从程序中启动实际的交互式命令可能会很有用。这使用户可以与熟悉的CATIA对话框进行交互以完成某些任务,但是我将指出一个潜在的问题,该问题将取决于命令和您的程序流程。
这个怎么运作
CATIA Application对象提供了StartCommand方法。您只需将要启动的命令的名称作为参数传递,然后CATIA即可启动它,就像您单击其图标或在“电源输入”框中键入命令一样。这是一般语法,
|
CATIA.StartCommand “CommandName”
|
如何找出命令名称
有几种方法可以找出可用的命令名称。通常,我尝试做的第一件事是将鼠标悬停在该图标上,然后仅在Power Input框的左侧看。如果您不熟悉它,那是CATIA窗口右下角的小文本框。
[图片上传失败...(image-3a20bf-1597934107828)]
在这里,您经常会看到显示的命令名称(在上图中是Line命令)。命令名称前面会有一个c :,但要意识到这不是命令名称的一部分,因此不应在您的VB代码中使用。仅当您在电源输入框中手动键入以告诉CATIA输入命令时,才使用c:语法。这种使用鼠标悬停在命令上方的常规技术也适用于主下拉菜单和上下文(右键单击)菜单中的许多项目。
查找命令名称的另一种方法是从主菜单中选择“查看”,然后选择“命令列表”。这将显示所有可用命令名称的列表。此处列出的命令名称通常由CATIA.StartCommand方法识别。另外,如果您在列表中选择一个项目,则该项目通常(但并非总是)在对话框面板的底部显示有关该命令的一些有用信息,以帮助您了解其功能。
考虑命令的用户输入要求
某些命令可以通过这种方式启动,并且无需用户输入即可执行某些任务。但是,大多数命令将需要一些实际的用户输入,因此您可能必须制定一种策略来处理此问题。通常,命令的用户输入要求将分为四类(以增加自动化处理难度的顺序列出):
- 无需用户输入
- 在运行命令之前需要进行选择
- 启动命令后,只需进行简单的按键操作(可能只是单击“确定”)
- 需要广泛的用户交互。
让我们深入研究这四个类别,看看如何在代码中处理它们中的每个类别。
1.无需用户输入
显然,这是在代码中使用的最简单的命令类型,因为您需要做的就是调用命令,然后完成。例如,也许您需要保存某些几何形状的屏幕截图,但可能会将查看器放大,以使所有内容都无法容纳在窗口中。您需要重新设置框架,以确保每次保存图像时所有可见的几何图形都在屏幕上。在这种情况下,命令名称为“ Fit All In”,它不需要任何用户输入,因此只需调用它就可以了-无需考虑。
|
CATIA.StartCommand “Fit All
In``”
|
2.在运行命令之前,需要进行选择
实际上,某些需要用户选择的命令将允许在启动命令之前进行那些选择。尽管并非在所有情况下都是如此,所以您只需要尝试找出答案即可。我过去使用的这种情况的一个很好的例子是更改草图支撑。如您所知,草图必须位于平面,平面或平面上。因此,如果您需要将现有草图从一种支撑移至另一种支撑,则实际上可以通过自动化来完成,而无需用户进行任何此类交互,
|
'Get the part object (Assume the part is open in it’s own window)
Set
objPart = CATIA.ActiveDocument.Part
'Get the first sketch in the first geometrical set
Set
objSketch = objPart.HybridBodies.Item(1).HybridSketches.Item(1)
'Get the plane called Plane.1 in the first geometrical set
Set
objPlane = objPart.HybridBodies.Item(1).HybridShapes.Item(“Plane.1”)
'Select the sketch first then the new support plane
Set
objSel = CATIA.ActiveDocument.Selection
objSel.Clear
objSel.Add objSketch
objSel.Add objPlane
'Call the Change Sketch Support command
CATIA.StartCommand “Change Sketch Support”
|
3.启动命令后,只需简单的击键
某些命令可能会显示一个对话框,您只需要发送一个简单的按键即可,例如按ENTER键即可完成任务。请注意,要发送击键,您将需要在CATIA VBA项目内部或在CATIA外部的代码从单独的可执行文件运行。脚本语言(CATScript和catvbs)无法将击键发送到CATIA。
此类命令的一个非常有用的示例是“生成形状设计(GSD)”工作台中的“反汇编”。实际上,“反汇编”命令有两个选项-第一个选项将元素拆分为每个子元素,第二个选项仅将元素拆分为非连接域。有一个用于反汇编命令的自动化API,但不幸的是,它只能执行后一个选项。因此,如果需要将元素拆分为每个子元素,则程序必须使用StartCommand方法。
代码看起来像这样,
|
'Get the part object (Assume the part is open in it’s own window)
Set
objPart = CATIA.ActiveDocument.Part
'Get Surface.1 from the first geometrical set so that it can be disassembled
Set
objSurf = objPart.HybridBodies.Item(1).HybridShapes.Item(“Surface.1”)
'Select the surface
Set
objSel = CATIA.ActiveDocument.Selection
objSel.Clear
objSel.Add objSurf
'Call the Disassemble command
CATIA.StartCommand “Disassemble”
'Make sure CATIA window is activated then send
'Enter keystroke to click the OK button
AppActivate “CATIA V5”
SendKeys “{ENTER}”,
True
|
4.需要广泛的用户交互
如果您真的想完全自动化一个更复杂的命令,则必须使用Windows API,通常称为WinAPI。我必须警告您,这是一个高级主题(有整本书籍专门针对此主题),因此我仅在此处介绍该概念。如果您想了解更多,可以从Wikipedia页面开始。WinAPI非常强大,因此要缩小范围,我在谈论维基百科页面“概述–用户界面”中描述的功能。
如您所知,Windows应用程序由各种窗口,工具栏,对话框面板和控件(例如按钮,复选框,组合框等)组成。Windows为这些对象中的每个对象维护所谓的句柄(您可以看到如何(在“任务管理器”窗口中的任何给定时间)因此,如果要将鼠标单击发送到特定对话框上的特定按钮,则只需要知道它的句柄,就可以使用Windows API向其发送单击。应用程序确实不知道单击是由鼠标进行的还是使用WinAPI通过程序发送的单击-它将对两者做出相同的响应。虽然这个概念听起来很简单,但最困难的部分是获取要使用的特定控件的句柄。
了解命令执行行为
请注意,当您使用CATIA.StartCommand执行启动后需要用户进行某些选择或交互的命令时,CATIA 不会等待该命令完成才可以继续执行程序的其余部分。例如,如果启动“行”命令,CATIA将仅显示“行创建”对话框面板,然后立即继续执行下一行代码。因此,您应该真正考虑一下程序流,并尝试在程序流中最后调用这样的命令。
另一方面,CATIA 确实等待许多命令完成,然后再执行程序中的下一行代码。当命令不需要任何用户输入时,通常会看到此行为。例如,如果调用“ Fit All In”命令,CATIA将等待直到该操作完成,然后它将继续执行程序中的下一行代码。知道这很高兴,因为如果您要保存如前所述的屏幕截图,很高兴知道在尝试捕获图像之前命令将完全完成。
提示
-
在将命令包含在程序中之前,请对其进行手动测试。有时,一个命令名听起来像您想要的,但实际上却有所不同。最好在程序执行前先找出来,而您不知道发生了什么或发生了更严重的问题。要测试任何命令,只需在电源输入框中键入c:,然后键入命令名称,然后按Enter。一旦确定自己具有正确的命令名称并且它可以执行所需的操作,然后将其添加到代码中。
-
许多命令名称在其名称后都显示有点。我的经验是,通常在调用StartCommand方法时不需要包含这些点。但是,我已经看到一些需要使用它们的情况,因此如果没有它们就无法使用,请尝试使用圆点。
-
当某些命令按命令名称启动时,即使单击它们的图标也会显示对话框。前面显示的更改草图支撑的示例就是一个很好的例子。找出这一点的唯一方法就是尝试!不要仅仅因为一个命令通常具有一个对话框来处理就认为它会属于上面列出的更复杂的类别之一。