Fusion 36 0 にはクライアント側で利用できる API が用意されていて、用途に応じて C++、Python、JavaScript を使ってスクリプトやアドインを作成して、Fusion 360 にロードして利用すことが出来ます。Fusion 360 API はモデリング機能を中心に実装が進んでいますが、データパネルに表示される内容、つまり、クラウド ストレージの内容へアクセス API も用意されています。
Fusion 360 のクラウド ストレージ のブログ記事では、3-legged 認証でクラウド ストレージ領域の所有者であるユーザにアクセス許可を得ることが出来れば、Forge を使ったアプリもクラウド ストレージいアクセスが可能でることをご紹介しました。ただし、Fusion 360 API を使ってクラウド ストレージにアクセスする場合には、少し状況が異なります。Fusion 360 利用時にはユーザ アカウントでサインインすることが必須なので、Fusion 360 クライアント内でスクリプトやアドインとして実行される Fusion 360 API はユーザとしてクラウド ストレージにアクセスすることが可能です。Forge の Authentication API や Data Management API を使った処理は必要ありません。
Fusion 360 API で用意される Data オブジェクト を利用すると、データパネルからデザイン ファイルを開いたり、編集中のデザイン ファイルを名前を付けて保存したり出来るほか、新規にデザインを作成するような処理も実装可能です。それぞれの情報は、下記のオンライン ヘルプ記事(英語)で紹介されています。
Documents.open メソッド:http://help.autodesk.com/view/fusion360/ENU/?guid=GUID-879042c8-f064-4b31-927a-4b6a67134936
Documents.add メソッド:http://help.autodesk.com/view/fusion360/ENU/?guid=GUID-2314d09a-c595-4f9a-ab8b-3e302dc5d860
Document.saveAs メソッド:http://help.autodesk.com/view/fusion360/ENU/?guid=GUID-7b292219-62fa-4a01-b522-2a1a297edb28
クラウド ストレージとは直接関係しませんが、Fusion 360 API では、Fusion 360 自身が提供するローカル トランスレータでデザイン ファイル形式を変換する処理を自動化することも出来ます。ブログ記事 Model Derivative API の役割と変換可能なファイル形式 をご存じの方は、データ変換というと Forge では Model Derivative API を連想しがちですが、前述のとおり、Fusion 360 API は Fusion 360 クライアント内でローカルに実装されることになるため、Model Derivative API に頼ることなく、そのまま Fusion 360 の機能を利用することが出来ます。
変換機能を用いたデザイン ファイルのエクスポートには ExportManager オブジェクト を利用します。ExportManager オブジェクトを利用したサンプルは、次のオンライン ヘルプ記事(英語)で紹介されています。
Export to other formats API Sample:http://help.autodesk.com/view/fusion360/ENU/?guid=GUID-d1462fe6-fd43-11e4-b6b4-f8b156d7cd97
ExportManager API Sample:http://help.autodesk.com/view/fusion360/ENU/?guid=GUID-B801DDA8-9A0C-42AD-AC06-F8244CA08D65
STLExport API Sample:http://help.autodesk.com/view/fusion360/ENU/?guid=GUID-ECA8A484-7EDD-427D-B1E3-BD59A646F4FA
同じくデザイン ファイルのインポートには ImportManager オブジェクト を利用します。ImportManager オブジェクトを利用したサンプルは、次のオンライン ヘルプ記事(英語)で紹介されています。
Import Manager API Sample:http://help.autodesk.com/view/fusion360/ENU/?guid=GUID-3f24e9e8-422d-11e5-937b-f8b156d7cd97
このように、Fusion 360 API でもある程度、データパネルに表示されるクラウド ストレージ情報を得たり、デザイン ファイルの基本操作を自動化することが可能です。ただ、場合によっては Data Management API と連携して外部アプリ側でデザイン ファイルのサムネイル画像をダウンロードしたり、デザイン ファイルのマニフェスト情報を取得する必要が出てくる可能性もあります。
そのような場面では、最初から Forge の Data Management API や Model Derivative API にアクセスするのではなく、Fusion 360 API 側で当該ファイルの ID(ドキュメントID = URN)を取得して、Forge 使用時に利用することも出来ます。
次の JavaScript コードは、現在 Fusion 360 にサインインしているユーザ アカウント配下にある Hub、Project、Folder、Item の情報を取得するスクリプトです。 プロジェクト配下の情報が多いと、処理に時間がかかるので注意が必要です。
function run(context) {
"use strict";
if (adsk.debug === true) {
/*jslint debug: true*/
debugger;
/*jslint debug: false*/
}
var ui;
try {
var app = adsk.core.Application.get();
ui = app.userInterface;
var hub = app.data.activeHub;
var summary;
summary = "\nActive Hub = " + hub.name;
//summary += "\nHub.id = " + hub.id;
var projects, project;
var folders, folder;
var files, file;
projects = hub.dataProjects;
for(var index=0 ; index<projects.count ; index++)
{
project = projects.item(index);
summary += "\n\nProject = " + project.name;
//summary += "\nProject.id = " + project.id;
folder = project.rootFolder;
summary += "\n\n\tRoot Folder = " + folder.name;
summary += "\n\tRoot Folder.id = " + folder.id;
files = folder.dataFiles;
for(index=0 ; index<files.count ; index++)
{
file = files.item(index);
summary += "\n\n\t\tFile = " + file.name;
summary += "\n\t\tFile.id = " + file.id;
}
folders = project.rootFolder.dataFolders;
for(index=0 ; index<folders.count ; index++)
{
folder = folders.item(index);
summary += "\n\n\t\tFolder = " + folder.name;
summary += "\n\t\tFolder.id = " + folder.id;
files = folder.dataFiles;
for(index=0 ; index<files.count ; index++)
{
file = files.item(index);
summary += "\n\n\t\t\tFile = " + file.name;
summary += "\n\t\t\tFile.id = " + file.id;
}
}
}
ui.messageBox(summary);
console.log(summary);
}
catch (e) {
if (ui) {
ui.messageBox('Failed : ' + (e.description ? e.description : e));
}
console.log('Failed : ' + (e.description ? e.description : e));
}
adsk.terminate();
次の Python コードは、 上記 JavaScript と同様の内容を実装する スクリプトとなります。
import adsk.core, adsk.fusion, adsk.cam, traceback
def run(context):
ui = None
try:
app = adsk.core.Application.get()
ui = app.userInterface
hub = app.data.activeHub;
summary = '\nActive Hub = ' + hub.name
#summary += summary + '\nHub.id = ' + hub.id
projects = hub.dataProjects
for index in range(0, projects.count):
project = projects.item(index)
summary += "\n\nProject = " + project.name
#summary += "\n\nProject.id = " + project.id
folder = project.rootFolder
summary += "\n\n\tRoot Folder = " + folder.name
summary += "\n\tRoot Folder.id = " + folder.id
files = folder.dataFiles
for index in range(0, files.count):
file = files.item(index)
summary += "\n\n\t\tFile = " + file.name
summary += "\n\t\tFile.id = " + file.id
folders = project.rootFolder.dataFolders
for index in range(0, folders.count):
folder = folders.item(index)
summary += "\n\n\t\tFolder = " + folder.name
summary += "\n\t\tFolder.id = " + folder.id
files = folder.dataFiles
for index in range(0, files.count):
file = files.item(index)
summary += "\n\n\t\t\tFile = " + file.name
summary += "\n\t\t\tFile.id = " + file.id
ui.messageBox(summary)
print(summary)
except:
if ui:
ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))
このように、Fusion 360 API は、Forge との連携も含めた運用をスムーズにする API が用意されています。
By Toshiaki Isezaki
コメント