A2-6 ダイアログボックスのサンプル
Fusion360のサンプルプログラムを変更して、ダイアログボックスによる入力ができるようにします。
1、入力一覧のダイアログボックス表示(サンプルそのまま)
2、半径を入力するダイアログボックスを追加
1、サンプルプログラムの入手、実行
ダイアログボックスの入力サンプルプログラムを入手します。
① スクリプトのフォルダーに「CommandInputsAPISample」名のフォルダーを作成します。
② Helpの「Command Inputs API Sample」のページを表示させます。
https://help.autodesk.com/view/fusion360/ENU/?guid=GUID-e5c4dbe8-ee48-11e4-9823-f8b156d7cd97
③ テキストエディタを起動して、「Python」タブにあるプログラムをコピーしたファイル(CommandInputsAPISample.py)を作成します。
④「Command Inputs API Sample」のページにあるリンクから、resource folderのデータ(CommandInputsResources.zip)をダウンロードして解凍します。
⑤ ③、④で作成した「CommandInputsAPISample.py」、「resources」フォルダーを①のフォルダに移動します。
⑥ Fusion360の「スクリプトとアドイン」から「CommandInputsAPISample」を実行すると、多数の入力部があるダイアログボックスが表示されます。入力部の操作はできますが出力はありません。
最下部の「OK」か「キャンセル」をクリックするとダイアログボックスが閉じます。

2、半径を入力するダイアログボックスを追加
円を書くサンプルプログラムに、半径を入力するダイアログを追加します。
① Helpの「Create circle by center and radius API Sample」のページを表示させます。
https://help.autodesk.com/view/fusion360/ENU/?guid=GUID-ecd3b76b-19f7-4efa-8a02-087c16da246f
② テキストエディタを起動して、「Python」タブにあるプログラムをコピーしたファイル(Make3Circles.py)を作成します。
③「Make3Circles.py」をスクリプトのフォルダーに移動します。
④ Fusion360の「スクリプトとアドイン」から「Make3Circles」を実行して、円のスケッチが3つ表示されることを確認します。

⑤ スクリプトのフォルダーにある「Make3Circles.py」をテキストエディタで開きます。
⑥ 16行目からダイアログ部分を追加します。

⑦ 「circles1」で作成する円の半径をダイアログ入力値に変更します。
変更前 (adsk.core.Point3D.create(0, 0, 0), 2)
変更後 (adsk.core.Point3D.create(0, 0, 0), radius)
⑧ 変更したプログラムを保存します。
import adsk.core, adsk.fusion, traceback
def run(context):
ui = None
try:
app = adsk.core.Application.get()
ui = app.userInterface
# doc = app.documents.add(adsk.core.DocumentTypes.FusionDesignDocumentType)
design = app.activeProduct
# Get the root component of the active design.
rootComp = design.rootComponent
#----------------
radius_input = ui.inputBox("半径(mm)を入力", "半径", "1")
if radius_input[0]:
(radius1,inCancelled) = radius_input
radius = float(radius1)/10
else:
return
#------------------
# Create a new sketch on the xy plane.
sketches = rootComp.sketches;
xyPlane = rootComp.xYConstructionPlane
sketch = sketches.add(xyPlane)
# Draw some circles.
circles = sketch.sketchCurves.sketchCircles
circle1 = circles.addByCenterRadius(adsk.core.Point3D.create(0, 0, 0), radius)
circle2 = circles.addByCenterRadius(adsk.core.Point3D.create(8, 3, 0), 3)
# Add a circle at the center of one of the existing circles.
circle3 = circles.addByCenterRadius(circle2.centerSketchPoint, 4)
except:
if ui:
ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))
⑨ Fusion360の「スクリプトとアドイン」から「Make3Circles」を実行します。
⑩ 希望の半径を入力後に「OK」をクリックすると、希望の半径円と初期値のままの二つの円のスケッチが表示されます。

左側の円をクリックすると画面右下に直径が表示されます。

この項目は終了です。
A3-5:コマンドの表示場所変更③
「A3-4」で作った「messageBox」コマンドの表示場所を変更します。
3、表示部の変更
3-1、「messageBox」の表示場所変更
3、表示場所の変更
3-1、「messageBox」の表示場所変更
① Fusion360の「スクリプトとアドイン」窓にある「アドイン」タブから、「NewAddIn1」を選択して「編集」をクリックします。

