From a073dc3c983b4c56c5da92642c9ad11995bdb844 Mon Sep 17 00:00:00 2001 From: yy1717 <fctom1215@outlook.com> Date: 星期一, 11 五月 2020 18:05:31 +0800 Subject: [PATCH] 新的科目三 --- lib/src/main/cpp/driver_test.cpp | 81 ++++++++++++++++++++++++++++++++++++---- 1 files changed, 72 insertions(+), 9 deletions(-) diff --git a/lib/src/main/cpp/driver_test.cpp b/lib/src/main/cpp/driver_test.cpp index 22b8ff2..b0811d2 100644 --- a/lib/src/main/cpp/driver_test.cpp +++ b/lib/src/main/cpp/driver_test.cpp @@ -66,6 +66,7 @@ static LIST_AREA_MAP AreaMapList; static Polygon RoadMapPoints; +static road_exam_map RoadMap; static LIST_ROAD_MAP RoadMapList; @@ -111,7 +112,10 @@ RoadMapPoints.num = 0; RoadMapPoints.point = NULL; - RoadMapList.clear(); +// RoadMapList.clear(); + RoadMap.roads.clear(); + RoadMap.specialAreas.clear(); + RoadMap.triggerLines.clear(); CarSensorInit(); @@ -190,11 +194,58 @@ { if (ExamStart) return; + DEBUG("娓呴櫎鏃х殑璺�冨湴鍥�"); + if (RoadMapPoints.point != NULL) { free(RoadMapPoints.point); } RoadMapPoints.num = 0; + for (int i = 0; i < RoadMap.roads.size(); ++i) { + for (int j = 0; j < RoadMap.roads[i].leftEdge.size(); ++j) { + RoadMap.roads[i].leftEdge[j].points.clear(); + vector<PointF>().swap(RoadMap.roads[i].leftEdge[j].points); + } + RoadMap.roads[i].leftEdge.clear(); + vector<edge_t>().swap(RoadMap.roads[i].leftEdge); + + for (int j = 0; j < RoadMap.roads[i].rightEdge.size(); ++j) { + RoadMap.roads[i].rightEdge[j].points.clear(); + vector<PointF>().swap(RoadMap.roads[i].rightEdge[j].points); + } + RoadMap.roads[i].rightEdge.clear(); + vector<edge_t>().swap(RoadMap.roads[i].rightEdge); + + for (int j = 0; j < RoadMap.roads[i].separate.size(); ++j) { + for (int k = 0; k < RoadMap.roads[i].separate[j].lines.size(); ++k) { + for (int m = 0; m < RoadMap.roads[i].separate[j].lines[k].size(); ++m) { + RoadMap.roads[i].separate[j].lines[k][m].points.clear(); + vector<PointF>().swap(RoadMap.roads[i].separate[j].lines[k][m].points); + } + + RoadMap.roads[i].separate[j].lines[k].clear(); + vector<segment_t>().swap(RoadMap.roads[i].separate[j].lines[k]); + } + RoadMap.roads[i].separate[j].lines.clear(); + vector<vector<segment_t>>().swap(RoadMap.roads[i].separate[j].lines); + } + RoadMap.roads[i].separate.clear(); + vector<separate_t>().swap(RoadMap.roads[i].separate); + } + + RoadMap.roads.clear(); + vector<road_t>().swap(RoadMap.roads); + + for (int i = 0; i < RoadMap.specialAreas.size(); ++i) { + RoadMap.specialAreas[i].area.clear(); + vector<PointF>().swap(RoadMap.specialAreas[i].area); + } + RoadMap.specialAreas.clear(); + vector<special_area_t>().swap(RoadMap.specialAreas); + + RoadMap.triggerLines.clear(); + vector<trigger_line_t>().swap(RoadMap.triggerLines); +/* for (int i = 0; i < RoadMapList.size(); ++i) { struct road_exam_map map = RoadMapList[i]; @@ -244,7 +295,18 @@ } } - RoadMapList.clear(); + RoadMapList.clear();*/ +} + +void SetRoadMap(road_exam_map &map) +{ + if (ExamStart) return; + + RoadMap.roads.assign(map.roads.begin(), map.roads.end()); + RoadMap.specialAreas.assign(map.specialAreas.begin(), map.specialAreas.end()); + RoadMap.triggerLines.assign(map.triggerLines.begin(), map.triggerLines.end()); + + DEBUG("寰楀埌鏂扮殑璺�冨湴鍥� 璺暟閲� %d 鐗规畩鍖哄煙鏁伴噺 %d 瑙﹀彂绾挎暟閲� %d", RoadMap.roads.size(), RoadMap.specialAreas.size(), RoadMap.triggerLines.size()); } void SetRoadMapPoints(vector<double> &mapPoints) @@ -271,7 +333,7 @@ vector<int> area, vector<int> stopLine) { - struct road_exam_map newMap; +/* struct road_exam_map newMap; newMap.id = id; newMap.type = type; @@ -400,7 +462,7 @@ newMap.stopLine.Y2); } - RoadMapList.push_back(newMap); + RoadMapList.push_back(newMap);*/ } void SetCarMeasurePoint(double *basePoint, int *axial, int *left_front_tire, @@ -554,7 +616,7 @@ // err = true; // MA_SendExamStatus(0, -3); } - if (type != TEST_TYPE_AREA && (RoadMapPoints.num == 0 || RoadMapPoints.point == NULL || RoadMapList.size() == 0)) { + if (type != TEST_TYPE_AREA && RoadMap.roads.size() == 0) { DEBUG("娌℃湁璺�冨湴鍥�"); err = true; MA_SendExamStatus(0, -1); @@ -645,8 +707,8 @@ brief.pointNum = CarModel->pointNum; brief.point = (double *) malloc(CarModel->pointNum * 2 * sizeof(double)); for (int i = 0, j = 0; i < CarModel->pointNum; ++i) { - brief.point[j++] = CarModel->carXY[i].X; - brief.point[j++] = CarModel->carXY[i].Y; + brief.point[j++] = round(CarModel->carXY[i].X, 4); + brief.point[j++] = round(CarModel->carXY[i].Y, 4); } MA_SendCarPosition(&brief); @@ -801,7 +863,7 @@ // 姹囨姤鐏厜鑰冭瘯缁撴潫 if (exam_dummy_light == 2) { DEBUG("鐏厜鑰冭瘯缁撴潫"); - InitRoadExam(); + InitRoadExam(RoadMap); } } } @@ -819,7 +881,8 @@ if (ExamType != TEST_TYPE_AREA) { if (exam_dummy_light == 2) { - TestRoadGeneral(RoadMapList, CarModel, CarModelList, speed, move, rtkTime); +// TestRoadGeneral(RoadMapList, CarModel, CarModelList, speed, move, rtkTime); + TestRoadGeneral(RoadMap, CarModel, CarModelList, speed, move, rtkTime); } } else { TestAreaGeneral(AreaMapList, CarModel, CarModelList, speed, move, azimuth, rtkTime); -- Gitblit v1.8.0