Autodesk Forge Viewer按dbId放置自定义标记不显示及居中问题
问题原因及解决方案
标记全部居中显示和使用的模型无直接关联,是坐标获取逻辑异常/扩展加载时机错误导致的,具体排查方向如下:
- 扩展加载时机错误
标记逻辑需要先获取指定dbId对应构件的几何包围盒,才能计算出正确的标记点位。若loadExtension执行时机过早,模型未完成几何加载,调用接口获取构件包围盒只会返回默认原点坐标,所有标记自然会堆叠在场景中心。
需要将扩展加载逻辑移到onDocumentLoadSuccess回调中,且监听GEOMETRY_LOADED_EVENT事件,等模型几何完全加载后再加载扩展,参考代码如下:
function onDocumentLoadSuccess(doc) { const defaultViewable = doc.getRoot().getDefaultGeometry(); viewer.loadDocumentNode(doc, defaultViewable).then(() => { // 等待几何加载完成后再加载标记扩展 viewer.addEventListener(Autodesk.Viewing.GEOMETRY_LOADED_EVENT, async () => { await viewer.loadExtension('IconMarkupExtension', { button: { icon: 'fa-thermometer-half', tooltip: 'Show The Temperature' }, icons: [ { dbId: 69, label: '300°C', css: 'temperatureHigh fas fa-thermometer-full'}, { dbId: 70, label: '300°C', css: 'temperatureHigh fas fa-thermometer-full'}, { dbId: 71, label: '300°C', css: 'temperatureHigh fas fa-thermometer-full'} ], onClick: (id) => { console.log(' ======================= IconMarkupExtension onClick id: ' + id); viewer.select(id); viewer.utilities.fitToView(); switch (id){ case 69: alert('Sensor offline'); } } }) }) }) }
- 原教程逻辑默认适配3D模型
如果使用的是2D图纸,原教程内的3D坐标转屏幕坐标逻辑需要做适配。可以在IconMarkupExtension.js的坐标计算部分打印每个dbId对应的包围盒值,确认是否返回了正确的坐标范围,如果所有dbId的包围盒中心都是同一个值,即可确认是加载时机问题。 - dbId有效性排查
可通过Viewer自带的接口或属性面板核对配置的dbId是否对应模型中实际存在的构件,排除无效dbId导致的坐标获取失败问题。
内容的提问来源于stack exchange,提问作者udda
相关产品推荐
相关产品推荐

