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とかには対応してません。
でも私の使用には十分なのでいいでしょう。