如何在 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,它有点旧,所以现在还有一些,但可以给你一个很好的起点。
我在 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,它有点旧,所以现在还有一些,但可以给你一个很好的起点。