fctom1215
2020-03-16 5f883b5e6b85735c7e9052cebc806760dd5f8db1
科目三地图传输。
2个文件已修改
190 ■■■■■ 已修改文件
lib/src/main/cpp/driver_test.cpp 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lib/src/main/cpp/master/comm_if.cpp 154 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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,
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;
                            }
                            ///////////////////////
                        }
                    }
                }