From 5f883b5e6b85735c7e9052cebc806760dd5f8db1 Mon Sep 17 00:00:00 2001
From: fctom1215 <fctom1215@outlook.com>
Date: 星期一, 16 三月 2020 23:35:00 +0800
Subject: [PATCH] 科目三地图传输。
---
lib/src/main/cpp/driver_test.cpp | 36 +++++++++
lib/src/main/cpp/master/comm_if.cpp | 154 ++++++++++++++++++++++++++++++++++++--
2 files changed, 180 insertions(+), 10 deletions(-)
diff --git a/lib/src/main/cpp/driver_test.cpp b/lib/src/main/cpp/driver_test.cpp
index f3000a4..0898aa2 100644
--- a/lib/src/main/cpp/driver_test.cpp
+++ b/lib/src/main/cpp/driver_test.cpp
@@ -252,7 +252,43 @@
DEBUG("AddMap num %d", MapNum);
}
+void AddRoadMapParent(int id, int type, const double (*points)[2], int pointNum, const int **redLine,
+ int redLineNum, const int **greenLine, int greenLineNum)
+{
+ int id;
+ int type;
+ Polygon map;
+ int redLineNum;
+ Polygon *redLine;
+ int greenLineNum;
+ Polygon *greenLine;
+ int redAreaNum;
+ Polygon *redArea;
+ int triggerLineNum;
+ struct trigger_line *triggerLine;
+ RoadParentMap = (struct road_exam_parent_map *)malloc(sizeof(struct road_exam_parent_map));
+ RoadParentMap->id = id;
+ RoadParentMap->type = type;
+
+ RoadParentMap->map.num = pointNum;
+ if (pointNum > 0) {
+ RoadParentMap->map.point = (PointF *)malloc(sizeof(PointF) * pointNum);
+ for (int i = 0; i < pointNum; ++i) {
+ RoadParentMap->map.point[i].X = points[i][0];
+ RoadParentMap->map.point[i].Y = points[i][1];
+ }
+ }
+
+ RoadParentMap->redLineNum = redLineNum;
+ RoadParentMap->redLine = (Polygon *) malloc(sizeof(Polygon *));
+
+ for (int i = 0; i < redLineNum; ++i) {
+ RoadParentMap->redLine[i].num =
+ }
+
+
+}
void SetCarMeasurePoint(double *basePoint, int *axial, int *left_front_tire,
int *right_front_tire, int *left_rear_tire, int *right_rear_tire,
diff --git a/lib/src/main/cpp/master/comm_if.cpp b/lib/src/main/cpp/master/comm_if.cpp
index 9c668ca..6101577 100644
--- a/lib/src/main/cpp/master/comm_if.cpp
+++ b/lib/src/main/cpp/master/comm_if.cpp
@@ -493,12 +493,28 @@
const Value &a = doc.GetArray();
if (a.IsArray()) {
for (Value::ConstValueIterator itr = a.Begin(); itr != a.End(); ++itr) {
- // a Map
- int id, type, pointNum = 0;
- double (*map)[2] = NULL;
- int *line = NULL;
-
if (itr->IsObject()) {
+ // a Map
+ int id, type, pointNum = 0;
+ int stop_flag = 0;
+ char *tts = NULL;
+ double (*map)[2] = NULL;
+
+ int redLineNum = 0, greenLineNum = 0, triggerLineNum = 0, redAreaNum = 0;
+ int **redLine = NULL, **greenLine = NULL, **triggerLine = NULL, **redArea = NULL;
+
+ struct line_t {
+ int point_num;
+ int *points;
+ };
+
+ struct trigger_area {
+ int map_id;
+ int lineNum;
+ int *line;
+ } *triggerArea = NULL; // 瑙﹀彂鍚勫瓙椤圭殑绾�
+ int triggerAreaNum;
+
if (itr->HasMember("id")) {
const Value &s = (*itr)["id"];
id = s.GetInt();
@@ -509,6 +525,18 @@
type = s.GetInt();
}
+ if (itr->HasMember("stop_flag")) {
+ const Value &s = (*itr)["stop_flag"];
+ stop_flag = s.GetInt();
+ }
+
+ if (itr->HasMember("tts")) {
+ const Value &s = (*itr)["tts"];
+ tts = new char[s.GetStringLength() + 1];
+ strcpy(tts, s.GetString());
+ }
+
+ // X-Y鍧愭爣闆嗗悎
if (itr->HasMember("map")) {
const Value &s = (*itr)["map"];
int i = 0, j = 0;
@@ -526,23 +554,129 @@
}
}
- AddMap(id, type, map, pointNum, redLineNum, redLine, greenLine, redArea, triggerLine);
-
+ //AddMap(id, type, map, pointNum, redLineNum, redLine, greenLine, redArea, triggerLine);
+ // 绾㈢嚎闆嗗悎
if (itr->HasMember("red_line")) {
const Value &s = (*itr)["red_line"];
+
+ redLineNum = s.Size();
+ redLine = new int *[redLineNum];
+ int x = 0;
for (Value::ConstValueIterator itr2 = s.Begin();
itr2 != s.End(); ++itr2) {
// 鍙互杩炴帴涓轰竴鏉$嚎鐨勭偣
const Value &s2 = (*itr2)["line"];
- lineNum = s2.Size() / 2;
-
+ redLine[x] = new int[s2.Size()];
+ int y = 0;
for (Value::ConstValueIterator itr3 = s2.Begin();
itr3 != s2.End(); ++itr3) {
- line[x++] = (*itr3).GetInt();
+ redLine[x][y++] = (*itr3).GetInt();
}
+ x++;
}
}
+ // 缁跨嚎闆嗗悎
+ if (itr->HasMember("green_line")) {
+ const Value &s = (*itr)["green_line"];
+
+ greenLineNum = s.Size();
+ greenLine = new int *[greenLineNum];
+ int x = 0;
+ for (Value::ConstValueIterator itr2 = s.Begin();
+ itr2 != s.End(); ++itr2) {
+ // 鍙互杩炴帴涓轰竴鏉$嚎鐨勭偣
+ const Value &s2 = (*itr2)["line"];
+
+ greenLine[x] = new int[s2.Size()];
+ int y = 0;
+ for (Value::ConstValueIterator itr3 = s2.Begin();
+ itr3 != s2.End(); ++itr3) {
+ greenLine[x][y++] = (*itr3).GetInt();
+ }
+ x++;
+ }
+ }
+ // 绾㈠尯闆嗗悎
+ if (itr->HasMember("red_area")) {
+ const Value &s = (*itr)["red_area"];
+
+ redAreaNum = s.Size();
+ redArea = new int *[redAreaNum];
+ int x = 0;
+ for (Value::ConstValueIterator itr2 = s.Begin();
+ itr2 != s.End(); ++itr2) {
+ // 鍙互杩炴帴涓轰竴鏉$嚎鐨勭偣
+ const Value &s2 = (*itr2)["area"];
+
+ redArea[x] = new int[s2.Size()];
+ int y = 0;
+ for (Value::ConstValueIterator itr3 = s2.Begin();
+ itr3 != s2.End(); ++itr3) {
+ redArea[x][y++] = (*itr3).GetInt();
+ }
+ x++;
+ }
+ }
+ // 瑙﹀彂绾块泦鍚�
+ if (itr->HasMember("trigger_line")) {
+ const Value &s = (*itr)["trigger_line"];
+
+ triggerAreaNum = s.Size();
+ triggerArea = new struct trigger_area[triggerAreaNum];
+
+ int x = 0;
+ for (Value::ConstValueIterator itr2 = s.Begin();
+ itr2 != s.End(); ++itr2) {
+ // 鍙互杩炴帴涓轰竴鏉$嚎鐨勭偣
+ const Value &s2 = (*itr2)["line"];
+ const Value &s3 = (*itr2)["map_id"];
+
+ triggerArea[x].line = new int[s2.Size()];
+ triggerArea[x].lineNum = s2.Size();
+ triggerArea[x].map_id = s3.GetInt();
+
+ int y = 0;
+ for (Value::ConstValueIterator itr3 = s2.Begin();
+ itr3 != s2.End(); ++itr3) {
+ triggerArea[x].line[y++] = (*itr3).GetInt();
+ }
+ x++;
+ }
+ }
+
+ if (type == 100) {
+
+ } else {
+
+ }
+
+ if (map != NULL)
+ delete []map;
+ if (tts != NULL)
+ delete []tts;
+ if (redLineNum > 0) {
+ for(int i=0; i < redLineNum; i++)
+ delete[] redLine[i];
+ delete[] redLine;
+ }
+ if (greenLineNum > 0) {
+ for(int i=0; i < greenLineNum; i++)
+ delete[] greenLine[i];
+ delete[] greenLine;
+ }
+ if (redAreaNum > 0) {
+ for(int i=0; i < redAreaNum; i++)
+ delete[] redArea[i];
+ delete[] redArea;
+ }
+ if (triggerAreaNum > 0) {
+ for (int i = 0; i < triggerAreaNum; ++i) {
+ delete [](triggerArea[i].line);
+ }
+ delete []triggerArea;
+ }
+ ///////////////////////
}
}
}
--
Gitblit v1.8.0