Wacom Feel™ 多点触控 API 入门
我需要什么才能开始为 Wacom Feel™ Multi-Touch API 开发软件?
您需要一个支持触摸输入的 Wacom 数位板。此外,您还需要安装 Wacom 数位板驱动程序,其中包括 Wacom Feel™ Multi-Touch 框架。有一些文件需要与您的源代码一起包含,其详细信息可以在Multi Touch Framework - Basics中找到。
使用 Wacom Feel™ 多点触控 API 需要什么?我需要在我自己的项目中包含任何 SDK 或库吗?
Wacom Feel™ Multi-Touch API 支持是 Wacom 数位板驱动软件本身的一部分。驱动程序安装提供了所有必要的系统组件,以便通过 API 与平板电脑进行通信。当您使用 SDK 提供的标头构建您的应用程序时,您可以动态链接到已安装的框架。请参阅https://github.com/Wacom-Developer/wacom-device-kit-macos-multi-touch。
Wacom Feel™ Multi-Touch API 是否适用于所有 Wacom 数位板?
不,您需要支持触摸输入的 Wacom 数位板。
我在哪里可以找到 Wacom Feel™ Multi-Touch API 示例应用程序?
可以在https://github.com/Wacom-Developer/wacom-device-kit-macos-multi-touch上找到示例代码。
如何下载 Feel™ Multi-Touch API 的 SDK?
Feel™ Multi-Touch API 的运行时依赖性是通过 Wacom 数位板驱动程序提供的;它总是在最终用户在他们的系统上安装平板电脑驱动程序时安装。多点触控框架 - 基础知识中详细介绍了编译时依赖性。
我可以通过 Wacom Feel™ Multi-Touch API 从数位板上获取哪些类型的触摸数据?
所有具有触控功能的平板电脑都会为每个手指至少报告以下内容:
-
手指状态——(无、向上、向下、按住)
-
手指触摸位置- (x, y)
-
手指尺寸——(宽度和高度)
对于受支持的平板电脑,还支持其他数据类型: Blob 数据——检测到一个或多个触摸接触的不规则形状区域 原始数据——传感器的所有数据,包括非接触区域和接触区域
请参阅多点触控框架的数据读取功能部分 - 基本页面以全面了解功能。
我可以使用 Wacom Feel™ Multi-Touch API 为 Web App 设计触摸功能或手势吗?
不,我们目前不提供对 Wacom Feel™ Multi-Touch API 的浏览器支持。
了解多点触控数据
我能用这些触摸数据做什么?
您可以使用这些数据来创建功能,使用户与屏幕上的内容能够直接交互——触摸屏幕对象并对其进行一些操作。或者您可以使用它来创建驱动应用程序的手势。用手指创造身临其境的体验,无需鼠标或键盘。Wacom Feel™ Multi-Touch 屏幕可同时响应多个接触点,不仅仅是一根或两根手指,而是同时响应多个接触点。
Wacom Feel™ Multi-Touch API 支持哪些主要操作模式?
消费者模式——在消费者模式下,最前沿的 Wacom Feel™ Multi-Touch API 启用应用程序是接收触摸数据的唯一进程。数据不会传递给系统或任何其他多点触控应用程序进行手势处理。
观察者模式——在观察者模式下,多点触控应用程序被配置为接收触摸数据,它可以根据需要解析这些数据。触摸数据也被发送到平板电脑驱动程序手势识别算法以及系统本身(例如,用于光标导航)。所有正在运行的启用 Wacom Feel™ 多点触控 API 的应用程序都将接收触摸数据。如果应用程序选择以观察者模式将触摸数据传递给驱动程序,那么平板电脑驱动程序将解释触摸数据并识别适合平板电脑和操作系统的手势。
直通模式——在直通模式下,如果触摸数据落在指定的 hitrect 内,则会将其发送到系统。这对于希望保留对触摸数据的独占使用以进行绘图或对象操作的消费者应用程序非常有用,同时仍保持用户与应用程序控件(例如:按钮、菜单等)交互的能力。直通模式区域(hitrects)可以与其他两种模式结合使用。
我应该在我的应用程序中使用哪种操作模式?
如果您使用触摸数据来定义自己的手势或其他交互并且不希望来自操作系统的任何干扰,则消费者模式很有用。它可能需要在您的应用程序中做更多的工作,因为操作系统不移动光标或提供与菜单或其他对话框交互的能力。
观察者模式为应用程序提供了与触摸数据交互的能力。然后将数据传递给操作系统,以完成移动光标和与窗口范围外的项目交互的工作。请注意,Wacom 数位板驱动程序将继续处理触摸数据并应用手势识别算法。
直通模式对于在您的应用程序中设置点击区域或按钮框区域很有用。建议将此与 Consumer 模式结合使用。
防手掌误触是如何工作的?什么是“触摸信心位”?
手掌拒绝是应用程序忽略触摸数据的能力,因为它会在用户正在与之交互的应用程序中造成干扰(例如留下污迹或条纹)。该 API 支持应用程序通过使用“置信位”来内置手掌拒绝功能。置信位是单个手指触摸数据的标志,指示平板电脑驱动程序认为触摸是有意的(有效的)还是无意的(无效的)。
置信度位的常见用途是用于同时包含笔和触摸输入的应用程序。在笔位置附近的触摸将被视为不自信(对于惯用右手的用户,如果触摸主要发生在笔位置的右侧)。置信位的另一个用途是在触摸接触过大时进行标记,其中“过大”大约是指超过正常手指接触大小的任何东西。尽管所有手指触摸数据都带有置信度位,但应用程序可以随意忽略它们并建立自己的标准来决定触摸何时有效。
如果您的应用程序需要匹配 down 和 up 事件,检查非置信数据将很重要;大多数宕机事件发生在不自信的状态下。
使用手掌拒绝会增加一些延迟,因为可能需要几帧才能接受接触。
如何创建扩展和可自定义的手势?Wacom 是否提供创建它们的工具?
开发人员可以使用 Wacom Feel™ Multi-Touch 数据创建自己的手势来代替标准操作系统手势,或者以独特的方式扩展它们。Wacom 不为此提供工具。
Wacom 手势引擎如何与 API 相关联?
Wacom Feel™ Multi-Touch API 不提供任何手势事件。驱动程序产生的手势事件以击键和鼠标滚轮事件的形式发送。用户可以通过 Wacom 数位板属性应用程序修改某些手势的输出。如果应用程序注册消费者模式触摸数据,则不会生成这些事件。如果应用程序希望接收平板电脑驱动程序手势支持以及处理触摸数据输入,它应该注册观察者模式触摸数据。
我的应用程序如何支持来自 Wacom 的系统范围的“用户可配置手势”,以及我自定义的特定于应用程序的触摸功能?
为此,您需要使用观察者模式并根据应用程序的需要响应来自操作系统的事件。
当我将手掌放在数位板上并用手指触摸以进行手势或手指数据输入时,Wacom Feel™ Multi-Touch API 是否可以识别并拒绝手掌?
当手掌放在平板电脑上时,大多数具有触摸功能的平板电脑都可以使用置信度位来指示错误(拒绝)条件。对于不支持置信位的平板电脑,所有触摸都被解释为有效并被报告。请注意,如果多点触控应用程序设置为观察者模式,则触摸数据也会传递给平板电脑驱动程序手势识别器,这些手势识别器可能会也可能不会使用其手势识别器算法中的触摸置信度位来确定手势。
为什么在为 Wacom 数位板设计功能时无法获得要使用的型号?
基于触摸功能结构提供的特性设计触摸交互是确保未来兼容性的最佳方式。我们确保未来平板电脑中的相同功能可与 API 配合使用。当未来的平板电脑型号发布时,基于型号的设计决策可能会中断。
随着 API 的更改和改进,我的应用程序是否仍可使用旧版本的 API?
一般是的。保持向后兼容性是重中之重。随着新版本的发布,我们将努力保持对以前版本 API 的支持。请检查 WacomMTInitialize 函数的返回值是否存在版本兼容性问题。
什么是帧数以及如何使用它?
每次检测到新的联系人数据包时,帧计数值都会增加。由于数据包传递的速率是固定的,因此帧计数值可用于测量联系人移动的速率,而无需依赖内部计时器值。这也可用于识别帧丢失的时间。对于不受支持的平板电脑,该属性返回零。
解决常见问题
为什么我收不到触摸数据?
- 检查驱动程序是否正在活动监视器中运行。
进程名称 | %中央处理器 | 中央处理器时间 | 空闲唤醒 | %GPU |
---|---|---|---|---|
Wacom 触控驱动程序 | 0.0 | 5.90 | 0 | 0.0 |
Wacom数位板驱动程序 | 0.6 | 2:25.97 | 7 | 0.0 |
平板电脑驱动程序 | 0.0 | 0.23 | 0 | 0.0 |
- 确保权利已添加到项目中。请参阅多点触控框架 - 基础页面的权利部分。
- 检查 WacomMTInitialize 的返回值。请参阅多点触控框架 - 参考。
我的应用程序被太多的触摸回调淹没,回调滞后并且变得无响应。我怎样才能解决这个问题?
平板电脑触摸数据具有高分辨率,每秒报告 100 次,以提供最佳用户体验。该数据流包括手指位置以及手指是处于“向下”、“向上”还是“保持”位置。Wacom Feel™ Multi-Touch API 无法预测应用程序的性能要求,将全速报告。为了获得最流畅的控制和最佳质量体验,不建议跳过数据点。为了获得最佳性能,建议应用程序使用单独的线程来管理,从而减轻主应用程序的负载。
有两种读取数据的方法。开发人员可以注册一个读取回调或注册一个窗口 ID 以在数据准备好时接收消息。如果性能是一个问题,那么使用回调方法将数据排队并在不同的线程上处理它可能会更好。处理线程然后可以查看数据并确定是否需要进一步处理并且可能不处理所有数据。如果您出于性能原因想要跳过帧,一种可能是查看帧中每个手指的接触状态并处理每个其他手指(例如),除非手指状态发生变化(向上或新手指向下)。这样你就不会错过任何起伏,而且如果你不想的话也不需要处理中间的每个数据包。重要的是不要在回调函数中花费太多时间,并且您也不能依赖退出后持久存在的数据。最好维护您自己的内部联系人队列并在单独的线程上处理它们。