C#ATIA

↑タイトル詐欺 主にCATIA V5 の VBA(最近はPMillマクロとFusion360APIが多い)

俺コマンドを作る2

こちらの続きです。
俺コマンドを作る1 - C#ATIA


忘れていましたが、実行するとこんな感じです。
f:id:kandennti:20200207094247p:plain
何か1個を選択するだけです。フィルターを指定しないと基本的に何でも
選択出来る事に、昨年気が付きました。


さて、コード的な部分です。こちらのグローバルな変数ですが、

# 俺コマンド用情報
_cmdInfo = ['cmdTest','俺コマンド','偉そうにしているが何も出来ない']

# SelectionCommandInput用情報
_selInfo = ['dlgSel','さぁ選べ!!','何もしないから']

コマンド自体とダイアログの選択を作る際の最低必要なパラメータです。
Fusion 360 Help
Fusion 360 Help
結構あちこちで必要になる事が多いので、(仕方なく)グローバルなものに
してます。

# 俺コマンドを追加するタブのID
_tabId = 'SolidTab'

# 俺コマンドを追加するパネルのID
_panelId = 'InspectPanel'

こちらは、俺コマンドを呼び出すためのボタンを作り出す場所に関するIDです。
f:id:kandennti:20200207094357p:plain
・緑:adsk.core.ToolbarTab
・赤:adsk.core.ToolbarPanel
・青:adsk.core.ToolbarControl
と言う名称のオブジェクトの様で、この順番でIDを探します。
”このIDをどうやって知るの?” と言うことになりますが、
こちらのスクリプトを使って調べます。
Fusion 360 Help

但し、現在はエラーになるはずなので、こちらに修正したものを置いておきました。
APIフォーラムでもエラーになる とチョイチョイ投げられてます)
Help記載のAPIサンプルコード(python)のエラー - Autodesk Community

某サイトではFusion360で利用出来るコマンド一覧としてこのスクリプト
紹介されていましたが、本来の目的はID取得の為だろうと思われます。

"それだけの為にスクリプト作るのメンドイ" と言う方はこちらにUpして
くれている方がいます。
GitHub - NicoSchlueter/Fusion360Templates: Script & Add-In Templates for Fusion360
"toolbarPanelNames.txt"と言うファイルがパネル名リストです。



細々したことはコメントを記載した通りなのですが、全体的な感じとしては
・CommandDefinitionを作る
 ↓
・ボタンを作るためのToolbarPanelを探し出す
 ↓
・ToolbarControlsにCommandDefinitionを突っ込む

        # 俺コマンドをパネルに登録
        # https://help.autodesk.com/view/fusion360/ENU/?guid=GUID-1ed0cfb5-2ad4-4285-9eec-484ef19f2729
        cmdControl = controls.addCommand(cmdDef)

と、なるようです。



あぁ関係ないのですが、思い出しました。
今回の俺コマンドはアドインとしましたが、公開されているコードが
アドインか? スクリプトか? を記載していないものが多いです。
・・・helpのサンプルコードですら。

コードをコピペしてくる際に逆だ動かないので、困るのですよね。
基本的な処理はどちらも変わらないのですが、俺コマンドの保持の仕方が
違うのだろうと思います。(アドインは俺コマンド定義がメモリ上に残っている)

pythonの場合の個人的な見分け方です。アドインの場合は
・"def stop(context)" がある
・Command.destroyにAddしていない(コマンド破棄イベントを使わない)

です。 正直な所よくわかっていないです・・・。