如何在已初始化Autodesk Viewer的应用中使用Autodesk Tandem Viewer?
问题解答
可以在已初始化Autodesk Viewer的应用中使用Tandem Viewer,但不能重复调用Autodesk.Viewing.Initializer,且需调整Tandem的初始化逻辑来避免环境配置冲突。
错误原因分析
你遇到的Cannot read properties of undefined (reading 'ROOT')错误,是因为重复调用Autodesk.Viewing.Initializer时环境配置逻辑冲突:
- 第一次初始化已将Viewer环境设置为
AutodeskProduction2,第二次调用传入DtProduction环境后,EnvironmentConfigurations[getEnv()]无法匹配到对应配置,导致config为undefined,访问config['ROOT']触发报错。
正确实现方式
方案1:统一初始化兼容两者
如果还未初始化Viewer,可在第一次Autodesk.Viewing.Initializer中同时配置Viewer和Tandem所需参数:
Autodesk.Viewing.Initializer({ env: 'AutodeskProduction2', api: this.bEmea ? 'streamingV2_EU' : 'streamingV2', getAccessToken: accessToken, // 添加Tandem相关配置 dtEnv: 'DtProduction', dtApi: 'dt' }, () => { // 初始化常规Viewer const viewer = new Autodesk.Viewing.GuiViewer3D(container); viewer.start(); // 初始化Tandem Viewer(需确保已加载Tandem相关脚本) const tandemOptions = { productId: 'Digital Twins', corsWorker: true, accessToken: accessToken }; // 直接创建Tandem Viewer实例,无需再次调用Initializer const tandemViewer = new Autodesk.DtViewer(container, tandemOptions); });
方案2:已初始化Viewer后添加Tandem
如果已经完成了Viewer的初始化,不要再次调用Autodesk.Viewing.Initializer,直接手动配置Tandem的端点并创建实例:
// 手动指定Tandem的服务端点,避免依赖环境配置 const tandemOptions = { endpoint: 'https://dt.autodesk.com', // Tandem生产环境端点 productId: 'Digital Twins', corsWorker: true, accessToken: accessToken }; // 直接创建Tandem Viewer实例 const tandemViewer = new Autodesk.DtViewer(container, tandemOptions);
关键注意事项
- 确保仅加载一次Autodesk Viewer和Tandem相关的JavaScript脚本,避免重复加载导致的冲突。
- Tandem Viewer基于Autodesk Viewer构建,无需重复初始化核心Viewer环境,直接创建
Autodesk.DtViewer实例即可。
内容的提问来源于stack exchange,提问作者Peter Kolbe
相关产品推荐
相关产品推荐

