タイトルが違いますが、こちらの続きです。
アクティブなドキュメントに工具を作る - C#ATIA
正直な所、工具を作るのは面倒です。
その為、既存のツールライブラリをゴッソリコピペしてしまう方が
楽です。
(数字や文字を追いかけて工具作るより、GUI画面で作った方が分かりやすい)
こちら、最初は勘違いしましたがアクティブなドキュメントに入っている
ツールライブラリを新規のドキュメントに丸ごとコピーするスクリプトです。
Re: Manufacturing (CAM) API Feedback - Autodesk Community
これはこれで機能はしますが、ちょっと使う場面が多いとは思えないです。
有難いことにツールライブラリをjsonとして変換出来るため、
アクティブなドキュメントのツールライブラリをjsonとして書き出す
スクリプトはこちらです。
# Fusion360API Python script import traceback import adsk.core as core import adsk.cam as cam import json def run(context): ui: core.UserInterface = None try: app: core.Application = core.Application.get() ui = app.userInterface # アクティブドキュメントのツールライブラリ # https://help.autodesk.com/view/fusion360/ENU/?guid=GUID-C0A61669-1C70-4A68-8CAA-158108844FC7 stateToolLib: cam.DocumentToolLibrary = get_cam_product().documentToolLibrary # ui.messageBox(f'Active DocumentToolLibrary Count:{stateToolLib.count}') if stateToolLib.count < 1: return # json化 toolLibJson = stateToolLib.toJson() print(json.dumps(json.loads(toolLibJson), indent=2)) write_file( r'C:\temp\ToolLib.json', json.dumps(json.loads(toolLibJson), indent=2), ) except: if ui: ui.messageBox('Failed:\n{}'.format(traceback.format_exc())) def get_cam_product() -> cam.CAM: ''' CAMの取得 ''' app: core.Application = core.Application.get() activete_cam_env() return app.activeProduct def activete_cam_env() -> None: ''' CAMアクティブ ''' app: core.Application = core.Application.get() ui: core.UserInterface = app.userInterface camWS: core.Workspace = ui.workspaces.itemById('CAMEnvironment') camWS.activate() def write_file(path: str, txt: str,) -> None: ''' 書き出し ''' with open(path, 'w') as f: f.write(txt)
書き出したjsonを読み込み、アクティブなドキュメントのツールライブラリに
書き込むスクリプトはこんな感じです。
# Fusion360API Python script import traceback import adsk.core as core import adsk.cam as cam def run(context): ui: core.UserInterface = None try: app: core.Application = core.Application.get() ui = app.userInterface stateToolLib: cam.DocumentToolLibrary = get_cam_product().documentToolLibrary ui.messageBox(f'Before ToolLibrary Count:{stateToolLib.count}') importToolLib: cam.ToolLibrary = cam.ToolLibrary.createFromJson( load_file( r'C:\temp\ToolLib.json', ) ) [stateToolLib.add(t) for t in importToolLib] ui.messageBox(f'After ToolLibrary Count:{stateToolLib.count}') # camObj: cam.CAM = get_cam_product() # camObj.documentToolLibrary = importToolLib #<-これはダメっぽい except: if ui: ui.messageBox('Failed:\n{}'.format(traceback.format_exc())) def get_cam_product() -> cam.CAM: ''' CAMの取得 ''' app: core.Application = core.Application.get() activete_cam_env() return app.activeProduct def activete_cam_env() -> None: ''' CAMアクティブ ''' app: core.Application = core.Application.get() ui: core.UserInterface = app.userInterface camWS: core.Workspace = ui.workspaces.itemById('CAMEnvironment') camWS.activate() def load_file(path: str) -> str: ''' 読み込み ''' with open(path) as f: return f.read()