diff --git a/build-profile.json5 b/build-profile.json5 index df4ac880..76e8f8f8 100644 --- a/build-profile.json5 +++ b/build-profile.json5 @@ -5,9 +5,9 @@ "name": "default", "material": { "certpath": "C:\\Users\\93218\\.ohos\\config\\openharmony\\auto_ohos_default_subject-two_com.oh.dts.cer", - "storePassword": "0000001B43E7BAC298C9D809E58E3491F350FD3506C77562C891A237D54C5C4733DEC67E0EBD3F450975F0", + "storePassword": "0000001B3420049DC7C5AF0BB88578D3A8346DDCD0E0CA25562A5558634CD9044933BA52474F87B9E07F32", "keyAlias": "debugKey", - "keyPassword": "0000001B7F27FB3700AADDCB9A67C34A1F5CF3FF6D22B975EA6A9E0C532157D96C76F0B0378218C57462FC", + "keyPassword": "0000001B011F84A5952B68C41905A196EADE759B725C8E922F08D8AFD5EFCB71EF82352768670704E9A01B", "profile": "C:\\Users\\93218\\.ohos\\config\\openharmony\\auto_ohos_default_subject-two_com.oh.dts.p7b", "signAlg": "SHA256withECDSA", "storeFile": "C:\\Users\\93218\\.ohos\\config\\openharmony\\auto_ohos_default_subject-two_com.oh.dts.p12" diff --git a/entry/src/main/cpp/bin/libJudgeSdk.so b/entry/src/main/cpp/bin/libJudgeSdk.so index 6f071eab..a5643f04 100644 Binary files a/entry/src/main/cpp/bin/libJudgeSdk.so and b/entry/src/main/cpp/bin/libJudgeSdk.so differ diff --git a/entry/src/main/cpp/sdk/common/HVersion.h b/entry/src/main/cpp/sdk/common/HVersion.h index d4f533c8..2cad944f 100644 --- a/entry/src/main/cpp/sdk/common/HVersion.h +++ b/entry/src/main/cpp/sdk/common/HVersion.h @@ -27,7 +27,7 @@ #define JUDGE_VERSION_MAJOR 1 #define JUDGE_VERSION_MINOR 0 #define JUDGE_VERSION_PATCH 3 -#define JUDGE_VERSION_STAMP "2504091313b" +#define JUDGE_VERSION_STAMP "2504110912b" #if JUDGE_USE_OLD # undef JUDGE_VERSION_STAMP # define JUDGE_VERSION_STAMP "2411121010b.old" diff --git a/entry/src/main/cpp/sdk/exam/ExamCarSub3.cpp b/entry/src/main/cpp/sdk/exam/ExamCarSub3.cpp index dde53cfc..9b6c359e 100644 --- a/entry/src/main/cpp/sdk/exam/ExamCarSub3.cpp +++ b/entry/src/main/cpp/sdk/exam/ExamCarSub3.cpp @@ -508,6 +508,11 @@ bool ExamCarSub3::Init_KM3_Global() m_car.XSJL = m_car.MFXX_XSJL; } + if(m_stuInfo.zeng) + { + m_car.XSJL = m_car.Total_XSJL; + } + //注释改成:将之前的行驶里程减掉 if(m_stuInfo.yklc != 0) { @@ -1952,15 +1957,15 @@ void ExamCarSub3::Calc_LaneDistance() //Kind:1: 车身左1(上) 2:车身右1(上) 3:车身左2(下) 4:车身右2(下) ExamCarType cartype = carType(); - int LeftBody1 = GetCarBodyPointNo(cartype, 1); - int LeftBody2 = GetCarBodyPointNo(cartype, 3); - int RightBody1 = GetCarBodyPointNo(cartype, 2); - int RightBody2 = GetCarBodyPointNo(cartype, 4); + int LeftFront = GetCarBodyPointNo(cartype, 1); + int LeftBack = GetCarBodyPointNo(cartype, 3); + int RightFront = GetCarBodyPointNo(cartype, 2); + int RightBack = GetCarBodyPointNo(cartype, 4); - if(LeftBody1 == -1 || LeftBody2 == -1 || RightBody1 == -1 || RightBody2 == -1) + if(LeftFront == -1 || LeftBack == -1 || RightFront == -1 || RightBack == -1) { - logerror("cartype=%d,LeftBody1=%d, LeftBody2=%d, LeftBody2=%d, RightBody2=%d", - cartype, LeftBody1, LeftBody2, LeftBody2, RightBody2); + logerror("cartype=%d,LeftFront=%d, LeftBack=%d, RightFront=%d, RightBack=%d", + cartype, LeftFront, LeftBack, RightFront, RightBack); return; } @@ -2012,135 +2017,29 @@ void ExamCarSub3::Calc_LaneDistance() if(p == 1) //1、车轮与本车道右侧距离 { laneDriving = &road->BorderLines[0]; - for(int k = 1; k <= 4; k++) - { - Pointi pt; - switch(k) - { - case 1: pt = body.ZQ_W_b; break; //CarStatus.CheLun_Wai_ZQ_RealTime; - case 2: pt = body.YQ_W_b; break; //CarStatus.CheLun_Wai_YQ_RealTime; - case 3: pt = body.ZH_W_b; break; //CarStatus.CheLun_Wai_ZH_RealTime; - case 4: pt = body.YH_W_b; break; //CarStatus.CheLun_Wai_YH_RealTime; - default: break; - } - line.PtBegin = body.b1_b; //CarStatus.BasePoint1_RealTime; - line.PtEnd = pt; - int dis = GpsMath::P2PDistance(pt, Lj.CenterPoint); - if(GpsMath::IsPtInArcLane(pt, poly)) - { - int distance = std::abs(std::round(dis - Lj.Radius)); - if(GpsMath::IsLineCrossArc(line, Lj)) - { - distance = -distance; - } - switch(k) - { - case 1: RTKKM3.Wheel_LF_ToRightEdge = distance; break; - case 2: RTKKM3.Wheel_RF_ToRightEdge = distance; break; - case 3: RTKKM3.Wheel_LB_ToRightEdge = distance; break; - case 4: RTKKM3.Wheel_RB_ToRightEdge = distance; break; - default: break; - } - } - } + calcToDistanceArc(Lj, poly, body.b1_b, body.ZQ_W_b, RTKKM3.Wheel_LF_ToRightEdge); + calcToDistanceArc(Lj, poly, body.b1_b, body.YQ_W_b, RTKKM3.Wheel_RF_ToRightEdge); + calcToDistanceArc(Lj, poly, body.b1_b, body.ZH_W_b, RTKKM3.Wheel_LB_ToRightEdge); + calcToDistanceArc(Lj, poly, body.b1_b, body.YH_W_b, RTKKM3.Wheel_RB_ToRightEdge); } else if(p == 2) //2:车轮与最右侧车道右侧距离 { - for(int k = 1; k <= 6; k++) - { - Pointi pt; - switch(k) - { - case 1: pt = body.ZQ_W_b; break; //CarStatus.CheLun_Wai_ZQ_RealTime; - case 2: pt = body.YQ_W_b; break; //CarStatus.CheLun_Wai_YQ_RealTime; - case 3: pt = body.ZH_W_b; break; //CarStatus.CheLun_Wai_ZH_RealTime; - case 4: pt = body.YH_W_b; break; //CarStatus.CheLun_Wai_YH_RealTime; - case 5: pt = body.points_b[RightBody1]; break; //20240801 - case 6: pt = body.points_b[RightBody2]; break; //20240801 - default: break; - } - line.PtBegin = body.b1_b; // CarStatus.BasePoint1_RealTime; - line.PtEnd = pt; - if(GpsMath::IsPtInPoly(pt.x, pt.y, road->Area.Pts)) - { - int dis = GpsMath::P2PDistance(pt, L0.CenterPoint); - int distance = std::abs(std::round(dis - L0.Radius)); - if(GpsMath::IsLineCrossArc(line, L0)) - { - distance = -distance; - } - switch(k) - { - case 1: RTKKM3.Wheel_LF_ToBaseLine = distance; break; - case 2: RTKKM3.Wheel_RF_ToBaseLine = distance; break; - case 3: RTKKM3.Wheel_LB_ToBaseLine = distance; break; - case 4: RTKKM3.Wheel_RB_ToBaseLine = distance; break; - case 5: RTKKM3.Body_RF_ToBaseLine = distance; break; //20240801 - case 6: RTKKM3.Body_RB_ToBaseLine = distance; break; //20240801 - default: break; - } - } - } + calcToDistanceArc2(L0, road->Area, body.b1_b, body.ZQ_W_b, RTKKM3.Wheel_LF_ToBaseLine); + calcToDistanceArc2(L0, road->Area, body.b1_b, body.YQ_W_b, RTKKM3.Wheel_RF_ToBaseLine); + calcToDistanceArc2(L0, road->Area, body.b1_b, body.ZH_W_b, RTKKM3.Wheel_LB_ToBaseLine); + calcToDistanceArc2(L0, road->Area, body.b1_b, body.YH_W_b, RTKKM3.Wheel_RB_ToBaseLine); + calcToDistanceArc2(L0, road->Area, body.b1_b, body.points_b[RightFront], RTKKM3.Body_RF_ToBaseLine); //20240801 + calcToDistanceArc2(L0, road->Area, body.b1_b, body.points_b[RightBack], RTKKM3.Body_RB_ToBaseLine); //20240801 } else if(p == 3) //3:车身左侧与本车道左侧距离 { - for(int k = 1; k <= 2; k++) - { - Pointi pt; - switch(k) - { - case 1: pt = body.points_b[LeftBody1]; break; - case 2: pt = body.points_b[LeftBody2]; break; - default: break; - } - line.PtBegin = body.b1_b; //CarStatus.BasePoint1_RealTime; - line.PtEnd = pt; - if(GpsMath::IsPtInArcLane(pt, poly)) - { - int dis = GpsMath::P2PDistance(pt, Lj1.CenterPoint); - int distance = std::abs(std::round(dis - Lj1.Radius)); - if(GpsMath::IsLineCrossArc(line, Lj1)) - { - distance = -distance; - } - switch(k) - { - case 1: RTKKM3.Body_LF_ToLeftEdge = distance; break; - case 2: RTKKM3.Body_LB_ToLeftEdge = distance; break; - default: break; - } - } - } + calcToDistanceArc(Lj1, poly, body.b1_b, body.points_b[LeftFront], RTKKM3.Body_LF_ToLeftEdge); + calcToDistanceArc(Lj1, poly, body.b1_b, body.points_b[LeftBack], RTKKM3.Body_LB_ToLeftEdge); } else if(p == 4) //4:车身右侧与本车道右侧距离 { - for(int k = 1; k <= 2; k++) - { - Pointi pt; - switch(k) - { - case 1: pt = body.points_b[RightBody1]; break; - case 2: pt = body.points_b[RightBody2]; break; - default: break; - } - line.PtBegin = body.b1_b; - line.PtEnd = pt; - if(GpsMath::IsPtInArcLane(pt, poly)) - { - int dis = GpsMath::P2PDistance(pt, Lj.CenterPoint); - int distance = std::abs(std::round(dis - Lj.Radius)); - if(GpsMath::IsLineCrossArc(line, Lj)) - { - distance = -distance; - } - switch(k) - { - case 1: RTKKM3.Body_RF_ToRightEdge = distance; break; - case 2: RTKKM3.Body_RB_ToRightEdge = distance; break; - default: break; - } - } - } + calcToDistanceArc(Lj, poly, body.b1_b, body.points_b[RightFront], RTKKM3.Body_RF_ToRightEdge); + calcToDistanceArc(Lj, poly, body.b1_b, body.points_b[RightFront], RTKKM3.Body_RB_ToRightEdge); } } else @@ -2148,160 +2047,29 @@ void ExamCarSub3::Calc_LaneDistance() if(p == 1) //1、车轮与本车道右侧距离 { laneDriving = &road->BorderLines[0]; - for(int k = 1; k <= 4; k++) - { - Pointi pt; - switch(k) - { - case 1: pt = body.ZQ_W_b; break; //CarStatus.CheLun_Wai_ZQ_RealTime; - case 2: pt = body.YQ_W_b; break; //CarStatus.CheLun_Wai_YQ_RealTime; - case 3: pt = body.ZH_W_b; break; //CarStatus.CheLun_Wai_ZH_RealTime; - case 4: pt = body.YH_W_b; break; //CarStatus.CheLun_Wai_YH_RealTime; - default: break; - } - line.PtBegin = body.b1_b; - line.PtEnd = pt; - if(GpsMath::IsPtInPoly(pt.x, pt.y, poly.Pts) == true) - { - int distance = GpsMath::PointToSeg(pt, Lj); - if(distance == ERROR_JLCM) - { - distance = 0; - } - if(GpsMath::IsCross(line, Lj)) - { - distance = -distance; - } - switch(k) - { - case 1: RTKKM3.Wheel_LF_ToRightEdge = distance; break; - case 2: RTKKM3.Wheel_RF_ToRightEdge = distance; break; - case 3: RTKKM3.Wheel_LB_ToRightEdge = distance; break; - case 4: RTKKM3.Wheel_RB_ToRightEdge = distance; break; - default: break; - } - } - } + calcToDistanceLine(Lj, poly.Pts, body.b1_b, body.ZQ_W_b, RTKKM3.Wheel_LF_ToRightEdge); + calcToDistanceLine(Lj, poly.Pts, body.b1_b, body.YQ_W_b, RTKKM3.Wheel_RF_ToRightEdge); + calcToDistanceLine(Lj, poly.Pts, body.b1_b, body.ZH_W_b, RTKKM3.Wheel_LB_ToRightEdge); + calcToDistanceLine(Lj, poly.Pts, body.b1_b, body.YH_W_b, RTKKM3.Wheel_RB_ToRightEdge); } else if(p == 2) //2:车轮与最右侧车道右侧距离 { - for(int k = 1; k <= 6; k++) - { - Pointi pt; - switch(k) - { - case 1: pt = body.ZQ_W_b; break; //CarStatus.CheLun_Wai_ZQ_RealTime; - case 2: pt = body.YQ_W_b; break; //CarStatus.CheLun_Wai_YQ_RealTime; - case 3: pt = body.ZH_W_b; break; //CarStatus.CheLun_Wai_ZH_RealTime; - case 4: pt = body.YH_W_b; break; //CarStatus.CheLun_Wai_YH_RealTime; - case 5: pt = body.points_b[RightBody1]; break; //20240801 - case 6: pt = body.points_b[RightBody2]; break; //20240801 - default: break; - } - line.PtBegin = body.b1_b; - line.PtEnd = pt; - if(GpsMath::IsPtInPoly(pt.x, pt.y, road->Area.Pts)) - { - int distance = GpsMath::PointToSeg(pt, L0); - if(distance == ERROR_JLCM) - { - distance = 0; - } - if(GpsMath::IsCross(line, L0)) - { - distance = -distance; - } - switch(k) - { - case 1: RTKKM3.Wheel_LF_ToBaseLine = distance; break; - case 2: RTKKM3.Wheel_RF_ToBaseLine = distance; break; - case 3: RTKKM3.Wheel_LB_ToBaseLine = distance; break; - case 4: RTKKM3.Wheel_RB_ToBaseLine = distance; break; - case 5: RTKKM3.Body_RF_ToBaseLine = distance; break; //20240801 - case 6: RTKKM3.Body_RB_ToBaseLine = distance; break; //20240801 - default: break; - } - } - else - { - if(GpsMath::IsCross(line, L0)) - { - int distance = -GpsMath::PointToSeg(pt, L0); - switch(k) - { - case 5: RTKKM3.Body_RF_ToBaseLine = distance; break; //20240801 - case 6: RTKKM3.Body_RB_ToBaseLine = distance; break; //20240801 - default: break; - } - } - } - } + calcToDistanceLine(L0, road->Area.Pts, body.b1_b, body.ZQ_W_b, RTKKM3.Wheel_LF_ToBaseLine); + calcToDistanceLine(L0, road->Area.Pts, body.b1_b, body.YQ_W_b, RTKKM3.Wheel_RF_ToBaseLine); + calcToDistanceLine(L0, road->Area.Pts, body.b1_b, body.ZH_W_b, RTKKM3.Wheel_LB_ToBaseLine); + calcToDistanceLine(L0, road->Area.Pts, body.b1_b, body.YH_W_b, RTKKM3.Wheel_RB_ToBaseLine); + calcToDistanceLine(L0, road->Area.Pts, body.b1_b, body.points_b[RightFront], RTKKM3.Body_RF_ToBaseLine, true); //20240801 + calcToDistanceLine(L0, road->Area.Pts, body.b1_b, body.points_b[RightBack], RTKKM3.Body_RB_ToBaseLine, true); //20240801 } else if(p == 3) //3:车身左侧与本车道左侧距离 { - for(int k = 1; k <= 2; k++) - { - Point pt; - switch(k) - { - case 1: pt = body.points_b[LeftBody1]; break; - case 2: pt = body.points_b[LeftBody2]; break; - default: break; - } - line.PtBegin = body.b1_b; - line.PtEnd = pt; - if(GpsMath::IsPtInPoly(pt.x, pt.y, poly.Pts) == true) - { - int distance = GpsMath::PointToSeg(pt, Lj1); - if(distance == ERROR_JLCM) - { - distance = 0; - } - if(GpsMath::IsCross(line, Lj1)) - { - distance = -distance; - } - switch(k) - { - case 1: RTKKM3.Body_LF_ToLeftEdge = distance; break; - case 2: RTKKM3.Body_LB_ToLeftEdge = distance; break; - default: break; - } - } - } + calcToDistanceLine(Lj1, poly.Pts, body.b1_b, body.points_b[LeftFront], RTKKM3.Body_LF_ToLeftEdge); + calcToDistanceLine(Lj1, poly.Pts, body.b1_b, body.points_b[LeftBack], RTKKM3.Body_LB_ToLeftEdge); } else if(p == 4) //4:车身右侧与本车道右侧距离 { - for(int k = 1; k <= 2; k++) - { - Point pt; - switch(k) - { - case 1: pt = body.points_b[RightBody1]; break; - case 2: pt = body.points_b[RightBody2]; break; - default: break; - } - line.PtBegin = body.b1_b; - line.PtEnd = pt; - if(GpsMath::IsPtInPoly(pt.x, pt.y, poly.Pts) == true) - { - int distance = GpsMath::PointToSeg(pt, Lj); - if(distance == ERROR_JLCM) - { - distance = 0; - } - if(GpsMath::IsCross(line, Lj)) - { - distance = -distance; - } - switch(k) - { - case 1: RTKKM3.Body_RF_ToRightEdge = distance; break; - case 2: RTKKM3.Body_RB_ToRightEdge = distance; break; - default: break; - } - } - } + calcToDistanceLine(Lj, poly.Pts, body.b1_b, body.points_b[RightFront], RTKKM3.Body_RF_ToRightEdge); + calcToDistanceLine(Lj, poly.Pts, body.b1_b, body.points_b[RightBack], RTKKM3.Body_RB_ToRightEdge); } } } @@ -5183,7 +4951,7 @@ void ExamCarSub3::playItemSound(TKM3Item* item, bool enter) } else if(item->ItemNo == Sub3ItemType13Yjxs) { - code = sou; + //code = sou; //夜间行驶项目不播报开始和结束语音 } else if(item->ItemNo == Sub3ItemType14Jjdw) { @@ -5307,6 +5075,78 @@ void ExamCarSub3::dealItemNoIDEnd14Jjdw() } } +bool ExamCarSub3::calcToDistanceArc(const TModelLine& Lxx, const TModelPolygon& poly, const Pointi& b1, const Pointi& pt, int& dm, bool cross) +{ + TModelLine line; + line.PtBegin = b1; //CarStatus.BasePoint1_RealTime; + line.PtEnd = pt; + if(GpsMath::IsPtInArcLane(pt, poly)) + { + int dis = GpsMath::P2PDistance(pt, Lxx.CenterPoint); + int distance = std::abs(std::round(dis - Lxx.Radius)); + if(GpsMath::IsLineCrossArc(line, Lxx)) + { + distance = -distance; + } + dm = distance; + return true; + } + return false; +} + +bool ExamCarSub3::calcToDistanceArc2(const TModelLine& Lxx, const TModelPolygon& area, const Pointi& b1, const Pointi& pt, int& dm, bool cross) +{ + TModelLine line; + line.PtBegin = b1; //CarStatus.BasePoint1_RealTime; + line.PtEnd = pt; + if(GpsMath::IsPtInPoly(pt.x, pt.y, area.Pts)) + { + int dis = GpsMath::P2PDistance(pt, Lxx.CenterPoint); + int distance = std::abs(std::round(dis - Lxx.Radius)); + if(GpsMath::IsLineCrossArc(line, Lxx)) + { + distance = -distance; + } + dm = distance; + return true; + } + return false; +} + +bool ExamCarSub3::calcToDistanceLine(const TModelLine& Lxx, const std::vector& Pts, const Pointi& b1, const Pointi& pt, int& dm, bool cross) +{ + TModelLine line; + line.PtBegin = b1; + line.PtEnd = pt; + if(GpsMath::IsPtInPoly(pt.x, pt.y, Pts)) + { + int distance = GpsMath::PointToSeg(pt, Lxx); + if(distance == ERROR_JLCM) + { + distance = 0; + } + if(GpsMath::IsCross(line, Lxx)) + { + distance = -distance; + } + dm = distance; + return true; + } + else + { + if(cross) + { + if(GpsMath::IsCross(line, Lxx)) + { + int distance = -GpsMath::PointToSeg(pt, Lxx); + dm = distance; + return true; + } + } + } + return false; +} + DriveDirType ExamCarSub3::driveDirection(const TModelLine* lane) { //ptBegin 车道线起始点 @@ -5838,15 +5678,15 @@ void ExamCarSub3::Calc_LaneDistance_Tail() if(RTKKM3_Tail.LaneIndex == INVALID_INDEX) return; //Kind:1: 车身左1(上) 2:车身右1(上) 3:车身左2(下) 4:车身右2(下) - int LeftBody1 = GetCarBodyPointNo(cartype, 1, true); - int LeftBody2 = GetCarBodyPointNo(cartype, 3, true); - int RightBody1 = GetCarBodyPointNo(cartype, 2, true); - int RightBody2 = GetCarBodyPointNo(cartype, 4, true); + int LeftFront = GetCarBodyPointNo(cartype, 1, true); + int LeftBack = GetCarBodyPointNo(cartype, 3, true); + int RightFront = GetCarBodyPointNo(cartype, 2, true); + int RightBack = GetCarBodyPointNo(cartype, 4, true); - if(LeftBody1 == -1 || LeftBody2 == -1 || RightBody1 == -1 || RightBody2 == -1) + if(LeftFront == -1 || LeftBack == -1 || RightFront == -1 || RightBack == -1) { - logerror("cartype=%d,LeftBody1=%d, LeftBody2=%d, LeftBody2=%d, RightBody2=%d", - cartype, LeftBody1, LeftBody2, LeftBody2, RightBody2); + logerror("cartype=%d,LeftFront=%d, LeftBack=%d, RightFront=%d, RightBack=%d", + cartype, LeftFront, LeftBack, RightFront, RightBack); return; } @@ -5898,266 +5738,52 @@ void ExamCarSub3::Calc_LaneDistance_Tail() if(p == 1) //1、车轮与本车道右侧距离 { laneDriving = &road->BorderLines[0]; - for(int k = 3; k <= 4; k++) - { - Pointi pt; - switch(k) - { - case 3: pt = body.ZH_W_b_G; break; //GuaCheStatus.CheLun_Wai_ZH_RealTime; - case 4: pt = body.YH_W_b_G; break; //GuaCheStatus.CheLun_Wai_YH_RealTime; - default: break; - } - line.PtBegin = body.b1_b_G; //GuaCheStatus.BasePoint1_RealTime; - line.PtEnd = pt; - int dis = GpsMath::P2PDistance(pt, Lj.CenterPoint); - if(GpsMath::IsPtInArcLane(pt, poly)) - { - int distance = std::abs(std::round(dis - Lj.Radius)); - if(GpsMath::IsLineCrossArc(line, Lj)) - { - distance = -distance; - } - switch(k) - { - case 3: RTKKM3_Tail.Wheel_LB_ToRightEdge = distance; break; - case 4: RTKKM3_Tail.Wheel_RB_ToRightEdge = distance; break; - default: break; - } - } - } + calcToDistanceArc(Lj, poly, body.b1_b_G, body.ZH_W_b_G, RTKKM3_Tail.Wheel_LB_ToRightEdge); + calcToDistanceArc(Lj, poly, body.b1_b_G, body.YH_W_b_G, RTKKM3_Tail.Wheel_RB_ToRightEdge); } else if(p == 2) //2:车轮与最右侧车道右侧距离 { - for(int k = 3; k <= 4; k++) - { - Pointi pt; - switch(k) - { - case 3: pt = body.ZH_W_b_G; break; //GuaCheStatus.CheLun_Wai_ZH_RealTime; - case 4: pt = body.YH_W_b_G; break; //GuaCheStatus.CheLun_Wai_YH_RealTime; - default: break; - } - - line.PtBegin = body.b1_b_G; // GuaCheStatus.BasePoint1_RealTime; - line.PtEnd = pt; - if(GpsMath::IsPtInPoly(pt.x, pt.y, road->Area.Pts)) - { - int dis = GpsMath::P2PDistance(pt, L0.CenterPoint); - int distance = std::abs(std::round(dis - L0.Radius)); - if(GpsMath::IsLineCrossArc(line, L0)) - { - distance = -distance; - } - switch(k) - { - case 3: RTKKM3_Tail.Wheel_LB_ToBaseLine = distance; break; - case 4: RTKKM3_Tail.Wheel_RB_ToBaseLine = distance; break; - default: break; - } - } - } + calcToDistanceArc2(L0, road->Area, body.b1_b_G, body.ZH_W_b_G, RTKKM3_Tail.Wheel_LB_ToBaseLine); + calcToDistanceArc2(L0, road->Area, body.b1_b_G, body.YH_W_b_G, RTKKM3_Tail.Wheel_RB_ToBaseLine); } else if(p == 3) //3:车身左侧与本车道左侧距离 { - for(int k = 1; k <= 2; k++) - { - Pointi pt; - switch(k) - { - case 1: pt = body.points_b[LeftBody1]; break; - case 2: pt = body.points_b[LeftBody2]; break; - default: break; - } - line.PtBegin = body.b1_b_G; //CarStatus.BasePoint1_RealTime; - line.PtEnd = pt; - if(GpsMath::IsPtInArcLane(pt, poly)) - { - int dis = GpsMath::P2PDistance(pt, Lj1.CenterPoint); - int distance = std::abs(std::round(dis - Lj1.Radius)); - if(GpsMath::IsLineCrossArc(line, Lj1)) - { - distance = -distance; - } - switch(k) - { - case 1: RTKKM3_Tail.Body_LF_ToLeftEdge = distance; break; - case 2: RTKKM3_Tail.Body_LB_ToLeftEdge = distance; break; - default: break; - } - } - } + calcToDistanceArc(Lj1, poly, body.b1_b_G, body.points_b[LeftFront], RTKKM3_Tail.Body_LF_ToLeftEdge); + calcToDistanceArc(Lj1, poly, body.b1_b_G, body.points_b[LeftBack], RTKKM3_Tail.Body_LB_ToLeftEdge); } else if(p == 4) //4:车身右侧与本车道右侧距离 { - for(int k = 1; k <= 2; k++) - { - Pointi pt; - switch(k) - { - case 1: pt = body.points_b[RightBody1]; break; - case 2: pt = body.points_b[RightBody2]; break; - default: break; - } - line.PtBegin = body.b1_b_G; - line.PtEnd = pt; - if(GpsMath::IsPtInArcLane(pt, poly)) - { - int dis = GpsMath::P2PDistance(pt, Lj.CenterPoint); - int distance = std::abs(std::round(dis - Lj.Radius)); - if(GpsMath::IsLineCrossArc(line, Lj)) - { - distance = -distance; - } - switch(k) - { - case 1: RTKKM3_Tail.Body_RF_ToRightEdge = distance; break; - case 2: RTKKM3_Tail.Body_RB_ToRightEdge = distance; break; - default: break; - } - } - } + calcToDistanceArc(Lj, poly, body.b1_b_G, body.points_b[RightFront], RTKKM3_Tail.Body_RF_ToRightEdge); + calcToDistanceArc(Lj, poly, body.b1_b_G, body.points_b[RightBack], RTKKM3_Tail.Body_RB_ToRightEdge); } } else { - laneDriving = &road->BorderLines[0]; if(p == 1) //1、车轮与本车道右侧距离 { - for(int k = 3; k <= 4; k++) - { - Pointi pt; - switch(k) - { - case 3: pt = body.ZH_W_b_G; break; //GuaCheStatus.CheLun_Wai_ZH_RealTime; - case 4: pt = body.YH_W_b_G; break; //GuaCheStatus.CheLun_Wai_YH_RealTime; - default: break; - } - line.PtBegin = body.b1_b_G; - line.PtEnd = pt; - if(GpsMath::IsPtInPoly(pt.x, pt.y, poly.Pts) == true) - { - int distance = GpsMath::PointToSeg(pt, Lj); - if(distance == ERROR_JLCM) - { - distance = 0; - } - if(GpsMath::IsCross(line, Lj)) - { - distance = -distance; - } - switch(k) - { - case 3: RTKKM3_Tail.Wheel_LB_ToRightEdge = distance; break; - case 4: RTKKM3_Tail.Wheel_RB_ToRightEdge = distance; break; - default: break; - } - } - } + laneDriving = &road->BorderLines[0]; + calcToDistanceLine(Lj, poly.Pts, body.b1_b_G, body.ZH_W_b_G, RTKKM3_Tail.Wheel_LB_ToRightEdge); + calcToDistanceLine(Lj, poly.Pts, body.b1_b_G, body.YH_W_b_G, RTKKM3_Tail.Wheel_RB_ToRightEdge); } else if(p == 2) //2:车轮与最右侧车道右侧距离 { - for(int k = 3; k <= 4; k++) - { - Pointi pt; - switch(k) - { - case 3: pt = body.ZH_W_b_G; break; //GuaCarStatus.CheLun_Wai_ZH_RealTime; - case 4: pt = body.YH_W_b_G; break; //GuaCarStatus.CheLun_Wai_YH_RealTime; - default: break; - } - line.PtBegin = body.b1_b_G; - line.PtEnd = pt; - if(GpsMath::IsPtInPoly(pt.x, pt.y, road->Area.Pts)) - { - int distance = GpsMath::PointToSeg(pt, L0); - if(distance == ERROR_JLCM) - { - distance = 0; - } - if(GpsMath::IsCross(line, L0)) - { - distance = -distance; - } - switch(k) - { - case 3: RTKKM3_Tail.Wheel_LB_ToBaseLine = distance; break; - case 4: RTKKM3_Tail.Wheel_RB_ToBaseLine = distance; break; - default: break; - } - } - } + calcToDistanceLine(L0, road->Area.Pts, body.b1_b_G, body.ZH_W_b_G, RTKKM3_Tail.Wheel_LB_ToBaseLine); + calcToDistanceLine(L0, road->Area.Pts, body.b1_b_G, body.YH_W_b_G, RTKKM3_Tail.Wheel_RB_ToBaseLine); } else if(p == 3) //3:车身左侧与本车道左侧距离 { - for(int k = 1; k <= 2; k++) - { - Point pt; - switch(k) - { - case 1: pt = body.points_b[LeftBody1]; break; - case 2: pt = body.points_b[LeftBody2]; break; - default: break; - } - line.PtBegin = body.b1_b_G; - line.PtEnd = pt; - if(GpsMath::IsPtInPoly(pt.x, pt.y, poly.Pts) == true) - { - int distance = GpsMath::PointToSeg(pt, Lj1); - if(distance == ERROR_JLCM) - { - distance = 0; - } - if(GpsMath::IsCross(line, Lj1)) - { - distance = -distance; - } - switch(k) - { - case 1: RTKKM3_Tail.Body_LF_ToLeftEdge = distance; break; - case 2: RTKKM3_Tail.Body_LB_ToLeftEdge = distance; break; - default: break; - } - } - } + calcToDistanceLine(Lj1, poly.Pts, body.b1_b_G, body.points_b[LeftFront], RTKKM3_Tail.Body_LF_ToLeftEdge); + calcToDistanceLine(Lj1, poly.Pts, body.b1_b_G, body.points_b[LeftBack], RTKKM3_Tail.Body_LB_ToLeftEdge); } else if(p == 4) //4:车身右侧与本车道右侧距离 { - for(int k = 1; k <= 2; k++) - { - Point pt; - switch(k) - { - case 1: pt = body.points_b[RightBody1]; break; - case 2: pt = body.points_b[RightBody2]; break; - default: break; - } - line.PtBegin = body.b1_b_G; - line.PtEnd = pt; - if(GpsMath::IsPtInPoly(pt.x, pt.y, poly.Pts) == true) - { - int distance = GpsMath::PointToSeg(pt, Lj); - if(distance == ERROR_JLCM) - { - distance = 0; - } - if(GpsMath::IsCross(line, Lj)) - { - distance = -distance; - } - switch(k) - { - case 1: RTKKM3_Tail.Body_RF_ToRightEdge = distance; break; - case 2: RTKKM3_Tail.Body_RB_ToRightEdge = distance; break; - default: break; - } - } - } + calcToDistanceLine(Lj, poly.Pts, body.b1_b_G, body.points_b[RightFront], RTKKM3_Tail.Body_RF_ToRightEdge); + calcToDistanceLine(Lj, poly.Pts, body.b1_b_G, body.points_b[RightBack], RTKKM3_Tail.Body_RB_ToRightEdge); } } } } } - } void ExamCarSub3::Calc_CheShenYaXian_Tail() diff --git a/entry/src/main/cpp/sdk/exam/ExamCarSub3.h b/entry/src/main/cpp/sdk/exam/ExamCarSub3.h index 86f54f93..6ced047a 100644 --- a/entry/src/main/cpp/sdk/exam/ExamCarSub3.h +++ b/entry/src/main/cpp/sdk/exam/ExamCarSub3.h @@ -80,6 +80,9 @@ protected: void dealItemNoIDEndItem(); void dealItemNoIDEnd14Jjdw(); + bool calcToDistanceArc(const TModelLine& Lxx, const TModelPolygon& poly, const Pointi& b1, const Pointi& pt, int& dm, bool cross=false); + bool calcToDistanceArc2(const TModelLine& Lxx, const TModelPolygon& area, const Pointi& b1, const Pointi& pt, int& dm, bool cross=false); + bool calcToDistanceLine(const TModelLine& Lxx, const std::vector& Pts, const Pointi& b1, const Pointi& pt, int& dm, bool cross=false); //行驶方向,1正向行驶,-1逆向行驶 DriveDirType driveDirection(const TModelLine* lane); @@ -173,6 +176,7 @@ protected: //A2C6-20250310 大车A2挂车新增加的方法 void Calc_CheLunYaXian_Tail(int curRoadIndex, int curLaneIndex); //形状线计算 void RTKJudge_SubItem_Tail(); + private: ISub3JudgeItem* m_commItem = nullptr; ISub3JudgeItem* m_curItem = nullptr; diff --git a/entry/src/main/cpp/sdk/judge/sub2/Sub2Judge03Cftc.cpp b/entry/src/main/cpp/sdk/judge/sub2/Sub2Judge03Cftc.cpp index e0de02e9..fc12b2e7 100644 --- a/entry/src/main/cpp/sdk/judge/sub2/Sub2Judge03Cftc.cpp +++ b/entry/src/main/cpp/sdk/judge/sub2/Sub2Judge03Cftc.cpp @@ -232,10 +232,13 @@ JUDGE_STAGE_IMPL(Sub2Judge03Cftc, Sub2CftcStage1) { const TGPSLines LS = {m_model->L34(),m_model->L45(),m_model->L56(),m_model->L36()}; const PointSets& body = m_car->carModel()->body(); //车身24点 - static constexpr int history = 2; + static constexpr int history = 5; if(pureCarTouchSomeLines(LS, body, history) || pureCarTouchPairLines(LS, {II(3), II(15)}) || - pureCarTouchPairLines(LS, {II(11), II(23)})) + pureCarTouchPairLines(LS, {II(4), II(14)}) || + pureCarTouchPairLines(LS, {II(11), II(23)}) || + pureCarTouchPairLines(LS, {II(12), II(22)}) || + pureCarTouchPairLines(LS, {II(1), II(13)})) { m_outLine = true; //ENTER_ITEM_AND_MARK(JUDGE_MARK_ITEM_MUST_ONCE(MARK_SUB2_CFTC_01)); //add enter diff --git a/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge12Lkdt.cpp b/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge12Lkdt.cpp index acf05df7..4319137b 100644 --- a/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge12Lkdt.cpp +++ b/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge12Lkdt.cpp @@ -86,41 +86,43 @@ void Sub3Judge12Lkdt::dealJudgeItem() } } - double MaxAngleChange = 0; - for(int i = 1; i < 500; i++) + if(m_exam->Gps_Itemno1 == 3) //穿越3点才判断角度 20250409 { - const TChuanGan* hisi = m_car->historyChuanGan(i); - if(hisi == nullptr) break; - - const TGpsInfo& gpsi = hisi->real.gps; - - if(!gpsi.rtkEnabled) break; - if (hisi->tkCnt <= m_itemv.Enter_TK) break; - double a = gps.hxj - gpsi.hxj; - //处理越界问题 - if(a > 300) + for(int i = 1; i < 500; i++) { - a = a - 360; - } - else - { - if(a < -300) + const TChuanGan* hisi = m_car->historyChuanGan(i); + if(hisi == nullptr) break; + + const TGpsInfo& gpsi = hisi->real.gps; + + if(!gpsi.rtkEnabled) break; + if (hisi->tkCnt <= m_itemv.Enter_TK) break; + double a = gps.hxj - gpsi.hxj; + //处理越界问题 + if(a > 300) { - a = a + 360; + a = a - 360; + } + else + { + if(a < -300) + { + a = a + 360; + } } - } - a = std::abs(a); - if(Tools::greater(a, MaxAngleChange)) - { - MaxAngleChange = a; - } + a = std::abs(a); + if(Tools::greater(a, MaxAngleChange)) + { + MaxAngleChange = a; + } - if(a > m_itemv.LuK_Zx_Deg && a < 210) //20180830 -150 - { - m_itemv.LuK_FXD_AngleOKFlag = true; - break; + if(a > m_itemv.LuK_Zx_Deg && a < 210) //20180830 -150 + { + m_itemv.LuK_FXD_AngleOKFlag = true; + break; + } } } diff --git a/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge15Lkzz.cpp b/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge15Lkzz.cpp index 235bc1c4..3c5734eb 100644 --- a/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge15Lkzz.cpp +++ b/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge15Lkzz.cpp @@ -101,39 +101,42 @@ void Sub3Judge15Lkzz::dealJudgeItem() } double MaxAngleChange = 0; - for(int i = 1; i < 500; i++) + if(m_exam->Gps_Itemno1 == 3) //穿越3点才判断角度 20250409 { - const TChuanGan* hisi = m_car->historyChuanGan(i); - if(hisi == nullptr) break; - - const TGpsInfo& gpsi = hisi->real.gps; - - if(!gpsi.rtkEnabled) break; - if (hisi->tkCnt <= m_itemv.Enter_TK) break; - double a = gps.hxj - gpsi.hxj; - //处理越界问题 - if(a > 300) + for(int i = 1; i < 500; i++) { - a = a - 360; - } - else - { - if(a < -300) + const TChuanGan* hisi = m_car->historyChuanGan(i); + if(hisi == nullptr) break; + + const TGpsInfo& gpsi = hisi->real.gps; + + if(!gpsi.rtkEnabled) break; + if (hisi->tkCnt <= m_itemv.Enter_TK) break; + double a = gps.hxj - gpsi.hxj; + //处理越界问题 + if(a > 300) { - a = a + 360; + a = a - 360; + } + else + { + if(a < -300) + { + a = a + 360; + } } - } - a = std::abs(a); - if(Tools::greater(a, MaxAngleChange)) - { - MaxAngleChange = a; - } + a = std::abs(a); + if(Tools::greater(a, MaxAngleChange)) + { + MaxAngleChange = a; + } - if(a > m_itemv.LuK_Zx_Deg && a < 210) //20180830 -150 - { - m_itemv.LuK_FXD_AngleOKFlag = true; - break; + if(a > m_itemv.LuK_Zx_Deg && a < 210) //20180830 -150 + { + m_itemv.LuK_FXD_AngleOKFlag = true; + break; + } } } diff --git a/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge16Lkyz.cpp b/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge16Lkyz.cpp index b6dc4ab5..ffaf466f 100644 --- a/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge16Lkyz.cpp +++ b/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge16Lkyz.cpp @@ -99,39 +99,42 @@ void Sub3Judge16Lkyz::dealJudgeItem() } double MaxAngleChange = 0; - for(int i = 1; i < 500; i++) + if(m_exam->Gps_Itemno1 == 3) //穿越3点才判断角度 20250409 { - const TChuanGan* hisi = m_car->historyChuanGan(i); - if(hisi == nullptr) break; - - const TGpsInfo& gpsi = hisi->real.gps; - - if(!gpsi.rtkEnabled) break; - if (hisi->tkCnt <= m_itemv.Enter_TK) break; - double a = gps.hxj - gpsi.hxj; - //处理越界问题 - if(a > 300) + for(int i = 1; i < 500; i++) { - a = a - 360; - } - else - { - if(a < -300) + const TChuanGan* hisi = m_car->historyChuanGan(i); + if(hisi == nullptr) break; + + const TGpsInfo& gpsi = hisi->real.gps; + + if(!gpsi.rtkEnabled) break; + if (hisi->tkCnt <= m_itemv.Enter_TK) break; + double a = gps.hxj - gpsi.hxj; + //处理越界问题 + if(a > 300) { - a = a + 360; + a = a - 360; + } + else + { + if(a < -300) + { + a = a + 360; + } } - } - a = std::abs(a); - if(Tools::greater(a, MaxAngleChange)) - { - MaxAngleChange = a; - } + a = std::abs(a); + if(Tools::greater(a, MaxAngleChange)) + { + MaxAngleChange = a; + } - if(a > m_itemv.LuK_Zx_Deg && a < 210) //20180830 -150 - { - m_itemv.LuK_FXD_AngleOKFlag = true; - break; + if(a > m_itemv.LuK_Zx_Deg && a < 210) //20180830 -150 + { + m_itemv.LuK_FXD_AngleOKFlag = true; + break; + } } } diff --git a/entry/src/main/cpp/toolkit/inc/HKitInc.h b/entry/src/main/cpp/toolkit/inc/HKitInc.h index 3c39834b..c99fbd6f 100644 --- a/entry/src/main/cpp/toolkit/inc/HKitInc.h +++ b/entry/src/main/cpp/toolkit/inc/HKitInc.h @@ -19,7 +19,7 @@ #define KIT_VERSION_MAJOR 1 #define KIT_VERSION_MINOR 0 #define KIT_VERSION_PATCH 2 -#define KIT_VERSION_STAMP "2504091315b" +#define KIT_VERSION_STAMP "2504091505b" #define KIT_VERSION_STR JUDGE_STR(KIT_VERSION_MAJOR.KIT_VERSION_MINOR.KIT_VERSION_PATCH) diff --git a/entry/src/main/ets/pages/UserInfo.ets b/entry/src/main/ets/pages/UserInfo.ets index 2aa619f2..ecf25b22 100644 --- a/entry/src/main/ets/pages/UserInfo.ets +++ b/entry/src/main/ets/pages/UserInfo.ets @@ -1189,9 +1189,7 @@ struct UserInfo { setTimeout(() => { this.currentUser = item this.currentUser.ksy2 = globalThis.kgxm - }, 200) - }) }) }.width(640 * this.ratio).margin({ left: 30 * this.ratio })