From 4ff195404b21f74ca11e26a69cbf0418eaa4595f Mon Sep 17 00:00:00 2001
From: yy1717 <fctom1215@outlook.com>
Date: 星期二, 17 三月 2020 17:57:03 +0800
Subject: [PATCH] 科目三草案实现
---
lib/src/main/cpp/master/comm_if.cpp | 249 +++++++++++++++++--------------------------------
1 files changed, 89 insertions(+), 160 deletions(-)
diff --git a/lib/src/main/cpp/master/comm_if.cpp b/lib/src/main/cpp/master/comm_if.cpp
index 6101577..9f52d64 100644
--- a/lib/src/main/cpp/master/comm_if.cpp
+++ b/lib/src/main/cpp/master/comm_if.cpp
@@ -490,30 +490,100 @@
doc.Parse(value);
if (!doc.HasParseError()) {
- const Value &a = doc.GetArray();
- if (a.IsArray()) {
+ CleanRoadMap();
+
+ vector<double> mapPoints;
+ mapPoints.clear();
+
+ if (doc.HasMember("points")) {
+ const Value &s = doc["points"];
+ // X-Y鍧愭爣闆嗗悎
+ for (Value::ConstValueIterator itr2 = s.Begin();
+ itr2 != s.End(); ++itr2) {
+ mapPoints.push_back((*itr2).GetDouble());
+ }
+
+ SetRoadMapPoints(mapPoints);
+ }
+
+ if (doc.HasMember("maps")) {
+ const Value &a = doc["maps"];
+
for (Value::ConstValueIterator itr = a.Begin(); itr != a.End(); ++itr) {
if (itr->IsObject()) {
// a Map
- int id, type, pointNum = 0;
+ int id, type;
int stop_flag = 0;
- char *tts = NULL;
- double (*map)[2] = NULL;
+ string tts;
- int redLineNum = 0, greenLineNum = 0, triggerLineNum = 0, redAreaNum = 0;
- int **redLine = NULL, **greenLine = NULL, **triggerLine = NULL, **redArea = NULL;
+ vector<vector<int>> redLines;
+ vector<vector<int>> greenLines;
+ vector<vector<int>> triggerLines;
+ vector<vector<int>> redAreas;
- struct line_t {
- int point_num;
- int *points;
- };
+ tts.clear();
+ redLines.clear();
+ greenLines.clear();
+ triggerLines.clear();
+ redAreas.clear();
- struct trigger_area {
- int map_id;
- int lineNum;
- int *line;
- } *triggerArea = NULL; // 瑙﹀彂鍚勫瓙椤圭殑绾�
- int triggerAreaNum;
+ vector<int> points;
+
+ if (itr->HasMember("red_line")) {
+ const Value &s = (*itr)["red_line"];
+
+ for (Value::ConstValueIterator itrLine = s.Begin();
+ itrLine != s.End(); ++itrLine) {
+ points.clear();
+ for (Value::ConstValueIterator itrPoint = (*itrLine).Begin();
+ itrPoint != (*itrLine).End(); ++itrPoint) {
+ points.push_back((*itrPoint).GetInt());
+ }
+ redLines.push_back(points);
+ }
+ }
+
+ if (itr->HasMember("green_line")) {
+ const Value &s = (*itr)["green_line"];
+
+ for (Value::ConstValueIterator itrLine = s.Begin();
+ itrLine != s.End(); ++itrLine) {
+ points.clear();
+ for (Value::ConstValueIterator itrPoint = (*itrLine).Begin();
+ itrPoint != (*itrLine).End(); ++itrPoint) {
+ points.push_back((*itrPoint).GetInt());
+ }
+ greenLines.push_back(points);
+ }
+ }
+
+ if (itr->HasMember("trigger_line")) {
+ const Value &s = (*itr)["trigger_line"];
+
+ for (Value::ConstValueIterator itrLine = s.Begin();
+ itrLine != s.End(); ++itrLine) {
+ points.clear();
+ for (Value::ConstValueIterator itrPoint = (*itrLine).Begin();
+ itrPoint != (*itrLine).End(); ++itrPoint) {
+ points.push_back((*itrPoint).GetInt());
+ }
+ triggerLines.push_back(points);
+ }
+ }
+
+ if (itr->HasMember("red_area")) {
+ const Value &s = (*itr)["red_area"];
+
+ for (Value::ConstValueIterator itrLine = s.Begin();
+ itrLine != s.End(); ++itrLine) {
+ points.clear();
+ for (Value::ConstValueIterator itrPoint = (*itrLine).Begin();
+ itrPoint != (*itrLine).End(); ++itrPoint) {
+ points.push_back((*itrPoint).GetInt());
+ }
+ redAreas.push_back(points);
+ }
+ }
if (itr->HasMember("id")) {
const Value &s = (*itr)["id"];
@@ -532,151 +602,10 @@
if (itr->HasMember("tts")) {
const Value &s = (*itr)["tts"];
- tts = new char[s.GetStringLength() + 1];
- strcpy(tts, s.GetString());
+ tts = s.GetString();
}
- // X-Y鍧愭爣闆嗗悎
- if (itr->HasMember("map")) {
- const Value &s = (*itr)["map"];
- int i = 0, j = 0;
-
- pointNum = s.Size() / 2;
- map = (double (*)[2]) new double[pointNum][2];
-
- for (Value::ConstValueIterator itr2 = s.Begin();
- itr2 != s.End(); ++itr2) {
- map[i][j] = (*itr2).GetDouble();
- if (++j == 2) {
- j = 0;
- i++;
- }
- }
- }
-
- //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"];
-
- redLine[x] = new int[s2.Size()];
- int y = 0;
- for (Value::ConstValueIterator itr3 = s2.Begin();
- itr3 != s2.End(); ++itr3) {
- 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;
- }
- ///////////////////////
+ AddRoadMapParent(id, type, tts, redLines, redAreas, greenLines, triggerLines);
}
}
}
--
Gitblit v1.8.0