Fusion360の 外観/マテリアル をAPIで扱ったことが無かったのですが、
作ってみました。
#Fusion360API_Python script #Author-kantoku #Description-外観/マテリアルのリストをエクスポート import adsk.core, adsk.fusion, traceback def run(context): ui = None try: app = adsk.core.Application.get() ui = app.userInterface des = adsk.fusion.Design.cast(app.activeProduct) ope = SelectOperation(ui) if len(ope) < 1: return path = Get_Filepath(ui) if len(path) < 1: return ids = [] lst = [] for matLib in app.materialLibraries: lst = matLib.appearances if ope == 'App' else matLib.materials ids.append('-- {} ({})| {} --'.format(matLib.name, len(lst), matLib.id)) for itm in lst: ids.append(' {} | {}'.format(itm.name, itm.id)) writeFile(path, ids) ui.messageBox('Done') except: if ui: ui.messageBox('Failed:\n{}'.format(traceback.format_exc())) def SelectOperation(ui): msgBtnTypes = adsk.core.MessageBoxButtonTypes dlgRess = adsk.core.DialogResults no = dlgRess.DialogNo msg = '出力するリストはどれですか?\n' msg += 'はい:外観\nいいえ:マテリアル\nキャンセル:中止' res = ui.messageBox(msg,'',msgBtnTypes.YesNoCancelButtonType) if res == dlgRess.DialogYes: return 'App' elif res == dlgRess.DialogNo: return 'Mate' else: return '' def writeFile(path, lst): file = open(path, 'w') file.write('\n'.join(lst).encode("CP932", "ignore").decode("CP932")) file.close() def Get_Filepath(ui): dlg = ui.createFileDialog() dlg.title = '保存' dlg.isMultiSelectEnabled = False dlg.filter = 'Text(*.txt)' if dlg.showSave() != adsk.core.DialogResults.DialogOK : return '' return dlg.filename
クラウドのファイルリストを取得するスプリクトより、遥かに早いです。
出力されるファイルは
ライブラリに関しては
-- <ライブラリ名> (<外観の数>)| <ライブラリID> --
各外観/マテリアルは
<外観名> | <外観ID>
です。
手元に置いておいても損無さそうです。