以下の内容はhttps://end0tknr.hateblo.jp/entry/20250501/1746061715より取得しました。


autodesk fusion の新規add in作成直後の状態

autodesk fusionで アドインを作成しようと考えていますが、 まず、新規add in作成直後の状態を確認してみます。

新規アドイン作成、スクリプト x アドインの違い

「ユーティリティ → アドイン → アドインタブ → 作成」により新規アドインが

c:/Users/end0t/AppData/Roaming/Autodesk/Autodesk Fusion 360/API/AddIns/

に作成されます。

スクリプトは1回、実行されるだけですが、 アドインは実行すると、メニューバーにボタンアイコンが表示され、 ボタンをクリックすることで、複数回、実行できます。

デフォルトアドイン実行の様子

新規作成したアドインを選択し、実行をクリックすると、 メニューバーにボタンアイコンが表示され、これをクリックすることで実行されます。

デフォルトアドインは、ユーザ入力のダイアログを表示し、 ユーザの入力結果をメッセージボックスへ表示します。

デフォルトアドインのdir構成

c:/Users/end0t/AppData/Roaming/Autodesk/Autodesk Fusion 360/API/AddIns/NewAddIn1/
├ AddInIcon.svg        #【※0】このまま
├ config.py            #     〃
├ NewAddIn1.manifest   #     〃
├ NewAddIn1.py         #     〃
├ .vscode/launch.json  #     〃
├ lib/fusionAddInUtils/#     〃
│ ├ __init__.py       #     〃
│ ├ event_utils.py    #     〃
│ └ general_utils.py  #     〃
└ commands/
   ├ __init__.py       # 【※2-2】2-1の削除に伴い、修正
   ├ commandDialog/                              #【※1】修正
   │ ├ __init__.py                              #     〃 
   │ ├ entry.py                                 #     〃 
   │ └ resources/6x16.png, 32x32.png, 64x64.png #     〃 
   ├ paletteSend/                                #【※2-1】削除
   │ ├ entry.py                                 #       〃  
   │ └ resources/6x16.png, 32x32.png, 64x64.png #       〃 
   └ paletteShow/                                #       〃 
      ├ entry.py                                 #       〃  
      └ resources/                               #       〃
         ├ 6x16.png, 32x32.png, 64x64.png        #       〃
         └ html/
            ├ index.html
            └ static/palette.js

【※0】 変更せず、このままでも問題ないようです

【※1】 アドインでの具体的な処理で、詳細は後述します

【※2-1】 paletteSend/, paletteShow/ は、html+jsによるweb uiパレットとpython間で 連携する為のもののようですが、使用しない為、削除して構いません

【※2-2】 paletteSend/, paletteShow/ は、init.py から呼ばれますので、 以下のようにコメントアウトします。

from .commandDialog import entry as commandDialog
#from .paletteShow import entry as paletteShow  ## ★
#from .paletteSend import entry as paletteSend  ## ★

commands = [
    commandDialog,
#    paletteShow, ## ★
#    paletteSend  ## ★
]

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

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

commands/commandDialog/entry.py

python src内のコメントを日本語化しています

import adsk.core
import os
from ...lib import fusionAddInUtils as futil
from ... import config
app = adsk.core.Application.get()
ui = app.userInterface

# TODO *** Specify the command identity information. ***
CMD_ID = f'{config.COMPANY_NAME}_{config.ADDIN_NAME}_cmdDialog'
CMD_NAME = 'Command Dialog Sample'
CMD_Description = 'A Fusion Add-in Command with a dialog'

# パネルに表示 or not
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', '')
# clickや起動処理等、イベントハンドラの保持リスト
local_handlers = []

def start():
    cmd_def = ui.commandDefinitions.addButtonDefinition(CMD_ID,
                                                        CMD_NAME,
                                                        CMD_Description,
                                                        ICON_FOLDER)
    # ボタンクリック時に呼ばれるイベントハンドラー
    futil.add_handler(cmd_def.commandCreated, command_created)

    workspace = ui.workspaces.itemById(WORKSPACE_ID)
    panel     = workspace.toolbarPanels.itemById(PANEL_ID)
    control   = panel.controls.addCommand(cmd_def, COMMAND_BESIDE_ID, False)
    control.isPromoted = IS_PROMOTED

def stop():
    workspace = ui.workspaces.itemById(WORKSPACE_ID)
    panel     = workspace.toolbarPanels.itemById(PANEL_ID)
    command_control    = panel.controls.itemById(CMD_ID)
    command_definition = ui.commandDefinitions.itemById(CMD_ID)

    if command_control:
        command_control.deleteMe()
    if command_definition:
        command_definition.deleteMe()


# click時に呼ばれるmethod
def command_created(args: adsk.core.CommandCreatedEventArgs):
    # text command windowsへのログ出力
    futil.log(f'{CMD_NAME} Command Created Event')

    # userの入力を受取るdialogの定義
    inputs = args.command.commandInputs
    inputs.addTextBoxCommandInput('text_box',
                                  'Some Text',
                                  'Enter some text.',
                                  1,
                                  False)
    # defaultの長さ単位. mm, cm, inch
    defaultLengthUnits = app.activeProduct.unitsManager.defaultLengthUnits
    
    default_value = adsk.core.ValueInput.createByString('1')
    inputs.addValueInput('value_input',
                         'Some Value',
                         defaultLengthUnits,
                         default_value)

    # 各イベントハンドラーの登録
    futil.add_handler(args.command.execute,       command_execute,
                      local_handlers=local_handlers)
    futil.add_handler(args.command.inputChanged,  command_input_changed,
                      local_handlers=local_handlers)
    futil.add_handler(args.command.executePreview,command_preview,
                      local_handlers=local_handlers)
    futil.add_handler(args.command.validateInputs,command_validate_input,
                      local_handlers=local_handlers)
    futil.add_handler(args.command.destroy, command_destroy,
                      local_handlers=local_handlers)


def command_execute(args: adsk.core.CommandEventArgs):
    futil.log(f'{CMD_NAME} Command Execute Event')

    inputs = args.command.commandInputs
    text_box: adsk.core.TextBoxCommandInput  = inputs.itemById('text_box')
    value_input: adsk.core.ValueCommandInput = inputs.itemById('value_input')

    text       = text_box.text
    expression = value_input.expression
    msg = f'Your text: {text}<br>Your value: {expression}'
    ui.messageBox(msg)


def command_preview(args: adsk.core.CommandEventArgs):
    futil.log(f'{CMD_NAME} Command Preview Event')
    inputs = args.command.commandInputs

def command_input_changed(args: adsk.core.InputChangedEventArgs):
    changed_input = args.input
    inputs = args.inputs
    futil.log(f'{CMD_NAME} Input Changed Event fired from a change to {changed_input.id}')
    
def command_validate_input(args: adsk.core.ValidateInputsEventArgs):
    futil.log(f'{CMD_NAME} Validate Input Event')
    inputs = args.inputs
    valueInput = inputs.itemById('value_input')
    if valueInput.value >= 0:
        args.areInputsValid = True
    else:
        args.areInputsValid = False
        
def command_destroy(args: adsk.core.CommandEventArgs):
    futil.log(f'{CMD_NAME} Command Destroy Event')
    global local_handlers
    local_handlers = []



以上の内容はhttps://end0tknr.hateblo.jp/entry/20250501/1746061715より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14