C#ATIA

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

2022版 Fusion360 Pythonアドインテンプレートの入り口4

こちらの続きです。
2022版 Fusion360 Pythonアドインテンプレートの入り口3 - C#ATIA

ザックリでしたが、前回までで編集すべきファイルの説明は終わりました。
続いて、実際に "俺アドイン" を作る事にします。
折角なので、以前スクリプトとして作成したこちらのコマンドを
アドインのコマンドとして実装してみましょう。
ダイアログなスクリプト入門6 - C#ATIA

アドインの新作

特別な事はありませんが、"OreAddin" と言う名称にしました。

"config.py"

元はこんな感じでした。
2022版 Fusion360 Pythonアドインテンプレートの入り口2 - C#ATIA
僕はこんな感じです。(コメント部は削除しています)

import os

DEBUG = True
ADDIN_NAME = os.path.basename(os.path.dirname(__file__))
COMPANY_NAME = 'KANTOKU'

"COMPANY_NAME"は必ず変更しましょう。
又、パレットは使用しない為 "sample_palette_id" は削除しました。

"commands\__init__.py"

元はこんな感じです。
2022版 Fusion360 Pythonアドインテンプレートの入り口2 - C#ATIA
この様に変更しました。

from .Ore import entry as ore

commands = [
    ore,
]

def start():
    for command in commands:
        command.start()

def stop():
    for command in commands:
        command.stop()

ダイアログのコマンドを作る為、"commandDialog" を "Ore" にしており、
パレットタイプの"paletteShow" "paletteSend" は削除しました。

"commandsフォルダ内のフォルダ"

元のフォルダ内の構成はこんな状態でした。
2022版 Fusion360 Pythonアドインテンプレートの入り口2 - C#ATIA
まず、上記で修正した内容と同様で、"paletteShow" "paletteSend" フォルダは
削除し、"commandDialog" を "Ore" とフォルダ名を修正しました。

"entry.py"

ここからはかなり修正が必要ですね。
元はこの様になっていました。
2022版 Fusion360 Pythonアドインテンプレートの入り口3 - C#ATIA

スプリクト時は、イベントハンドラはクラスでしたがテンプレートでは
関数になっている事は前回説明した通りです。

伝わりにくいかと思いますが、個人的にはイベントハンドラ関数内では、
細かな処理は書かずに、ダイアログ上の処理だけ書きたいです。

"インポート部分"

特に修正の必要はありません。
2022版 Fusion360 Pythonアドインテンプレートの入り口3 - C#ATIA

"グローバル部"

コマンドのIDやボタンを追加するツールパネルの指定等の修正が必要となると思います。
2022版 Fusion360 Pythonアドインテンプレートの入り口3 - C#ATIA

app = adsk.core.Application.get()
ui = app.userInterface

CMD_ID = f'{config.COMPANY_NAME}_{config.ADDIN_NAME}_ore'
CMD_NAME = 'Ore Addin Command'
CMD_Description = '俺様の俺様による俺様の為のアドイン'

IS_PROMOTED = True

WORKSPACE_ID = 'FusionSolidEnvironment'
PANEL_ID = 'SolidScriptsAddinsPanel'
COMMAND_BESIDE_ID = 'ScriptsManagerCommand'

ICON_FOLDER = os.path.join(
    os.path.dirname(os.path.abspath(__file__)),
    'resources',
    ''
)
local_handlers = []

# ダイアログの二個のSelectionCommandInput
_selIpt1: adsk.core.SelectionCommandInput = None
_selIpt2: adsk.core.SelectionCommandInput = None

スプリクト時同様に2個のSelectionCommandInputはグローバルにしています。
と言いますか、移植なので・・・。

”start・stop関数”

特に変更の必要はありません。
2022版 Fusion360 Pythonアドインテンプレートの入り口3 - C#ATIA

"command_created関数"

ここはかなり書き換えます。
2022版 Fusion360 Pythonアドインテンプレートの入り口3 - C#ATIA
ダイアログ上のinputsはスクリプト時のものをそのままコピペしました。
イベントについては、前回PreSelectイベントを使用していたため追加しました。

・・・
    futil.add_handler(
        args.command.preSelect,
        command_preSelect,
        local_handlers=local_handlers
    )
・・・

"他の関数"

こちらも書き換えが必要です。
2022版 Fusion360 Pythonアドインテンプレートの入り口3 - C#ATIA
基本的にスクリプト時のイベントハンドラーのnotifyメソッドを
各ハンドラー関数にコピペしただけです。
※一部クラス->関数となった為、不都合となる部分があったため書き換えている部分はあります。

まとめ

終盤は駆け足となってしまいましたが、ファイル数が多い割には、修正が
必要となるファイルは案外少ないです。
本来アイコンの修正も必要となりますが、今回は割愛しました。

今回は長くなりすぎた為、githubにUpしました。
GitHub - kantoku-code/Fusion360_OreAddin: Fusion360 API Python のテンプレート解説のサンプルです。

言葉での表現で伝わるか分かりませんが、個人的にはスクリプトの方が
開発が楽に感じています。アドイン化する事を見据えてスプリクトでの開発を
行う場合は、”最終的なボディを作成する” と言った処理自体は独自のクラスや
関数してしまい、イベントハンドラー内ではUIの処理のみを記載することで
移植の手間が少なくなるように心掛けると、作業が楽になるような気がしています。

今回のシリーズはこれで終わりです。
ちょっと説明が足りない部分があるかもしれませんので、ご質問頂ければ分かる
範囲でお答えしますよ。