C#ATIA

↑タイトル詐欺 主にFusion360API 偶にCATIA V5 VBA(絶賛ネタ切れ中)

スクリプトから別のスクリプトを呼び出したい2

やらなければならない事が有るのは承知しておりますが、
しばらく何もやっていなかったため、リハビリです。


恐らくこちらの続きです。
スクリプトから別のスクリプトを呼び出したい - 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フォーラムで質問があったような記憶です)

スクリプトの呼び出しが面倒なため、スクリプトランチャ的な
アドインを試しに作成したのですが、ダイアログタイプの
スクリプトは実行後にアドイン自体が終了してしまい、全く
使い物にならなかったのですが、今回の追加された機能では
上手くいくのかも知れません。