我正在尝试将2个模型加载到Autodesk的Forge Viewer中。
我正在尝试以下代码:
const urn1 = <urn>
const urn2 = <urn>
Autodesk.Viewing.Initializer(
options,
() => {
const viewerDiv = document.getElementById('MyViewerDiv');
viewer = new Autodesk.Viewing.Private.GuiViewer3D(viewerDiv);
this.loadDoc(this.props.urns[1], true);
window.setTimeout(e => {
this.loadDoc(this.props.urns[2], false);
}, 4000);
},
);
loadDoc(urn: string, initializeAndLoad: boolean) {
Autodesk.Viewing.Document.load(urn,
(doc) => {
const viewables = Autodesk.Viewing.Document
.getSubItemsWithProperties(doc.getRootItem(), {'type': 'geometry'}, true);
if (viewables.length === 0) {
return;
}
const initialViewable = viewables[0];
const svfUrl = doc.getViewablePath(initialViewable);
const modelOptions = {
globalOffset: {x: 0, y: 0, z: 0}, // to align the models
sharedPropertyDbPath: doc.getPropertyDbPath(),
};
if (initializeAndLoad) {
viewer.start(svfUrl, modelOptions,
() => {},
() => {console.log('load model error');},
);
} else {
viewer.loadModel(urn, modelOptions,
() => {},
(e) => {
console.warn(e);
});
}
},
() => {}
);
}
超时的基本原理是在第一个模型加载后使用loadModel
加载第二个模型。我还尝试过从viewer.start
的{{1}}回调中加载第二个模型。
无论如何,我都会收到onSuccess
错误消息(在控制台和弹出窗口中)
我很确定该消息具有误导性,因为两个骨灰盒都有有效的SVF派生词(我可以在它们之间进行切换,无论哪个先加载显示都很好)
NB我正在使用以下版本: 'https://developer.api.autodesk.com/modelderivative/v2/viewers/6.2/viewer3D.min.js'
作为旁注,我尝试使用File extension not supported:null ErrorCode:13.
和Autodesk.Viewing.ViewingApplication
。这样,我就可以加载多个模型,但似乎无法使用这种方法设置selectItem
(特别是modelOptions
)。
答案 0 :(得分:1)
loadModel方法需要一个带有某些已知文件扩展名的URL(例如.svf
),但是您正在使用URN(已翻译文档的base64编码标识符)进行调用。这就是为什么找不到文件扩展名的原因。
顺便说一句。如果要在第一个模型完全加载后推迟第二个模型的加载,请考虑使用geometry-loaded-event而不是超时。