【要約】Autodesk Fusion を外部プロセスから叩く(常駐アドイン + カスタムイベント) [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
開発者がFusionのAPIを用いて外部プロセスから自動化を試みる際、APIの実行環境に関する制約が障壁となる。FusionのPython APIは、Fusion自身のプロセス内かつメインスレッドからしか呼び出せない。具体的には以下の問題が発生する。
- ・外部のpython.exeからはadskモジュールにアクセスできない。
- ・HTTPサーバーをアドイン内で立てても、リクエストがワーカースレッドで処理されるため、APIを直接呼ぶとプロセスがクラッシュする。
- ・APIの単位系がcm固定であり、mm指定による意図しない設計ミスを招くリスクがある。
// Approach
開発者はFusion内にHTTPサーバーを内蔵した常駐アドインを実装し、スレッド間の安全な通信を実現する。HTTPリクエストを直接APIに渡さず、イベント駆動型の設計を採用する。
- ・HTTPスレッドでリクエストを受け、queue.Queueにタスクを格納する。
- ・adsk.core.Application.get().fireCustomEvent()を用いて、メインスレッドへイベントを発火させる。
- ・メインスレッド上のCustomEventHandlerがキューからタスクを取り出し、APIを実行する。
- ・実行結果をJSON形式でHTTPレスポンスとして返す。
// Result
この設計により、外部プロセスからFusionの機能を自在に操作できる環境が構築された。開発者は以下の恩恵を受ける。
- ・シェルやCI/CD、エージェントからFusionを制御可能になる。
- ・アドインを再起動せずにコードを差し替えられるため、開発サイクルが高速化する。
- ・Python APIの全機能を、外部のスクリプトから制限なく利用できる。
Senior Engineer Insight
> 実用的なブリッジ設計だが、運用には注意が必要だ。スレッド分離によるクラッシュ回避は定石だが、メインスレッドを占有するモーダルダイアログによるハングアップのリスクを考慮すべきだ。また、単位系の不一致は致命的な設計ミスに直結する。完全なヘッドレス運用は不可能であり、あくまで「人間がログインしている環境の自動化」という境界線を明確に定義して導入すべきである。