77 lines
2.7 KiB
C++
77 lines
2.7 KiB
C++
/**
|
||
* 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
|