viewhubmodels 示例使用从对象树中选择的版本在查看器上呈现特定的骨灰盒,因此您需要更改此默认逻辑。
要利用此示例实现多模型,请参阅multi-model refresher 博文。
您可以实现示例中博客文章中描述的 addViewable 函数,以通过单击聚合模型。
您可以通过更改ForgeViewer.js 来实现。更准确地说是Initializer。
每次我们单击项目版本时,该示例都会为viewer 分配一个新值。我们可以通过以下代码更改当前的Initializer 来更改此行为以在点击时聚合新模型,而不是替换它们:
if(!!viewer){
addViewable(viewer, urn);
}
else{
viewer = new Autodesk.Viewing.GuiViewer3D(document.getElementById('forgeViewer'), { extensions: ['Autodesk.DocumentBrowser'] });
viewer.start();
var documentId = 'urn:' + urn;
Autodesk.Viewing.Document.load(documentId, onDocumentLoadSuccess, onDocumentLoadFailure);
}
addViewable 由前面提到的博客文章定义。
async function addViewable(viewer, urn, xform, offset) {
return new Promise(function (resolve, reject) {
function onDocumentLoadSuccess(doc) {
const viewable = doc.getRoot().getDefaultGeometry();
const options = {
preserveView: true,
keepCurrentModels: true
};
if (xform) {
options.placementTransform = xform;
}
if (offset) {
options.globalOffset = offset;
}
viewer.loadDocumentNode(doc, viewable, options)
.then(resolve)
.catch(reject);
}
function onDocumentLoadFailure(code) {
reject(`Could not load document (${code}).`);
}
Autodesk.Viewing.Document.load('urn:' + urn, onDocumentLoadSuccess, onDocumentLoadFailure);
});
}