②「Visual Studio Code」が起動したら、左側にある「エクスプローラー」から「messageBox」の下にある「entry.py」を選択します。

③ パネルに表示するか指定します。(表示する:True/表示しない:False)

IS_PROMOTED = True
④ 表示位置を指定します。下の表(コマンドの一部を表示)を参考に、赤字部を変更して下さい。

PANEL_ID = 'SolidScriptsAddinsPanel'
COMMAND_BESIDE_ID = 'ScriptsManagerCommand'
⑤「Visual Studio Code」の「Save」を行います。
⑥「NewAddIn1」を実行して、希望の場所にコマンドが表示されているか確認します。
ワークスペース
デザイン:「FusionSolidEnvironment」の一部
| タブ | ツールバーパネル:PANEL_ID | 表示目標のコマンド:COMMAND_BESIDE_ID |
| ソリッド | 作成:SolidCreatePanel | ミラー:MirrorCommand |
| 修正:SolidCreatePanel | プレス/プル:FusionPressPullCommand | |
| アセンブリ:AssemblePanel | 新規コンポーネント/プル:FusionCreateNewComponentCommand | |
| 構築:ConstructionPanel | オフセット平面:WorkPlaneOffsetFromPlaneCommand | |
| 検査:InspectPanel | 計測:MeasureCommand | |
| 挿入:InsertPanel | 派生を挿入:PullDeriveCommand | |
| 選択:SelectPanel | 選択:SelectCommand | |
| サーフェス | 作成:SelectPanel | 新規コンポーネント:SelectCommand |
| 修正:SelectPanel | プレス/プル:SelectCommand | |
| アセンブリ~選択 | ソリッドと共通 | |
| メッシュ | 作成:ParaMeshCreatePanel | メッシュを挿入:ParaMeshInsertAlignCommand |
| 準備:ParaMeshPreparePanel | 修復:ParaMeshRepairCommand | |
| 修正:ParaMeshModifyPanel | ダイレクト編集:ParaMeshBaseFeatureCreateCommand | |
| アセンブリ~挿入 | ソリッドと共通 | |
| 選択:ParaMeshSelectPanel | 選択:SelectCommand | |
| エクスポート:ParaMeshExportPanel | 3Dプリント:ThreeDprintCmdDef | |
| シートメタル | 作成:SheetMetalCreatePanel | 新規コンポーネント:FusionCreateNewComponentCommand |
| 修正:SheetMetalModifyPanel | 展開:FusionSheetmetalUnfoldCommand | |
| アセンブリ~選択 | ソリッドと共通 | |
| プラスチック | 作成:ParaMeshSelectPanel | 新規コンポーネント:SelectCommand |
| 修正 | ソリッドと共通 | |
| アセンブリ:PlasticPartsAssemblePanel | 新規コンポーネント:FusionCreateNewComponentCommand | |
| 構築 | ソリッドと共通 | |
| 検査:PlasticPartsInspectPanel | 計測:MeasureCommand | |
| 挿入、選択 | ソリッドと共通 | |
| ユーティリティ | メイク:MakePanel | 3Dプリント:ThreeDprintCmdDef |
| アドイン:SolidScriptsAddinsPanel | スクリプトとアドイン:ScriptsManagerCommand | |
| ユーティリティ:UtilityPanel | マテリアルを管理:MaterialCommand | |
| 検査:ToolsInspectPanel | 計測:MeasureCommand | |
| 選択 | ソリッドと共通 |
この項目は終了です。
A3-5:コマンドの表示場所変更②
「A3-4」で作った「messageBox」コマンドの表示場所を変更します。
2、UIレイアウトのリスト作成
2-1、スクリプトの入手
2-2、リスト作成
2-3、「MessageBox」の設定値を確認
2-4、コマンドIDの捜索
2、UIレイアウトのリスト作成
表示場所を指示するためにUIレイアウトのリストを作成します。
リストの作成には米国のユーザフォーラムで紹介されたスクリプトを使用します。スクリプトの入手、実行は自己責任でお願いします。
2-1、スクリプトの入手
①Fusion360の右上のヘルプメニューの「コミュニティ」から「フォーラム」を選択すると、ウェブブラウザが起動して「日本語 Community」が表示されます。

②上側の「Knowledge Network」の右にある「Community」プルダウンメニューから「Forums」を選択します。

