/** * 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 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& inPointList, const Pointi& padding, double unit, std::vector& outPointList); static void transferPoint2ImagePixel(const std::vector>& inPointList, const Pointi& padding, double unit, std::vector& outPointList); static Pointi transferPoint2ImagePixel(const AutoPoint& inPoint, const Pointi& padding, double unit); protected: ItemStatus status_ = NotEnter; std::string itemName_; // 名称 std::vector teachPointList_; // 教学点列表(本质是两点连线和到线的距离) std::vector pointList_; // 普通点 std::vector leftPointList_; // 曲线行驶左侧点 std::vector rightPointList_; // 曲线行驶右侧点 AutoLine inLine_; // 进项目判断线 AutoLine outLine_; // 出项目判断线 }; #endif // ITEMMODELABSTRACTCLASS_H