| | |
| | | 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(); |
| | |
| | | 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; |
| | |
| | | } |
| | | } |
| | | |
| | | 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; |
| | | } |
| | | /////////////////////// |
| | | } |
| | | } |
| | | } |