③「Welcome to the Autodesk Forums」が表示されたら、以下の文字で検索を行います。
Feedback on my take on "Write userinterface to file"

④検索リストに表示された以下の投稿に移動します。

⑤記事の中にあるリンク先に移動します。

⑥右上の「Code」プルダウンメニューから「Download ZIP」を選択して必要なファイルをダウンロードします。

⑦ダウンロードしたZIPファイルを解凍します。
![]()
⇓

⑧解凍したフォルダの名前を「WriteFusionUI」に変更し、「基本設定」の「スクリプトおよびアドインの既定パス」で指定したフォルダーの下にある「Scripts」フォルダーにコピーします。
![]()
2-2、リスト作成
①「MessageBox」の情報を得るために、Fusion360の「スクリプトとアドイン」窓を開き、「アドイン」タブから「NewAddin1」を実行します。

② リストを作成するために、「スクリプト」タブから「WriteFusionUI」を実行します。

③「UI Report Type」が表示されるので「いいえ」(minimal report作成を選択します)をクリックします。

④レポートの保管先、ファイル名を指定して「保存」をクリックします。

⑤成功のメッセージが表示されたら「OK」をクリックします。

2-3、「MessageBox」の設定値を確認
①エクスプローラで2-2の④で保存したフォルダに移動し、テキストエディタでファイルを開きます。
②テキストエディタの検索機能で「MessageBox」の情報を探します。

class ACME_NewAddIn1_MessageBox:
class名はコマンドIDから自動作成
ID = "ACME_NewAddIn1_MessageBox"
messageBoxフォルダのentry.pyで設定するコマンドID
命名規則:COMPANY_NAME_ADDIN_NAME_コマンド名
COMPANY_NAME:NewAddIn1フォルダにあるconfig.pyで設定
ADDIN_NAME:アドインのフォルダ名(NewAddIn1)を利用
コマンド名:messageBoxフォルダのentry.pyで設定
Index = 4 4行目
isPromoted = True
パネルへのコマンド表示有無。messageBoxフォルダのentry.pyで設定
isPromotedByDefault = False
UIリセット時に使用する設定らしいが詳細不明。
2-4、コマンドIDの捜索
UIレイアウトのリストからコマンドIDを見つける手順のサンプルです。
① UIレイアウトのリストをテキストエディタで開きます。
②「class WorkSpaces」を検索して移動します。
③ 作業スペースのリストから名称を予測し、検索して移動します。
「デザイン」の場合は「class FusionSolidEnvironment」
④ タブのリストから名称を予測し、検索して移動します。
⑤ ツールバーパネルのリストから名称を予測し、検索して移動します。
⑥ コマンドIDのリストとFusion360のドロップダウンを比較して、パネルIDとコマンドIDの値を得ます。
⑦「MessageBox」等の「PANEL_ID」、「COMMAND_BESIDE_ID」を上記のIDに変更して、正しいか確認します。
この項目は終了です。
A3-5:コマンドの表示場所変更①
「A3-4」で作った「messageBox」コマンドの表示場所を変更します。
1、表示位置の設定方法
1-1、ツールバーパネルの指定
1-2、パネルへの表示
1、表示位置の設定方法
「MessageBox」の設定値を利用して説明します。
1-1、ツールバーパネルの指定
コマンドを表示するツールバーパネルを指定します。
① Fusion360の「スクリプトとアドイン」窓にある「アドイン」タブから、「NewAddIn1」を選択して「編集」をクリックします。

②「Visual Studio Code」が起動したら、左側にある「エクスプローラー」から「messageBox」の下にある「entry.py」を選択します。

③ 21~23行で、表示するツールバーパネルの位置を設定しています。

