Fusion360APIで前回のコマンドインプットの値を利用する

ユーザーが入力したパラメータを次回の入力にも反映させておくと、いろいろ便利です。
ので簡単に反映させる関数を作りました。
簡単に作った故に数値入力にしか対応していません。

import adsk.core, adsk.fusion, traceback
import pickle
_app = adsk.core.Application.get()

# @brief commandInputsのitemのvalueをデザインのattributesに保存する
# @param commandInputs[CommandInputs Object] 保存したい状態のcommandInputs
# @param ids[list of str] 保存したいInputsのIDのリスト
# @param groupName[str] attributesに保存するときのグループ名
def saveInputsValues(commandInputs, ids, groupName="lastCommandInputValue"):
    design = _app.activeProduct
    attribs = design.attributes
    for id in ids:
        value = commandInputs.itemById(id).value
        binaryValue = pickle.dumps(value)   #pickleでオブジェクトをバイナリ化
        strValue = binaryValue.hex()        #保存形式に対応させるため、hex化し文字列にする
        attribs.add(groupName, id, strValue)

# @brief attributesに保存したものをcommandInputsに上書きする
# @param commandInputs[CommandInputs Object] 上書きしたい状態のcommandInputs
# @param ids[list of str] 上書きしたいInputsのIDのリスト
# @param groupName[str] attributesに保存したグループ名
# @return [bool] 成否
def loadInputsValue(commandInputs, ids, groupName="lastCommandInputValue"):
    design = _app.activeProduct
    attribs = design.attributes
    if groupName not in attribs.groupNames:
        return False
    for id in ids:
        strValue = attribs.itemByName(groupName, id).value
        binaryValue = bytes.fromhex(strValue)
        value = pickle.loads(binaryValue)
        commandInputs.itemById(id).value = value
    return True

attributesに保存しておけるものは文字列だけなので、
入力された値となるオブジェクトをpickleでバイナリ化し、それをhex化することで文字列にしています。
ロードするときはそれを逆順で行ってます。
これで一文字列に型情報と値の情報の両方を保存しておけます。

簡単に作ったので、item.valueで変数の値が取り出せるものにしか対応していません。
具体的にはDropDownCommandInputとかには対応してません。
でも私の使用には十分なのでいいでしょう。