cpp
This commit is contained in:
		
							parent
							
								
									de722a15cf
								
							
						
					
					
						commit
						4344c389b0
					
				| @ -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" | ||||
|  | ||||
										
											Binary file not shown.
										
									
								
							| @ -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" | ||||
|  | ||||
| @ -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<Pointi>& 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() | ||||
|  | ||||
| @ -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<Pointi>& 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; | ||||
|  | ||||
| @ -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
 | ||||
|  | ||||
| @ -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; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|  | ||||
| @ -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; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|  | ||||
| @ -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; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|  | ||||
| @ -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) | ||||
| 
 | ||||
|  | ||||
| @ -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 }) | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user