Skip to content

沿路径绝对移动

使光标沿着指定的路径移动到指定位置。

语法

cpp
class RX784::Device {
    Status movePathAbs(
        int16_t               x,
        int16_t               y,
        uint32_t              duration,
        uint32_t              pollingRate    = 250,
        bool                  isIgnoreErrors = false,
        const Path&           path,
        std::function<void()> callback       = []{}
    );
};
class RX784::Device {
    Status movePathAbs(
        int16_t               x,
        int16_t               y,
        uint32_t              duration,
        uint32_t              pollingRate    = 250,
        bool                  isIgnoreErrors = false,
        const Path&           path,
        std::function<void()> callback       = []{}
    );
};
e
类名基类公开备注
RX784设备
方法名返回值类型公开备注
沿路径绝对移动整数型
参数名类型参考可空数组备注
x短整数型
y短整数型
持续时间整数型
路径路径
轮询率整数型
是否忽略错误逻辑型
回调子程序指针
.版本 2 .程序集 RX784设备, , 公开 .子程序 沿路径绝对移动, 整数型, 公开 .参数 x, 短整数型 .参数 y, 短整数型 .参数 持续时间, 整数型 .参数 路径, 路径 .参数 轮询率, 整数型, 可空 .参数 是否忽略错误, 逻辑型, 可空 .参数 回调, 子程序指针, 可空
py

参数

名称英文说明
xx水平坐标,向右为正,取值范围是 0 <= x < 屏幕宽度
yy竖直坐标,向下为正,取值范围是 0 <= y < 屏幕高度
持续时间duration移动到指定坐标的持续时间,单位为毫秒(ms)。
轮询率polling rate每秒更新位置的次数,单位为赫兹(Hz)。
是否忽略错误is ignore errors忽略后如果某一步出错了,不会马上结束函数而是继续执行。
路径path目前支持
回调callback每移动一小步会调用一次回调。

返回值

名称英文说明
状态码status成功返回

类型

线性路径

通过方程 a1sin(b1st)+a2sin(b2st) 实现抖动的线性路径,st 表示某时刻光标到目标的直线移动量。速度变化通过三次贝塞尔曲线定义,可通过 https://cubic-bezier.com/ 生成参数。

cpp
namespace RX784 {
    struct LinearPath {
        double a1;
        double b1;
        double a2;
        double b2;
        double p1x;
        double p1y;
        double p2x;
        double p2y;
    };
}
namespace RX784 {
    struct LinearPath {
        double a1;
        double b1;
        double a2;
        double b2;
        double p1x;
        double p1y;
        double p2x;
        double p2y;
    };
}
e
方法名返回值类型公开备注
线性路径路径
参数名类型参考可空数组备注
a1双精度小数型
b1双精度小数型
a2双精度小数型
b2双精度小数型
p1x双精度小数型
p1y双精度小数型
p2x双精度小数型
p2y双精度小数型
.版本 2 .子程序 线性路径, 路径, 公开 .参数 a1, 双精度小数型 .参数 b1, 双精度小数型 .参数 a2, 双精度小数型 .参数 b2, 双精度小数型 .参数 p1x, 双精度小数型 .参数 p1y, 双精度小数型 .参数 p2x, 双精度小数型 .参数 p2y, 双精度小数型
py

备注

使用前必须先 初始化绝对坐标系统

示例

cpp
#include "rx784.hpp"
#include "rx784ext.h"

int main() {
    RX784::Device device;

    device.open("COM1");
    device.initAbsSystem(1920, 1080);

    // 移动到 (500, 100),耗时 1 秒
    device.movePathAbs(500, 100, 1000,
                       RX784::LinearPath{ 0.5, 0.5, 0.9, 0.1,
                                          0.5, 0.2, 0.8, 0.7 });

    // 轮询率设为 125Hz,即 1 秒移动 125 步
    device.movePathAbs(500, 100, 1000, 125u,
                       RX784::LinearPath{ 0.5, 0.5, 0.9, 0.1,
                                          0.5, 0.2, 0.8, 0.7 });

    // 忽略执行过程中的错误
    device.movePathAbs(500, 100, 1000, false,
                       RX784::LinearPath{ 0.5, 0.5, 0.9, 0.1,
                                          0.5, 0.2, 0.8, 0.7 });

    // 轮询率设为 125Hz,忽略错误
    device.movePathAbs(500, 100, 1000, 125, false,
                       RX784::LinearPath{ 0.5, 0.5, 0.9, 0.1,
                                          0.5, 0.2, 0.8, 0.7 });

    // 设置回调,每移动一小步打印一次 hello
    // 回调可以用 lambda 表达式,也可以用函数指针
    device.movePathAbs(500, 100, 1000,
                       RX784::LinearPath{ 0.5, 0.5, 0.9, 0.1,
                                          0.5, 0.2, 0.8, 0.7 },
                       []{
                           std::cout << "hello" << std::endl;
                       });

    device.close();
}
#include "rx784.hpp"
#include "rx784ext.h"

int main() {
    RX784::Device device;

    device.open("COM1");
    device.initAbsSystem(1920, 1080);

    // 移动到 (500, 100),耗时 1 秒
    device.movePathAbs(500, 100, 1000,
                       RX784::LinearPath{ 0.5, 0.5, 0.9, 0.1,
                                          0.5, 0.2, 0.8, 0.7 });

    // 轮询率设为 125Hz,即 1 秒移动 125 步
    device.movePathAbs(500, 100, 1000, 125u,
                       RX784::LinearPath{ 0.5, 0.5, 0.9, 0.1,
                                          0.5, 0.2, 0.8, 0.7 });

    // 忽略执行过程中的错误
    device.movePathAbs(500, 100, 1000, false,
                       RX784::LinearPath{ 0.5, 0.5, 0.9, 0.1,
                                          0.5, 0.2, 0.8, 0.7 });

    // 轮询率设为 125Hz,忽略错误
    device.movePathAbs(500, 100, 1000, 125, false,
                       RX784::LinearPath{ 0.5, 0.5, 0.9, 0.1,
                                          0.5, 0.2, 0.8, 0.7 });

    // 设置回调,每移动一小步打印一次 hello
    // 回调可以用 lambda 表达式,也可以用函数指针
    device.movePathAbs(500, 100, 1000,
                       RX784::LinearPath{ 0.5, 0.5, 0.9, 0.1,
                                          0.5, 0.2, 0.8, 0.7 },
                       []{
                           std::cout << "hello" << std::endl;
                       });

    device.close();
}
e
方法名返回值类型公开备注
_启动子程序整数型
变量名类型静态数组备注
设备RX784设备
设备.打开 (“COM1”)
设备.初始化绝对坐标系统 (1920, 1080)
设备.沿路径绝对移动 (100, 100, 1000, 线性路径 (0.5, 0.5, 0.9, 0.1, 0.5, 0.2, 0.8, 0.7))
设备.关闭 ()
返回 (0)
.版本 2 .子程序 _启动子程序, 整数型 .局部变量 设备, RX784设备 设备.打开 (“COM1”) 设备.初始化绝对坐标系统 (1920, 1080) 设备.沿路径绝对移动 (100, 100, 1000, 线性路径 (0.5, 0.5, 0.9, 0.1, 0.5, 0.2, 0.8, 0.7)) 设备.关闭 () 返回 (0)
py
import rx784
import rx784