WORKSPACE_ID = 'FusionSolidEnvironment'
PANEL_ID = 'SolidScriptsAddinsPanel'
COMMAND_BESIDE_ID = 'ScriptsManagerCommand'
設定内容:
作業スペースの「デザイン」にある
ツールバーパネル「アドイン」の
ドロップダウン内の「スクリプトとアドイン」コマンドの下に表示
備考:
・指定したコマンドが起動していない場合は最下部に表示されます。
・49行目にあるCOMMAND_BESIDE_IDの環境変数を変更すると、指定したコマンドの上に表示されます。
![]()
指定コマンドの下に表示( 初期設定)
control = panel.controls.addCommand(cmd_def, COMMAND_BESIDE_ID, False)
指定コマンドの上に表示
control = panel.controls.addCommand(cmd_def, COMMAND_BESIDE_ID, Ture)
④ 同じアドイン内のコマンドで、同じCOMMAND_BESIDE_IDを指定した場合、コマンドの表示順は「commands」の下にある「__init__.py」の14~17行目の記述の逆順になります。パネルでの表示順にも影響します。
・初期設定
⇒ 
・「Send to Palette」の下に変更
⇒ 
1-2、パネルへの表示
パネル部にコマンドを表示させます
① Fusion360の「スクリプトとアドイン」窓にある「アドイン」タブから、「NewAddIn1」を選択して「編集」をクリックします。
②「Visual Studio Code」が起動したら、左側にある「エクスプローラー」から「messageBox」の下にある「entry.py」を選択します。
③ 15行目の記述で設定します。
![]()
表示する
IS_PROMOTED = True

表示しない
IS_PROMOTED = False

この項目は終了です。
A3-4:プログラムの作成
サンプルプログラム「NewAddIn1」を利用したプログラムの作成方法です。ツールバー、ショートカットから「A2-1」の「messageBox」が実行出来るようにします。
1、プログラム作成
1-1、サンプルプログラムのコピー
1-2、「entry.py」の変更
1-3、アイコンの作成
2、起動準備
3、動作確認
1、プログラム作成
1-1、サンプルプログラムのコピー
プログラム作成の基にする「commandDialog」フォルダーを別名でコピーします。
① エクスプローラで、「NewAddIn1」のプログラムを保管しているフォルダの下にある「commands」フォルダーに移動します。
②「commandDialog」フォルダをコピーして、「messageBox」に名称を変更します。

⇓

③ Fusion360の「スクリプトとアドイン」窓にある「アドイン」タブから、「NewAddIn1」を選択して「編集」をクリックします。

④「Visual Studio Code」が起動したら、左側にある「エクスプローラー」から「NEWADDIN1」の「commands」の下に「messageBox」があることを確認します。

1-2、「entry.py」の変更
「messageBox」が起動するプログラムに変更します。
①1-1の④の状態で、左側にある「エクスプローラー」から「messageBox」の下にある「entry.py」を選択します。

② コマンド名、説明を変更します。
10行~12行を以下のように変更します。
変更内容
CMD_ID:コマンドの起動用ID
CMD_NAME:画面に表示するコマンド名
CMD_Description:画面に表示するコマンドの説明文

変更前
CMD_ID = f'{config.COMPANY_NAME}_{config.ADDIN_NAME}_cmdDialog'
CMD_NAME = 'Command Dialog Sample'
CMD_Description = 'A Fusion 360 Add-in Command with a dialog'

⇓
変更後
CMD_ID = f'{config.COMPANY_NAME}_{config.ADDIN_NAME}_MessageBox'
CMD_NAME = 'MessageBoxを表示'
CMD_Description = 'メッセージボックスの表示サンプルです。’

③ 83~96行目の「commandDialog」を表示させるコマンドを削除します。

④ 83~85行目にスクリプトの「NewScript1.py」で使用したコマンドを挿入します。インデント(字下げ)処理を正しく行ってください。
挿入するコマンド
app = adsk.core.Application.get()
ui = app.userInterface
ui.messageBox('Hello script')

⑤「Visual Studio Code」の「保存」を実行します。
1-3、アイコンの作成
「MessageBox」用のアイコンを作成し、「resources」フォルダに保管します。アイコンの作成は、「窓の社」からダウンロードした「Greenfish Icon Editor Pro」を利用しました。
①「64x64(大)」のサイズで画像を作成します。(保存形式は*.png)

②「イメージからWindows用のアイコンを作成」機能を使って、「16x16」、「32x32」サイズの画像を作成します。

③エクスプローラで「messageBox」の下にある「resources」を開き、「MessageBox」用の画像3種を上書きで保存します。

2、起動準備
「NewAddIn1」実行時に「messageBox」も起動できるようにします。
①「Visual Studio Code」の左側にある「エクスプローラ」から「commands」の下にある「__init__.py」を選択します。

