連日、探りながら色々と試してはいるのですが、成果が上がらない状況です。
少し前にこちらのトピの回答をしました。
Re: Is there a script to get a full list of my files - Autodesk Community
手元にあったものをそのままベタッと貼り付けたのですが、
よく見ると、String型の変数にひたすらファイル名を追加して
ファイルに書き出していると言う、情けないコード。
その辺りも遅さの原因かもしれないと思い、リストにファイル名を
取り込み、最後にflattenして書き出す様に修正してみました。
#FusionAPI_python GetDataList Ver0.0.2 #Author-kantoku #Description-サインインしているID内の全ファイル名の取得・・・遅い! import adsk.core, adsk.fusion, traceback import time from itertools import chain def run(context): ui = None try: app = adsk.core.Application.get() ui = app.userInterface #エクスポートファイルパス path = Get_Filepath(ui) if path is None: return #time t=time.time() #ファイル名の取得 names = [] pros = app.data.dataProjects#[3:5] for pro in pros: res = [] names.append(GetFiles(pro.rootFolder, res, 0)) if len(names) < 1: ui.messageBox('Data not found') return #ファイルに書き込み file = open(path, 'w') file.write('\n'.join(list(chain.from_iterable(names)))) file.close() ui.messageBox('Done:{}'.format(time.time() - t)) except: if ui: print('Failed:\n{}'.format(traceback.format_exc())) ui.messageBox('Failed:\n{}'.format(traceback.format_exc())) def GetFiles(fld, res, depth): #folder res.append((' ' * (depth * 4)) + '[' + fld.name +']') #files fs = [(' ' * ((depth + 1) * 4)) + f.name for f in fld.dataFiles] if len(fs) != 0: res.extend(fs) #subfolder fls = fld.dataFolders for subFld in fls: res = GetFiles(subFld, res, depth + 1) return res #ファイルパス def Get_Filepath(ui): dlg = ui.createFileDialog() dlg.title = 'File name export' dlg.isMultiSelectEnabled = False dlg.filter = 'text(*.txt)' if dlg.showSave() != adsk.core.DialogResults.DialogOK : return return dlg.filename
プロジェクト・フォルダ名は " [ ] " で表現するようにしました。
結論としては・・・速くならないです。やっぱりクラウドサーバーとのやり取りが
遅すぎるのだろうと思います。(再帰も遅いのかな?)
時間がかかる事は割り切って、こちらのProgressDialogを利用しようと
思ったのですが駄目でした。
Help
UserInterfaceから作り出すので、Fusion360上の処理にだけ反応するのかな?
と思ってます。
でも、手軽に実装出来る様になっていたので、今後は利用するかも。