assistedDrive/entry/src/main/cpp/sdk/assistdrive/item/ItemModelAbstractClass.h

77 lines
2.7 KiB
C
Raw Normal View History

2024-09-04 11:06:17 +08:00
/**
2024-09-05 10:35:03 +08:00
* ItemModelAbstractClass.h
2024-09-04 11:06:17 +08:00
*
* @brief:
* @author: zhanke
* @history: 2024-08-01, create file
*/
2024-09-05 10:35:03 +08:00
#ifndef ITEMMODELABSTRACTCLASS_H
#define ITEMMODELABSTRACTCLASS_H
2024-09-04 11:06:17 +08:00
#include "AutomaticServiceDefines.h"
#include "GraphicDefines.h"
#include "GraphicImage.h"
#include "HTypes.h"
using data::TeachPointInfo;
using data::TeachPointParam;
using graphic::AutoLine;
using graphic::AutoPoint;
using graphic::AutoRect;
2024-09-05 10:35:03 +08:00
enum ItemStatus
{
2024-09-04 11:06:17 +08:00
NotEnter = 0, // 未进入项目
Enter, // 在项目中
Leave // 出项目
};
struct TeachPoint
{
2024-09-05 10:35:03 +08:00
bool isPass = false; // 教学点已触发
2024-09-04 11:06:17 +08:00
AutoLine line; // 教学点标志线
TeachPointInfo info; // 教学点信息外部json文件输入
std::vector<TeachPointParam> params; // 教学点参数外部json文件输入
};
2024-09-05 10:35:03 +08:00
class ItemModelAbstractClass
2024-09-04 11:06:17 +08:00
{
public:
void initModelPoint(); // 初始化模型点,将经纬度转为相对基准点坐标
virtual void initTeachPoint(); // 初始化教学点
2024-09-05 10:35:03 +08:00
virtual void initTeachPointLines() = 0; // 初始化教学点依赖的模型线
2024-09-04 11:06:17 +08:00
virtual bool isModelInMapArea(AutoRect mapArea); // 判断项目是否在绘图范围内
virtual void drawModel(IGraphicAbstract* pGraphicTool, const Pointi& padding, double unit) = 0;
virtual ItemStatus updateItemStatus(double x, double y);
virtual int calculateTeachPoint(double x, double y);
2024-09-05 10:35:03 +08:00
std::string getItemName();
2024-09-04 11:06:17 +08:00
// 相对坐标点转绘图像素点
static void transferPoint2ImagePixel(const std::vector<AutoPoint>& inPointList,
const Pointi& padding, double unit,
std::vector<Pointi>& outPointList);
static void transferPoint2ImagePixel(const std::vector<std::vector<double>>& inPointList,
const Pointi& padding, double unit,
std::vector<Pointi>& outPointList);
static Pointi transferPoint2ImagePixel(const AutoPoint& inPoint, const Pointi& padding,
double unit);
protected:
ItemStatus status_ = NotEnter;
2024-09-05 10:35:03 +08:00
std::string itemName_; // 名称
2024-09-04 11:06:17 +08:00
std::vector<TeachPoint> teachPointList_; // 教学点列表(本质是两点连线和到线的距离)
std::vector<AutoPoint> pointList_; // 普通点
std::vector<AutoPoint> leftPointList_; // 曲线行驶左侧点
std::vector<AutoPoint> rightPointList_; // 曲线行驶右侧点
AutoLine inLine_; // 进项目判断线
AutoLine outLine_; // 出项目判断线
};
2024-09-05 10:35:03 +08:00
#endif // ITEMMODELABSTRACTCLASS_H