質問
InventorのAPIを使って、Inventorのコマンドを実行する方法はありますか。
回答
Inventorの各コマンド(カスタムコマンドを含む)はCommandManagerオブジェクトからControlDefinition オブジェクトとして取得することが出来ます。
取得したControlDefinition オブジェクトのExecuteメソッドを実行することで、コマンドを実行することが可能です。
以下は"Vaultステータスを更新"コマンドを実行するサンプルコードとなります。
' Get the CommandManager object.
Dim oCommandMgr As CommandManager = ThisApplication.CommandManager
' Get control definition.
Dim oControlDef As ControlDefinition = oCommandMgr.ControlDefinitions.Item("VaultRefresh")
' Execute the command.
Call oControlDef.Execute
ControlDefinitions.Itemメソッドに指定する引数は、取得するコマンドの名称となります。
コマンドの名称の取得方法としては、以下の2つの方法があります。
1.以下のサンプルコード(VBA)を実行し、出力されるファイル内から取得する
Sub PrintCommandNames()
' Get the CommandManager object.
Dim oCommandMgr As CommandManager
Set oCommandMgr = ThisApplication.CommandManager
' Get the collection of control definitions.
Dim oControlDefs As ControlDefinitions
Set oControlDefs = oCommandMgr.ControlDefinitions
' Open the file and print out a header line.
Dim oControlDef As ControlDefinition
Open "C:\temp\CommandNames.txt" For Output As #1
Print #1, Tab(10); "Command Name"; Tab(75); _
"Description"; vbNewLine
' Iterate through the controls and write out the name.
For Each oControlDef In oControlDefs
Print #1, oControlDef.InternalName; Tab(55); _
oControlDef.DescriptionText
Next
' Close the file.
Close #1
End Sub
2.Inventor SDKに付属のEventWatcherを使用し、Inventorでコマンドを実行してコマンド名を取得する
EventWatcherは、Inventorに付属のInventor SDKをインストールすると以下のフォルダにあります。
C:\Program Files\Autodesk\<Inventor Version>\SDK\DeveloperTools\Tools\EventWatcher\bin\Release
EventoWatcherを起動し、左側のリストから「UserInputEvents.OnActivateCommand」をチェックされた状態で、InventorでAPIから実行したいコマンドを実行すると、実行されたコマンド名がウィンドウに表示されます。
取得したコマンド名をControlDefinitions.Itemメソッドの引数に指定することで、対象のコマンドを取得することが出来ます。
なお、コマンド実行時にダイアログが表示されるタイプのコマンド(例:押し出し コマンド)の場合、ダイアログ内で指定するパラメータ(押し出しコマンドの場合、押し出し方向や距離 等)の指定についてはコマンドの機能となり、コマンドを実行するAPIから制御(指定)することが出来ません。
このようなタイプのコマンドの場合、APIからユーザの入力なしに実行したい場合は、InventorのAPIを用いて処理を作成する必要があります(もちろん処理には、希望の処理に対応するInventorのAPIが公開されている必要があります)。
記事全体を表示