assistedDrive/entry/src/main/cpp/sdk/assistdrive/item/ItemModelAbstractClass.h
2024-09-05 10:35:03 +08:00

77 lines
2.7 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* ItemModelAbstractClass.h
*
* @brief: 场地模型抽象类
* @author: zhanke
* @history: 2024-08-01, create file
*/
#ifndef ITEMMODELABSTRACTCLASS_H
#define ITEMMODELABSTRACTCLASS_H
#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;
enum ItemStatus
{
NotEnter = 0, // 未进入项目
Enter, // 在项目中
Leave // 出项目
};
struct TeachPoint
{
bool isPass = false; // 教学点已触发
AutoLine line; // 教学点标志线
TeachPointInfo info; // 教学点信息外部json文件输入
std::vector<TeachPointParam> params; // 教学点参数外部json文件输入
};
class ItemModelAbstractClass
{
public:
void initModelPoint(); // 初始化模型点,将经纬度转为相对基准点坐标
virtual void initTeachPoint(); // 初始化教学点
virtual void initTeachPointLines() = 0; // 初始化教学点依赖的模型线
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);
std::string getItemName();
// 相对坐标点转绘图像素点
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;
std::string itemName_; // 名称
std::vector<TeachPoint> teachPointList_; // 教学点列表(本质是两点连线和到线的距离)
std::vector<AutoPoint> pointList_; // 普通点
std::vector<AutoPoint> leftPointList_; // 曲线行驶左侧点
std::vector<AutoPoint> rightPointList_; // 曲线行驶右侧点
AutoLine inLine_; // 进项目判断线
AutoLine outLine_; // 出项目判断线
};
#endif // ITEMMODELABSTRACTCLASS_H