fix: 解决scatterGL在各种情况下取值导致的渲染问题

This commit is contained in:
Xu Zhimeng 2023-09-26 14:39:44 +08:00
parent c81923e744
commit 90017662ed

View File

@ -17,7 +17,7 @@
v-if="!isLoading"
slot="content"
@change="handleGraphAssistanceChange"
@reset="handleReset"
@reset="handleResetChart"
/>
</pop-over-with-icon>
<a-popover
@ -344,7 +344,7 @@ export default {
try {
this.isLoading = true
this.reset()
this.handleResetState()
// const { success, result, message } = Response
@ -379,7 +379,7 @@ export default {
const { inputFileName: fileName } = this.sample
try {
this.isLoading = true
this.reset()
this.handleResetState()
// const { success, result, message } = Response
const { success, result, message } = await getAction('/gamma/gammaByFile', {
fileName,
@ -458,7 +458,6 @@ export default {
this.shapeChannelData = shapeChannelData
this.shapeEnergyData = shapeEnergyData
this.option.yAxis.max = 'dataMax'
this.resetThumbnailChartDataMax()
const series = []
@ -625,19 +624,19 @@ export default {
case 'Linear':
this.option.yAxis.type = 'value'
this.thumbnailOption.yAxis.type = 'value'
this.handleReset()
this.handleResetChart()
break
case 'Log10':
this.option.yAxis.type = 'log'
this.thumbnailOption.yAxis.type = 'log'
this.handleReset()
this.handleResetChart()
break
case 'Channel':
case 'Energy':
this.graphAssistance.axisType = label
this.option.xAxis.name = label
this.handleReset()
this.handleResetChart()
this.redrawLineBySeriesName(
'BaseLine',
@ -659,7 +658,9 @@ export default {
this.redrawThumbnailChart()
this.redrawLineBySeriesName('Compare', this.energyCompareLine, this.channelCompareLine)
if (this.channelCompareLine) {
this.redrawLineBySeriesName('Compare', this.energyCompareLine, this.channelCompareLine)
}
break
case 'Lines':
this.graphAssistance.spectrumType = 'Lines'
@ -674,7 +675,10 @@ export default {
compareLineSeries.symbol = 'none'
this.redrawLineBySeriesName('Spectrum', this.shadowEnergyChart, this.shadowChannelChart)
this.redrawLineBySeriesName('Compare', this.energyCompareLine, this.channelCompareLine)
if (this.channelCompareLine) {
this.redrawLineBySeriesName('Compare', this.energyCompareLine, this.channelCompareLine)
}
break
case 'Scatter':
this.graphAssistance.spectrumType = 'Scatter'
@ -807,7 +811,7 @@ export default {
//
handleChartDblClick() {
this.handleReset()
this.handleResetChart()
},
// Nuclide Library
@ -955,12 +959,16 @@ export default {
},
handleMouseUp() {
setTimeout(() => {
this.clearBrush(this.getChart())
if (this.timer) {
window.clearTimeout(this.timer)
}
this.timer = setTimeout(() => {
this.clearBrush()
}, 0)
},
clearBrush(chart) {
clearBrush() {
const chart = this.getChart()
//
chart.dispatchAction({
type: 'brush',
@ -970,6 +978,7 @@ export default {
//
chart.dispatchAction({
type: 'takeGlobalCursor',
brushOption: false
})
},
@ -986,13 +995,18 @@ export default {
const point1 = chart.convertFromPixel({ seriesIndex: 0 }, [minX, minY]).map((num) => parseInt(num.toFixed()))
const point2 = chart.convertFromPixel({ seriesIndex: 0 }, [maxX, maxY]).map((num) => parseInt(num.toFixed()))
//
const xAxisMax = getAxisMax(chart, 'xAxis')
const yAxisMax = this.option.yAxis.max
const yAxisMax = getAxisMax(chart, 'yAxis')
//
const xAxisMin = this.option.xAxis.min
const yAxisMin = this.option.yAxis.min
let [x1, y2, x2, y1] = [...point1, ...point2] //
const xAxisLimit = rangeNumber(1, xAxisMax)
const yAxisLimit = rangeNumber(1, yAxisMax)
const xAxisLimit = rangeNumber(xAxisMin, xAxisMax)
const yAxisLimit = rangeNumber(yAxisMin, yAxisMax)
x1 = xAxisLimit(x1)
x2 = xAxisLimit(x2)
@ -1020,8 +1034,6 @@ export default {
this.halfHeightPixel = rectHeightPixel / 2
}
this.clearBrush(chart)
this.$nextTick(() => {
this.rangeScatter()
})
@ -1029,12 +1041,9 @@ export default {
/**
* 因scatterGL 不受axis中max和min的控制手动处理溢出部分
* @param {*} x1 xAxis min
* @param {*} x2 xAxis max
* @param {*} y1 yAxis min
* @param {*} y2 yAxis max
* @param {Boolean} isReset 是否重置到初始状态
*/
rangeScatter() {
rangeScatter(isReset) {
if (!this.isScatter()) {
return
}
@ -1050,23 +1059,33 @@ export default {
const channelSpectrumData = {
...this.shadowChannelChart,
pointlist: this.pointlistLimit(this.shadowChannelChart.pointlist, x1, x2, y1, y2),
pointlist: isReset
? this.pointlistLimitY(this.shadowChannelChart.pointlist)
: this.pointlistLimit(this.shadowChannelChart.pointlist, x1, x2, y1, y2),
}
const energySpectrumData = {
...this.shadowEnergyChart,
pointlist: this.pointlistLimit(this.shadowEnergyChart.pointlist, x1, x2, y1, y2),
pointlist: isReset
? this.pointlistLimitY(this.shadowEnergyChart.pointlist)
: this.pointlistLimit(this.shadowEnergyChart.pointlist, x1, x2, y1, y2),
}
this.redrawLineBySeriesName('Spectrum', energySpectrumData, channelSpectrumData)
const channelCompareLine = {
...this.channelCompareLine,
pointlist: this.pointlistLimit(this.channelCompareLine.pointlist, x1, x2, y1, y2),
if (this.channelCompareLine) {
const channelCompareLine = {
...this.channelCompareLine,
pointlist: isReset
? this.pointlistLimitY(this.channelCompareLine.pointlist)
: this.pointlistLimit(this.channelCompareLine.pointlist, x1, x2, y1, y2),
}
const energyCompareLine = {
...this.energyCompareLine,
pointlist: isReset
? this.pointlistLimitY(this.energyCompareLine.pointlist)
: this.pointlistLimit(this.energyCompareLine.pointlist, x1, x2, y1, y2),
}
this.redrawLineBySeriesName('Compare', energyCompareLine, channelCompareLine)
}
const energyCompareLine = {
...this.energyCompareLine,
pointlist: this.pointlistLimit(this.energyCompareLine.pointlist, x1, x2, y1, y2),
}
this.redrawLineBySeriesName('Compare', energyCompareLine, channelCompareLine)
},
/**
@ -1081,6 +1100,10 @@ export default {
return pointlist.filter(({ x, y }) => x >= x1 && x <= x2 && y >= y1 && y <= y2)
},
pointlistLimitY(pointlist) {
return pointlist.filter(({ y }) => y >= 1)
},
//
setThumbnailChartRect(x1, y2, x2, y1) {
this.thumbnailChartRect = [x1, y2, x2, y1]
@ -1121,7 +1144,11 @@ export default {
const [x1, y2, x2, y1] = this.thumbnailChartRect
const halfWidth = Math.ceil((x2 - x1) / 2)
const [, maxYAxisPixel] = thumbnailChart.convertToPixel({ seriesIndex: 0 }, [0, this.thumbnailOption.yAxis.max]) // pix
// pix
const [, maxYAxisPixel] = thumbnailChart.convertToPixel({ seriesIndex: 0 }, [
0,
getAxisMax(thumbnailChart, 'yAxis'),
])
const [, minYAxisPixel] = thumbnailChart.convertToPixel({ seriesIndex: 0 }, [0, 1])
let [xAxis, yAxis] = point
@ -1156,18 +1183,19 @@ export default {
this.option.yAxis.min = minYAxis
this.option.yAxis.max = maxYAxis
this.$nextTick(() => {
this.rangeScatter()
})
}
},
//
handleReset() {
const spectrumLineMaxX = Math.max(...this.shadowChannelChart.pointlist.map(({ x }) => x))
const spectrumLineMaxY = Math.max(...this.shadowChannelChart.pointlist.map(({ y }) => y))
handleResetChart() {
this.option.xAxis.min = 1
this.option.xAxis.max = spectrumLineMaxX
this.option.xAxis.max = 'dataMax'
this.option.yAxis.min = 1
this.option.yAxis.max = spectrumLineMaxY
this.option.yAxis.max = 'dataMax'
const thumbnailSpectrumLineSeries = findSeriesByName(this.thumbnailOption.series, 'Spectrum')
thumbnailSpectrumLineSeries.markLine.data = []
@ -1175,13 +1203,13 @@ export default {
this.closePeakInfomationTooltip()
this.$nextTick(() => {
this.rangeScatter()
this.rangeScatter(true)
})
},
//
handleRefresh(data) {
this.reset()
this.handleResetState()
data.DetailedInformation = this.detailedInfomation
this.dataProsess(data)
},
@ -1198,6 +1226,7 @@ export default {
this.$message.warn('Sample is Loading')
return
}
this.handleResetChart()
this.clearCompareLine()
this.compareFileListModalVisible = true
},
@ -1213,8 +1242,7 @@ export default {
}
this.$nextTick(() => {
const yAxisMax = getAxisMax(this.getChart(), 'yAxis')
this.thumbnailOption.yAxis.max = yAxisMax
this.thumbnailOption.yAxis.max = getAxisMax(this.getChart(), 'yAxis')
})
},
@ -1225,8 +1253,8 @@ export default {
compareLine.data = []
this.resetThumbnailChartDataMax()
}
this.channelCompareLine = []
this.energyCompareLine = []
this.channelCompareLine = undefined
this.energyCompareLine = undefined
},
//
@ -1242,7 +1270,7 @@ export default {
try {
this.isLoading = true
this.reset()
this.handleResetState()
const { inputFileName: fileName } = this.sample
const { success, result, message } = await postAction(`/gamma/Reprocessing?fileName=${fileName}`)
@ -1308,7 +1336,7 @@ export default {
},
//
reset() {
handleResetState() {
this.selectedChannel = -1
this.nuclideLibraryList = []
this.closePeakInfomationTooltip()