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,267 +5738,53 @@ 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,8 +86,9 @@ void Sub3Judge12Lkdt::dealJudgeItem()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
double MaxAngleChange = 0;
|
||||
if(m_exam->Gps_Itemno1 == 3) //穿越3点才判断角度 20250409
|
||||
{
|
||||
for(int i = 1; i < 500; i++)
|
||||
{
|
||||
const TChuanGan* hisi = m_car->historyChuanGan(i);
|
||||
@ -123,6 +124,7 @@ void Sub3Judge12Lkdt::dealJudgeItem()
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Update_DiaoTou_JianSuRec(m_itemv.slowDown); //, -1
|
||||
|
||||
|
||||
@ -101,6 +101,8 @@ void Sub3Judge15Lkzz::dealJudgeItem()
|
||||
}
|
||||
|
||||
double MaxAngleChange = 0;
|
||||
if(m_exam->Gps_Itemno1 == 3) //穿越3点才判断角度 20250409
|
||||
{
|
||||
for(int i = 1; i < 500; i++)
|
||||
{
|
||||
const TChuanGan* hisi = m_car->historyChuanGan(i);
|
||||
@ -136,6 +138,7 @@ void Sub3Judge15Lkzz::dealJudgeItem()
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//(*2024-03-08*)
|
||||
if (Tools::pos("+", cg->MapPoint_Road_Code) == true && Tools::pos("+", his1->MapPoint_Road_Code) == false) //包含路口端点的路口项目
|
||||
|
||||
@ -99,6 +99,8 @@ void Sub3Judge16Lkyz::dealJudgeItem()
|
||||
}
|
||||
|
||||
double MaxAngleChange = 0;
|
||||
if(m_exam->Gps_Itemno1 == 3) //穿越3点才判断角度 20250409
|
||||
{
|
||||
for(int i = 1; i < 500; i++)
|
||||
{
|
||||
const TChuanGan* hisi = m_car->historyChuanGan(i);
|
||||
@ -134,6 +136,7 @@ void Sub3Judge16Lkyz::dealJudgeItem()
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//(*2024-03-08*)
|
||||
if(Tools::pos("+", cg->MapPoint_Road_Code) == true && Tools::pos("+", his1->MapPoint_Road_Code) == false) //包含路口端点的路口项目
|
||||
|
||||
@ -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