From d93f7830dee908ed83afc4055d6d946d91edb73f Mon Sep 17 00:00:00 2001 From: monitor1394 Date: Wed, 24 Jan 2024 13:31:06 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0`Bar`=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 --- Documentation~/zh/changelog.md | 1 + Runtime/Serie/Bar/BarHandler.cs | 12 +++++++----- Runtime/Serie/Bar/SimplifiedBarHandler.cs | 14 ++++++++------ Runtime/Serie/Line/LineHandler.GridCoord.cs | 1 - Runtime/Serie/Line/SimplifiedLineHandler.cs | 18 +++++++++++------- 5 files changed, 27 insertions(+), 19 deletions(-) diff --git a/Documentation~/zh/changelog.md b/Documentation~/zh/changelog.md index 3ee402e6..48726394 100644 --- a/Documentation~/zh/changelog.md +++ b/Documentation~/zh/changelog.md @@ -70,6 +70,7 @@ slug: /changelog ## master +* (2024.01.24) 增加`Bar`支持X轴和Y轴都为`Category`类目轴 * (2024.01.23) 增加`{y}`通配符用于获取Y轴的类目名 * (2024.01.23) 增加`Line`支持X轴和Y轴都为`Category`类目轴 * (2024.01.18) 修复`Animation`的`type`代码动态修改无效的问题 diff --git a/Runtime/Serie/Bar/BarHandler.cs b/Runtime/Serie/Bar/BarHandler.cs index 7f4ad259..e40b6298 100644 --- a/Runtime/Serie/Bar/BarHandler.cs +++ b/Runtime/Serie/Bar/BarHandler.cs @@ -178,6 +178,7 @@ private void DrawBarSerie(VertexHelper vh, Bar serie) var barCount = chart.GetSerieBarRealCount(); float categoryWidth = AxisHelper.GetDataWidth(axis, axisLength, showData.Count, dataZoom); + float relativedCategoryWidth = AxisHelper.GetDataWidth(relativedAxis, relativedAxisLength, showData.Count, dataZoom); float barGap = chart.GetSerieBarGap(); float totalBarWidth = chart.GetSerieTotalWidth(categoryWidth, barGap, barCount); float barWidth = serie.GetBarWidth(categoryWidth, barCount); @@ -231,7 +232,7 @@ private void DrawBarSerie(VertexHelper vh, Bar serie) var pX = 0f; var pY = 0f; - UpdateXYPosition(m_SerieGrid, isY, axis, relativedAxis, i, categoryWidth, barWidth, isStack, value, ref pX, ref pY); + UpdateXYPosition(m_SerieGrid, isY, axis, relativedAxis, i, categoryWidth, relativedCategoryWidth, barWidth, isStack, value, ref pX, ref pY); var barHig = 0f; if (isPercentStack) { @@ -240,7 +241,7 @@ private void DrawBarSerie(VertexHelper vh, Bar serie) } else { - barHig = AxisHelper.GetAxisValueLength(m_SerieGrid, relativedAxis, categoryWidth, relativedValue); + barHig = AxisHelper.GetAxisValueLength(m_SerieGrid, relativedAxis, relativedCategoryWidth, relativedValue); } float currHig = AnimationStyleHelper.CheckDataAnimation(chart, serie, i, barHig); Vector3 plb, plt, prt, prb, top; @@ -295,7 +296,8 @@ private void DrawBarSerie(VertexHelper vh, Bar serie) } } - private void UpdateXYPosition(GridCoord grid, bool isY, Axis axis, Axis relativedAxis, int i, float categoryWidth, float barWidth, bool isStack, + private void UpdateXYPosition(GridCoord grid, bool isY, Axis axis, Axis relativedAxis, int i, + float categoryWidth, float relativedCategoryWidth, float barWidth, bool isStack, double value, ref float pX, ref float pY) { if (isY) @@ -313,7 +315,7 @@ private void UpdateXYPosition(GridCoord grid, bool isY, Axis axis, Axis relative pY = grid.context.y + valueLen - categoryWidth * 0.5f; } } - pX = AxisHelper.GetAxisValuePosition(grid, relativedAxis, categoryWidth, 0); + pX = AxisHelper.GetAxisValuePosition(grid, relativedAxis, relativedCategoryWidth, 0); if (isStack) { for (int n = 0; n < m_StackSerieData.Count - 1; n++) @@ -335,7 +337,7 @@ private void UpdateXYPosition(GridCoord grid, bool isY, Axis axis, Axis relative pX = grid.context.x + valueLen - categoryWidth * 0.5f; } } - pY = AxisHelper.GetAxisValuePosition(grid, relativedAxis, categoryWidth, 0); + pY = AxisHelper.GetAxisValuePosition(grid, relativedAxis, relativedCategoryWidth, 0); if (isStack) { for (int n = 0; n < m_StackSerieData.Count - 1; n++) diff --git a/Runtime/Serie/Bar/SimplifiedBarHandler.cs b/Runtime/Serie/Bar/SimplifiedBarHandler.cs index 1d2884e5..91908bf1 100644 --- a/Runtime/Serie/Bar/SimplifiedBarHandler.cs +++ b/Runtime/Serie/Bar/SimplifiedBarHandler.cs @@ -119,10 +119,12 @@ private void DrawBarSerie(VertexHelper vh, SimplifiedBar serie, int colorIndex) return; var axisLength = isY ? m_SerieGrid.context.height : m_SerieGrid.context.width; + var relativedAxisLength = isY ? m_SerieGrid.context.width : m_SerieGrid.context.height; var axisXY = isY ? m_SerieGrid.context.y : m_SerieGrid.context.x; var barCount = chart.GetSerieBarRealCount(); float categoryWidth = AxisHelper.GetDataWidth(axis, axisLength, showData.Count, dataZoom); + float relativedCategoryWidth = AxisHelper.GetDataWidth(relativedAxis, relativedAxisLength, showData.Count, dataZoom); float barGap = chart.GetSerieBarGap(); float totalBarWidth = chart.GetSerieTotalWidth(categoryWidth, barGap, barCount); float barWidth = serie.GetBarWidth(categoryWidth, barCount); @@ -172,9 +174,9 @@ private void DrawBarSerie(VertexHelper vh, SimplifiedBar serie, int colorIndex) var pX = 0f; var pY = 0f; - UpdateXYPosition(m_SerieGrid, isY, axis, relativedAxis, i, categoryWidth, barWidth, value, ref pX, ref pY); + UpdateXYPosition(m_SerieGrid, isY, axis, relativedAxis, i, categoryWidth, relativedCategoryWidth, barWidth, value, ref pX, ref pY); - var barHig = AxisHelper.GetAxisValueLength(m_SerieGrid, relativedAxis, categoryWidth, relativedValue); + var barHig = AxisHelper.GetAxisValueLength(m_SerieGrid, relativedAxis, relativedCategoryWidth, relativedValue); var currHig = AnimationStyleHelper.CheckDataAnimation(chart, serie, i, barHig); Vector3 plb, plt, prt, prb, top; @@ -204,8 +206,8 @@ private void DrawBarSerie(VertexHelper vh, SimplifiedBar serie, int colorIndex) } } - private void UpdateXYPosition(GridCoord grid, bool isY, Axis axis, Axis relativedAxis, int i, float categoryWidth, float barWidth, - double value, ref float pX, ref float pY) + private void UpdateXYPosition(GridCoord grid, bool isY, Axis axis, Axis relativedAxis, int i, float categoryWidth, + float relativedCategoryWidth, float barWidth, double value, ref float pX, ref float pY) { if (isY) { @@ -218,7 +220,7 @@ private void UpdateXYPosition(GridCoord grid, bool isY, Axis axis, Axis relative if (axis.context.minMaxRange <= 0) pY = grid.context.y; else pY = grid.context.y + (float)((value - axis.context.minValue) / axis.context.minMaxRange) * (grid.context.height - barWidth); } - pX = AxisHelper.GetAxisValuePosition(grid, relativedAxis, categoryWidth, 0); + pX = AxisHelper.GetAxisValuePosition(grid, relativedAxis, relativedCategoryWidth, 0); } else { @@ -231,7 +233,7 @@ private void UpdateXYPosition(GridCoord grid, bool isY, Axis axis, Axis relative if (axis.context.minMaxRange <= 0) pX = grid.context.x; else pX = grid.context.x + (float)((value - axis.context.minValue) / axis.context.minMaxRange) * (grid.context.width - barWidth); } - pY = AxisHelper.GetAxisValuePosition(grid, relativedAxis, categoryWidth, 0); + pY = AxisHelper.GetAxisValuePosition(grid, relativedAxis, relativedCategoryWidth, 0); } } diff --git a/Runtime/Serie/Line/LineHandler.GridCoord.cs b/Runtime/Serie/Line/LineHandler.GridCoord.cs index 58353357..dd450e9d 100644 --- a/Runtime/Serie/Line/LineHandler.GridCoord.cs +++ b/Runtime/Serie/Line/LineHandler.GridCoord.cs @@ -279,7 +279,6 @@ private void DrawLineSerie(VertexHelper vh, Line serie) 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 ? (serie.maxShow > showData.Count ? showData.Count : serie.maxShow) : showData.Count; diff --git a/Runtime/Serie/Line/SimplifiedLineHandler.cs b/Runtime/Serie/Line/SimplifiedLineHandler.cs index 2b9fad92..069b9e0c 100644 --- a/Runtime/Serie/Line/SimplifiedLineHandler.cs +++ b/Runtime/Serie/Line/SimplifiedLineHandler.cs @@ -160,12 +160,15 @@ private void DrawLineSerie(VertexHelper vh, SimplifiedLine serie) if (showData.Count <= 0) return; - var axisLength = isY ? m_SerieGrid.context.height : m_SerieGrid.context.width; - var scaleWid = AxisHelper.GetDataWidth(axis, axisLength, showData.Count, dataZoom); - int maxCount = serie.maxShow > 0 ? (serie.maxShow > showData.Count ? showData.Count : serie.maxShow) : showData.Count; + + var axisLength = isY ? m_SerieGrid.context.height : m_SerieGrid.context.width; + var axisRelativedLength = isY ? m_SerieGrid.context.width : m_SerieGrid.context.height; + 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 : @@ -179,6 +182,7 @@ private void DrawLineSerie(VertexHelper vh, SimplifiedLine serie) var lineWidth = LineHelper.GetLineWidth(ref interacting, serie, chart.theme.serie.lineWidth); axis.context.scaleWidth = scaleWid; + relativedAxis.context.scaleWidth = scaleRelativedWid; serie.containerIndex = m_SerieGrid.index; serie.containterInstanceId = m_SerieGrid.instanceId; @@ -203,7 +207,7 @@ private void DrawLineSerie(VertexHelper vh, SimplifiedLine serie) maxCount, totalAverage, i, dataAddDuration, dataChangeDuration, ref dataChanging, relativedAxis, unscaledTime); serieData.context.stackHeight = GetDataPoint(isY, axis, relativedAxis, m_SerieGrid, xValue, relativedValue, - i, scaleWid, false, ref np); + i, scaleWid, scaleRelativedWid, false, ref np); serieData.context.position = np; @@ -235,14 +239,14 @@ private void DrawLineSerie(VertexHelper vh, SimplifiedLine serie) } 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; if (isY) { - var valueHig = AxisHelper.GetAxisValueDistance(grid, relativedAxis, scaleWid, yValue); + var valueHig = AxisHelper.GetAxisValueDistance(grid, relativedAxis, scaleRelativedWid, yValue); valueHig = AnimationStyleHelper.CheckDataAnimation(chart, serie, i, valueHig); xPos = gridXY + valueHig; @@ -251,7 +255,7 @@ private float GetDataPoint(bool isY, Axis axis, Axis relativedAxis, GridCoord gr else { - var valueHig = AxisHelper.GetAxisValueDistance(grid, relativedAxis, scaleWid, yValue); + var valueHig = AxisHelper.GetAxisValueDistance(grid, relativedAxis, scaleRelativedWid, yValue); valueHig = AnimationStyleHelper.CheckDataAnimation(chart, serie, i, valueHig); yPos = gridXY + valueHig;