PowerBi 中的 Forge Viewer 卸载和加载模型
Forge Viewer in PowerBi unload and load models
我已经提取了我需要的所有文档 URN,目前将它们放在我已导入 PowerBi 的 excel sheet 中。所以基本上我能够创建一个带有切片器的列表,将每个文件组织到 PowerBi 列表中的特定部分。
例如:
- 文件夹 1
- 骨灰盒 1
- 骨灰盒 2
- 文件夹 2
- 骨灰盒 3
- URN 4
- 等等...
我目前正在使用我发现的放置 Forge Viewer into PowerBi 的教程。并且在这个 URN 中是硬编码的。现在我要么尝试在查看器中构建一个 Forge 树,要么只使用我在 PowerBi 中的列表,这是可能的。我已经让查看器从教程开始工作,并且我正在使用 2-legged 身份验证。
我接下来的步骤如下:
- 卸载当前模型
- 加载新模型(从 powerbi 中的树或列表)
- 不再需要初始化查看器
为了卸载文档,我在 visual.ts 文件中创建了这段代码。
this.forge_viewer.unloadDocumentNode = function (manifestNode){
//if model is in memory, just unload it.
let model = this.impl.findModel(manifestNode, true);
if (model){
this.impl.unloadModel(model);
return true;
}
}
如果我不知道如何从我在 PowerBi 中的列表中加载另一个文件,我不确定如何测试它以查看它是否有效。所以我的问题是,这在卸载模型时是否正确?如果我在 PowerBi 中选择不同的 URN,如何让教程中的代码知道?
提前致谢
现在,loadDocumentNode 还将负责卸载当前模型,因此您可以直接使用新文档调用它。例如在下面的代码中,launchViewer 加载第一个模型。然后loadModel1加载模型1,loadModel2加载模型2。
var viewer;
function launchViewer(urn, vid) {
var options = {
env: 'AutodeskProduction',
getAccessToken: getForgeToken
};
Autodesk.Viewing.Initializer(options, () => {
viewer = new Autodesk.Viewing.GuiViewer3D(document.getElementById('forgeViewer'));
viewer.start();
var documentId = 'urn:' + urn;
Autodesk.Viewing.Document.load(documentId, onDocumentLoadSuccess,
onDocumentLoadFailure);
});
}
function getForgeToken(callback) {
fetch('/api/forge/oauth/token').then(res => {
res.json().then(data => {
callback(data.access_token, data.expires_in);
});
});
}
function onDocumentLoadSuccess(doc) {
var viewables = (viewableId ? doc.getRoot().findByGuid(viewableId) :
doc.getRoot().getDefaultGeometry());
viewer.loadDocumentNode(doc, viewables).then(i => {
});
}
function onDocumentLoadFailure(viewerErrorCode) {
console.error('onDocumentLoadFailure() - errorCode:' + viewerErrorCode);
}
function loadModel1(){
Autodesk.Viewing.Document.load('urn:<model1 urn>', onDocumentLoadSuccess,
onDocumentLoadFailure);
}
function loadModel2(){
Autodesk.Viewing.Document.load('urn:<model2 urn>', onDocumentLoadSuccess,
onDocumentLoadFailure);
}
我已经提取了我需要的所有文档 URN,目前将它们放在我已导入 PowerBi 的 excel sheet 中。所以基本上我能够创建一个带有切片器的列表,将每个文件组织到 PowerBi 列表中的特定部分。
例如:
- 文件夹 1
- 骨灰盒 1
- 骨灰盒 2
- 文件夹 2
- 骨灰盒 3
- URN 4
- 等等...
我目前正在使用我发现的放置 Forge Viewer into PowerBi 的教程。并且在这个 URN 中是硬编码的。现在我要么尝试在查看器中构建一个 Forge 树,要么只使用我在 PowerBi 中的列表,这是可能的。我已经让查看器从教程开始工作,并且我正在使用 2-legged 身份验证。
我接下来的步骤如下:
- 卸载当前模型
- 加载新模型(从 powerbi 中的树或列表)
- 不再需要初始化查看器
为了卸载文档,我在 visual.ts 文件中创建了这段代码。
this.forge_viewer.unloadDocumentNode = function (manifestNode){
//if model is in memory, just unload it.
let model = this.impl.findModel(manifestNode, true);
if (model){
this.impl.unloadModel(model);
return true;
}
}
如果我不知道如何从我在 PowerBi 中的列表中加载另一个文件,我不确定如何测试它以查看它是否有效。所以我的问题是,这在卸载模型时是否正确?如果我在 PowerBi 中选择不同的 URN,如何让教程中的代码知道?
提前致谢
现在,loadDocumentNode 还将负责卸载当前模型,因此您可以直接使用新文档调用它。例如在下面的代码中,launchViewer 加载第一个模型。然后loadModel1加载模型1,loadModel2加载模型2。
var viewer;
function launchViewer(urn, vid) {
var options = {
env: 'AutodeskProduction',
getAccessToken: getForgeToken
};
Autodesk.Viewing.Initializer(options, () => {
viewer = new Autodesk.Viewing.GuiViewer3D(document.getElementById('forgeViewer'));
viewer.start();
var documentId = 'urn:' + urn;
Autodesk.Viewing.Document.load(documentId, onDocumentLoadSuccess,
onDocumentLoadFailure);
});
}
function getForgeToken(callback) {
fetch('/api/forge/oauth/token').then(res => {
res.json().then(data => {
callback(data.access_token, data.expires_in);
});
});
}
function onDocumentLoadSuccess(doc) {
var viewables = (viewableId ? doc.getRoot().findByGuid(viewableId) :
doc.getRoot().getDefaultGeometry());
viewer.loadDocumentNode(doc, viewables).then(i => {
});
}
function onDocumentLoadFailure(viewerErrorCode) {
console.error('onDocumentLoadFailure() - errorCode:' + viewerErrorCode);
}
function loadModel1(){
Autodesk.Viewing.Document.load('urn:<model1 urn>', onDocumentLoadSuccess,
onDocumentLoadFailure);
}
function loadModel2(){
Autodesk.Viewing.Document.load('urn:<model2 urn>', onDocumentLoadSuccess,
onDocumentLoadFailure);
}