diff --git a/Assets/XCharts/Examples/Runtime/Example12_CustomDrawing.cs b/Assets/XCharts/Examples/Runtime/Example12_CustomDrawing.cs index 3809973e..0f0aefad 100644 --- a/Assets/XCharts/Examples/Runtime/Example12_CustomDrawing.cs +++ b/Assets/XCharts/Examples/Runtime/Example12_CustomDrawing.cs @@ -33,7 +33,7 @@ namespace XCharts.Examples chart.onCustomDrawAfterSerie = delegate (VertexHelper vh, Serie serie) { if (serie.index != 0) return; - var dataPoints = serie.dataPoints; + var dataPoints = serie.context.dataPoints; if (dataPoints.Count > 0) { var pos = dataPoints[3]; diff --git a/Assets/XCharts/Examples/Runtime/Example41_RadarUpdate.cs b/Assets/XCharts/Examples/Runtime/Example41_RadarUpdate.cs index afd08c0b..c004dfc3 100644 --- a/Assets/XCharts/Examples/Runtime/Example41_RadarUpdate.cs +++ b/Assets/XCharts/Examples/Runtime/Example41_RadarUpdate.cs @@ -62,7 +62,7 @@ namespace XCharts.Examples chart.UpdateData(serieIndex, i, value); } } - chart.GetChartComponent().subText = "max:" + serie.runtimeDataMax; + chart.GetChartComponent<Title>().subText = "max:" + serie.context.dataMax; } void UpdateMax() @@ -70,10 +70,10 @@ namespace XCharts.Examples var serieIndex = 0; var serie = chart.GetSerie(serieIndex); if (serie == null) return; - if (serie.runtimeDataMax != max) + if (serie.context.dataMax != max) { - chart.GetChartComponent<Title>().subText = "max:" + serie.runtimeDataMax; - max = serie.runtimeDataMax; + chart.GetChartComponent<Title>().subText = "max:" + serie.context.dataMax; + max = serie.context.dataMax; } } } diff --git a/Assets/XCharts/Runtime/Helper/SerieHelper.cs b/Assets/XCharts/Runtime/Helper/SerieHelper.cs index 3f6bcd31..25838572 100644 --- a/Assets/XCharts/Runtime/Helper/SerieHelper.cs +++ b/Assets/XCharts/Runtime/Helper/SerieHelper.cs @@ -214,10 +214,10 @@ namespace XCharts if (serie.center.Length < 2) return; var centerX = serie.center[0] <= 1 ? chartWidth * serie.center[0] : serie.center[0]; var centerY = serie.center[1] <= 1 ? chartHeight * serie.center[1] : serie.center[1]; - serie.runtimeCenterPos = chartPosition + new Vector3(centerX, centerY); + serie.context.center = chartPosition + new Vector3(centerX, centerY); var minWidth = Mathf.Min(chartWidth, chartHeight); - serie.runtimeInsideRadius = serie.radius[0] <= 1 ? minWidth * serie.radius[0] : serie.radius[0]; - serie.runtimeOutsideRadius = serie.radius[1] <= 1 ? minWidth * serie.radius[1] : serie.radius[1]; + serie.context.insideRadius = serie.radius[0] <= 1 ? minWidth * serie.radius[0] : serie.radius[0]; + serie.context.outsideRadius = serie.radius[1] <= 1 ? minWidth * serie.radius[1] : serie.radius[1]; } public static void UpdateRect(Serie serie, Vector3 chartPosition, float chartWidth, float chartHeight) @@ -229,22 +229,22 @@ namespace XCharts var runtimeTop = serie.top <= 1 ? serie.top * chartHeight : serie.top; var runtimeRight = serie.right <= 1 ? serie.right * chartWidth : serie.right; - serie.runtimeX = chartPosition.x + runtimeLeft; - serie.runtimeY = chartPosition.y + runtimeBottom; - serie.runtimeWidth = chartWidth - runtimeLeft - runtimeRight; - serie.runtimeHeight = chartHeight - runtimeTop - runtimeBottom; - serie.runtimeCenterPos = new Vector3(serie.runtimeX + serie.runtimeWidth / 2, - serie.runtimeY + serie.runtimeHeight / 2); - serie.runtimeRect = new Rect(serie.runtimeX, serie.runtimeY, serie.runtimeWidth, serie.runtimeHeight); + serie.context.x = chartPosition.x + runtimeLeft; + serie.context.y = chartPosition.y + runtimeBottom; + serie.context.width = chartWidth - runtimeLeft - runtimeRight; + serie.context.height = chartHeight - runtimeTop - runtimeBottom; + serie.context.center = new Vector3(serie.context.x + serie.context.width / 2, + serie.context.y + serie.context.height / 2); + serie.context.rect = new Rect(serie.context.x, serie.context.y, serie.context.width, serie.context.height); } else { - serie.runtimeX = chartPosition.x; - serie.runtimeY = chartPosition.y; - serie.runtimeWidth = chartWidth; - serie.runtimeHeight = chartHeight; - serie.runtimeCenterPos = chartPosition + new Vector3(chartWidth / 2, chartHeight / 2); - serie.runtimeRect = new Rect(serie.runtimeX, serie.runtimeY, serie.runtimeWidth, serie.runtimeHeight); + serie.context.x = chartPosition.x; + serie.context.y = chartPosition.y; + serie.context.width = chartWidth; + serie.context.height = chartHeight; + serie.context.center = chartPosition + new Vector3(chartWidth / 2, chartHeight / 2); + serie.context.rect = new Rect(serie.context.x, serie.context.y, serie.context.width, serie.context.height); } } @@ -370,7 +370,7 @@ namespace XCharts public static bool IsDownPoint(Serie serie, int index) { - var dataPoints = serie.dataPoints; + var dataPoints = serie.context.dataPoints; if (dataPoints.Count < 2) return false; else if (index > 0 && index < dataPoints.Count - 1) { @@ -549,13 +549,13 @@ namespace XCharts GetMinMaxData(serie, dimension, out min, out max, dataZoom); if (ceilRate < 0) { - serie.runtimeDataMin = min; - serie.runtimeDataMax = max; + serie.context.dataMin = min; + serie.context.dataMax = max; } else { - serie.runtimeDataMin = ChartHelper.GetMinDivisibleValue(min, ceilRate); - serie.runtimeDataMax = ChartHelper.GetMaxDivisibleValue(max, ceilRate); + serie.context.dataMin = ChartHelper.GetMinDivisibleValue(min, ceilRate); + serie.context.dataMax = ChartHelper.GetMaxDivisibleValue(max, ceilRate); } } @@ -565,13 +565,13 @@ namespace XCharts GetMinMaxData(serie, out min, out max, dataZoom); if (ceilRate < 0) { - serie.runtimeDataMin = min; - serie.runtimeDataMax = max; + serie.context.dataMin = min; + serie.context.dataMax = max; } else { - serie.runtimeDataMin = ChartHelper.GetMinDivisibleValue(min, ceilRate); - serie.runtimeDataMax = ChartHelper.GetMaxDivisibleValue(max, ceilRate); + serie.context.dataMin = ChartHelper.GetMinDivisibleValue(min, ceilRate); + serie.context.dataMax = ChartHelper.GetMaxDivisibleValue(max, ceilRate); } } @@ -689,16 +689,16 @@ namespace XCharts public static void UpdateSerieRuntimeFilterData(Serie serie, bool filterInvisible = true) { - serie.runtimeSortedData.Clear(); + serie.context.sortedData.Clear(); foreach (var serieData in serie.data) { if (!filterInvisible || (filterInvisible && serieData.show)) - serie.runtimeSortedData.Add(serieData); + serie.context.sortedData.Add(serieData); } switch (serie.dataSortType) { case SerieDataSortType.Ascending: - serie.runtimeSortedData.Sort(delegate (SerieData data1, SerieData data2) + serie.context.sortedData.Sort(delegate (SerieData data1, SerieData data2) { var value1 = data1.GetData(1); var value2 = data2.GetData(1); @@ -708,7 +708,7 @@ namespace XCharts }); break; case SerieDataSortType.Descending: - serie.runtimeSortedData.Sort(delegate (SerieData data1, SerieData data2) + serie.context.sortedData.Sort(delegate (SerieData data1, SerieData data2) { var value1 = data1.GetData(1); var value2 = data2.GetData(1); diff --git a/Assets/XCharts/Runtime/Helper/SerieLabelHelper.cs b/Assets/XCharts/Runtime/Helper/SerieLabelHelper.cs index d8816562..22dbf419 100644 --- a/Assets/XCharts/Runtime/Helper/SerieLabelHelper.cs +++ b/Assets/XCharts/Runtime/Helper/SerieLabelHelper.cs @@ -113,7 +113,7 @@ namespace XCharts var total = serie.max; var content = SerieLabelHelper.GetFormatterContent(serie, serieData, value, total, null, Color.clear); serieData.labelObject.SetText(content); - serieData.labelObject.SetLabelPosition(serie.runtimeCenterPos + serie.label.offset); + serieData.labelObject.SetLabelPosition(serie.context.center + serie.label.offset); if (!ChartHelper.IsClearColor(serie.label.textStyle.color)) { serieData.labelObject.label.SetColor(serie.label.textStyle.color); @@ -191,22 +191,22 @@ namespace XCharts switch (serieLabel.position) { case LabelStyle.Position.Center: - serieData.labelPosition = serie.runtimeCenterPos; + serieData.labelPosition = serie.context.center; break; case LabelStyle.Position.Inside: var labelRadius = offsetRadius + insideRadius + (outsideRadius - insideRadius) / 2 + serieLabel.margin; - var labelCenter = new Vector2(serie.runtimeCenterPos.x + labelRadius * Mathf.Sin(currRad), - serie.runtimeCenterPos.y + labelRadius * Mathf.Cos(currRad)); + var labelCenter = new Vector2(serie.context.center.x + labelRadius * Mathf.Sin(currRad), + serie.context.center.y + labelRadius * Mathf.Cos(currRad)); serieData.labelPosition = labelCenter; break; case LabelStyle.Position.Outside: if (labelLine.lineType == LabelLine.LineType.HorizontalLine) { - var radius1 = serie.runtimeOutsideRadius; + var radius1 = serie.context.outsideRadius; var radius3 = insideRadius + (outsideRadius - insideRadius) / 2; var currSin = Mathf.Sin(currRad); var currCos = Mathf.Cos(currRad); - var pos0 = new Vector3(serie.runtimeCenterPos.x + radius3 * currSin, serie.runtimeCenterPos.y + radius3 * currCos); + var pos0 = new Vector3(serie.context.center.x + radius3 * currSin, serie.context.center.y + radius3 * currCos); if (currAngle > 180) { currSin = Mathf.Sin((360 - currAngle) * Mathf.Deg2Rad); @@ -219,9 +219,9 @@ namespace XCharts } else { - labelRadius = serie.runtimeOutsideRadius + labelLine.lineLength1; - labelCenter = new Vector2(serie.runtimeCenterPos.x + labelRadius * Mathf.Sin(currRad), - serie.runtimeCenterPos.y + labelRadius * Mathf.Cos(currRad)); + labelRadius = serie.context.outsideRadius + labelLine.lineLength1; + labelCenter = new Vector2(serie.context.center.x + labelRadius * Mathf.Sin(currRad), + serie.context.center.y + labelRadius * Mathf.Cos(currRad)); serieData.labelPosition = labelCenter; } break; @@ -237,7 +237,7 @@ namespace XCharts for (int n = 0; n < data.Count; n++) { var serieData = data[n]; - if (serieData.labelPosition.x != 0 && serieData.labelPosition.x < serie.runtimeCenterPos.x) + if (serieData.labelPosition.x != 0 && serieData.labelPosition.x < serie.context.center.x) { splitCount = n; break; @@ -276,13 +276,13 @@ namespace XCharts { if (lastCheckPos.y - serieData.labelPosition.y < fontSize) { - var labelRadius = serie.runtimeOutsideRadius + labelLine.lineLength1; + var labelRadius = serie.context.outsideRadius + labelLine.lineLength1; var y1 = lastCheckPos.y - fontSize; - var cy = serie.runtimeCenterPos.y; + var cy = serie.context.center.y; var diff = Mathf.Abs(y1 - cy); var diffX = labelRadius * labelRadius - diff * diff; diffX = diffX <= 0 ? 0 : diffX; - var x1 = serie.runtimeCenterPos.x + Mathf.Sqrt(diffX) * (isLeft ? -1 : 1); + var x1 = serie.context.center.x + Mathf.Sqrt(diffX) * (isLeft ? -1 : 1); serieData.labelPosition = new Vector3(x1, y1); } lastCheckPos = serieData.labelPosition; diff --git a/Assets/XCharts/Runtime/Internal/BaseChart.cs b/Assets/XCharts/Runtime/Internal/BaseChart.cs index 8ba7167a..2ba9b74c 100644 --- a/Assets/XCharts/Runtime/Internal/BaseChart.cs +++ b/Assets/XCharts/Runtime/Internal/BaseChart.cs @@ -577,7 +577,8 @@ namespace XCharts { m_OnCustomDrawSerieBeforeCallback.Invoke(vh, serie); } - serie.dataPoints.Clear(); + serie.context.dataPoints.Clear(); + serie.context.dataIgnore.Clear(); DrawPainterSerie(vh, serie); if (i >= 0 && i < m_SerieHandlers.Count) { diff --git a/Assets/XCharts/Runtime/Serie/Bar/BarHandler.cs b/Assets/XCharts/Runtime/Serie/Bar/BarHandler.cs index 89b41264..b3d1033f 100644 --- a/Assets/XCharts/Runtime/Serie/Bar/BarHandler.cs +++ b/Assets/XCharts/Runtime/Serie/Bar/BarHandler.cs @@ -69,7 +69,7 @@ namespace XCharts { var colorIndex = chart.GetLegendRealShowNameIndex(serie.legendName); var yCategory = ComponentHelper.IsAnyCategoryOfYAxis(chart.components); - serie.dataPoints.Clear(); + serie.context.dataPoints.Clear(); if (yCategory) DrawYBarSerie(vh, serie, colorIndex); else DrawXBarSerie(vh, serie, colorIndex); } @@ -134,7 +134,7 @@ namespace XCharts var serieData = showData[i]; if (!serieData.show || serie.IsIgnoreValue(serieData)) { - serie.dataPoints.Add(Vector3.zero); + serie.context.dataPoints.Add(Vector3.zero); continue; } var highlight = serie.data[i].highlighted @@ -211,7 +211,7 @@ namespace XCharts top = chart.ClampInGrid(grid, top); } serieData.runtimeRect = Rect.MinMaxRect(plb.x, plb.y, prb.x, prt.y); - serie.dataPoints.Add(top); + serie.context.dataPoints.Add(top); if (serie.show) { switch (serie.barType) @@ -278,7 +278,7 @@ namespace XCharts var serieData = showData[i]; if (!serieData.show || serie.IsIgnoreValue(serieData)) { - serie.dataPoints.Add(Vector3.zero); + serie.context.dataPoints.Add(Vector3.zero); continue; } var highlight = serie.data[i].highlighted @@ -364,7 +364,7 @@ namespace XCharts top = chart.ClampInGrid(grid, top); } serieData.runtimeRect = Rect.MinMaxRect(plb.x, plb.y, prb.x, prt.y); - serie.dataPoints.Add(top); + serie.context.dataPoints.Add(top); if (serie.show && currHig != 0) { switch (serie.barType) diff --git a/Assets/XCharts/Runtime/Serie/Candlestick/CandlestickHandler.cs b/Assets/XCharts/Runtime/Serie/Candlestick/CandlestickHandler.cs index 3a934393..50aed6bd 100644 --- a/Assets/XCharts/Runtime/Serie/Candlestick/CandlestickHandler.cs +++ b/Assets/XCharts/Runtime/Serie/Candlestick/CandlestickHandler.cs @@ -53,7 +53,7 @@ namespace XCharts var serieData = showData[i]; if (serie.IsIgnoreValue(serieData)) { - serie.dataPoints.Add(Vector3.zero); + serie.context.dataPoints.Add(Vector3.zero); continue; } var highlight = serie.data[i].highlighted || serie.highlighted; @@ -98,7 +98,7 @@ namespace XCharts prb = chart.ClampInGrid(grid, prb); top = chart.ClampInGrid(grid, top); } - serie.dataPoints.Add(top); + serie.context.dataPoints.Add(top); var areaColor = isRise ? itemStyle.GetColor(theme.serie.candlestickColor) : itemStyle.GetColor0(theme.serie.candlestickColor0); diff --git a/Assets/XCharts/Runtime/Serie/Gauge/GaugeHandler.cs b/Assets/XCharts/Runtime/Serie/Gauge/GaugeHandler.cs index 55146b76..70a39a60 100644 --- a/Assets/XCharts/Runtime/Serie/Gauge/GaugeHandler.cs +++ b/Assets/XCharts/Runtime/Serie/Gauge/GaugeHandler.cs @@ -138,14 +138,14 @@ namespace XCharts var totalValue = serie.max - serie.min; var diffAngle = totalAngle / count; var diffValue = totalValue / count; - var radius = serie.runtimeInsideRadius - serie.gaugeAxis.axisLabel.margin; + var radius = serie.context.insideRadius - serie.gaugeAxis.axisLabel.margin; var serieData = serie.GetSerieData(0); var customLabelText = serie.gaugeAxis.axisLabelText; for (int j = 0; j <= count; j++) { var angle = serie.startAngle + j * diffAngle; var value = serie.min + j * diffValue; - var pos = ChartHelper.GetPosition(serie.runtimeCenterPos, angle, radius); + var pos = ChartHelper.GetPosition(serie.context.center, angle, radius); var text = customLabelText != null && j < customLabelText.Count ? customLabelText[j] : SerieLabelHelper.GetFormatterContent(serie, serieData, value, totalValue, serie.gaugeAxis.axisLabel, Color.clear); @@ -186,13 +186,13 @@ namespace XCharts var color = serie.gaugeAxis.GetAxisLineColor(chart.theme, serie.index); var backgroundColor = serie.gaugeAxis.GetAxisLineBackgroundColor(chart.theme, serie.index); var lineWidth = serie.gaugeAxis.axisLine.GetWidth(chart.theme.gauge.lineWidth); - var outsideRadius = serie.runtimeInsideRadius + lineWidth; + var outsideRadius = serie.context.insideRadius + lineWidth; var borderWidth = serie.itemStyle.borderWidth; var borderColor = serie.itemStyle.borderColor; - UGL.DrawDoughnut(vh, serie.runtimeCenterPos, serie.runtimeInsideRadius, outsideRadius, + UGL.DrawDoughnut(vh, serie.context.center, serie.context.insideRadius, outsideRadius, backgroundColor, backgroundColor, Color.clear, serie.startAngle, serie.endAngle, 0, Color.clear, 0, chart.settings.cicleSmoothness, serie.roundCap); - UGL.DrawDoughnut(vh, serie.runtimeCenterPos, serie.runtimeInsideRadius, outsideRadius, + UGL.DrawDoughnut(vh, serie.context.center, serie.context.insideRadius, outsideRadius, color, color, Color.clear, serie.startAngle, currAngle, 0, Color.clear, 0, chart.settings.cicleSmoothness, serie.roundCap); } @@ -205,14 +205,14 @@ namespace XCharts var tempStartAngle = serie.startAngle; var tempEndAngle = serie.startAngle; var lineWidth = serie.gaugeAxis.axisLine.GetWidth(chart.theme.gauge.lineWidth); - var outsideRadius = serie.runtimeInsideRadius + lineWidth; + var outsideRadius = serie.context.insideRadius + lineWidth; serie.gaugeAxis.runtimeStageAngle.Clear(); for (int i = 0; i < serie.gaugeAxis.axisLine.stageColor.Count; i++) { var stageColor = serie.gaugeAxis.axisLine.stageColor[i]; tempEndAngle = serie.startAngle + totalAngle * stageColor.percent; serie.gaugeAxis.runtimeStageAngle.Add(tempEndAngle); - UGL.DrawDoughnut(vh, serie.runtimeCenterPos, serie.runtimeInsideRadius, outsideRadius, + UGL.DrawDoughnut(vh, serie.context.center, serie.context.insideRadius, outsideRadius, stageColor.color, stageColor.color, Color.clear, tempStartAngle, tempEndAngle, 0, Color.clear, 0, chart.settings.cicleSmoothness); tempStartAngle = tempEndAngle; @@ -225,12 +225,12 @@ namespace XCharts var pointerColor = serie.gaugeAxis.GetPointerColor(chart.theme, serie.index, currAngle, serie.itemStyle); var pointerToColor = !ChartHelper.IsClearColor(serie.itemStyle.toColor) ? serie.itemStyle.toColor : pointerColor; var len = serie.gaugePointer.length < 1 && serie.gaugePointer.length > -1 ? - serie.runtimeInsideRadius * serie.gaugePointer.length : + serie.context.insideRadius * serie.gaugePointer.length : serie.gaugePointer.length; - var p1 = ChartHelper.GetPosition(serie.runtimeCenterPos, currAngle, len); - var p2 = ChartHelper.GetPosition(serie.runtimeCenterPos, currAngle + 180, serie.gaugePointer.width); - var p3 = ChartHelper.GetPosition(serie.runtimeCenterPos, currAngle - 90, serie.gaugePointer.width / 2); - var p4 = ChartHelper.GetPosition(serie.runtimeCenterPos, currAngle + 90, serie.gaugePointer.width / 2); + var p1 = ChartHelper.GetPosition(serie.context.center, currAngle, len); + var p2 = ChartHelper.GetPosition(serie.context.center, currAngle + 180, serie.gaugePointer.width); + var p3 = ChartHelper.GetPosition(serie.context.center, currAngle - 90, serie.gaugePointer.width / 2); + var p4 = ChartHelper.GetPosition(serie.context.center, currAngle + 90, serie.gaugePointer.width / 2); UGL.DrawTriangle(vh, p2, p3, p1, pointerColor, pointerColor, pointerToColor); UGL.DrawTriangle(vh, p4, p2, p1, pointerColor, pointerColor, pointerToColor); } @@ -246,14 +246,14 @@ namespace XCharts var lineWidth = serie.gaugeAxis.axisLine.GetWidth(chart.theme.gauge.lineWidth); var splitLineWidth = splitLine.GetWidth(chart.theme.gauge.splitLineWidth); var splitLineLength = splitLine.GetLength(chart.theme.gauge.splitLineLength); - var outsideRadius = serie.runtimeInsideRadius + lineWidth; + var outsideRadius = serie.context.insideRadius + lineWidth; var insideRadius = outsideRadius - splitLineLength; for (int i = 0; i < serie.splitNumber + 1; i++) { var angle = serie.startAngle + i * diffAngle; var lineColor = serie.gaugeAxis.GetSplitLineColor(chart.theme.gauge.splitLineColor, serie.index, angle); - var p1 = ChartHelper.GetPosition(serie.runtimeCenterPos, angle, insideRadius); - var p2 = ChartHelper.GetPosition(serie.runtimeCenterPos, angle, outsideRadius); + var p1 = ChartHelper.GetPosition(serie.context.center, angle, insideRadius); + var p2 = ChartHelper.GetPosition(serie.context.center, angle, outsideRadius); UGL.DrawLine(vh, p1, p2, splitLineWidth, lineColor); } } @@ -269,7 +269,7 @@ namespace XCharts var lineWidth = serie.gaugeAxis.axisLine.GetWidth(chart.theme.gauge.lineWidth); var tickWidth = axisTick.GetWidth(chart.theme.gauge.tickWidth); var tickLength = axisTick.GetLength(chart.theme.gauge.tickLength); - var outsideRadius = serie.runtimeInsideRadius + lineWidth; + var outsideRadius = serie.context.insideRadius + lineWidth; var insideRadius = outsideRadius - (tickLength < 1 ? lineWidth * tickLength : tickLength); for (int i = 0; i < serie.splitNumber; i++) @@ -278,8 +278,8 @@ namespace XCharts { var angle = serie.startAngle + i * diffAngle + j * (diffAngle / axisTick.splitNumber); var lineColor = serie.gaugeAxis.GetSplitLineColor(chart.theme.gauge.tickColor, serie.index, angle); - var p1 = ChartHelper.GetPosition(serie.runtimeCenterPos, angle, insideRadius); - var p2 = ChartHelper.GetPosition(serie.runtimeCenterPos, angle, outsideRadius); + var p1 = ChartHelper.GetPosition(serie.context.center, angle, insideRadius); + var p2 = ChartHelper.GetPosition(serie.context.center, angle, outsideRadius); UGL.DrawLine(vh, p1, p2, tickWidth, lineColor); } } @@ -298,7 +298,7 @@ namespace XCharts if (serie.dataCount > 0) { var serieData = serie.data[0]; - serieData.labelPosition = serie.runtimeCenterPos + serie.label.offset; + serieData.labelPosition = serie.context.center + serie.label.offset; value = dest ? serieData.GetData(1) : serieData.GetCurrData(1, serie.animation.GetUpdateAnimationDuration()); value = MathUtil.Clamp(value, serie.min, serie.max); @@ -348,14 +348,14 @@ namespace XCharts continue; var len = serie.gaugePointer.length < 1 && serie.gaugePointer.length > -1 - ? serie.runtimeInsideRadius * serie.gaugePointer.length + ? serie.context.insideRadius * serie.gaugePointer.length : serie.gaugePointer.length; - if (Vector3.Distance(local, serie.runtimeCenterPos) > len) continue; + if (Vector3.Distance(local, serie.context.center) > len) continue; var currAngle = (float)(serie.animation.IsFinish() ? GetCurrAngle(serie, false) : serie.animation.GetCurrDetail()); - var p1 = ChartHelper.GetPosition(serie.runtimeCenterPos, currAngle, len); - var p2 = ChartHelper.GetPosition(serie.runtimeCenterPos, currAngle + 180, serie.gaugePointer.width); - var p3 = ChartHelper.GetPosition(serie.runtimeCenterPos, currAngle - 90, serie.gaugePointer.width / 2); - var p4 = ChartHelper.GetPosition(serie.runtimeCenterPos, currAngle + 90, serie.gaugePointer.width / 2); + var p1 = ChartHelper.GetPosition(serie.context.center, currAngle, len); + var p2 = ChartHelper.GetPosition(serie.context.center, currAngle + 180, serie.gaugePointer.width); + var p3 = ChartHelper.GetPosition(serie.context.center, currAngle - 90, serie.gaugePointer.width / 2); + var p4 = ChartHelper.GetPosition(serie.context.center, currAngle + 90, serie.gaugePointer.width / 2); if (ChartHelper.IsPointInQuadrilateral(local, p1, p3, p2, p4)) { return serie; diff --git a/Assets/XCharts/Runtime/Serie/Heatmap/HeatmapHandler.cs b/Assets/XCharts/Runtime/Serie/Heatmap/HeatmapHandler.cs index 06fa85fb..41c3464f 100644 --- a/Assets/XCharts/Runtime/Serie/Heatmap/HeatmapHandler.cs +++ b/Assets/XCharts/Runtime/Serie/Heatmap/HeatmapHandler.cs @@ -84,7 +84,7 @@ namespace XCharts borderColor.a = (byte)(borderColor.a * serie.itemStyle.opacity); var borderToColor = serie.itemStyle.opacity > 0 ? serie.itemStyle.borderToColor : ChartConst.clearColor32; borderToColor.a = (byte)(borderToColor.a * serie.itemStyle.opacity); - serie.dataPoints.Clear(); + serie.context.dataPoints.Clear(); serie.animation.InitProgress(1, 0, xCount); var animationIndex = serie.animation.GetCurrIndex(); var dataChangeDuration = serie.animation.GetUpdateAnimationDuration(); @@ -101,7 +101,7 @@ namespace XCharts var dimension = VisualMapHelper.GetDimension(visualMap, serieData.data.Count); if (serie.IsIgnoreIndex(dataIndex, dimension)) { - serie.dataPoints.Add(Vector3.zero); + serie.context.dataPoints.Add(Vector3.zero); continue; } var value = serieData.GetCurrData(dimension, dataChangeDuration, yAxis.inverse, @@ -109,7 +109,7 @@ namespace XCharts if (serieData.IsDataChanged()) dataChanging = true; var pos = new Vector3(zeroX + (i + (xAxis.boundaryGap ? 0.5f : 0)) * xWidth, zeroY + (j + (yAxis.boundaryGap ? 0.5f : 0)) * yWidth); - serie.dataPoints.Add(pos); + serie.context.dataPoints.Add(pos); serieData.canShowLabel = false; serieData.runtimeRect = new Rect(pos.x - rectWid / 2, pos.y - rectHig / 2, rectWid, rectHig); if (value == 0) continue; diff --git a/Assets/XCharts/Runtime/Serie/Line/LineHandler.GridCoord.cs b/Assets/XCharts/Runtime/Serie/Line/LineHandler.GridCoord.cs index f76ddefe..acd5e15a 100644 --- a/Assets/XCharts/Runtime/Serie/Line/LineHandler.GridCoord.cs +++ b/Assets/XCharts/Runtime/Serie/Line/LineHandler.GridCoord.cs @@ -94,9 +94,6 @@ namespace XCharts public override void DrawSerie(VertexHelper vh) { var colorIndex = chart.GetLegendRealShowNameIndex(serie.legendName); - - serie.dataPoints.Clear(); - serie.dataIgnore.Clear(); serie.context.colorIndex = colorIndex; if (serie.IsUseCoord<PolarCoord>()) @@ -163,7 +160,7 @@ namespace XCharts if (!serie.show || serie.IsPerformanceMode()) return; - var count = serie.dataPoints.Count; + var count = serie.context.dataPoints.Count; var clip = SeriesHelper.IsAnyClipSerie(chart.series); XAxis xAxis; YAxis yAxis; @@ -193,7 +190,7 @@ namespace XCharts continue; } - if (ChartHelper.IsIngore(serie.dataPoints[i])) + if (ChartHelper.IsIngore(serie.context.dataPoints[i])) continue; var highlight = serie.data[i].highlighted || serie.highlighted; @@ -207,9 +204,9 @@ namespace XCharts var cornerRadius = SerieHelper.GetSymbolCornerRadius(serie, serieData, highlight); symbolSize = serie.animation.GetSysmbolSize(symbolSize); - chart.DrawClipSymbol(vh, symbol.type, symbolSize, symbolBorder, serie.dataPoints[i], + chart.DrawClipSymbol(vh, symbol.type, symbolSize, symbolBorder, serie.context.dataPoints[i], symbolColor, symbolToColor, symbolEmptyColor, symbol.gap, clip, cornerRadius, grid, - i > 0 ? serie.dataPoints[i - 1] : grid.context.position); + i > 0 ? serie.context.dataPoints[i - 1] : grid.context.position); } } @@ -218,29 +215,26 @@ namespace XCharts if (!serie.show || !serie.lineArrow.show) return; - if (serie.dataPoints.Count < 2) + if (serie.context.dataPoints.Count < 2) return; var lineColor = SerieHelper.GetLineColor(serie, chart.theme, serie.index, false); var startPos = Vector3.zero; var arrowPos = Vector3.zero; var lineArrow = serie.lineArrow.arrow; - + var dataPoints = serie.context.drawPoints; switch (serie.lineArrow.position) { case LineArrow.Position.End: - - var dataPoints = serie.GetUpSmoothList(serie.dataCount - 1); if (dataPoints.Count < 3) { - dataPoints = serie.dataPoints; - startPos = dataPoints[dataPoints.Count - 2]; - arrowPos = dataPoints[dataPoints.Count - 1]; + startPos = dataPoints[dataPoints.Count - 2].position; + arrowPos = dataPoints[dataPoints.Count - 1].position; } else { - startPos = dataPoints[dataPoints.Count - 3]; - arrowPos = dataPoints[dataPoints.Count - 2]; + startPos = dataPoints[dataPoints.Count - 3].position; + arrowPos = dataPoints[dataPoints.Count - 2].position; } UGL.DrawArrow(vh, startPos, arrowPos, lineArrow.width, lineArrow.height, lineArrow.offset, lineArrow.dent, lineArrow.GetColor(lineColor)); @@ -248,11 +242,8 @@ namespace XCharts break; case LineArrow.Position.Start: - - dataPoints = serie.GetUpSmoothList(1); - if (dataPoints.Count < 2) dataPoints = serie.dataPoints; - startPos = dataPoints[1]; - arrowPos = dataPoints[0]; + startPos = dataPoints[1].position; + arrowPos = dataPoints[0].position; UGL.DrawArrow(vh, startPos, arrowPos, lineArrow.width, lineArrow.height, lineArrow.offset, lineArrow.dent, lineArrow.GetColor(lineColor)); @@ -332,15 +323,15 @@ namespace XCharts { serieData.runtimeStackHig = 0; serieData.runtimePosition = Vector3.zero; - if (serie.ignoreLineBreak && serie.dataIgnore.Count > 0) + if (serie.ignoreLineBreak && serie.context.dataIgnore.Count > 0) { - serie.dataIgnore[serie.dataIgnore.Count - 1] = true; + serie.context.dataIgnore[serie.context.dataIgnore.Count - 1] = true; } } else { var np = Vector3.zero; - var xValue = serieData.GetData(0, axis.inverse); + var xValue = axis.IsCategory() ? i : serieData.GetData(0, axis.inverse); var relativedValue = DataHelper.SampleValue(ref showData, serie.sampleType, rate, serie.minShow, maxCount, totalAverage, i, dataChangeDuration, ref dataChanging, relativedAxis); @@ -349,18 +340,18 @@ namespace XCharts serieData.runtimePosition = np; - serie.dataPoints.Add(np); - serie.dataIgnore.Add(false); + serie.context.dataPoints.Add(np); + serie.context.dataIgnore.Add(false); } } if (dataChanging) chart.RefreshPainter(serie); - if (serie.dataPoints.Count <= 0) + if (serie.context.dataPoints.Count <= 0) return; - serie.animation.InitProgress(serie.dataPoints, isY); + serie.animation.InitProgress(serie.context.dataPoints, isY); serie.animation.SetDataFinish(0); VisualMapHelper.AutoSetLineMinMax(visualMap, serie, isY, axis, relativedAxis); diff --git a/Assets/XCharts/Runtime/Serie/Line/LineHandler.PolarCoord.cs b/Assets/XCharts/Runtime/Serie/Line/LineHandler.PolarCoord.cs index 148c4457..754acf52 100644 --- a/Assets/XCharts/Runtime/Serie/Line/LineHandler.PolarCoord.cs +++ b/Assets/XCharts/Runtime/Serie/Line/LineHandler.PolarCoord.cs @@ -44,7 +44,7 @@ namespace XCharts var currDetailProgress = 0f; var totalDetailProgress = datas.Count; - serie.animation.InitProgress(serie.dataPoints.Count, currDetailProgress, totalDetailProgress); + serie.animation.InitProgress(serie.context.dataPoints.Count, currDetailProgress, totalDetailProgress); serie.animation.SetDataFinish(0); for (int i = 1; i < datas.Count; i++) diff --git a/Assets/XCharts/Runtime/Serie/Line/LineHelper.cs b/Assets/XCharts/Runtime/Serie/Line/LineHelper.cs index 491eabd7..8fe34d76 100644 --- a/Assets/XCharts/Runtime/Serie/Line/LineHelper.cs +++ b/Assets/XCharts/Runtime/Serie/Line/LineHelper.cs @@ -373,9 +373,9 @@ namespace XCharts UpdateStepLineDrawPoints(serie, setting, theme, isY); break; default: - for (int i = 0; i < serie.dataPoints.Count; i++) + for (int i = 0; i < serie.context.dataPoints.Count; i++) { - serie.context.drawPoints.Add(new PointInfo(serie.dataPoints[i], serie.dataIgnore[i])); + serie.context.drawPoints.Add(new PointInfo(serie.context.dataPoints[i], serie.context.dataIgnore[i])); } break; } @@ -383,7 +383,7 @@ namespace XCharts private static void UpdateSmoothLineDrawPoints(Serie serie, Settings setting, bool isY) { - var points = serie.dataPoints; + var points = serie.context.dataPoints; float smoothness = setting.lineSmoothness; for (int i = 0; i < points.Count - 1; i++) { @@ -391,7 +391,7 @@ namespace XCharts var ep = points[i + 1]; var lsp = i > 0 ? points[i - 1] : sp; var nep = i < points.Count - 2 ? points[i + 2] : ep; - var ignore = serie.dataIgnore[i]; + var ignore = serie.context.dataIgnore[i]; if (isY) UGLHelper.GetBezierListVertical(ref s_CurvesPosList, sp, ep, smoothness); else @@ -406,15 +406,15 @@ namespace XCharts private static void UpdateStepLineDrawPoints(Serie serie, Settings setting, ThemeStyle theme, bool isY) { - var points = serie.dataPoints; + var points = serie.context.dataPoints; var lp = points[0]; var lineWidth = serie.lineStyle.GetWidth(theme.serie.lineWidth); serie.context.drawPoints.Clear(); - serie.context.drawPoints.Add(new PointInfo(lp, serie.dataIgnore[0])); + serie.context.drawPoints.Add(new PointInfo(lp, serie.context.dataIgnore[0])); for (int i = 1; i < points.Count; i++) { var cp = points[i]; - var ignore = serie.dataIgnore[i]; + var ignore = serie.context.dataIgnore[i]; if ((isY && Mathf.Abs(lp.x - cp.x) <= lineWidth) || (!isY && Mathf.Abs(lp.y - cp.y) <= lineWidth)) { diff --git a/Assets/XCharts/Runtime/Serie/Liquid/LiquidHandler.cs b/Assets/XCharts/Runtime/Serie/Liquid/LiquidHandler.cs index 7f389ae6..d09b71d1 100644 --- a/Assets/XCharts/Runtime/Serie/Liquid/LiquidHandler.cs +++ b/Assets/XCharts/Runtime/Serie/Liquid/LiquidHandler.cs @@ -155,9 +155,9 @@ namespace XCharts if (serieData == null) return; var dataChangeDuration = serie.animation.GetUpdateAnimationDuration(); var value = serieData.GetCurrData(1, dataChangeDuration); - if (serie.runtimeCheckValue != value) + if (serie.context.checkValue != value) { - serie.runtimeCheckValue = value; + serie.context.checkValue = value; m_UpdateLabelText = true; } if (serieData.labelPosition != cenPos) @@ -268,9 +268,9 @@ namespace XCharts if (serieData == null) return; var dataChangeDuration = serie.animation.GetUpdateAnimationDuration(); var value = serieData.GetCurrData(1, dataChangeDuration); - if (serie.runtimeCheckValue != value) + if (serie.context.checkValue != value) { - serie.runtimeCheckValue = value; + serie.context.checkValue = value; m_UpdateLabelText = true; } if (serieData.labelPosition != cenPos) diff --git a/Assets/XCharts/Runtime/Serie/Parallel/ParallelHandler.cs b/Assets/XCharts/Runtime/Serie/Parallel/ParallelHandler.cs index 793bc192..50a9d33e 100644 --- a/Assets/XCharts/Runtime/Serie/Parallel/ParallelHandler.cs +++ b/Assets/XCharts/Runtime/Serie/Parallel/ParallelHandler.cs @@ -62,7 +62,7 @@ namespace XCharts serie.animation.InitProgress(serie.showDataDimension, currDetailProgress, totalDetailProgress); serie.animation.SetDataFinish(0); - serie.dataPoints.Clear(); + serie.context.dataPoints.Clear(); serie.containerIndex = parallel.index; serie.containterInstanceId = parallel.instanceId; diff --git a/Assets/XCharts/Runtime/Serie/Pie/PieHandler.cs b/Assets/XCharts/Runtime/Serie/Pie/PieHandler.cs index 641ee576..da61db88 100644 --- a/Assets/XCharts/Runtime/Serie/Pie/PieHandler.cs +++ b/Assets/XCharts/Runtime/Serie/Pie/PieHandler.cs @@ -160,7 +160,7 @@ namespace XCharts private void UpdateRuntimeData(Serie serie) { var data = serie.data; - serie.runtimeDataMax = serie.yMax; + serie.context.dataMax = serie.yMax; var runtimePieDataTotal = serie.yTotal; SerieHelper.UpdateCenter(serie, chart.chartPosition, chart.chartWidth, chart.chartHeight); @@ -180,7 +180,7 @@ namespace XCharts { totalDegree = 360; zeroReplaceValue = totalDegree / data.Count; - serie.runtimeDataMax = zeroReplaceValue; + serie.context.dataMax = zeroReplaceValue; runtimePieDataTotal = 360; dataTotalFilterMinAngle = 360; } @@ -208,8 +208,8 @@ namespace XCharts if (serie.minAngle > 0 && degree < serie.minAngle) degree = serie.minAngle; serieData.runtimePieToAngle = startDegree + degree; serieData.runtimePieOutsideRadius = serie.pieRoseType > 0 ? - serie.runtimeInsideRadius + (float)((serie.runtimeOutsideRadius - serie.runtimeInsideRadius) * value / serie.runtimeDataMax) : - serie.runtimeOutsideRadius; + serie.context.insideRadius + (float)((serie.context.outsideRadius - serie.context.insideRadius) * value / serie.context.dataMax) : + serie.context.outsideRadius; if (serieData.highlighted) { serieData.runtimePieOutsideRadius += chart.theme.serie.pieTooltipExtraRadius; @@ -229,8 +229,8 @@ namespace XCharts } var halfDegree = (serieData.runtimePieToAngle - startDegree) / 2; serieData.runtimePieHalfAngle = startDegree + halfDegree; - serieData.runtiemPieOffsetCenter = serie.runtimeCenterPos; - serieData.runtimePieInsideRadius = serie.runtimeInsideRadius; + serieData.runtiemPieOffsetCenter = serie.context.center; + serieData.runtimePieInsideRadius = serie.context.insideRadius; if (offset > 0) { var currRad = serieData.runtimePieHalfAngle * Mathf.Deg2Rad; @@ -249,8 +249,8 @@ namespace XCharts serieData.runtimePieOutsideRadius += chart.theme.serie.pieSelectedOffset; } serieData.runtiemPieOffsetCenter = new Vector3( - serie.runtimeCenterPos.x + serieData.runtimePieOffsetRadius * currSin, - serie.runtimeCenterPos.y + serieData.runtimePieOffsetRadius * currCos); + serie.context.center.x + serieData.runtimePieOffsetRadius * currSin, + serie.context.center.y + serieData.runtimePieOffsetRadius * currCos); } serieData.canShowLabel = serieData.runtimePieCurrAngle >= serieData.runtimePieHalfAngle; startDegree = serieData.runtimePieToAngle; @@ -288,7 +288,7 @@ namespace XCharts if (!ChartHelper.IsClearColor(itemStyle.centerColor)) { var radius = insideRadius - itemStyle.centerGap; - UGL.DrawCricle(vh, serie.runtimeCenterPos, radius, itemStyle.centerColor, chart.settings.cicleSmoothness); + UGL.DrawCricle(vh, serie.context.center, radius, itemStyle.centerColor, chart.settings.cicleSmoothness); } } @@ -331,7 +331,7 @@ namespace XCharts { var drawEndDegree = serieData.runtimePieCurrAngle; var needRoundCap = serie.roundCap && serieData.runtimePieInsideRadius > 0; - UGL.DrawDoughnut(vh, serie.runtimeCenterPos, serieData.runtimePieInsideRadius, + UGL.DrawDoughnut(vh, serie.context.center, serieData.runtimePieInsideRadius, serieData.runtimePieOutsideRadius, color, toColor, Color.clear, serieData.runtimePieStartAngle, drawEndDegree, borderWidth, borderColor, serie.pieSpace / 2, chart.settings.cicleSmoothness, needRoundCap, true); @@ -400,17 +400,17 @@ namespace XCharts { var insideRadius = serieData.runtimePieInsideRadius; var outSideRadius = serieData.runtimePieOutsideRadius; - var center = serie.runtimeCenterPos; + var center = serie.context.center; var currAngle = serieData.runtimePieHalfAngle; if (!ChartHelper.IsClearColor(labelLine.lineColor)) color = labelLine.lineColor; else if (labelLine.lineType == LabelLine.LineType.HorizontalLine) color *= color; float currSin = Mathf.Sin(currAngle * Mathf.Deg2Rad); float currCos = Mathf.Cos(currAngle * Mathf.Deg2Rad); var radius1 = labelLine.lineType == LabelLine.LineType.HorizontalLine ? - serie.runtimeOutsideRadius : outSideRadius; - var radius2 = serie.runtimeOutsideRadius + labelLine.lineLength1; + serie.context.outsideRadius : outSideRadius; + var radius2 = serie.context.outsideRadius + labelLine.lineLength1; var radius3 = insideRadius + (outSideRadius - insideRadius) / 2; - if (radius1 < serie.runtimeInsideRadius) radius1 = serie.runtimeInsideRadius; + if (radius1 < serie.context.insideRadius) radius1 = serie.context.insideRadius; radius1 -= 0.1f; var pos0 = new Vector3(center.x + radius3 * currSin, center.y + radius3 * currCos); var pos1 = new Vector3(center.x + radius1 * currSin, center.y + radius1 * currCos); @@ -545,10 +545,10 @@ namespace XCharts private int GetPiePosIndex(Serie serie, Vector2 local) { if (!(serie is Pie)) return -1; - var dist = Vector2.Distance(local, serie.runtimeCenterPos); - var maxRadius = serie.runtimeOutsideRadius + 3 * chart.theme.serie.pieSelectedOffset; - if (dist < serie.runtimeInsideRadius || dist > maxRadius) return -1; - Vector2 dir = local - new Vector2(serie.runtimeCenterPos.x, serie.runtimeCenterPos.y); + var dist = Vector2.Distance(local, serie.context.center); + var maxRadius = serie.context.outsideRadius + 3 * chart.theme.serie.pieSelectedOffset; + if (dist < serie.context.insideRadius || dist > maxRadius) return -1; + Vector2 dir = local - new Vector2(serie.context.center.x, serie.context.center.y); float angle = ChartHelper.GetAngle360(Vector2.up, dir); for (int i = 0; i < serie.data.Count; i++) { @@ -569,8 +569,8 @@ namespace XCharts private bool PointerIsInPieSerie(Serie serie, Vector2 local) { if (!(serie is Pie)) return false; - var dist = Vector2.Distance(local, serie.runtimeCenterPos); - if (dist >= serie.runtimeInsideRadius && dist <= serie.runtimeOutsideRadius) return true; + var dist = Vector2.Distance(local, serie.context.center); + if (dist >= serie.context.insideRadius && dist <= serie.context.outsideRadius) return true; return false; } } diff --git a/Assets/XCharts/Runtime/Serie/Radar/RadarHandler.cs b/Assets/XCharts/Runtime/Serie/Radar/RadarHandler.cs index 6b4c69eb..fc007914 100644 --- a/Assets/XCharts/Runtime/Serie/Radar/RadarHandler.cs +++ b/Assets/XCharts/Runtime/Serie/Radar/RadarHandler.cs @@ -179,7 +179,7 @@ namespace XCharts if (serieData.IsDataChanged()) dataChanging = true; if (max == 0) { - max = serie.runtimeDataMax; + max = serie.context.dataMax; } var radius = (float)(max < 0 ? radar.context.dataRadius - radar.context.dataRadius * value / max : radar.context.dataRadius * value / max); @@ -347,7 +347,7 @@ namespace XCharts if (serieData.IsDataChanged()) dataChanging = true; if (max == 0) { - max = serie.runtimeDataMax; + max = serie.context.dataMax; } if (!radar.IsInIndicatorRange(j, serieData.GetData(1))) { diff --git a/Assets/XCharts/Runtime/Serie/Ring/RingHandler.cs b/Assets/XCharts/Runtime/Serie/Ring/RingHandler.cs index 009131ac..14747d7a 100644 --- a/Assets/XCharts/Runtime/Serie/Ring/RingHandler.cs +++ b/Assets/XCharts/Runtime/Serie/Ring/RingHandler.cs @@ -74,7 +74,7 @@ namespace XCharts //TitleStyleHelper.CheckTitle(serie, ref chart.m_ReinitTitle, ref m_UpdateTitleText); //SerieLabelHelper.CheckLabel(serie, ref chart.m_ReinitLabel, ref m_UpdateLabelText); var dataChangeDuration = serie.animation.GetUpdateAnimationDuration(); - var ringWidth = serie.runtimeOutsideRadius - serie.runtimeInsideRadius; + var ringWidth = serie.context.outsideRadius - serie.context.insideRadius; var dataChanging = false; for (int j = 0; j < data.Count; j++) { @@ -89,7 +89,7 @@ namespace XCharts var itemStyle = SerieHelper.GetItemStyle(serie, serieData, serieData.highlighted); var itemColor = SerieHelper.GetItemColor(serie, serieData, chart.theme, j, serieData.highlighted); var itemToColor = SerieHelper.GetItemToColor(serie, serieData, chart.theme, j, serieData.highlighted); - var outsideRadius = serie.runtimeOutsideRadius - j * (ringWidth + serie.ringGap); + var outsideRadius = serie.context.outsideRadius - j * (ringWidth + serie.ringGap); var insideRadius = outsideRadius - ringWidth; var centerRadius = (outsideRadius + insideRadius) / 2; var borderWidth = itemStyle.borderWidth; @@ -102,11 +102,11 @@ namespace XCharts serieData.runtimePieOutsideRadius = outsideRadius; if (itemStyle.backgroundColor.a != 0) { - UGL.DrawDoughnut(vh, serie.runtimeCenterPos, insideRadius, outsideRadius, itemStyle.backgroundColor, + UGL.DrawDoughnut(vh, serie.context.center, insideRadius, outsideRadius, itemStyle.backgroundColor, itemStyle.backgroundColor, Color.clear, 0, 360, borderWidth, borderColor, 0, chart.settings.cicleSmoothness, false, serie.clockwise); } - UGL.DrawDoughnut(vh, serie.runtimeCenterPos, insideRadius, outsideRadius, itemColor, itemToColor, + UGL.DrawDoughnut(vh, serie.context.center, insideRadius, outsideRadius, itemColor, itemToColor, Color.clear, startDegree, toDegree, borderWidth, borderColor, 0, chart.settings.cicleSmoothness, roundCap, serie.clockwise); DrawCenter(vh, serie, serieData, insideRadius, j == data.Count - 1); @@ -189,7 +189,7 @@ namespace XCharts { var radius = insideRadius - itemStyle.centerGap; var smoothness = chart.settings.cicleSmoothness; - UGL.DrawCricle(vh, serie.runtimeCenterPos, radius, itemStyle.centerColor, smoothness); + UGL.DrawCricle(vh, serie.context.center, radius, itemStyle.centerColor, smoothness); } } @@ -201,20 +201,20 @@ namespace XCharts switch (serie.label.position) { case LabelStyle.Position.Center: - serieData.labelPosition = serie.runtimeCenterPos + serie.label.offset; + serieData.labelPosition = serie.context.center + serie.label.offset; break; case LabelStyle.Position.Bottom: var px1 = Mathf.Sin(startAngle * Mathf.Deg2Rad) * centerRadius; var py1 = Mathf.Cos(startAngle * Mathf.Deg2Rad) * centerRadius; var xDiff = serie.clockwise ? -serie.label.margin : serie.label.margin; - serieData.labelPosition = serie.runtimeCenterPos + new Vector3(px1 + xDiff, py1); + serieData.labelPosition = serie.context.center + new Vector3(px1 + xDiff, py1); break; case LabelStyle.Position.Top: startAngle += serie.clockwise ? -serie.label.margin : serie.label.margin; toAngle += serie.clockwise ? serie.label.margin : -serie.label.margin; var px2 = Mathf.Sin(toAngle * Mathf.Deg2Rad) * centerRadius; var py2 = Mathf.Cos(toAngle * Mathf.Deg2Rad) * centerRadius; - serieData.labelPosition = serie.runtimeCenterPos + new Vector3(px2, py2); + serieData.labelPosition = serie.context.center + new Vector3(px2, py2); break; } serieData.labelObject.SetLabelPosition(serieData.labelPosition); @@ -229,12 +229,12 @@ namespace XCharts var centerRadius = (outsideRadius + insideRadius) / 2; var inradius = centerRadius - itemStyle.backgroundWidth / 2; var outradius = centerRadius + itemStyle.backgroundWidth / 2; - UGL.DrawDoughnut(vh, serie.runtimeCenterPos, inradius, + UGL.DrawDoughnut(vh, serie.context.center, inradius, outradius, backgroundColor, Color.clear, chart.settings.cicleSmoothness); } else { - UGL.DrawDoughnut(vh, serie.runtimeCenterPos, insideRadius, + UGL.DrawDoughnut(vh, serie.context.center, insideRadius, outsideRadius, backgroundColor, Color.clear, chart.settings.cicleSmoothness); } } @@ -244,10 +244,10 @@ namespace XCharts var itemStyle = SerieHelper.GetItemStyle(serie, serieData); if (itemStyle.show && itemStyle.borderWidth > 0 && !ChartHelper.IsClearColor(itemStyle.borderColor)) { - UGL.DrawDoughnut(vh, serie.runtimeCenterPos, outsideRadius, + UGL.DrawDoughnut(vh, serie.context.center, outsideRadius, outsideRadius + itemStyle.borderWidth, itemStyle.borderColor, Color.clear, chart.settings.cicleSmoothness); - UGL.DrawDoughnut(vh, serie.runtimeCenterPos, insideRadius, + UGL.DrawDoughnut(vh, serie.context.center, insideRadius, insideRadius + itemStyle.borderWidth, itemStyle.borderColor, Color.clear, chart.settings.cicleSmoothness); } @@ -273,9 +273,9 @@ namespace XCharts private int GetRingIndex(Serie serie, Vector2 local) { if (!(serie is Ring)) return -1; - var dist = Vector2.Distance(local, serie.runtimeCenterPos); - if (dist > serie.runtimeOutsideRadius) return -1; - Vector2 dir = local - new Vector2(serie.runtimeCenterPos.x, serie.runtimeCenterPos.y); + var dist = Vector2.Distance(local, serie.context.center); + if (dist > serie.context.outsideRadius) return -1; + Vector2 dir = local - new Vector2(serie.context.center.x, serie.context.center.y); float angle = VectorAngle(Vector2.up, dir); for (int i = 0; i < serie.data.Count; i++) { diff --git a/Assets/XCharts/Runtime/Serie/Scatter/BaseScatterHandler.cs b/Assets/XCharts/Runtime/Serie/Scatter/BaseScatterHandler.cs index 10676f04..25fff3f7 100644 --- a/Assets/XCharts/Runtime/Serie/Scatter/BaseScatterHandler.cs +++ b/Assets/XCharts/Runtime/Serie/Scatter/BaseScatterHandler.cs @@ -186,7 +186,7 @@ namespace XCharts if (!grid.Contains(pos)) continue; - serie.dataPoints.Add(pos); + serie.context.dataPoints.Add(pos); serieData.runtimePosition = pos; var datas = serieData.data; float symbolSize = 0; @@ -291,7 +291,7 @@ namespace XCharts var xDataHig = axis.context.height / 2; pos = new Vector3(axis.context.x + xDataHig, axis.context.y + yDataHig); } - serie.dataPoints.Add(pos); + serie.context.dataPoints.Add(pos); serieData.runtimePosition = pos; var datas = serieData.data; diff --git a/Assets/XCharts/Runtime/Serie/Serie.cs b/Assets/XCharts/Runtime/Serie/Serie.cs index 6cc98d73..ab452fdd 100644 --- a/Assets/XCharts/Runtime/Serie/Serie.cs +++ b/Assets/XCharts/Runtime/Serie/Serie.cs @@ -259,7 +259,6 @@ namespace XCharts [SerializeField] private float m_Top; [SerializeField] private float m_Bottom; [SerializeField] private bool m_InsertDataToHead; - [SerializeField] private List<SerieData> m_Data = new List<SerieData>(); [NonSerialized] internal int m_FilterStart; @@ -269,11 +268,6 @@ namespace XCharts [NonSerialized] internal int m_FilterMinShow; [NonSerialized] internal bool m_NeedUpdateFilterData; [NonSerialized] public List<SerieData> m_FilterData = new List<SerieData>(); - [NonSerialized] internal List<SerieData> m_SortedData = new List<SerieData>(); - [NonSerialized] private Dictionary<int, List<Vector3>> m_UpSmoothPoints = new Dictionary<int, List<Vector3>>(); - [NonSerialized] private Dictionary<int, List<Vector3>> m_DownSmoothPoints = new Dictionary<int, List<Vector3>>(); - [NonSerialized] private List<Vector3> m_DataPoints = new List<Vector3>(); - [NonSerialized] private List<bool> m_DataIgnore = new List<bool>(); [NonSerialized] private bool m_NameDirty; /// <summary> @@ -993,38 +987,6 @@ namespace XCharts /// 数据项个数。 /// </summary> public int dataCount { get { return m_Data.Count; } } - /// <summary> - /// 数据项位置坐标。 - /// </summary> - public List<Vector3> dataPoints { get { return m_DataPoints; } } - public List<bool> dataIgnore { get { return m_DataIgnore; } } - /// <summary> - /// 饼图的中心点位置。 - /// </summary> - public Vector3 runtimeCenterPos { get; internal set; } - /// <summary> - /// 饼图的内径 - /// </summary> - public float runtimeInsideRadius { get; internal set; } - /// <summary> - /// 饼图的外径 - /// </summary> - public float runtimeOutsideRadius { get; internal set; } - /// <summary> - /// 运行时的最大数据值 - /// </summary> - public double runtimeDataMax { get; internal set; } - /// <summary> - /// 运行时的最小数据值 - /// </summary> - public double runtimeDataMin { get; internal set; } - public double runtimeCheckValue { get; set; } - public float runtimeX { get; internal set; } - public float runtimeY { get; internal set; } - public float runtimeWidth { get; internal set; } - public float runtimeHeight { get; internal set; } - public Rect runtimeRect { get; internal set; } - public List<SerieData> runtimeSortedData { get { return m_SortedData; } } public bool nameDirty { get { return m_NameDirty; } } public bool labelDirty { get; set; } public bool titleDirty { get; set; } @@ -1043,45 +1005,6 @@ namespace XCharts { base.ClearDirty(); } - internal List<Vector3> GetUpSmoothList(int dataIndex, int size = 100) - { - if (m_UpSmoothPoints.ContainsKey(dataIndex)) - { - return m_UpSmoothPoints[dataIndex]; - } - else - { - var list = ListPool<Vector3>.Get(); - m_UpSmoothPoints[dataIndex] = list; - return list; - } - } - - internal List<Vector3> GetDownSmoothList(int dataIndex, int size = 100) - { - if (m_DownSmoothPoints.ContainsKey(dataIndex)) - { - return m_DownSmoothPoints[dataIndex]; - } - else - { - var list = ListPool<Vector3>.Get(); - m_DownSmoothPoints[dataIndex] = list; - return list; - } - } - - internal void ClearSmoothList(int dataIndex) - { - if (m_UpSmoothPoints.ContainsKey(dataIndex)) - { - m_UpSmoothPoints[dataIndex].Clear(); - } - if (m_DownSmoothPoints.ContainsKey(dataIndex)) - { - m_DownSmoothPoints[dataIndex].Clear(); - } - } /// <summary> /// 维度Y对应数据中最大值。 @@ -1226,16 +1149,6 @@ namespace XCharts { SerieLabelPool.Release(serieData.labelObject.gameObject); } - if (m_UpSmoothPoints.ContainsKey(serieData.index)) - { - ListPool<Vector3>.Release(m_UpSmoothPoints[serieData.index]); - m_UpSmoothPoints.Remove(serieData.index); - } - if (m_DownSmoothPoints.ContainsKey(serieData.index)) - { - ListPool<Vector3>.Release(m_DownSmoothPoints[serieData.index]); - m_DownSmoothPoints.Remove(serieData.index); - } m_Data.RemoveAt(index); m_NeedUpdateFilterData = true; labelDirty = true; @@ -1571,7 +1484,7 @@ namespace XCharts } else { - return runtimeSortedData.Count > 0 ? runtimeSortedData : m_Data; + return context.sortedData.Count > 0 ? context.sortedData : m_Data; } } @@ -1704,9 +1617,9 @@ namespace XCharts public bool IsIgnorePoint(int index) { - if (index >= 0 && index < dataPoints.Count) + if (index >= 0 && index < dataCount) { - return ChartHelper.IsIngore(dataPoints[index]); + return ChartHelper.IsIngore(data[index].runtimePosition); } return false; } diff --git a/Assets/XCharts/Runtime/Serie/SerieContext.cs b/Assets/XCharts/Runtime/Serie/SerieContext.cs index 9d84cc9e..b9940787 100644 --- a/Assets/XCharts/Runtime/Serie/SerieContext.cs +++ b/Assets/XCharts/Runtime/Serie/SerieContext.cs @@ -37,9 +37,70 @@ namespace XCharts /// </summary> public List<int> pointerAxisDataIndexs = new List<int>(); - public int vertCount; - + /// <summary> + /// 中心点 + /// </summary> + public Vector3 center { get; internal set; } + /// <summary> + /// 内半径 + /// </summary> + public float insideRadius { get; internal set; } + /// <summary> + /// 外半径 + /// </summary> + public float outsideRadius { get; internal set; } + /// <summary> + /// 最大值 + /// </summary> + public double dataMax { get; internal set; } + /// <summary> + /// 最小值 + /// </summary> + public double dataMin { get; internal set; } + public double checkValue { get; set; } + /// <summary> + /// 左下角坐标X + /// </summary> + public float x { get; internal set; } + /// <summary> + /// 左下角坐标Y + /// </summary> + public float y { get; internal set; } + /// <summary> + /// 宽 + /// </summary> + public float width { get; internal set; } + /// <summary> + /// 高 + /// </summary> + public float height { get; internal set; } + /// <summary> + /// 矩形区域 + /// </summary> + public Rect rect { get; internal set; } + /// <summary> + /// 绘制顶点数 + /// </summary> + public int vertCount { get; internal set; } + /// <summary> + /// 数据对应的位置坐标。 + /// </summary> + public List<Vector3> dataPoints = new List<Vector3>(); + /// <summary> + /// 数据对应的位置坐标是否忽略(忽略时连线是透明的),dataIgnore 和 dataPoints 一一对应。 + /// </summary> + public List<bool> dataIgnore = new List<bool>(); + /// <summary> + /// 排序后的数据 + /// </summary> + public List<SerieData> sortedData = new List<SerieData>(); + /// <summary> + /// theme的颜色索引 + /// </summary> internal int colorIndex; + /// <summary> + /// 绘制点 + /// </summary> internal List<PointInfo> drawPoints = new List<PointInfo>(); } } \ No newline at end of file diff --git a/Assets/XCharts/Runtime/Serie/SerieHandler.cs b/Assets/XCharts/Runtime/Serie/SerieHandler.cs index 83a42b6b..278bcdc2 100644 --- a/Assets/XCharts/Runtime/Serie/SerieHandler.cs +++ b/Assets/XCharts/Runtime/Serie/SerieHandler.cs @@ -203,7 +203,7 @@ namespace XCharts txt.SetLocalEulerAngles(Vector2.zero); txt.SetActive(serie.titleStyle.show); serie.titleStyle.runtimeText = txt; - serie.titleStyle.UpdatePosition(serie.runtimeCenterPos); + serie.titleStyle.UpdatePosition(serie.context.center); var serieData = serie.GetSerieData(0); if (serieData != null) {