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