如何从已加载的多个模型中获取点击/选中的模型?
可以实现,你可以通过Autodesk Viewer内置的事件系统和属性查询API获取选中模型的所有相关信息,具体实现逻辑如下:
1. 绑定选择事件监听
首先在Viewer初始化完成后,绑定SELECTION_CHANGED_EVENT事件,该事件会在用户点击选中/取消选中模型时触发:
// 此处viewer为你初始化Autodesk Viewer得到的实例对象 viewer.addEventListener(Autodesk.Viewing.SELECTION_CHANGED_EVENT, (selectionEvent) => { // 获取当前选中的所有构件的dbId数组,dbId是Viewer中每个构件的唯一标识 const selectedDbIds = selectionEvent.dbIdArray; // 获取当前选中构件所属的模型实例,多模型加载场景下可用于区分不同gltf来源 const currentModel = selectionEvent.model; if (selectedDbIds.length === 0) { console.log('当前没有选中任何模型'); return; } // 接下来处理选中的模型逻辑 getSelectedModelInfo(selectedDbIds, viewer); })
2. 查询选中模型的属性信息
通过getProperties接口可以拿到模型的所有内置属性和自定义属性:
function getSelectedModelInfo(selectedDbIds, viewer) { selectedDbIds.forEach(dbId => { viewer.getProperties(dbId, (propertyResult) => { // 常用基础信息示例 const modelInfo = { dbId: dbId, 模型名称: propertyResult.name, 外部ID: propertyResult.externalId, 所属模型ID: propertyResult.modelId, 所有自定义属性: propertyResult.properties } // 按需处理拿到的模型信息 console.log('选中模型信息:', modelInfo); }, (error) => { console.error('获取模型属性失败:', error); }) }) }
3. 额外扩展信息获取
如果需要获取几何、层级等其他信息,可使用以下API:
- 查询模型树层级关系:调用
viewer.getObjectTree()获取完整构件树,可查询当前构件的父级、子级构件列表 - 获取几何包围盒:调用
viewer.getBoundingBox(dbId)返回选中模型的三维空间最小包围盒坐标,可用于定位、高亮等操作 - 查询gltf原始节点信息:通过
viewer.model.getFragmentList()可关联查询到加载的gltf原始节点的顶点、材质等参数
内容的提问来源于stack exchange,提问作者surya kumara
相关产品推荐
相关产品推荐

