C#ATIA

↑タイトル詐欺 主にCATIA V5 の VBA(最近はPMillマクロとFusion360APIが多い)

APIでリンク付きインポート

こちらに記載した事をちょっとだけテストしてみました。
解決済み: 思い付いた事をウダウダと - 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個だけのデータ)

手作業よりは早いかもしれないけど。