From 24428a1b69afcf113883e9cede1159443201a1b8 Mon Sep 17 00:00:00 2001 From: yy1717 <fctom1215@outlook.com> Date: 星期四, 02 四月 2020 18:57:07 +0800 Subject: [PATCH] 进出科目二区域调整 --- lib/src/main/cpp/test_items/driving_curve.cpp | 30 +++++++++++++++++++++++++----- 1 files changed, 25 insertions(+), 5 deletions(-) diff --git a/lib/src/main/cpp/test_items/driving_curve.cpp b/lib/src/main/cpp/test_items/driving_curve.cpp index 7a33a68..24ad383 100644 --- a/lib/src/main/cpp/test_items/driving_curve.cpp +++ b/lib/src/main/cpp/test_items/driving_curve.cpp @@ -7,6 +7,8 @@ #include "../driver_test.h" #include "../common/apptimer.h" #include "../utils/xconvert.h" +#include "../master/comm_if.h" +#include "../native-lib.h" #include <vector> #include <cstdlib> @@ -18,6 +20,7 @@ const uint32_t STOP_CAR_TIME = D_SEC(2); static bool testing = false; +static int mapIndex = 0; static uint32_t stopTimepoint = 0; static bool reportStopCarTimeout; @@ -32,13 +35,14 @@ static bool UpdateStartLine(struct scan_window_t *zone, const Polygon *map, const Polygon *map2, const Polygon *tireRect); static bool UpdateEndLine(bool mode, struct scan_window_t *zone, const Polygon *map, const Polygon *map2, const Polygon *tireRect); -static bool CrashRedLine(const Polygon *map, const Polygon *map2, const car_model *car, struct scan_window_t *zone); +static bool CrashRedLine(const Polygon *map, const Polygon *map2, const car_model *car, struct scan_window_t *zone, int &who); -void StartDrivingCurve(int moveDirect, const struct RtkTime *rtkTime) +void StartDrivingCurve(int index, int moveDirect, const struct RtkTime *rtkTime) { DEBUG("杩涘叆鏇茬嚎琛岄┒鍦哄湴"); testing = true; + mapIndex = index; prevMoveDirect = moveDirect; if (moveDirect == 0) { @@ -48,12 +52,14 @@ crashRedLine = false; scanWindow.leftStart = scanWindow.leftEnd = scanWindow.rightStart = scanWindow.rightEnd = 0; + + MA_EnterMap(mapIndex, MAP_TYPE_CURVE, 1); } int TestDrivingCurve(const Polygon *map, const Polygon *map2, const car_model *car, const car_model *carPrev, double speed, int moveDirect, const struct RtkTime *rtkTime) { Polygon tireRect; - + int who = 0; MakePolygon(&tireRect, {car->carXY[car->left_front_tire[TIRE_OUTSIDE]], car->carXY[car->right_front_tire[TIRE_OUTSIDE]], car->carXY[car->right_rear_tire[TIRE_OUTSIDE]], @@ -71,12 +77,17 @@ DEBUG("scanWindow leftStart %d leftEnd %d rightStart %d rightEnd %d", scanWindow.leftStart, scanWindow.leftEnd, scanWindow.rightStart, scanWindow.rightEnd); - if (CrashRedLine(map, map2, car, &scanWindow)) { + if (CrashRedLine(map, map2, car, &scanWindow, who)) { if (!crashRedLine) { crashRedLine = true; // 杞﹁疆鍘嬭竟绾匡紝涓嶅悎鏍� AddExamFault(27, rtkTime); DEBUG("杞﹁疆鍘嬭竟绾�"); + if (who == 1) { + PlayTTS("鍘嬪乏鏇茬嚎"); + } else if (who == 2) { + PlayTTS("鍘嬪彸鏇茬嚎"); + } } } else { crashRedLine = false; @@ -105,6 +116,11 @@ TEST_END: CleanPolygon(&tireRect); + + if (!testing) { + MA_EnterMap(mapIndex, MAP_TYPE_CURVE, 0); + } + return testing ? 1 : 0; } @@ -276,7 +292,7 @@ } // 杞﹁疆鏄惁鍘嬭竟绾� -static bool CrashRedLine(const Polygon *map, const Polygon *map2, const car_model *car, struct scan_window_t *zone) +static bool CrashRedLine(const Polygon *map, const Polygon *map2, const car_model *car, struct scan_window_t *zone, int &who) { bool ret = false; @@ -290,9 +306,11 @@ for (int e = zone->leftStart - 1; e >= zone->leftEnd; --e) { MakeLine(&redLine, &map->point[s], &map->point[e]); if (IntersectionOf(redLine, frontTireAxial) != GM_None) { + who = 1; return true; } if (IntersectionOf(redLine, rearTireAxial) != GM_None) { + who = 1; return true; } s = e; @@ -302,9 +320,11 @@ for (int e = zone->rightStart - 1; e >= zone->rightEnd; --e) { MakeLine(&redLine, &map2->point[s], &map2->point[e]); if (IntersectionOf(redLine, frontTireAxial) != GM_None) { + who = 2; return true; } if (IntersectionOf(redLine, rearTireAxial) != GM_None) { + who = 2; return true; } s = e; -- Gitblit v1.8.0