fix: 轨迹查看操作栏遮挡信息问题

This commit is contained in:
wangzhongjie 2025-07-24 10:45:56 +08:00
parent 95a6ddec29
commit 33bb420725
5 changed files with 13 additions and 168 deletions

View File

@ -498,7 +498,7 @@ export interface JudgeUI {
dw: string
endExamDialogController: CustomDialogController
generateExamRecordsDialogController: CustomDialogController
laneSignal:PerLane
laneSignal:PerLane,
}

View File

@ -147,7 +147,12 @@ struct JudgePage {
@State carInfo: CarInfoType = {}
@State isErrorMsgEnd: boolean = false
@State disConnectErrorOpen: boolean = false
@State laneSignal: PerLane = InitialPerLane
@State @Watch("laneSignalChange") laneSignal: PerLane = InitialPerLane
laneSignalChange() {
dConsole.log("车道信号变化1", this.laneSignal)
}
public context = getContext(this) as common.UIAbilityContext;
// 信号查看弹窗
signalTrajectoryDialogController: CustomDialogController = new CustomDialogController({

View File

@ -6,8 +6,7 @@ import TabComponent from '../compontents/Tab'
@CustomDialog
export default struct SignalTrajectoryDialog {
@State active: number = 0
@Prop laneSignal: PerLane
@Link laneSignal: PerLane
private controller?: CustomDialogController

View File

@ -28,9 +28,11 @@ export default struct SignalDisplayComponent {
// 原始数据
@State rawData: string = "$GPS,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"
// 车道信息
@Prop laneSignal: PerLane
@Link @Watch("laneSignalChange") laneSignal: PerLane
laneSignalChange(){
dConsole.log("车道信号变化3",this.laneSignal)
}
aboutToAppear(): void {
DifferentialAndSignal.onMsg(this.getMsg)
@ -191,7 +193,7 @@ struct trajectoryComponent {
build() {
Stack({
alignContent: Alignment.TopStart
alignContent: Alignment.TopEnd
}) {
XComponent({
id: 'duolun_plugin_id_draw', //显示轨迹窗口id名称注意这个ID要和C++侧一致,不能变

View File

@ -1,161 +0,0 @@
import apiJudgeSdk from 'libJudgeSdk.so';
import { examJudgeMapSetScaling } from '../../judgeSDK/api';
import { PerLane } from '../../../model';
import { InitialPerLane } from '../../../mock';
interface RoadDataType {
name: string,
key: string | string[]
}
@Component
export default struct RealTime {
@State message: string = '开始绘制'
// 控制XComponent组件的创建和销毁
@State draw: boolean = false
//模拟考试项目
@State scaleNum: number = 100
@State gpsActive: number = 1
@State ratio: number = 1
@State lane: PerLane = InitialPerLane
scaleFn = async (num: number) => {
const scaleNum = this.scaleNum
if (scaleNum > 0 && scaleNum < 5000) {
this.scaleNum += num;
}
if (scaleNum === 0 && num > 0) {
this.scaleNum += num;
}
if (scaleNum > 5000 && num < 0) {
this.scaleNum += num;
}
await examJudgeMapSetScaling(this.scaleNum);
}
private widthNumber: string | number | Resource = 0
private heightNumber: string | number | Resource = 0
private RoadData: Array<RoadDataType> = [
{ name: '路段组号', key: 'MapRoad_Code_No' },
{ name: '路段编码', key: 'MapRoad_Name' },
{ name: '车轮压线', key: ['TouchLineType', 'TouchDir'] },
{ name: '车身碰线', key: ['TouchLineTypeCS', 'TouchLineDirCS'] },
{ name: '基准车道', key: ['BasePointInLaneNo', 'BaseLaneCount'] },
{ name: '前点车道', key: ['FrontPointLaneNo', 'FrontPointLaneCount'] },
{ name: '后车点道', key: ['BackPointLaneNo', 'BackPointLaneCount'] },
{ name: '左前/后车身距离', key: ['Body_LF_ToLeftEdge', 'Body_LB_ToLeftEdge'] },
{ name: '右前/后车身距离', key: ['Body_RF_ToRightEdge', 'Body_RB_ToRightEdge'] },
{ name: '右前/后车身边线', key: ['Body_RF_ToBaseLine', 'Body_RB_ToBaseLine'] },
{ name: '右前/后轮距离', key: ['Wheel_RF_ToRightEdge', 'Wheel_RB_ToRightEdge'] },
{ name: '右前/后轮边线', key: ['Wheel_RF_ToBaseLine', 'Wheel_RB_ToBaseLine'] },
{ name: '左前/后轮距离', key: ['Wheel_LF_ToRightEdge', 'Wheel_LB_ToRightEdge'] },
{ name: '左前/后轮边线', key: ['Wheel_LF_ToBaseLine', 'Wheel_LB_ToBaseLine'] },
{ name: '车道属性', key: ['BasePointInLaneDir', 'CrossLineAttr', 'DirInverse'] },
{ name: '形状', key: ['InShapeAttr', 'ShapeNo', 'ShapeNoWheel'] },
{ name: '路段点', key: ['CrossPointNo'] },
]
async aboutToDisappear() {
// clearInterval(this.timer)
}
async aboutToAppear() {
// const judge = new Judge(this)
// let timer = setInterval(() => {
// this.lane = globalThis.laneData;
// }, 1000)
// this.timer = timer
}
getScaleNum = (): number => {
const scaleNum = this.scaleNum;
if (scaleNum < 200) return 10;
if (scaleNum < 400) return 30;
if (scaleNum < 600) return 50;
if (scaleNum < 800) return 70;
if (scaleNum < 1000) return 100;
if (scaleNum < 2000) return 500;
return 1000;
}
getValues(roadColumn: RoadDataType) {
const lane = this.lane;
let key = roadColumn.key;
let str = ''
if (Array.isArray(key)) {
key.forEach((k, index) => {
str += (Reflect.get(lane, k) === undefined ? '' : Reflect.get(lane, k)) + (index == key.length - 1 ? '' : '/')
})
} else {
str = Reflect.get(lane, key) === undefined ? '' : Reflect.get(lane, key)
}
return str
}
build() {
Row() {
Column() {
Row() {
Text('车道信息').fontColor(this.gpsActive == 0 ? '#2D3C5A' : '#fff').fontSize(20)
}
.width('100%')
.height(37)
.backgroundColor(this.gpsActive == 0 ? '#fff' : '#1A1A1A')
.margin({ top: 10 * this.ratio, right: 10 })
.justifyContent(FlexAlign.Center)
Flex({ direction: FlexDirection.Column, justifyContent: FlexAlign.Start }) {
ForEach(this.RoadData, (item: RoadDataType) => {
Column() {
Text(`${item.name}:${this.getValues(item)}`)
.fontSize(20)
.lineHeight(30)
.fontColor('#fff')
}.height(30).justifyContent(FlexAlign.Start).width('100%')
})
}.margin({ top: 5 })
}.width(168 * 1.5)
.height(this.heightNumber)
.backgroundColor('#282828')
.margin({ top: 6 * this.ratio, })
Column() {
if (this.draw) {
XComponent({
id: 'duolun_plugin_id_draw', //显示轨迹窗口id名称注意这个ID要和C++侧一致,不能变
type: 'surface',
libraryname: 'JudgeSdk'
// libraryname: 'judgesdk'
})
.width(this.widthNumber)
.height(this.heightNumber)
.onLoad(() => {
apiJudgeSdk.examJudgeMapSetDrawing(true); //停止绘制地图轨迹false:表示结束绘制
})
.onDestroy(() => {
apiJudgeSdk.examJudgeMapSetDrawing(false); //停止绘制地图轨迹false:表示结束绘制
this.draw = false;
// clearInterval(globalThis.realTimer)
})
} else {
Column() {
}
.width(this.widthNumber)
.height(this.heightNumber)
}
}
.width('100%')
.backgroundColor('#fff')
Row() {
Image($rawfile('judge/big.png')).width(60).onClick(() => {
this.scaleFn(this.getScaleNum() - 1)
})
Image($rawfile('judge/small.png')).width(60).onClick(() => {
this.scaleFn(this.getScaleNum())
}).margin({ left: 20 })
}.position({ x: '32%', y: 60 })
}
.height('100%')
}
}