Autodesk forge 锻造工具handleButtonDown和handleButtonUp函数未被调用

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

我正在查看位于的教程的示例代码以及位于的文档——这些函数中的大多数都在我的工具中正确调用,如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建议似乎有效