#pragma once
#include "messagebasic.h"
///
/// 依照指定名称路径机动
///
struct MESSAGEBASIC_EXPORT NavigateWithRoute : public AbstractMessage {
QString _route_name;
NavigateWithRoute();
// Serializable
void recoveryFrom(const QJsonObject& obj) override;
void saveTo(QJsonObject& obj) const override;
};
///
/// 机动类型
///
enum MotionType {
None, // 没有
StraightLine,// 直线机动
StandardArc, // 标准圆弧
ParabolaLine,// 抛物线
Bezier2tArc, // 二次贝塞尔曲线
Bezier3tArc, // 三次贝塞尔曲线
};
///
/// 机动角度方向
///
enum class MotionRotate {
Horizontal, Vertical
};
///
/// 正交机动命令抽象接口
///
struct OrthogonalMotionCommand : public Serializable {
///
/// 机动平面方向
///
///
virtual MotionRotate rotateType() const = 0;
///
/// 机动类型
///
///
virtual MotionType motionType() const = 0;
///
/// 计算指定百分比位置
///
///
///
virtual LonLatAltPos posAtPercent(double percent) = 0;
///
/// 指定百分比位置的速度
///
///
///
virtual double speedAtPercent(double percent) = 0;
///
/// 指定百分比位置速度方向
///
///
///
virtual QVector2D speedVectorAtPercent(double percent) = 0;
};
///
/// 平台机动命令
///
struct PlatformMotionCommand : public AbstractMessage {
QHash> _motion_set; //合成机动命令
double _arrived_time = 0; // 抵达终点时间
double _start_time = 0;
PlatformMotionCommand();
// Serializable
void recoveryFrom(const QJsonObject& obj) override;
void saveTo(QJsonObject& obj) const override;
};
///
/// 查看指定目标实体的机动指令序列
///
struct MESSAGEBASIC_EXPORT MotionSequencePreviewGet : public AbstractMessage {
MotionSequencePreviewGet();
};
///
/// 平台机动命令序列
///
struct MESSAGEBASIC_EXPORT PlatformMotionSequence : public AbstractMessage {
QList> _cmd_sequence;
PlatformMotionSequence();
// Serializable
void recoveryFrom(const QJsonObject& obj) override;
void saveTo(QJsonObject& obj) const override;
};
// 正交机动命令实现 =======================================================
///
/// 水平直线机动
///
struct MESSAGEBASIC_EXPORT HorizontalLineMotionCmd : public OrthogonalMotionCommand {
LonLatPos _lonlat_anchor;// 起始点
double _azimuth_deg = 0; // 起始方位角
double _speed_value = 0;// 起始速度
double _accerlate_rate = 0;// 加速度
HorizontalLineMotionCmd();
// Serializable
void recoveryFrom(const QJsonObject& obj) override;
void saveTo(QJsonObject& obj) const override;
MotionRotate rotateType() const override;
MotionType motionType() const override;
LonLatAltPos posAtPercent(double percent) override;
};
struct MESSAGEBASIC_EXPORT VerticalLineMotionCmd : public OrthogonalMotionCommand {
};