@maeokaQ2NB3 さん こんにちは。
色々と試したところ、リンク付きでインポートが出来ました。
目的のフォルダのIDと目的のファイル名が分かっている事が前提です。
(目的のフォルダの名前でも出来そうです)
データパネルの状態は、こんな感じです。
API(プロジェクト)
L hoge(フォルダ)
L hoge(目的のファイル)
以下のスクリプトを実行すると、
・新規でファイルを作成
・プロジェクトのルートフォルダの位置に "piyo" の名前で保存
・"hoge" をリンク付きで挿入
恐らく、挿入する際は同一プロジェクトであることが条件だと思います。
#Fusion360API Python script
import adsk.core, adsk.fusion, traceback
_app = adsk.core.Application.cast(None)
_ui = adsk.core.UserInterface.cast(None)
def run(context):
try:
# 目的のフォルダのIDと目的のファイル名が分かっている事前提
target_folder_id = 'urn:adsk.wipprod:fs.folder:co.Mh12739LTn6Rp0pWqJgHmQ'
target_filename = 'hoge'
new_filename = 'piyo'
# オマジナイ
global _app, _ui
_app = adsk.core.Application.get()
_ui = _app.userInterface
# アクティブプロジェクト取得
project = _app.data.activeProject
# 目的のフォルダ取得
# 目的のフォルダ位置が分からない場合は検索しまくる
fols = project.rootFolder.dataFolders
children_folder = fols.itemById(target_folder_id)
# 目的のファイル名取得
target_datafile = getDatafileByName(children_folder, target_filename)
# 新規ファイル作成
# 恐らく目的のファイルと同一プロジェクトに保存されていることが前提の様
newDoc = _app.documents.add(adsk.core.DocumentTypes.FusionDesignDocumentType)
newDoc.saveAs(new_filename, project.rootFolder, 'これはAPIテスト用です', '')
root :adsk.fusion.Component = _app.activeProduct.rootComponent
# リンク付き取り込み
occ = root.occurrences.addByInsert(
target_datafile,
adsk.core.Matrix3D.create(),
True)
except:
if _ui:
_ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))
# dataFilesにItemByItemが無いんですね・・・
def getDatafileByName(
dataFolder :adsk.core.DataFolder,
fileName :str) ->adsk.core.DataFile:
for file in dataFolder.dataFiles:
if file.name == fileName:
return file
break
return None
IDやファイル名の関係上、このままではエラーになると思いますので
修正してください。(例外処理してません・・・)