C#ATIA

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

開発者向けアドイン13

こちらの続きです。・・・多分。
開発者向けアドイン12 - C#ATIA

Fusion360でアドインを作る際、コマンドのアイコンを何処に入れるか?
が結構面倒なんです。

赤:タブ(ToolbarTab)
緑:パネル(ToolbarPanel)
紫:コントロール(ToolbarControl)
結局は、パネルに自作のコマンドを登録する事で、パネルが出来上がるのですが、
その為にはタブ、パネル、ワークスペース(キャプチャに含めるのを忘れた・・・)
の各IDが必要になります。

このIDを知る方法が、こちらのサンプルスクリプトです。
Fusion 360 Help
確かに、ファイルに全て出力するので間違いないのですが、
出力したファイルから目的のIDを探し出すのが面倒。

この面倒を解消するために、こちらで公開しているアドインの
こちらの機能を作っていたのです。
GitHub - kantoku-code/Fusion360_Developers_Small_ToolKit: 通常のユーザーには、ほぼ無意味なFusion360 API 開発者向けの小さな工具箱

例えば、"スケッチを作成"をクリックすれば、テキストコマンドウィンドウに
タブやパネルのIDを出力します。もうファイル内から探し出す必要が無いんです。
便利。

・・・なのですが、出力する情報が正しくなかったのですが、対処方法がイマイチ
分からずに放置していました。


が、今朝思いつき試したところ上手く修正出来ましたので、ver0.1.5にしました。
今度から出力される情報は正確です!

解決の糸口は簡単です。今、どのタブがアクティブになっているかを知れば
良かっただけでした。

但し、"ActiveteTab"のようなプロパティが無い為、ループでグルグル回って
探し出しています。

# 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

        tab: core.ToolbarTab = get_active_tab()
        if not tab: return

        ui.messageBox(f"今は[{tab.name}]タブがアクティブです")

    except:
        if ui:
            ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))


def get_active_tab() -> core.ToolbarTab:
    app: core.Application = core.Application.get()
    ui: core.UserInterface = app.userInterface

    tabs: list[core.ToolbarTab] = [tb for tb in ui.allToolbarTabs 
        if all([tb.isActive, tb.isVisible])]
    
    if len(tabs) < 1:
        return None
    else:
        return tabs[0]

嘘を出力していたので、結構後ろめたかったのですが、直って助かりました。