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