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