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
|