如何在 Autodesk Forge 中为 onMouseOver 事件编码

How to code for onMouseOver event in Autodesk Forge

我在 Autodesk Forge 中创建了一个简单的扩展。 这个想法是,当我在 3D 对象上进行鼠标悬停事件时,它必须向我显示悬停 object/sub-object 的 ID,我的扩展代码是这样运行的。

AutodeskNamespace("Autodesk.ADN.Viewing.Extension");


Autodesk.ADN.Viewing.Extension.MouseEvent = function (viewer, options) {

    Autodesk.Viewing.Extension.call(this, viewer, options);

    var _self = this;
    var _viewer = viewer;
    var _selectedId = null;

//On Load of the exension function
    _self.load = function () {

 _viewer.addEventListener(
            Autodesk.Viewing.MOUSE_OVER_EVENT,
            _self.onMouseOver);

          console.log("Autodesk.ADN.MouseEvent loaded");
         return true;
 };

 //On unload of the exension function
      _self.unload = function () {
 
 _viewer.removeEventListener(
            Autodesk.Viewing.MOUSE_OVER_EVENT,
            _self.onMouseOver);

        console.log("Autodesk.ADN.MouseEvent unloaded");
        return true;
    };

// Event function initialization
_self.onMouseOver = function (event) {

        var dbId = event.dbIdArray[0];

        if (typeof dbId !== 'undefined') {

            _selectedId = dbId;
            alert('ID: ' + _selectedId);
        }
        else _selectedId = null;
    }
};
Autodesk.ADN.Viewing.Extension.MouseEvent.prototype =
    Object.create(Autodesk.Viewing.Extension.prototype);

Autodesk.ADN.Viewing.Extension.MouseEvent.prototype.constructor =
    Autodesk.ADN.Viewing.Extension.MouseEvent;

Autodesk.Viewing.theExtensionManager.registerExtension(
    'Autodesk.ADN.Viewing.Extension.MouseEvent',
    Autodesk.ADN.Viewing.Extension.MouseEvent);

但是onMouseOver 功能不起作用,谁能帮帮我?提前致谢。

PS:我在脚本标签中包含了扩展,扩展也同样被加载。

oViewer.loadExtension('Autodesk.ADN.Viewing.Extension.MouseEvent');

我还从控制台得到了扩展加载成功的确认信息。

不存在 Autodesk.Viewing.MOUSE_OVER_EVENT 这样的事件...您是刚刚编造的还是从某些 - 显然不正确的 - 来源那里得到的?

处理该问题的方法是使用查看器工具(参见 details 的 post),然后在 handleMouseMove 回调中执行以下操作:

handleMouseMove (event) {

  var hitTest = _self.viewer.clientToWorld(
    event.canvasX,
    event.canvasY,
    true)

  if (hitTest) {

    console.log(hitTest)
  }
}

这是我写的另一个 post 关于 viewer events,它有点旧,所以现在还有一些,但可以给你一个很好的起点。