② 9行目にコマンドに対応したモジュールのインポート文を記入します。
from .messageBox import entry as messageBox
③ 14行目に有効化するモジュールのリストを追加します。
インデント処理、文字最後に「,」を追加します。
messageBox,
④「Visual Studio Code」の「保存」を実行します。
動作確認
「NewAddIn1」を実行して、「messageBox」コマンドが追加されたことを確認します。
①Fusion360の「スクリプトとアドイン」窓にある「アドイン」タブから、「NewAddIn1」を選択して「実行」をクリックします。
②下図のようにアイコンが増えます。

③アイコンをクリックしてmessageBoxが表示されることを確認します。

この項目は終了です。
A3-3:エラー表示
Fusion360のアドイン用サンプルプログラムでのエラー表示の説明です。
1、サンプルプログラムの準備
2、エラー表示方法(サンプルプログラムの仕様)
2-1、「テキストコマンド」の表示
2-2、動作の確認
3、エラー表示方法(messageBoxを利用)
1、サンプルプログラムの準備
「A3-1」の2で作成したサンプルプログラムを利用します。
2、エラー表示方法(アドインのサンプルプログラム仕様)
2-1、「テキストコマンド」の表示
① Fusion360窓の左上にある「ファイル」プルダウンメニュー→「表示」→「テキストコマンドを表示」でFusion360窓の下側に表示されます。
Windowsは「ALT + CTRL + C」、Macは「Option + CMD + C」の同時キー押しで表示、非表示が切り替えられます。

② Fusion360窓の下に「テキストコマンド」枠が表示されます。

③「テキストコマンド」枠の左上にある「-」をクリックすると枠が小さくなります。その後、「+」をクリックすると元の大きさに戻ります。
![]()
2-2、動作の確認
故意にエラーを発生させて動作を確認します。
①「NewAddIn1」をVisual Studio Codeで開きます。
②「NewAddIn1.py」の9行目を存在しないコマンド名に変更します。

変更前:commands.start()
⇓
変更後:commands.start1()
③ 変更内容を「保存」します。
④「NewAddIn1」を実行します。
⑤ 以下のようなエラーが表示されたら正常動作です。

⑥「NewAddIn1」を停止させて、②で実施した変更を正しいコマンドに直して「保存」します。
3、エラー表示方法(messageBoxを利用)
プログラムを修正して、スクリプトのサンプルプログラムと同じくmessageBoxでエラーを表示させます。
①「NewAddIn1」をVisual Studio Codeで開きます。
② 「NewAddIn1.py」9行目を存在しないコマンド名に変更します。

変更前:commands.start()
⇓
変更後:commands.start1()
③ 続けて、スクリプトのサンプルプログラム「NewScript1」を参照して、以下のコマンド文を追加します。インデント(字下げ)処理を正しく行ってください。
4行目:import adsk.core, traceback
10行目:app = adsk.core.Application.get()
11行目:ui = app.userInterface
15行目:元のコマンド文の前に「#」を追加して参照文に変更
16行目:if ui:
17行目:ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))
④ 変更内容を「保存」します。
⑤「NewAddIn1」を実行します。
⑥ 以下のようなエラーが表示されたら正常動作です。「テキストコマンド」枠には何も表示されません。

⑦「NewAddIN1」を停止させて、②、③で実施した変更を正しいコマンドに直して「保存」します。
この項目は終了です。
A3-2:プログラムの保管場所
作成したプログラムの保管場所を確認します。
① エクスプローラで、「A1-2」の2-2で設定した「スクリプトおよびアドインの既定パス」に移動します。
![]()
② 「AddIns」フォルダに移動すると「A3-1」の1-2で作成したアドイン名('NewAddIn1')のフォルダがあり、
![]()
その中にプログラムや環境設定のファイルが入っています。

・「.vscode」:Fusion360がプログラムを実行する際に必要な情報を保管しています。
・「commands」:このアドインで利用できるようになる各プログラムやアイコンが保管されています。

・「lib」:Fusion360のソフトウェアを読み込みます。
・「config.py」:デバッグモードの設定やフォルダ名からアドイン名を作成します。
・「アドイン名.manifest」:アドイン作成時に入力した「説明」等の情報を保管しています。
・「アドイン名.py」:このアドインの起動と停止のプログラムを保管しています。
・「NewAddIn1」を実行すると、各フォルダにpythonのキャッシュ保管用として「__pycache__ 」フォルダが作成されることがあります。
・「Visual Studio Code」でプログラムの編集を行うと、「.enb」ファイル等の「Visual Studio Code」用設定ファイルが追加されます。
この項目は終了です。
