こちらに記載した事をちょっとだけテストしてみました。
解決済み: 思い付いた事をウダウダと - Autodesk Community
結果だけ書くと
・「adsk.doEvents()」使うと、黒くなるのは回避出来る。
・オフラインにした時点でDataHubにアクセス出来ない
ついでに、50個ぐらいのデータのリンク付きインポートを試してみました。
(50個コピー作るのもAPIでやりましたが、すごく早い)
こんな感じの手抜きコードです。
#Fusion360API Python script import adsk.core, adsk.fusion, traceback _app = adsk.core.Application.cast(None) _ui = adsk.core.UserInterface.cast(None) import time def run(context): try: # 目的のフォルダのIDが分かっている事前提 target_folder_id = 'urn:adsk.wipprod:fs.folder:co.Mh12739LTn6Rp0pWqJgHmQ' new_filename = 'piyo' # オマジナイ global _app, _ui _app = adsk.core.Application.get() _ui = _app.userInterface t = time.time() # アクティブプロジェクト取得 project = _app.data.activeProject # 目的のフォルダ取得 fols = project.rootFolder.dataFolders children_folder = fols.itemById(target_folder_id) # 新規ファイル作成 # 恐らく目的のファイルと同一プロジェクトに保存されていることが前提の様 newDoc = _app.documents.add(adsk.core.DocumentTypes.FusionDesignDocumentType) newDoc.saveAs(new_filename, project.rootFolder, 'これはAPIテスト用です', '') root :adsk.fusion.Component = _app.activeProduct.rootComponent # リンク付き取り込み mat = adsk.core.Matrix3D.create() for file in children_folder.dataFiles: root.occurrences.addByInsert(file,mat,True) adsk.doEvents() adsk.doEvents() elapsed_time = time.time()-t print(f"time:{elapsed_time}") except: if _ui: _ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))
あ、今日まで画像が貼れない・・・。
結果は
time:181.88442206382751
1個3.5秒ぐらい、遅いですね。
全ての adsk.doEvents() を止めると
time:178.5801386833191
ほぼ変わらないです。タスクマネージャのCPUを見ててもFusion360は2~3%
ぐらいしか動いていないので、遅いのはサーバー側です。恐らく。
3.5x800=2800
すんなり処理出来ても、50分弱。 恐らく、処理数と時間との関係は
2次関数っぽく増えるのだろうと思うと、2~3時間ぐらいかかるんじゃないかな?
(単純なbox1個だけのデータ)
手作業よりは早いかもしれないけど。