问题描述
我在 https://forge.autodesk.com/blog/custom-window-selection-forge-viewer-part-iii ,位于 https://github.com/Autodesk-Forge/forge-rcdb.nodejs/blob/master/src/client/viewer.components/Viewer.Extensions.Dynamic/Viewing.Extension.SelectionWindow/Viewing.Extension.SelectionWindow.Tool.js以及 https:/上的文档/developer.autodesk.com/zh-CN/docs/viewer/v2/reference/javascript/toolinterface/ ---这些函数中的大多数都可以正确调用在我的工具(例如handleSingleClick,handleMouseMove,handleKeyDown等)中,但其中两个没有被点击-handleButtonDown和handleButtonUp.我使用的查看器版本为3.3.x,但我已更新为使用4.0.x,以为这可能有助于解决问题,但是在两个版本中都出现相同的问题.感谢您的帮助.
I was looking at the sample code for the tutorial at https://forge.autodesk.com/blog/custom-window-selection-forge-viewer-part-iii which is located at https://github.com/Autodesk-Forge/forge-rcdb.nodejs/blob/master/src/client/viewer.components/Viewer.Extensions.Dynamic/Viewing.Extension.SelectionWindow/Viewing.Extension.SelectionWindow.Tool.js as well as the documentation at https://developer.autodesk.com/en/docs/viewer/v2/reference/javascript/toolinterface/ --- Most of these functions are getting called properly in my tool such as handleSingleClick, handleMouseMove, handleKeyDown, and so on, but two of them are not getting hit -- handleButtonDown and handleButtonUp. I was using viewer version 3.3.x but I have updated to use 4.0.x thinking that that might help to resolve the problem, but the same issue occurs in both versions. Thanks for any help.
推荐答案
以下来自 Autodesk.Viewing.ToolController #__ invokeStack()
的代码块代表 _toolStack
在 ToolController
中被激活的工具中, method
代表以 handle
开头的回调函数,即handleSingleClick,handleMouseMove,handleKeyDown,handleButtonDown,handleButtonUp等.
The following code block from theAutodesk.Viewing.ToolController#__invokeStack()
, _toolStack
stands for activated tools in the ToolController
, the method
stands for callback functions started with handle
, i.e. handleSingleClick, handleMouseMove, handleKeyDown, handleButtonDown, handleButtonUp, etc.
for( var n = _toolStack.length; --n >= 0; )
{
var tool = _toolStack[n];
if( tool[method] && tool[method](arg1, arg2) )
{
return true;
}
}
根据我的经验,如果在您的自定义工具之前执行了诸如 handleButtonDown
或 handleButtonUp
之类的句柄函数,并返回true,那么您的句柄将永远不会被调用
Based on my experience, if there is a handle function such as handleButtonDown
or handleButtonUp
executed before your custom tools' and returned true, then your handles will never be called.
幸运的是,Forge Viewer(v3.2)开始为在 ToolController
中注册的自定义工具调用优先级机制. ToolController
将使用优先级编号对其中的工具进行排序,每个工具的优先级编号默认为0.您可以覆盖优先级以使您的工具在其他工具之前就被打中,例如,添加函数 getPriority()
以返回大于0的数字:
Fortunately, Forge Viewer (v3.2) starts invoking a priority mechanism for custom tools registered in ToolController
. ToolController
will use the priority number to sort the tools in it, and the priority number of each tool is 0 by default. You can override the priority to make your tools be hit before other tools like this way, to add a function getPriority()
to return a number greater than 0:
this.getPriority = function() {
return 100;
};
这篇关于伪造工具handleButtonDown和handleButtonUp函数未调用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!