我使用以下JavaScript代码在Autodesk Forge Viewer中显示模型:
var options = {
'document': 'urn:' + urn,
'env': 'AutodeskProduction',
'getAccessToken': getToken,
'refreshToken': getToken
};
Autodesk.Viewing.Initializer(options, function () {
Autodesk.Viewing.Document.load(options.document,
function (doc) { // onSuccessCallback
// load the viewer
},
function (errorCode) { // onErrorCallback
interval = setInterval(function () {
$.ajax({
url: 'https://developer.api.autodesk.com' + '/viewingservice/v1/' + urn,
type: 'GET',
headers: { Authorization: 'Bearer ' + getToken() },
success: function (i) {
switch (i.status) {
case 'success':
// load the viewer
break;
case 'failed':
case 'timeout':
// report error
break;
case 'inprogress':
break;
default:
break;
}
},
error: function (b, d, e) {
// report error
}
});
}, 3000); // Repeatedly request the viewing service for each 3 seconds
}
);
});
onSuccessCallback:它将在查看器中显示模型。
onErrorCallback:它将继续发布查看服务,直到它获得“成功”状态。如果状态为“失败”或“超时”,它将向用户报告他们无法查看此模型。
在Autodesk.Viewing.Document.load(options.document)之后,它将跳转到errorCode == 9('在获取的文档中没有任何可查看的内容')。然后我继续请求查看服务以从中获取结果。这是errorCode列表:
var errorCodes = {
1: 'An unknown failure has occurred.',
2: 'Bad data (corrupted or malformed) was encountered.',
3: 'A network failure was encountered.',
4: 'Access was denied to a network resource (HTTP 403)',
5: 'A network resource could not be found (HTTP 404)',
6: 'A server error was returned when accessing a network resource (HTTP 5xx)',
7: 'An unhandled response code was returned when accessing a network resource (HTTP "everything else")',
8: 'Browser error: webGL is not supported by the current browser',
9: 'There is nothing viewable in the fetched document',
10: 'Browser error: webGL is supported, but not enabled',
11: 'There is no geomtry in loaded model',
12: 'Collaboration server error'
};
问题有时会返回状态=='失败'(在Revit中)或状态=='超时'(在Inventor中)而没有更多细节。它适用于某些Revit / Inventor文件,而不是所有情况。
如何让Forge查看服务重新翻译这些文件以显示回Web浏览器。他们总是从请求到查看服务失败。因此,这些文件无法在Forge查看器中显示。
答案 0 :(得分:1)
首先,非常重要的是,您不应该从客户端调用翻译。这意味着您的 getToken 方法会返回具有写入功能的令牌,因此恶意用户可以使用它来访问和修改您的文件。您的客户端应该只能看到只读令牌。考虑在服务器上使用写令牌,在客户端上使用读令牌(对于autodesk-viewer)。
其次,您应该将autodesk-model-derivative API的v2与JOB endpoint一起使用,其中MANIFEST endpoint将为您提供翻译的完整描述(正在进行或已完成/失败) )。之前的v1视图和数据API分为Viewer(客户端)和Model Derivative API(服务器),这使我们能够更好地控制服务器端转换,包括几个新功能。
答案 1 :(得分:0)