| | |
| | | Document doc; |
| | | doc.Parse(value); |
| | | if (!doc.HasParseError()) { |
| | | ClearMap(); |
| | | ClearAreaMap(); |
| | | |
| | | const Value &a = doc.GetArray(); |
| | | if (doc.HasMember("items")) { |
| | | |
| | | if (a.IsArray()) { |
| | | for (Value::ConstValueIterator itr = a.Begin(); itr != a.End(); ++itr) { |
| | | // a Map |
| | | int id, type, pointNum = 0, point2Num = 0; |
| | | double (*map)[2] = NULL, (*map2)[2] = NULL; |
| | | const Value &a = doc["items"]; |
| | | |
| | | if (itr->IsObject()) { |
| | | if (itr->HasMember("id")) { |
| | | const Value &s = (*itr)["id"]; |
| | | id = s.GetInt(); |
| | | } |
| | | if (itr->HasMember("item")) { |
| | | const Value &s = (*itr)["item"]; |
| | | type = s.GetInt(); |
| | | } |
| | | if (itr->HasMember("point")) { |
| | | const Value &s = (*itr)["point"]; |
| | | int map_index = 0; |
| | | if (a.IsArray()) { |
| | | for (Value::ConstValueIterator itr = a.Begin(); itr != a.End(); ++itr) { |
| | | // a Map |
| | | int id, type, pointNum = 0, point2Num = 0; |
| | | double (*map)[2] = NULL, (*map2)[2] = NULL; |
| | | |
| | | for (Value::ConstValueIterator itr2 = s.Begin(); |
| | | itr2 != s.End(); ++itr2, ++map_index) { |
| | | // 曲线驾驶有2组 |
| | | const Value &s2 = (*itr2)["x-y"]; |
| | | if (itr->IsObject()) { |
| | | if (itr->HasMember("id")) { |
| | | const Value &s = (*itr)["id"]; |
| | | id = s.GetInt(); |
| | | } |
| | | if (itr->HasMember("item")) { |
| | | const Value &s = (*itr)["item"]; |
| | | type = s.GetInt(); |
| | | } |
| | | if (itr->HasMember("point")) { |
| | | const Value &s = (*itr)["point"]; |
| | | int map_index = 0; |
| | | |
| | | if (map_index == 0) { |
| | | int i = 0, j = 0; |
| | | pointNum = s2.Size()/2; |
| | | map = (double (*)[2]) new double[pointNum][2]; |
| | | for (Value::ConstValueIterator itr2 = s.Begin(); |
| | | itr2 != s.End(); ++itr2, ++map_index) { |
| | | // 曲线驾驶有2组 |
| | | const Value &s2 = (*itr2)["x-y"]; |
| | | |
| | | if (map_index == 0) { |
| | | int i = 0, j = 0; |
| | | pointNum = s2.Size() / 2; |
| | | map = (double (*)[2]) new double[pointNum][2]; |
| | | // map = (double (*)[2]) malloc(pointNum * 2 * sizeof(double)); |
| | | |
| | | for (Value::ConstValueIterator itr3 = s2.Begin(); |
| | | itr3 != s2.End(); ++itr3) { |
| | | map[i][j] = (*itr3).GetDouble(); |
| | | if (++j == 2) { |
| | | j = 0; |
| | | i++; |
| | | for (Value::ConstValueIterator itr3 = s2.Begin(); |
| | | itr3 != s2.End(); ++itr3) { |
| | | map[i][j] = (*itr3).GetDouble(); |
| | | if (++j == 2) { |
| | | j = 0; |
| | | i++; |
| | | } |
| | | } |
| | | } |
| | | } else if (map_index == 1) { |
| | | int i = 0, j = 0; |
| | | point2Num = s2.Size()/2; |
| | | map2 = (double (*)[2]) new double[s2.Size()][2]; |
| | | } else if (map_index == 1) { |
| | | int i = 0, j = 0; |
| | | point2Num = s2.Size() / 2; |
| | | map2 = (double (*)[2]) new double[s2.Size()][2]; |
| | | // map2 = (double (*)[2]) malloc(point2Num * 2 * sizeof(double)); |
| | | |
| | | for (Value::ConstValueIterator itr3 = s2.Begin(); |
| | | itr3 != s2.End(); ++itr3) { |
| | | map2[i][j] = (*itr3).GetDouble(); |
| | | if (++j == 2) { |
| | | j = 0; |
| | | i++; |
| | | for (Value::ConstValueIterator itr3 = s2.Begin(); |
| | | itr3 != s2.End(); ++itr3) { |
| | | map2[i][j] = (*itr3).GetDouble(); |
| | | if (++j == 2) { |
| | | j = 0; |
| | | i++; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | AddMap(id, type, map, pointNum, map2, point2Num); |
| | | if (map) delete []map; |
| | | if (map2) delete []map2; |
| | | AddAreaMap(id, type, map, pointNum, map2, point2Num); |
| | | |
| | | if (map) delete[]map; |
| | | if (map2) delete[]map2; |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | Value& s = doc["map_id"]; |
| | | Value& s2 = doc["exam"]; |
| | | |
| | | StartMapExam(s.GetInt(), s2.GetInt()); |
| | | } |
| | | } |
| | | break; |