前回の記事では、Desing Automation for InventorでiLogicを実行する方法について解説をしてきましたが、今回の記事では、Design Automation for InventorでiLogicを利用する際の注意点について解説をしたいと思ます。
もし、前回の記事をお読みでない方は、先に以下のリンクからご参照いただくことをお勧めいたします。
さて、Design Automation for InventorでのiLogicの実行ですが、実はデスクトップ環境で利用していたiLogicを、Desing Automation for Inventorで利用するためには、いくつか修正を行わなければならない場合がありますので、注意が必要です。
といっても、それほど多くの注意点はなく、今回ご紹介する、以下の3つの点にご留意いただければ多くの場合は問題なく動作させることができるかと思います。
- ThisApplication.ActiveDocumentではなく、ThisDoc.Documentを使用する
- UI表示をする処理を取り除く
- LoggerではなくTraceを利用する
それではそれぞれについて解説をしていきます。
Inventor iLogic利用時の3つの注意点
1.ThisApplication.ActiveDocumentではなく、ThisDoc.Documentを使用する
デスクトップ版のInventorアプリケーションでは、ユーザーが任意にドキュメントを開いてアクティブ化できるため、あるコマンドを実行するときに、現在アクティブなドキュメントを知る必要がある場合があります。この目的で使用するのが、ApplicationクラスのActiveDocumentプロパティです。
一方で、Design Automationを実行するクラウド環境では、Inventor Serverを使用して、アプリケーション(つまり、AppBundle内のコード)がすべてを完全に制御することができます。このため、どのドキュメントがアクティブであるかを追跡することにはあまり意味がありません。アプリケーションは、開いたドキュメントと操作する必要のあるドキュメントを認識している必要があり、このため、InventorServerには、ActiveDocumentプロパティがありません。
ルールの目的によって異なりますが、ほとんどの場合はiLogicルールのThisApplication.ActiveDocumentをThisDoc.Document(ルールが実行されているドキュメント)に置き換えるだけで済みます。
ただし、場合によっては、ThisApplication.ActiveDocumentが、ルールが実行されているパーツを含む最上位アセンブリへのショートカットである可能性があります。
このような場合は、以下の関数のような処理が必要となります。
Function GetTopAssembly(doc As Document) As Document
If doc.ReferencingDocuments.Count = 0 Then
Set GetTopAssembly = doc
Else
Set GetTopAssembly = GetTopAssembly(doc.ReferencingDocuments(1))
End If
End Function
上記はVBAですので、iLogicの場合には、「Set」キーワードを削除する必要があります。
また、Design AutomationではThisApplication自体もサポートされていません。その代わりに、デスクトップでもサポートされているThisServerを使用できますが、ActiveDocumentプロパティのように、Inventor Serverではサポートされていない関数がある点に注意が必要です。
2.UI表示をする処理を取り除く
前回のブログ記事や、過去のDesing Automationに関する記事でも言及がありますが、Desing Automationの処理はクラウドサーバ上で実行されるため、MessageBox.Show(), MsgBox(), iLogicForm.Show(), InputBox()といったユーザインタラクションが必要なGUI表示処理を記述することは出来ません。
GUI処理の除去を支援し、場所を見つけるのに役立つ「iLogicRuleExporter」と呼ばれる非常に便利なツールがあります。 これにより、Inventorドキュメントとその参照ドキュメントからすべてのルールをiLogicVbファイルに抽出できます。
これにより、ソースコードで、特定のパラメータが変更された場所、特定のInventorAPIが使用された場所などの特定の処理を検索するのがはるかに簡単になります。
UIコンポーネントが使用されている場所を見つけて、それらを除去するのにも役立にちます。
3.Loggerではなく、Traceを使用する
サーバー上で処理を実行する場合、コード内で何が起こっているかをログに記録することがさらに重要になります。
iLogicではInventorユーザーインターフェイスの[iLogicログ]タブにメッセージを記録できる、Loggerと呼ばれるオブジェクトがありますが、現時点では、これらのログはWorkItemのレポートに表示されません。
一方で、トレースログ(Trace.WriteLine()など)は、WorkItemのレポートに出力されるため、Design Automationでは、Loggerの代わりに、トレースログを使用するようにしてください。
まとめ
今回の記事では、iLogicをDesingAutomationで使用する場合の注意点を解説いたしました。
既存のiLogicをDesing Automationで活用する、新規にiLogicを作成してDesingAutomationで活用する際のご参考になれば幸いです。
By Takehiro Kato
コメント