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