やらなければならない事が有るのは承知しておりますが、
しばらく何もやっていなかったため、リハビリです。
恐らくこちらの続きです。
スクリプトから別のスクリプトを呼び出したい - C#ATIA
以前行った方法は、スクリプトをモジュールとして読み込み実行しましたが、
最近のUpdate(ver2.0.17710)では、もっと簡単な方法が提供されたようです。
まず、呼び出される側の適当なスクリプトを作ります。
仮に"hoge"としておきます。
中身は新作時に出来るテンプレートのものをちょっとだけ変更しただけです。
#Author- #Description- import adsk.core, adsk.fusion, adsk.cam, traceback def run(context): ui = None try: app = adsk.core.Application.get() ui = app.userInterface ui.messageBox('Hello Hoge') except: if ui: ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))
続いて呼び出し側のスクリプトです。
# Fusion360API Python script import traceback import adsk.core as core def run(context): ui: core.UserInterface = None try: app: core.Application = core.Application.get() ui = app.userInterface scripts: core.Scripts = app.scripts hoges = [s for s in scripts if s.name == "hoge"] if len(hoges) < 1: return hogeScript: core.Script = hoges[0] hogeScript.run() except: if ui: ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))
Application.scriptsから、名前が"hoge"のものを見つけ出し
実行しているだけです。
厳密には、同じ名前のスクリプトやアドインがHitしてしまう為、
該当するスクリプトかどうかをチェックすべきですね。
実際に実行すると確かに呼び出されています。
赤印のダイアログのタイトルですが、"hoge"となっているので
間違いなく呼び出される側のスクリプトが実行されていることが
確認できます。
よく見ると、addExistingやaddNewメソッドが有るので、
動的にスクリプト等を作り出すことも出来そうです。
・・・それが必要な場面が思い付きませんが。
そもそもこのAPIでスクリプトを操作する機能が追加された
目的がハッキリしていないのですが、確か任意のアドインが
実行されているかどうかを判断する事が出来なかったため、
その為に追加されたような気がします。
(APIフォーラムで質問があったような記憶です)
スクリプトの呼び出しが面倒なため、スクリプトランチャ的な
アドインを試しに作成したのですが、ダイアログタイプの
スクリプトは実行後にアドイン自体が終了してしまい、全く
使い物にならなかったのですが、今回の追加された機能では
上手くいくのかも知れません。