文件扩展名不是 supported:null ErrorCode:13。加载多个模型时
File extension not supported:null ErrorCode:13. when loading multiple models
我正在尝试将 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
的 onSuccess
回调加载第二个模型。
无论如何,我都会收到 File extension not supported:null ErrorCode:13.
错误消息(在控制台和弹出窗口中)
我很确定该消息具有误导性,因为两个 urns 都有有效的 SVF 衍生物(我可以在它们之间切换,无论哪个先加载显示都很好)
注意我使用的是以下版本:
'https://developer.api.autodesk.com/modelderivative/v2/viewers/6.2/viewer3D.min.js'
作为旁注,我尝试使用 Autodesk.Viewing.ViewingApplication
和 selectItem
。有了这个,我可以加载多个模型,但我似乎无法使用这种方法设置 modelOptions
(特别是 globalOffset
)。
loadModel 方法期望 URL 具有一些已知的文件扩展名(例如,.svf
),但您使用 URN(一个文件的 base64 编码标识符)调用它翻译文件)。这就是找不到文件扩展名的原因。
顺便说一句。如果您想在第一个模型完全加载后推迟加载第二个模型,请考虑使用 geometry-loaded-event 而不是超时。
我正在尝试将 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
的 onSuccess
回调加载第二个模型。
无论如何,我都会收到 File extension not supported:null ErrorCode:13.
错误消息(在控制台和弹出窗口中)
我很确定该消息具有误导性,因为两个 urns 都有有效的 SVF 衍生物(我可以在它们之间切换,无论哪个先加载显示都很好)
注意我使用的是以下版本: 'https://developer.api.autodesk.com/modelderivative/v2/viewers/6.2/viewer3D.min.js'
作为旁注,我尝试使用 Autodesk.Viewing.ViewingApplication
和 selectItem
。有了这个,我可以加载多个模型,但我似乎无法使用这种方法设置 modelOptions
(特别是 globalOffset
)。
loadModel 方法期望 URL 具有一些已知的文件扩展名(例如,.svf
),但您使用 URN(一个文件的 base64 编码标识符)调用它翻译文件)。这就是找不到文件扩展名的原因。
顺便说一句。如果您想在第一个模型完全加载后推迟加载第二个模型,请考虑使用 geometry-loaded-event 而不是超时。