こちらの続きです。
2022版 Fusion360 Pythonアドインテンプレートの入り口3 - C#ATIA
ザックリでしたが、前回までで編集すべきファイルの説明は終わりました。
続いて、実際に "俺アドイン" を作る事にします。
折角なので、以前スクリプトとして作成したこちらのコマンドを
アドインのコマンドとして実装してみましょう。
ダイアログなスクリプト入門6 - C#ATIA
- アドインの新作
- "config.py"
- "commands\__init__.py"
- "commandsフォルダ内のフォルダ"
- "entry.py"
- "インポート部分"
- "グローバル部"
- ”start・stop関数”
- "command_created関数"
- "他の関数"
- まとめ
アドインの新作
特別な事はありませんが、"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の処理のみを記載することで
移植の手間が少なくなるように心掛けると、作業が楽になるような気がしています。
今回のシリーズはこれで終わりです。
ちょっと説明が足りない部分があるかもしれませんので、ご質問頂ければ分かる
範囲でお答えしますよ。