我正在为客户开发 POC,我建议使用 Autodesk Forge 平台在 Web 上显示 3D 插图并与之交互。
我能够设计一个管理面板,管理员用户可以在插图中标记不同的部分,当最终用户单击标记的部分时,我们要么导航到该部分的插图,要么显示该部分的存储信息。为此,我使用了
Autodesk.Viewing.SELECTION_CHANGED_EVENT
。
另一个主要要求是在将鼠标悬停在图像内的零件上时显示零件名称和一些其他信息。我无法找到任何可以绑定鼠标悬停或悬停在模型内零件上的事件。
附注向我指出文档,我可以在其中找到其他受支持事件的信息,这对我将来的使用非常有帮助。
您可以利用 object-under-mouse-changed 事件。它传回一个“dbid”,可用于识别悬停在其上的对象。当它没有被悬停时(画布是悬停对象),它似乎返回-1。
这里是添加事件监听器的示例(假设您的查看者是“查看者”)。只需记录您可能感兴趣的项目,并展示如何从 dbId 获取名称。
viewer.addEventListener(Autodesk.Viewing.OBJECT_UNDER_MOUSE_CHANGED,function(e){doStuff(e)});
function doStuff(e){
console.log(e); /*To see everything passed back by the event.*/
console.log(e.dbId); /*To get the internal ID of the object being hovered*/
/*To get the object name from the dbId. Note that this also includes the handle in the return of the name.*/
viewer.getProperties(e.dbId, function(displayProperties){
console.log(displayProperties.name);
});
}
ASAIK,没有像 MOUSE_OVER_EVENT 这样的直接事件来返回悬停在元素上,但是您可以使用 mousemove 事件并计算命中元素的 dbid,这里有一篇博客文章您可以参考,希望它有帮助,让我如有其他问题请知道。
就其价值而言,Matt H 的答案并没有错... Autodesk Viewer API 版本 7 确实具有常量
Autodesk.Viewing.OBJECT_UNDER_MOUSE_CHANGED
(请参阅 docs)和相应的事件。然而,这个常量缺少类型定义,因此 TypeScript 语言服务器将列出一个错误 - 它不知道它在运行时存在。我使用 //@ts-expect-error
来静音警告,并在代码中添加注释来解释问题。
还需要注意的是,只有在查看器中启用突出显示时才会触发此事件。我在Autodesk的文档中没有找到这个要求,而是自己观察并通过在浏览器中阅读源代码(viewer3D.min.js)来确认它。