SimsWorld/MessageBasic/motion_access.h

154 lines
3.7 KiB
C
Raw Normal View History

2025-06-14 16:05:57 +00:00
#pragma once
#include "messagebasic.h"
2025-06-21 04:54:39 +00:00
/// <summary>
/// ָ<><D6B8><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>ģʽ
/// </summary>
enum class NavigateDriveMode {
Cruise, // Ѳ<><D1B2>ģʽ<C4A3><CABD><EFBFBD><EFBFBD>;<EFBFBD><CDBE>Ϯģʽ
FullSpeed,// ȫ<><C8AB>ģʽ<C4A3><CABD>ս<EFBFBD><D5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ReachStop, // ͣפģʽ
};
2025-06-14 16:05:57 +00:00
/// <summary>
/// <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
struct MESSAGEBASIC_EXPORT NavigateWithRoute : public AbstractMessage {
2025-06-21 04:54:39 +00:00
QString _route_name; // <20><EFBFBD><E6BBAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
NavigateDriveMode _drive_mode; // <20><><EFBFBD><EFBFBD>ģʽ
2025-06-14 16:05:57 +00:00
NavigateWithRoute();
// Serializable
void recoveryFrom(const QJsonObject& obj) override;
void saveTo(QJsonObject& obj) const override;
};
/// <summary>
2025-06-21 04:54:39 +00:00
/// ƽ̨<C6BD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEA3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪY<CEAA><59><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪX<CEAA><58><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪZ
2025-06-14 16:05:57 +00:00
/// </summary>
2025-06-21 04:54:39 +00:00
struct MESSAGEBASIC_EXPORT PlatformMotionCommand : public AbstractMessage {
PlatformMotionCommand(const QString &nm);
2025-06-14 16:05:57 +00:00
/// <summary>
2025-06-21 04:54:39 +00:00
/// <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
2025-06-14 16:05:57 +00:00
/// </summary>
/// <returns></returns>
2025-06-21 04:54:39 +00:00
virtual double timeExpend() const = 0;
2025-06-14 16:05:57 +00:00
/// <summary>
2025-06-21 04:54:39 +00:00
/// ָ<><D6B8>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
2025-06-14 16:05:57 +00:00
/// </summary>
2025-06-21 04:54:39 +00:00
/// <param name="time"></param>
/// <returns><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ</returns>
virtual QVector3D posAtTime(double time) const = 0;
2025-06-14 16:05:57 +00:00
/// <summary>
2025-06-21 04:54:39 +00:00
/// ָ<><D6B8>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>ʸ<EFBFBD><CAB8>
2025-06-14 16:05:57 +00:00
/// </summary>
2025-06-21 04:54:39 +00:00
/// <param name="time"></param>
/// <returns><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ</returns>
virtual QVector3D speedAtTime(double time) const = 0;
2025-06-14 16:05:57 +00:00
};
/// <summary>
/// <20>鿴ָ<E9BFB4><D6B8>Ŀ<EFBFBD><C4BF>ʵ<EFBFBD><CAB5><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
struct MESSAGEBASIC_EXPORT MotionSequencePreviewGet : public AbstractMessage {
MotionSequencePreviewGet();
};
/// <summary>
/// ƽ̨<C6BD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
struct MESSAGEBASIC_EXPORT PlatformMotionSequence : public AbstractMessage {
QList<std::shared_ptr<PlatformMotionCommand>> _cmd_sequence;
PlatformMotionSequence();
// Serializable
void recoveryFrom(const QJsonObject& obj) override;
void saveTo(QJsonObject& obj) const override;
};
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5> =======================================================
/// <summary>
2025-06-21 04:54:39 +00:00
/// ֱ<>߻<EFBFBD><DFBB><EFBFBD>
2025-06-14 16:05:57 +00:00
/// </summary>
2025-06-21 04:54:39 +00:00
struct MESSAGEBASIC_EXPORT StrightLineMotion : public PlatformMotionCommand {
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD>ٶȣ<D9B6>m/s
/// </summary>
double _speed_motion = 0;
/// <summary>
/// <20><><EFBFBD>ٶȣ<D9B6>m/s^2
/// </summary>
double _accerlate_rates = 0;
/// <summary>
/// ·<><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
double _length_total = 0;
2025-06-14 16:05:57 +00:00
2025-06-21 04:54:39 +00:00
StrightLineMotion();
double timeExpend() const override;
QVector3D posAtTime(double time) const override;
QVector3D speedAtTime(double time) const override;
2025-06-14 16:05:57 +00:00
void recoveryFrom(const QJsonObject& obj) override;
void saveTo(QJsonObject& obj) const override;
2025-06-21 04:54:39 +00:00
};
#include <QVector3D>
/// <summary>
/// <20><><EFBFBD>ڻ<EFBFBD><DABB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>ˮƽ<CBAE><C6BD>׼Բ<D7BC><D4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
struct MESSAGEBASIC_EXPORT HorizontalArcMotion : public PlatformMotionCommand {
/// <summary>
/// ת<><D7AA>Բ<EFBFBD><D4B2>,<xpos, ypos, 0>
/// </summary>
QVector3D _center_point;
/// <summary>
/// <20><><EFBFBD><EFBFBD>ת<EFBFBD>ǣ<EFBFBD><C7A3><EFBFBD>
/// </summary>
double _rotate_deg = 0;
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD>ٶȣ<D9B6>m/s
/// </summary>
double _speed_motion = 0;
2025-06-14 16:05:57 +00:00
2025-06-21 04:54:39 +00:00
HorizontalArcMotion();
2025-06-14 16:05:57 +00:00
2025-06-21 04:54:39 +00:00
double timeExpend() const override;
QVector3D posAtTime(double time) const override;
QVector3D speedAtTime(double time) const override;
void recoveryFrom(const QJsonObject& obj) override;
void saveTo(QJsonObject& obj) const override;
2025-06-14 16:05:57 +00:00
};
2025-06-21 04:54:39 +00:00
/// <summary>
/// <20><><EFBFBD>ڻ<EFBFBD><DABB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>Ĵ<EFBFBD>ֱ<EFBFBD><D6B1>׼Բ<D7BC><D4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
struct MESSAGEBASIC_EXPORT VerticalArcMotion : public PlatformMotionCommand {
/// <summary>
/// ת<><D7AA>Բ<EFBFBD><D4B2>,<0, ypos, zpos>
/// </summary>
QVector3D _center_point;
/// <summary>
/// <20><><EFBFBD><EFBFBD>ת<EFBFBD>ǣ<EFBFBD><C7A3><EFBFBD>
/// </summary>
double _rotate_deg = 0;
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD>ٶȣ<D9B6>m/s
/// </summary>
double _speed_motion = 0;
VerticalArcMotion();
2025-06-14 16:05:57 +00:00
2025-06-21 04:54:39 +00:00
double timeExpend() const override;
QVector3D posAtTime(double time) const override;
QVector3D speedAtTime(double time) const override;
void recoveryFrom(const QJsonObject& obj) override;
void saveTo(QJsonObject& obj) const override;
2025-06-14 16:05:57 +00:00
};