From 9e39150009b448b8c881cc007a32a80c7c4efa4f Mon Sep 17 00:00:00 2001 From: monitor1394 Date: Tue, 23 Jan 2024 22:55:46 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0`Line`=E6=94=AF=E6=8C=81X?= =?UTF-8?q?=E8=BD=B4=E5=92=8CY=E8=BD=B4=E9=83=BD=E4=B8=BA`Category`?= =?UTF-8?q?=E7=B1=BB=E7=9B=AE=E8=BD=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Runtime/Component/Tooltip/TooltipHandler.cs | 14 +++++++++----- Runtime/Internal/BaseChart.Component.cs | 5 +++-- Runtime/Serie/Line/LineHandler.GridCoord.cs | 10 ++++++---- 3 files changed, 18 insertions(+), 11 deletions(-) diff --git a/Runtime/Component/Tooltip/TooltipHandler.cs b/Runtime/Component/Tooltip/TooltipHandler.cs index d8322686..b4476823 100644 --- a/Runtime/Component/Tooltip/TooltipHandler.cs +++ b/Runtime/Component/Tooltip/TooltipHandler.cs @@ -305,7 +305,7 @@ namespace XCharts.Runtime { GetSerieDataByXYAxis(serie, xAxis, yAxis); } - else if (yAxis.IsCategory()) + else if (yAxis.IsCategory() && !xAxis.IsCategory()) { if (isTriggerAxis) { @@ -583,13 +583,17 @@ namespace XCharts.Runtime private bool IsYCategoryOfGrid(int gridIndex) { - var yAxes = chart.GetChartComponents(); - foreach (var component in yAxes) + foreach (var component in chart.GetChartComponents()) { var yAxis = component as YAxis; - if (yAxis.gridIndex == gridIndex && yAxis.IsCategory()) return true; + if (yAxis.gridIndex == gridIndex && !yAxis.IsCategory()) return false; } - return false; + foreach (var component in chart.GetChartComponents()) + { + var xAxis = component as XAxis; + if (xAxis.gridIndex == gridIndex && xAxis.IsCategory()) return false; + } + return true; } private void DrawXAxisIndicator(VertexHelper vh, Tooltip tooltip, GridCoord grid) diff --git a/Runtime/Internal/BaseChart.Component.cs b/Runtime/Internal/BaseChart.Component.cs index 2e1d99a8..dee1a5d7 100644 --- a/Runtime/Internal/BaseChart.Component.cs +++ b/Runtime/Internal/BaseChart.Component.cs @@ -459,13 +459,14 @@ namespace XCharts.Runtime internal bool GetSerieGridCoordAxis(Serie serie, out Axis axis, out Axis relativedAxis) { var yAxis = GetChartComponent(serie.yAxisIndex); - if (yAxis == null) + var xAxis = GetChartComponent(serie.xAxisIndex); + if (xAxis == null || yAxis == null) { axis = null; relativedAxis = null; return false; } - var isY = yAxis.IsCategory(); + var isY = yAxis.IsCategory() && !xAxis.IsCategory(); if (isY) { axis = yAxis; diff --git a/Runtime/Serie/Line/LineHandler.GridCoord.cs b/Runtime/Serie/Line/LineHandler.GridCoord.cs index ca8ae8b6..58353357 100644 --- a/Runtime/Serie/Line/LineHandler.GridCoord.cs +++ b/Runtime/Serie/Line/LineHandler.GridCoord.cs @@ -277,6 +277,7 @@ namespace XCharts.Runtime return; var axisLength = isY ? m_SerieGrid.context.height : m_SerieGrid.context.width; + var axisRelativedLength = isY ? m_SerieGrid.context.width : m_SerieGrid.context.height; int maxCount = serie.maxShow > 0 ? @@ -284,6 +285,7 @@ namespace XCharts.Runtime showData.Count; maxCount -= serie.context.dataZoomStartIndexOffset; var scaleWid = AxisHelper.GetDataWidth(axis, axisLength, maxCount, dataZoom); + var scaleRelativedWid = AxisHelper.GetDataWidth(relativedAxis, axisRelativedLength, maxCount, dataZoom); int rate = LineHelper.GetDataAverageRate(serie, m_SerieGrid, maxCount, false); var totalAverage = serie.sampleAverage > 0 ? serie.sampleAverage : @@ -330,7 +332,7 @@ namespace XCharts.Runtime maxCount, totalAverage, i, 0, dataChangeDuration, ref dataChanging, relativedAxis, unscaledTime); serieData.context.stackHeight = GetDataPoint(isY, axis, relativedAxis, m_SerieGrid, xValue, relativedValue, - i, scaleWid, isStack, ref np); + i, scaleWid, scaleRelativedWid, isStack, ref np); serieData.context.isClip = false; if (serie.clip && !m_SerieGrid.Contains(np)) { @@ -371,12 +373,12 @@ namespace XCharts.Runtime } private float GetDataPoint(bool isY, Axis axis, Axis relativedAxis, GridCoord grid, double xValue, - double yValue, int i, float scaleWid, bool isStack, ref Vector3 np) + double yValue, int i, float scaleWid, float scaleRelativedWid, bool isStack, ref Vector3 np) { float xPos, yPos; var gridXY = isY ? grid.context.x : grid.context.y; var valueHig = 0f; - valueHig = AxisHelper.GetAxisValueDistance(grid, relativedAxis, scaleWid, yValue); + valueHig = AxisHelper.GetAxisValueDistance(grid, relativedAxis, scaleRelativedWid, yValue); valueHig = AnimationStyleHelper.CheckDataAnimation(chart, serie, i, valueHig); if (isY) { @@ -399,7 +401,7 @@ namespace XCharts.Runtime } } np = new Vector3(xPos, yPos); - return AxisHelper.GetAxisValueLength(grid, relativedAxis, scaleWid, yValue); + return AxisHelper.GetAxisValueLength(grid, relativedAxis, scaleRelativedWid, yValue); } } } \ No newline at end of file