From 03ca970f73af542456326b2fa277090ce0ea532f Mon Sep 17 00:00:00 2001
From: yy1717 <fctom1215@outlook.com>
Date: 星期二, 11 八月 2020 18:33:51 +0800
Subject: [PATCH] 坐标

---
 lib/src/main/cpp/master/comm_if.cpp |  115 +++++++++++++++++++++++++--------------------------------
 1 files changed, 51 insertions(+), 64 deletions(-)

diff --git a/lib/src/main/cpp/master/comm_if.cpp b/lib/src/main/cpp/master/comm_if.cpp
index 57cd155..3712f33 100644
--- a/lib/src/main/cpp/master/comm_if.cpp
+++ b/lib/src/main/cpp/master/comm_if.cpp
@@ -808,23 +808,6 @@
 
                                 MakeLine(&road.startLine, &p1, &p2);
                             }
-                            /*if (itr->HasMember("stop_line")) {
-                                const Value &a2 = (*itr)["stop_line"];
-
-                                PointF p1, p2;
-                                int n = 0;
-
-                                for (Value::ConstValueIterator itr2 = a2.Begin(); itr2 != a2.End(); ++itr2, ++n) {
-                                    DEBUG("缁撴潫绾� %d", (*itr2).GetInt());
-                                    if (n == 0) {
-                                        p1 = mapPoints[(*itr2).GetInt()];
-                                    } else if (n == 1) {
-                                        p2 = mapPoints[(*itr2).GetInt()];
-                                    }
-                                }
-
-                                MakeLine(&road.stopLine, &p1, &p2);
-                            }*/
                             if (itr->HasMember("crossing") && itr->IsArray()) {
                                 const Value &a2 = (*itr)["crossing"];
 
@@ -838,14 +821,17 @@
                                     if (itr2->HasMember("active")) {
                                         const Value &s = (*itr2)["active"];
                                         temp.active = s.GetInt();
+                                        DEBUG("璺彛鍔ㄤ綔 %d", temp.active);
                                     }
                                     if (itr2->HasMember("stop_flag")) {
                                         const Value &s = (*itr2)["stop_flag"];
                                         temp.stopFlag = s.GetInt();
+                                        DEBUG("璺彛鍋滆溅 %d", temp.stopFlag);
                                     }
                                     if (itr2->HasMember("tts")) {
                                         const Value &s = (*itr2)["tts"];
                                         temp.tts = s.GetString();
+                                        DEBUG("璺彛鎻愮ず %s", temp.tts.c_str());
                                     }
                                     if (itr2->HasMember("line")) {
                                         const Value &s = (*itr2)["line"];
@@ -870,20 +856,6 @@
                                 road.stopLine.assign(crossing.begin(), crossing.end());
                             }
 
-                            if (itr->HasMember("active")) {
-                                const Value &s = (*itr)["active"];
-                                DEBUG("璺彛鍔ㄤ綔 %d", s.GetInt());
-
-                                road.active = s.GetInt();
-                            }
-                            if (itr->HasMember("tts")) {
-                                const Value &s = (*itr)["tts"];
-                                road.tts = s.GetString();
-                            }
-                            if (itr->HasMember("stop_flag")) {
-                                const Value &s = (*itr)["stop_flag"];
-                                road.stopFlag = s.GetInt();
-                            }
                             if (itr->HasMember("next_road")) {
                                 const Value &s = (*itr)["next_road"];
                                 road.targetRoad  = s.GetInt();
@@ -947,49 +919,64 @@
                                 DEBUG("娈垫暟閲� %d", a2.Size());
 
                                 for (Value::ConstValueIterator itr2 = a2.Begin(); itr2 != a2.End(); ++itr2) {
-                                    DEBUG("\t绾挎暟閲� %d", (*itr2).Size());
                                     separate_t sep;
+                                    if (!itr2->IsObject())
+                                        break;
+                                    if (itr2->HasMember("lane_guide") && itr2->IsArray()) {
+                                        const Value &a3 = (*itr2)["lane_guide"];
 
-                                    for (Value::ConstValueIterator itr3 = (*itr2).Begin(); itr3 != (*itr2).End(); ++itr3) {
-                                        DEBUG("\t\t鑺傛暟閲� %d", (*itr3).Size());
-                                        vector<segment_t> sline;
+                                        for (Value::ConstValueIterator itr3 = a3.Begin(); itr3 != a3.End(); ++itr3) {
+                                            lane_direct_t temp;
 
-                                        for (Value::ConstValueIterator itr4 = (*itr3).Begin(); itr4 != (*itr3).End(); ++itr4) {
-                                            const Value &type = (*itr4)["type"];
-                                            const Value &line = (*itr4)["line"];
+                                            if (itr3->HasMember("head_tail")) {
+                                                const Value &a4 = (*itr3)["head_tail"];
+                                                int n = 0;
 
-                                            segment_t seg;
+                                                for (Value::ConstValueIterator itr4 = a4.Begin(); itr4 != a4.End(); ++itr4, ++n) {
+                                                    if (n == 0)
+                                                        temp.start = mapPoints[(*itr4).GetInt()];
+                                                    else if (n == 1)
+                                                        temp.end = mapPoints[(*itr4).GetInt()];
+                                                }
+                                            }
+                                            if (itr3->HasMember("guide")) {
+                                                const Value &a4 = (*itr3)["guide"];
 
-                                            DEBUG("\t\t\t鑺傜被鍨� = %d", type.GetInt());
-                                            seg.character = type.GetInt();
-
-                                            if ((*itr4).HasMember("left_lane_direct")) {
-                                                const Value &dir = (*itr4)["left_lane_direct"];
-                                                DEBUG("\t\t\t宸﹁溅閬撴柟鍚� %d", dir.GetInt());
-                                                seg.left_lane_direct = dir.GetInt();
-                                            } else {
-                                                seg.left_lane_direct = 0;
+                                                for (Value::ConstValueIterator itr4 = a4.Begin(); itr4 != a4.End(); ++itr4) {
+                                                    temp.direct.push_back((*itr4).GetInt());
+                                                }
                                             }
 
-                                            if ((*itr4).HasMember("right_lane_direct")) {
-                                                const Value &dir = (*itr4)["right_lane_direct"];
-                                                DEBUG("\t\t\t鍙宠溅閬撴柟鍚� %d", dir.GetInt());
-                                                seg.right_lane_direct = dir.GetInt();
-                                            } else {
-                                                seg.right_lane_direct = 0;
-                                            }
-
-                                            for (Value::ConstValueIterator itr5 = line.Begin(); itr5 != line.End(); ++itr5) {
-                                                DEBUG("\t\t\t鐐� = %d", (*itr5).GetInt());
-
-                                                seg.points.push_back(mapPoints[(*itr5).GetInt()]);
-                                            }
-
-                                            sline.push_back(seg);
+                                            sep.lane_direct.push_back(temp);
                                         }
-                                        sep.lines.push_back(sline);
                                     }
+                                    if (itr2->HasMember("lane_line") && itr2->IsArray() ) {
+                                        const Value &a3 = (*itr2)["lane_line"];
+                                        DEBUG("\t绾挎暟閲� %d", a3.Size());
+                                        for (Value::ConstValueIterator itr3 = a3.Begin(); itr3 != a3.End(); ++itr3) {
+                                            DEBUG("\t\t鑺傛暟閲� %d", (*itr3).Size());
+                                            vector<segment_t> sline;
 
+                                            for (Value::ConstValueIterator itr4 = (*itr3).Begin(); itr4 != (*itr3).End(); ++itr4) {
+                                                const Value &type = (*itr4)["type"];
+                                                const Value &line = (*itr4)["line"];
+
+                                                segment_t seg;
+
+                                                DEBUG("\t\t\t鑺傜被鍨� = %d", type.GetInt());
+                                                seg.character = type.GetInt();
+
+                                                for (Value::ConstValueIterator itr5 = line.Begin(); itr5 != line.End(); ++itr5) {
+                                                    DEBUG("\t\t\t鐐� = %d", (*itr5).GetInt());
+
+                                                    seg.points.push_back(mapPoints[(*itr5).GetInt()]);
+                                                }
+
+                                                sline.push_back(seg);
+                                            }
+                                            sep.lines.push_back(sline);
+                                        }
+                                    }
                                     road.separate.push_back(sep);
                                 }
                             }

--
Gitblit v1.8.0