Autodesk forge 锻造工具handleButtonDown和handleButtonUp函数未被调用
我正在查看位于的教程的示例代码以及位于的文档——这些函数中的大多数都在我的工具中正确调用,如handleSingleClick、handleMouseMove、handleKeyDown等,但其中两个没有被调用——handleButtonDown和handleButtonUp。我使用的是查看器版本3.3.x,但我已更新为使用4.0.x,认为这可能有助于解决问题,但两个版本中都出现相同的问题。感谢您的帮助。Autodesk.Viewing.ToolController#uu invokeStack(),Autodesk forge 锻造工具handleButtonDown和handleButtonUp函数未被调用,autodesk-forge,autodesk-viewer,Autodesk Forge,Autodesk Viewer,我正在查看位于的教程的示例代码以及位于的文档——这些函数中的大多数都在我的工具中正确调用,如handleSingleClick、handleMouseMove、handleKeyDown等,但其中两个没有被调用——handleButtonDown和handleButtonUp。我使用的是查看器版本3.3.x,但我已更新为使用4.0.x,认为这可能有助于解决问题,但两个版本中都出现相同的问题。感谢您的帮助。Autodesk.Viewing.ToolController#uu invokeStack
\u toolStack
中的以下代码块代表工具控制器
中激活的工具,方法
代表以句柄
启动的回调函数,即handleSingleClick,handleMouseMove,把手键向下、把手按钮向下、把手按钮向下等
for( var n = _toolStack.length; --n >= 0; )
{
var tool = _toolStack[n];
if( tool[method] && tool[method](arg1, arg2) )
{
return true;
}
}
根据我的经验,如果在自定义工具之前执行了句柄函数,如handlebuttonown
或handleButtonUp
,并返回true,则永远不会调用句柄
幸运的是,Forge Viewer(v3.2)开始为在
ToolController
中注册的自定义工具调用优先级机制<代码>工具控制器将使用优先级编号对其中的工具进行排序,每个工具的优先级编号默认为0。您可以覆盖优先级,使您的工具比其他工具先被命中,这样可以添加一个函数getPriority()
,以返回大于0的数字:
this.getPriority = function() {
return 100;
};
我发现,在使用ES6和
类
语法时,从Autodesk.Viewing.ToolInterface
扩展工具将阻止覆盖正常工作,可能是因为它没有在查看器源代码中使用prototype
实现
您只需创建一个类并实现您的工具感兴趣的方法:
// KO: not working!
class MyTool extends Autodesk.Viewing.ToolInterface {
getName () {
return 'MyTool'
}
getNames () {
return ['MyTool']
}
handleButtonDown (event, button) {
return false
}
}
// OK
class MyTool {
getName () {
return 'MyTool'
}
getNames () {
return ['MyTool']
}
handleButtonDown (event, button) {
return false
}
}
谢谢你这么做。getPriority建议似乎有效