diff --git a/Assets/XCharts/Runtime/Component/Legend/LegendHelper.cs b/Assets/XCharts/Runtime/Component/Legend/LegendHelper.cs index 15a36dc4..d8368c12 100644 --- a/Assets/XCharts/Runtime/Component/Legend/LegendHelper.cs +++ b/Assets/XCharts/Runtime/Component/Legend/LegendHelper.cs @@ -80,7 +80,7 @@ namespace XCharts public static void ResetItemPosition(Legend legend, Vector3 chartPos, float chartWidth, float chartHeight) { - legend.location.UpdateRuntimeData(chartWidth,chartHeight); + legend.location.UpdateRuntimeData(chartWidth, chartHeight); var startX = 0f; var startY = 0f; var legendMaxWidth = chartWidth - legend.location.runtimeLeft - legend.location.runtimeRight; @@ -252,7 +252,7 @@ namespace XCharts if (legendName.Equals(data.name)) { data.show = show; - data.highlighted = false; + data.context.highlighted = false; if (data.show) needShow = true; } } @@ -276,8 +276,8 @@ namespace XCharts { if (legendName.Equals(data.name)) { - data.highlighted = heighlight; - if (data.highlighted) show = true; + data.context.highlighted = heighlight; + if (data.context.highlighted) show = true; } } } diff --git a/Assets/XCharts/Runtime/Component/Tooltip/TooltipHandler.cs b/Assets/XCharts/Runtime/Component/Tooltip/TooltipHandler.cs index f7ca8e24..3506b4de 100644 --- a/Assets/XCharts/Runtime/Component/Tooltip/TooltipHandler.cs +++ b/Assets/XCharts/Runtime/Component/Tooltip/TooltipHandler.cs @@ -291,11 +291,11 @@ namespace XCharts if (System.Math.Abs(dist) <= symbolSize) { serie.context.pointerAxisDataIndexs.Add(i); - serieData.highlighted = true; + serieData.context.highlighted = true; } else { - serieData.highlighted = false; + serieData.context.highlighted = false; } } } diff --git a/Assets/XCharts/Runtime/Component/Tooltip/TooltipHelper.cs b/Assets/XCharts/Runtime/Component/Tooltip/TooltipHelper.cs index 25f4a4d0..0587457d 100644 --- a/Assets/XCharts/Runtime/Component/Tooltip/TooltipHelper.cs +++ b/Assets/XCharts/Runtime/Component/Tooltip/TooltipHelper.cs @@ -110,7 +110,7 @@ namespace XCharts var numericFormatter = GetItemNumericFormatter(tooltip, serie, serieData); if (isCartesian) { - if (serieData != null && serieData.highlighted) + if (serieData != null && serieData.context.highlighted) { sb.Append(key).Append(!string.IsNullOrEmpty(key) ? " : " : ""); sb.Append("[").Append(ChartCached.FloatToStr(xValue, numericFormatter)).Append(",") diff --git a/Assets/XCharts/Runtime/Helper/SerieLabelHelper.cs b/Assets/XCharts/Runtime/Helper/SerieLabelHelper.cs index 22dbf419..0ee88aa4 100644 --- a/Assets/XCharts/Runtime/Helper/SerieLabelHelper.cs +++ b/Assets/XCharts/Runtime/Helper/SerieLabelHelper.cs @@ -76,7 +76,7 @@ namespace XCharts public static bool CanShowLabel(Serie serie, SerieData serieData, LabelStyle label, int dimesion) { - return serie.show && serieData.canShowLabel && !serie.IsIgnoreValue(serieData, dimesion); + return serie.show && serieData.context.canShowLabel && !serie.IsIgnoreValue(serieData, dimesion); } public static string GetFormatterContent(Serie serie, SerieData serieData, @@ -125,7 +125,7 @@ namespace XCharts for (int i = 0; i < serie.dataCount; i++) { var serieData = serie.data[i]; - var serieLabel = SerieHelper.GetSerieLabel(serie, serieData, serieData.highlighted); + var serieLabel = SerieHelper.GetSerieLabel(serie, serieData, serieData.context.highlighted); if (serieLabel.show && serieData.labelObject != null) { if (!serie.show || !serieData.show) @@ -144,13 +144,13 @@ namespace XCharts { var labelWidth = serieData.GetLabelWidth(); if (serie.clockwise) - serieData.labelObject.SetLabelPosition(serieData.labelPosition - new Vector3(labelWidth / 2, 0)); + serieData.labelObject.SetLabelPosition(serieData.context.labelPosition - new Vector3(labelWidth / 2, 0)); else - serieData.labelObject.SetLabelPosition(serieData.labelPosition + new Vector3(labelWidth / 2, 0)); + serieData.labelObject.SetLabelPosition(serieData.context.labelPosition + new Vector3(labelWidth / 2, 0)); } else { - serieData.labelObject.SetLabelPosition(serieData.labelPosition); + serieData.labelObject.SetLabelPosition(serieData.context.labelPosition); } } } @@ -160,7 +160,7 @@ namespace XCharts { var serieData = serie.GetSerieData(0); if (serieData == null) return; - var serieLabel = SerieHelper.GetSerieLabel(serie, serieData, serieData.highlighted); + var serieLabel = SerieHelper.GetSerieLabel(serie, serieData, serieData.context.highlighted); if (serieLabel.show && serieData.labelObject != null) { if (!serie.show || !serieData.show) @@ -174,30 +174,30 @@ namespace XCharts serieData.SetLabelActive(true); serieData.labelObject.SetText(content); serieData.labelObject.SetTextColor(GetLabelColor(serie, theme, colorIndex)); - serieData.labelObject.SetLabelPosition(serieData.labelPosition + serieLabel.offset); + serieData.labelObject.SetLabelPosition(serieData.context.labelPosition + serieLabel.offset); } } public static void UpdatePieLabelPosition(Serie serie, SerieData serieData) { if (serieData.labelObject == null) return; - var currAngle = serieData.runtimePieHalfAngle; + var currAngle = serieData.context.halfAngle; var currRad = currAngle * Mathf.Deg2Rad; - var offsetRadius = serieData.runtimePieOffsetRadius; - var insideRadius = serieData.runtimePieInsideRadius; - var outsideRadius = serieData.runtimePieOutsideRadius; + var offsetRadius = serieData.context.offsetRadius; + var insideRadius = serieData.context.insideRadius; + var outsideRadius = serieData.context.outsideRadius; var serieLabel = SerieHelper.GetSerieLabel(serie, serieData); var labelLine = SerieHelper.GetSerieLabelLine(serie, serieData); switch (serieLabel.position) { case LabelStyle.Position.Center: - serieData.labelPosition = serie.context.center; + serieData.context.labelPosition = serie.context.center; break; case LabelStyle.Position.Inside: var labelRadius = offsetRadius + insideRadius + (outsideRadius - insideRadius) / 2 + serieLabel.margin; var labelCenter = new Vector2(serie.context.center.x + labelRadius * Mathf.Sin(currRad), serie.context.center.y + labelRadius * Mathf.Cos(currRad)); - serieData.labelPosition = labelCenter; + serieData.context.labelPosition = labelCenter; break; case LabelStyle.Position.Outside: if (labelLine.lineType == LabelLine.LineType.HorizontalLine) @@ -215,14 +215,14 @@ namespace XCharts var r4 = Mathf.Sqrt(radius1 * radius1 - Mathf.Pow(currCos * radius3, 2)) - currSin * radius3; r4 += labelLine.lineLength1 + labelLine.lineWidth * 4; r4 += serieData.labelObject.label.GetPreferredWidth() / 2; - serieData.labelPosition = pos0 + (currAngle > 180 ? Vector3.left : Vector3.right) * r4; + serieData.context.labelPosition = pos0 + (currAngle > 180 ? Vector3.left : Vector3.right) * r4; } else { 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; + serieData.context.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.context.center.x) + if (serieData.context.labelPosition.x != 0 && serieData.context.labelPosition.x < serie.context.center.x) { splitCount = n; break; @@ -257,7 +257,7 @@ namespace XCharts private static void CheckSerieDataLabel(Serie serie, SerieData serieData, bool isLeft, ComponentTheme theme, ref Vector3 lastCheckPos) { - if (!serieData.canShowLabel) + if (!serieData.context.canShowLabel) { serieData.SetLabelActive(false); return; @@ -270,11 +270,11 @@ namespace XCharts if (serieLabel.position != LabelStyle.Position.Outside) return; if (lastCheckPos == Vector3.zero) { - lastCheckPos = serieData.labelPosition; + lastCheckPos = serieData.context.labelPosition; } - else if (serieData.labelPosition.x != 0) + else if (serieData.context.labelPosition.x != 0) { - if (lastCheckPos.y - serieData.labelPosition.y < fontSize) + if (lastCheckPos.y - serieData.context.labelPosition.y < fontSize) { var labelRadius = serie.context.outsideRadius + labelLine.lineLength1; var y1 = lastCheckPos.y - fontSize; @@ -283,9 +283,9 @@ namespace XCharts var diffX = labelRadius * labelRadius - diff * diff; diffX = diffX <= 0 ? 0 : diffX; var x1 = serie.context.center.x + Mathf.Sqrt(diffX) * (isLeft ? -1 : 1); - serieData.labelPosition = new Vector3(x1, y1); + serieData.context.labelPosition = new Vector3(x1, y1); } - lastCheckPos = serieData.labelPosition; + lastCheckPos = serieData.context.labelPosition; serieData.labelObject.SetPosition(SerieLabelHelper.GetRealLabelPosition(serieData, serieLabel, labelLine)); } } @@ -294,16 +294,16 @@ namespace XCharts { if (label.position == LabelStyle.Position.Outside && labelLine.lineType != LabelLine.LineType.HorizontalLine) { - var currAngle = serieData.runtimePieHalfAngle; + var currAngle = serieData.context.halfAngle; var offset = labelLine.lineLength2 + serieData.labelObject.GetLabelWidth() / 2; if (currAngle > 180) - return serieData.labelPosition + new Vector3(-offset, 0, 0); + return serieData.context.labelPosition + new Vector3(-offset, 0, 0); else - return serieData.labelPosition + new Vector3(offset, 0, 0); + return serieData.context.labelPosition + new Vector3(offset, 0, 0); } else { - return serieData.labelPosition; + return serieData.context.labelPosition; } } } diff --git a/Assets/XCharts/Runtime/Helper/SeriesHelper.cs b/Assets/XCharts/Runtime/Helper/SeriesHelper.cs index c9496bf3..b555e48e 100644 --- a/Assets/XCharts/Runtime/Helper/SeriesHelper.cs +++ b/Assets/XCharts/Runtime/Helper/SeriesHelper.cs @@ -389,7 +389,8 @@ namespace XCharts { var serie = series[i]; if ((isPolar && serie.polarIndex != axisIndex) - || (!isPolar && serie.yAxisIndex != axisIndex)) continue; + || (!isPolar && serie.yAxisIndex != axisIndex) + || !serie.show) continue; if (isPercentStack && SeriesHelper.IsPercentStack(series, serie.serieName)) { if (100 > max) max = 100; @@ -431,7 +432,8 @@ namespace XCharts { var serie = ss.Value[i]; if ((isPolar && serie.polarIndex != axisIndex) - || (!isPolar && serie.yAxisIndex != axisIndex)) continue; + || (!isPolar && serie.yAxisIndex != axisIndex) + || !serie.show) continue; var showData = serie.GetDataList(dataZoom); if (SeriesHelper.IsPercentStack(series, serie.stack)) { diff --git a/Assets/XCharts/Runtime/Internal/Attributes/SerieConvertAttribute.cs b/Assets/XCharts/Runtime/Internal/Attributes/SerieConvertAttribute.cs new file mode 100644 index 00000000..b3113f79 --- /dev/null +++ b/Assets/XCharts/Runtime/Internal/Attributes/SerieConvertAttribute.cs @@ -0,0 +1,48 @@ +/******************************************/ +/* */ +/* Copyright (c) 2021 monitor1394 */ +/* https://github.com/monitor1394 */ +/* */ +/******************************************/ +using System; + +namespace XCharts +{ + [AttributeUsage(AttributeTargets.Class, AllowMultiple = true)] + public sealed class SerieConvertAttribute : Attribute + { + public readonly Type type0; + public readonly Type type1; + public readonly Type type2; + public readonly Type type3; + + public SerieConvertAttribute(Type serie) + { + type0 = serie; + } + public SerieConvertAttribute(Type serie, Type serie2) + { + type0 = serie; + type1 = serie2; + } + public SerieConvertAttribute(Type serie, Type serie2, Type serie3) + { + type0 = serie; + type1 = serie2; + type2 = serie3; + } + public SerieConvertAttribute(Type serie, Type serie2, Type serie3, Type serie4) + { + type0 = serie; + type1 = serie2; + type2 = serie3; + type3 = serie4; + } + + public bool Contains() where T : CoordSystem + { + var type = typeof(T); + return (type == type0 || type == type1 || type == type2 || type == type3); + } + } +} \ No newline at end of file diff --git a/Assets/XCharts/Runtime/Internal/Attributes/SerieConvertAttribute.cs.meta b/Assets/XCharts/Runtime/Internal/Attributes/SerieConvertAttribute.cs.meta new file mode 100644 index 00000000..b4de61a3 --- /dev/null +++ b/Assets/XCharts/Runtime/Internal/Attributes/SerieConvertAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 74af4595d38cb43ca8f11348cc979137 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/XCharts/Runtime/Internal/Object/ChartLabel.cs b/Assets/XCharts/Runtime/Internal/Object/ChartLabel.cs index 8fb6b8c4..be4f761d 100644 --- a/Assets/XCharts/Runtime/Internal/Object/ChartLabel.cs +++ b/Assets/XCharts/Runtime/Internal/Object/ChartLabel.cs @@ -185,21 +185,26 @@ namespace XCharts public bool SetText(string text) { - if (m_LabelRect == null) return false; - if (m_LabelText != null && !m_LabelText.GetText().Equals(text)) + if (m_LabelRect == null || m_LabelText == null) + return false; + + if (text == null) + text = ""; + if (!m_LabelText.GetText().Equals(text)) { m_LabelText.SetText(text); if (m_LabelAutoSize) { var newSize = string.IsNullOrEmpty(text) ? Vector2.zero : new Vector2(m_LabelText.GetPreferredWidth() + m_LabelPaddingLeftRight * 2, - m_LabelText.GetPreferredHeight() + m_LabelPaddingTopBottom * 2); + m_LabelText.GetPreferredHeight() + m_LabelPaddingTopBottom * 2); var sizeChange = newSize.x != m_LabelRect.sizeDelta.x || newSize.y != m_LabelRect.sizeDelta.y; if (sizeChange) { m_LabelRect.sizeDelta = newSize; if (m_LabelBackgroundRect != null) m_LabelBackgroundRect.sizeDelta = newSize; + AdjustIconPos(); } return sizeChange; diff --git a/Assets/XCharts/Runtime/Serie/Bar/BarHandler.cs b/Assets/XCharts/Runtime/Serie/Bar/BarHandler.cs index b3d1033f..a549091b 100644 --- a/Assets/XCharts/Runtime/Serie/Bar/BarHandler.cs +++ b/Assets/XCharts/Runtime/Serie/Bar/BarHandler.cs @@ -81,16 +81,16 @@ namespace XCharts serie.context.pointerEnter = false; foreach (var serieData in serie.data) { - if (serieData.runtimeRect.Contains(chart.pointerPos)) + if (serieData.context.rect.Contains(chart.pointerPos)) { serie.context.pointerItemDataIndex = serieData.index; serie.context.pointerEnter = true; - serieData.highlighted = true; + serieData.context.highlighted = true; chart.RefreshTopPainter(); } else { - serieData.highlighted = false; + serieData.context.highlighted = false; } } } @@ -137,11 +137,11 @@ namespace XCharts serie.context.dataPoints.Add(Vector3.zero); continue; } - var highlight = serie.data[i].highlighted + var highlight = serie.data[i].context.highlighted || serie.highlighted; var itemStyle = SerieHelper.GetItemStyle(serie, serieData, highlight); - serieData.canShowLabel = true; + serieData.context.canShowLabel = true; double value = showData[i].GetCurrData(1, dataChangeDuration, xAxis.inverse, xMinValue, xMaxValue); float borderWidth = value == 0 ? 0 : itemStyle.runtimeBorderWidth; if (showData[i].IsDataChanged()) dataChanging = true; @@ -155,7 +155,7 @@ namespace XCharts { for (int n = 0; n < m_StackSerieData.Count - 1; n++) { - pX += m_StackSerieData[n][i].runtimeStackHig; + pX += m_StackSerieData[n][i].context.stackHeight; } } @@ -182,7 +182,7 @@ namespace XCharts / valueTotal * grid.context.width); } } - serieData.runtimeStackHig = barHig; + serieData.context.stackHeight = barHig; var isBarEnd = false; float currHig = chart.CheckSerieBarAnimation(serie, i, barHig, out isBarEnd); if (!isBarEnd) isAllBarEnd = false; @@ -210,7 +210,7 @@ namespace XCharts plb = chart.ClampInGrid(grid, plb); top = chart.ClampInGrid(grid, top); } - serieData.runtimeRect = Rect.MinMaxRect(plb.x, plb.y, prb.x, prt.y); + serieData.context.rect = Rect.MinMaxRect(plb.x, plb.y, prb.x, prt.y); serie.context.dataPoints.Add(top); if (serie.show) { @@ -281,7 +281,7 @@ namespace XCharts serie.context.dataPoints.Add(Vector3.zero); continue; } - var highlight = serie.data[i].highlighted + var highlight = serie.data[i].context.highlighted || serie.highlighted; var itemStyle = SerieHelper.GetItemStyle(serie, serieData, highlight); double value = serieData.GetCurrData(1, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue); @@ -307,7 +307,7 @@ namespace XCharts { for (int n = 0; n < m_StackSerieData.Count - 1; n++) { - pY += m_StackSerieData[n][i].runtimeStackHig; + pY += m_StackSerieData[n][i].context.stackHeight; } } @@ -335,7 +335,7 @@ namespace XCharts } } } - serieData.runtimeStackHig = barHig; + serieData.context.stackHeight = barHig; var isBarEnd = false; float currHig = chart.CheckSerieBarAnimation(serie, i, barHig, out isBarEnd); if (!isBarEnd) isAllBarEnd = false; @@ -363,7 +363,7 @@ namespace XCharts prb = chart.ClampInGrid(grid, prb); top = chart.ClampInGrid(grid, top); } - serieData.runtimeRect = Rect.MinMaxRect(plb.x, plb.y, prb.x, prt.y); + serieData.context.rect = Rect.MinMaxRect(plb.x, plb.y, prb.x, prt.y); serie.context.dataPoints.Add(top); if (serie.show && currHig != 0) { diff --git a/Assets/XCharts/Runtime/Serie/Candlestick/CandlestickHandler.cs b/Assets/XCharts/Runtime/Serie/Candlestick/CandlestickHandler.cs index 50aed6bd..e4d121cf 100644 --- a/Assets/XCharts/Runtime/Serie/Candlestick/CandlestickHandler.cs +++ b/Assets/XCharts/Runtime/Serie/Candlestick/CandlestickHandler.cs @@ -56,7 +56,7 @@ namespace XCharts serie.context.dataPoints.Add(Vector3.zero); continue; } - var highlight = serie.data[i].highlighted || serie.highlighted; + var highlight = serie.data[i].context.highlighted || serie.highlighted; var itemStyle = SerieHelper.GetItemStyle(serie, serieData, highlight); var open = serieData.GetCurrData(0, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue); var close = serieData.GetCurrData(1, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue); @@ -79,7 +79,7 @@ namespace XCharts barHig = (float)((close - open) / valueTotal * grid.context.height); pY += (float)((open - minCut) / valueTotal * grid.context.height); } - serieData.runtimeStackHig = barHig; + serieData.context.stackHeight = barHig; var isBarEnd = false; float currHig = chart.CheckSerieBarAnimation(serie, i, barHig, out isBarEnd); if (!isBarEnd) isAllBarEnd = false; diff --git a/Assets/XCharts/Runtime/Serie/Gauge/GaugeHandler.cs b/Assets/XCharts/Runtime/Serie/Gauge/GaugeHandler.cs index 70a39a60..7d703958 100644 --- a/Assets/XCharts/Runtime/Serie/Gauge/GaugeHandler.cs +++ b/Assets/XCharts/Runtime/Serie/Gauge/GaugeHandler.cs @@ -298,7 +298,7 @@ namespace XCharts if (serie.dataCount > 0) { var serieData = serie.data[0]; - serieData.labelPosition = serie.context.center + serie.label.offset; + serieData.context.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); diff --git a/Assets/XCharts/Runtime/Serie/Heatmap/HeatmapHandler.cs b/Assets/XCharts/Runtime/Serie/Heatmap/HeatmapHandler.cs index 41c3464f..edc9405c 100644 --- a/Assets/XCharts/Runtime/Serie/Heatmap/HeatmapHandler.cs +++ b/Assets/XCharts/Runtime/Serie/Heatmap/HeatmapHandler.cs @@ -40,16 +40,16 @@ namespace XCharts if (!grid.IsPointerEnter()) return; foreach (var serieData in serie.data) { - if (serieData.runtimeRect.Contains(chart.pointerPos)) + if (serieData.context.rect.Contains(chart.pointerPos)) { serie.context.pointerItemDataIndex = serieData.index; serie.context.pointerEnter = true; - serieData.highlighted = true; + serieData.context.highlighted = true; chart.RefreshTopPainter(); } else { - serieData.highlighted = false; + serieData.context.highlighted = false; } } } @@ -110,8 +110,8 @@ namespace XCharts var pos = new Vector3(zeroX + (i + (xAxis.boundaryGap ? 0.5f : 0)) * xWidth, zeroY + (j + (yAxis.boundaryGap ? 0.5f : 0)) * yWidth); serie.context.dataPoints.Add(pos); - serieData.canShowLabel = false; - serieData.runtimeRect = new Rect(pos.x - rectWid / 2, pos.y - rectHig / 2, rectWid, rectHig); + serieData.context.canShowLabel = false; + serieData.context.rect = new Rect(pos.x - rectWid / 2, pos.y - rectHig / 2, rectWid, rectHig); if (value == 0) continue; if ((value < rangeMin && rangeMin != visualMap.min) || (value > rangeMax && rangeMax != visualMap.max)) @@ -121,8 +121,8 @@ namespace XCharts if (!visualMap.IsInSelectedValue(value)) continue; color = visualMap.GetColor(value); if (animationIndex >= 0 && i > animationIndex) continue; - serieData.canShowLabel = true; - var emphasis = (serieData.highlighted) + serieData.context.canShowLabel = true; + var emphasis = (serieData.context.highlighted) || visualMap.context.pointerIndex > 0; UGL.DrawRectangle(vh, pos, rectWid / 2, rectHig / 2, color); diff --git a/Assets/XCharts/Runtime/Serie/Line/Line.cs b/Assets/XCharts/Runtime/Serie/Line/Line.cs index 46bd1a51..c6b3bc19 100644 --- a/Assets/XCharts/Runtime/Serie/Line/Line.cs +++ b/Assets/XCharts/Runtime/Serie/Line/Line.cs @@ -12,6 +12,7 @@ namespace XCharts { [Serializable] [SerieHandler(typeof(LineHandler), true)] + [SerieConvert(typeof(Bar))] [CoordOptions(typeof(GridCoord), typeof(PolarCoord))] public class Line : Serie, INeedSerieContainer { diff --git a/Assets/XCharts/Runtime/Serie/Line/LineHandler.GridCoord.cs b/Assets/XCharts/Runtime/Serie/Line/LineHandler.GridCoord.cs index acd5e15a..ca0161ac 100644 --- a/Assets/XCharts/Runtime/Serie/Line/LineHandler.GridCoord.cs +++ b/Assets/XCharts/Runtime/Serie/Line/LineHandler.GridCoord.cs @@ -137,7 +137,7 @@ namespace XCharts foreach (var serieData in serie.data) { - var dist = Vector3.Distance(chart.pointerPos, serieData.runtimePosition); + var dist = Vector3.Distance(chart.pointerPos, serieData.context.position); var symbol = SerieHelper.GetSerieSymbol(serie, serieData); var symbolSize = symbol.GetSize(serieData.data, themeSymbolSize); @@ -145,12 +145,12 @@ namespace XCharts { serie.context.pointerItemDataIndex = serieData.index; serie.context.pointerEnter = true; - serieData.highlighted = true; + serieData.context.highlighted = true; chart.RefreshTopPainter(); } else { - serieData.highlighted = false; + serieData.context.highlighted = false; } } } @@ -193,7 +193,7 @@ namespace XCharts if (ChartHelper.IsIngore(serie.context.dataPoints[i])) continue; - var highlight = serie.data[i].highlighted || serie.highlighted; + var highlight = serie.data[i].context.highlighted || serie.highlighted; var symbolSize = highlight ? symbol.GetSelectedSize(serie.data[i].data, theme.serie.lineSymbolSelectedSize) : symbol.GetSize(serie.data[i].data, theme.serie.lineSymbolSize); @@ -321,8 +321,8 @@ namespace XCharts var isIgnore = serie.IsIgnoreValue(serieData); if (isIgnore) { - serieData.runtimeStackHig = 0; - serieData.runtimePosition = Vector3.zero; + serieData.context.stackHeight = 0; + serieData.context.position = Vector3.zero; if (serie.ignoreLineBreak && serie.context.dataIgnore.Count > 0) { serie.context.dataIgnore[serie.context.dataIgnore.Count - 1] = true; @@ -335,10 +335,10 @@ namespace XCharts var relativedValue = DataHelper.SampleValue(ref showData, serie.sampleType, rate, serie.minShow, maxCount, totalAverage, i, dataChangeDuration, ref dataChanging, relativedAxis); - serieData.runtimeStackHig = GetDataPoint(isY, axis, relativedAxis, grid, xValue, relativedValue, + serieData.context.stackHeight = GetDataPoint(isY, axis, relativedAxis, grid, xValue, relativedValue, i, scaleWid, isStack, ref np); - serieData.runtimePosition = np; + serieData.context.position = np; serie.context.dataPoints.Add(np); serie.context.dataIgnore.Add(false); @@ -382,7 +382,7 @@ namespace XCharts if (isStack) { for (int n = 0; n < m_StackSerieData.Count - 1; n++) - yPos += m_StackSerieData[n][i].runtimeStackHig; + yPos += m_StackSerieData[n][i].context.stackHeight; } } else @@ -392,7 +392,7 @@ namespace XCharts if (isStack) { for (int n = 0; n < m_StackSerieData.Count - 1; n++) - xPos += m_StackSerieData[n][i].runtimeStackHig; + xPos += m_StackSerieData[n][i].context.stackHeight; } } np = new Vector3(xPos, yPos); diff --git a/Assets/XCharts/Runtime/Serie/Line/LineHandler.PolarCoord.cs b/Assets/XCharts/Runtime/Serie/Line/LineHandler.PolarCoord.cs index 754acf52..b2d4ec4e 100644 --- a/Assets/XCharts/Runtime/Serie/Line/LineHandler.PolarCoord.cs +++ b/Assets/XCharts/Runtime/Serie/Line/LineHandler.PolarCoord.cs @@ -83,12 +83,12 @@ namespace XCharts { var serieData = serie.GetSerieData(i); var symbol = SerieHelper.GetSerieSymbol(serie, serieData); - if (ChartHelper.IsIngore(serieData.runtimePosition)) + if (ChartHelper.IsIngore(serieData.context.position)) continue; - bool highlight = serieData.highlighted || serie.highlighted; + bool highlight = serieData.context.highlighted || serie.highlighted; if ((!symbol.show || !symbol.ShowSymbol(i, count) || serie.IsPerformanceMode()) - && !serieData.highlighted) + && !serieData.context.highlighted) continue; var symbolSize = highlight @@ -102,7 +102,7 @@ namespace XCharts var cornerRadius = SerieHelper.GetSymbolCornerRadius(serie, serieData, highlight); symbolSize = serie.animation.GetSysmbolSize(symbolSize); - chart.DrawSymbol(vh, symbol.type, symbolSize, symbolBorder, serieData.runtimePosition, + chart.DrawSymbol(vh, symbol.type, symbolSize, symbolBorder, serieData.context.position, symbolColor, symbolToColor, symbolEmptyColor, symbol.gap, cornerRadius); } } @@ -126,10 +126,10 @@ namespace XCharts var radius = (float)((value - min) / (max - min) * polarRadius); angle = (angle + 360) % 360; - serieData.runtimeAngle = angle; - serieData.runtimePosition = ChartHelper.GetPos(m_Polar.context.center, radius, angle, true); + serieData.context.angle = angle; + serieData.context.position = ChartHelper.GetPos(m_Polar.context.center, radius, angle, true); - return serieData.runtimePosition; + return serieData.context.position; } } } \ No newline at end of file diff --git a/Assets/XCharts/Runtime/Serie/Liquid/LiquidHandler.cs b/Assets/XCharts/Runtime/Serie/Liquid/LiquidHandler.cs index d09b71d1..b2b8704a 100644 --- a/Assets/XCharts/Runtime/Serie/Liquid/LiquidHandler.cs +++ b/Assets/XCharts/Runtime/Serie/Liquid/LiquidHandler.cs @@ -160,9 +160,9 @@ namespace XCharts serie.context.checkValue = value; m_UpdateLabelText = true; } - if (serieData.labelPosition != cenPos) + if (serieData.context.labelPosition != cenPos) { - serieData.labelPosition = cenPos; + serieData.context.labelPosition = cenPos; m_UpdateLabelText = true; } if (value <= 0) return; @@ -273,9 +273,9 @@ namespace XCharts serie.context.checkValue = value; m_UpdateLabelText = true; } - if (serieData.labelPosition != cenPos) + if (serieData.context.labelPosition != cenPos) { - serieData.labelPosition = cenPos; + serieData.context.labelPosition = cenPos; m_UpdateLabelText = true; } if (value <= 0) return; diff --git a/Assets/XCharts/Runtime/Serie/Pie/PieHandler.cs b/Assets/XCharts/Runtime/Serie/Pie/PieHandler.cs index da61db88..36da4038 100644 --- a/Assets/XCharts/Runtime/Serie/Pie/PieHandler.cs +++ b/Assets/XCharts/Runtime/Serie/Pie/PieHandler.cs @@ -53,7 +53,7 @@ namespace XCharts for (int n = 0; n < data.Count; n++) { var serieData = data[n]; - if (!serieData.canShowLabel || serie.IsIgnoreValue(serieData)) + if (!serieData.context.canShowLabel || serie.IsIgnoreValue(serieData)) { serieData.SetLabelActive(false); continue; @@ -133,16 +133,16 @@ namespace XCharts if (dataIndex >= 0) { if (lastDataIndex >= 0) - serie.GetSerieData(lastDataIndex).highlighted = false; + serie.GetSerieData(lastDataIndex).context.highlighted = false; if (lastDataIndex != dataIndex) chart.RefreshPainter(serie); - serie.GetSerieData(dataIndex).highlighted = true; + serie.GetSerieData(dataIndex).context.highlighted = true; serie.context.pointerItemDataIndex = dataIndex; } else { if (lastDataIndex >= 0) - serie.GetSerieData(lastDataIndex).highlighted = false; + serie.GetSerieData(lastDataIndex).context.highlighted = false; serie.context.pointerItemDataIndex = -1; } } @@ -151,7 +151,7 @@ namespace XCharts if (lastPointerEnter) { foreach (var serieData in serie.data) - serieData.highlighted = false; + serieData.context.highlighted = false; } serie.context.pointerItemDataIndex = -1; } @@ -171,7 +171,7 @@ namespace XCharts foreach (var sd in serie.data) { if (sd.show && serie.pieRoseType == RoseType.Area) showdataCount++; - sd.canShowLabel = false; + sd.context.canShowLabel = false; } float dataChangeDuration = serie.animation.GetUpdateAnimationDuration(); bool isAllZeroValue = SerieHelper.IsAllZeroValue(serie, 1); @@ -194,10 +194,10 @@ namespace XCharts var serieData = data[n]; serieData.index = n; var value = isAllZeroValue ? zeroReplaceValue : serieData.GetCurrData(1, dataChangeDuration); - serieData.runtimePieStartAngle = startDegree; - serieData.runtimePieToAngle = startDegree; - serieData.runtimePieHalfAngle = startDegree; - serieData.runtimePieCurrAngle = startDegree; + serieData.context.startAngle = startDegree; + serieData.context.toAngle = startDegree; + serieData.context.halfAngle = startDegree; + serieData.context.currentAngle = startDegree; if (!serieData.show) { continue; @@ -206,54 +206,57 @@ namespace XCharts ? (totalDegree / showdataCount) : (float)(totalDegree * value / dataTotalFilterMinAngle); if (serie.minAngle > 0 && degree < serie.minAngle) degree = serie.minAngle; - serieData.runtimePieToAngle = startDegree + degree; - serieData.runtimePieOutsideRadius = serie.pieRoseType > 0 ? + serieData.context.toAngle = startDegree + degree; + if (serieData.radius > 0) + serieData.context.outsideRadius = serieData.radius; + else + serieData.context.outsideRadius = serie.pieRoseType > 0 ? serie.context.insideRadius + (float)((serie.context.outsideRadius - serie.context.insideRadius) * value / serie.context.dataMax) : serie.context.outsideRadius; - if (serieData.highlighted) + if (serieData.context.highlighted) { - serieData.runtimePieOutsideRadius += chart.theme.serie.pieTooltipExtraRadius; + serieData.context.outsideRadius += chart.theme.serie.pieTooltipExtraRadius; } var offset = 0f; if (serie.pieClickOffset && serieData.selected) { offset += chart.theme.serie.pieSelectedOffset; } - if (serie.animation.CheckDetailBreak(serieData.runtimePieToAngle)) + if (serie.animation.CheckDetailBreak(serieData.context.toAngle)) { - serieData.runtimePieCurrAngle = serie.animation.GetCurrDetail(); + serieData.context.currentAngle = serie.animation.GetCurrDetail(); } else { - serieData.runtimePieCurrAngle = serieData.runtimePieToAngle; + serieData.context.currentAngle = serieData.context.toAngle; } - var halfDegree = (serieData.runtimePieToAngle - startDegree) / 2; - serieData.runtimePieHalfAngle = startDegree + halfDegree; - serieData.runtiemPieOffsetCenter = serie.context.center; - serieData.runtimePieInsideRadius = serie.context.insideRadius; + var halfDegree = (serieData.context.toAngle - startDegree) / 2; + serieData.context.halfAngle = startDegree + halfDegree; + serieData.context.offsetCenter = serie.context.center; + serieData.context.insideRadius = serie.context.insideRadius; if (offset > 0) { - var currRad = serieData.runtimePieHalfAngle * Mathf.Deg2Rad; + var currRad = serieData.context.halfAngle * Mathf.Deg2Rad; var currSin = Mathf.Sin(currRad); var currCos = Mathf.Cos(currRad); - serieData.runtimePieOffsetRadius = 0; - serieData.runtimePieInsideRadius -= serieData.runtimePieOffsetRadius; - serieData.runtimePieOutsideRadius -= serieData.runtimePieOffsetRadius; + serieData.context.offsetRadius = 0; + serieData.context.insideRadius -= serieData.context.offsetRadius; + serieData.context.outsideRadius -= serieData.context.offsetRadius; if (serie.pieClickOffset && serieData.selected) { - serieData.runtimePieOffsetRadius += chart.theme.serie.pieSelectedOffset; - if (serieData.runtimePieInsideRadius > 0) + serieData.context.offsetRadius += chart.theme.serie.pieSelectedOffset; + if (serieData.context.insideRadius > 0) { - serieData.runtimePieInsideRadius += chart.theme.serie.pieSelectedOffset; + serieData.context.insideRadius += chart.theme.serie.pieSelectedOffset; } - serieData.runtimePieOutsideRadius += chart.theme.serie.pieSelectedOffset; + serieData.context.outsideRadius += chart.theme.serie.pieSelectedOffset; } - serieData.runtiemPieOffsetCenter = new Vector3( - serie.context.center.x + serieData.runtimePieOffsetRadius * currSin, - serie.context.center.y + serieData.runtimePieOffsetRadius * currCos); + serieData.context.offsetCenter = new Vector3( + serie.context.center.x + serieData.context.offsetRadius * currSin, + serie.context.center.y + serieData.context.offsetRadius * currCos); } - serieData.canShowLabel = serieData.runtimePieCurrAngle >= serieData.runtimePieHalfAngle; - startDegree = serieData.runtimePieToAngle; + serieData.context.canShowLabel = serieData.context.currentAngle >= serieData.context.halfAngle; + startDegree = serieData.context.toAngle; SerieLabelHelper.UpdatePieLabelPosition(serie, serieData); } SerieLabelHelper.AvoidLabelOverlap(serie, chart.theme.common); @@ -308,36 +311,36 @@ namespace XCharts { continue; } - var itemStyle = SerieHelper.GetItemStyle(serie, serieData, serieData.highlighted); + var itemStyle = SerieHelper.GetItemStyle(serie, serieData, serieData.context.highlighted); if (serieData.IsDataChanged()) dataChanging = true; var serieNameCount = chart.m_LegendRealShowName.IndexOf(serieData.legendName); var color = SerieHelper.GetItemColor(serie, serieData, chart.theme, serieNameCount, - serieData.highlighted); + serieData.context.highlighted); var toColor = SerieHelper.GetItemToColor(serie, serieData, chart.theme, serieNameCount, - serieData.highlighted); + serieData.context.highlighted); var borderWidth = itemStyle.borderWidth; var borderColor = itemStyle.borderColor; if (serie.pieClickOffset && serieData.selected) { - var drawEndDegree = serieData.runtimePieCurrAngle; - var needRoundCap = serie.roundCap && serieData.runtimePieInsideRadius > 0; - UGL.DrawDoughnut(vh, serieData.runtiemPieOffsetCenter, serieData.runtimePieInsideRadius, - serieData.runtimePieOutsideRadius, color, toColor, Color.clear, serieData.runtimePieStartAngle, + var drawEndDegree = serieData.context.currentAngle; + var needRoundCap = serie.roundCap && serieData.context.insideRadius > 0; + UGL.DrawDoughnut(vh, serieData.context.offsetCenter, serieData.context.insideRadius, + serieData.context.outsideRadius, color, toColor, Color.clear, serieData.context.startAngle, drawEndDegree, borderWidth, borderColor, serie.pieSpace / 2, chart.settings.cicleSmoothness, needRoundCap, true); } else { - var drawEndDegree = serieData.runtimePieCurrAngle; - var needRoundCap = serie.roundCap && serieData.runtimePieInsideRadius > 0; - UGL.DrawDoughnut(vh, serie.context.center, serieData.runtimePieInsideRadius, - serieData.runtimePieOutsideRadius, color, toColor, Color.clear, serieData.runtimePieStartAngle, + var drawEndDegree = serieData.context.currentAngle; + var needRoundCap = serie.roundCap && serieData.context.insideRadius > 0; + UGL.DrawDoughnut(vh, serie.context.center, serieData.context.insideRadius, + serieData.context.outsideRadius, color, toColor, Color.clear, serieData.context.startAngle, drawEndDegree, borderWidth, borderColor, serie.pieSpace / 2, chart.settings.cicleSmoothness, needRoundCap, true); - DrawPieCenter(vh, serie, itemStyle, serieData.runtimePieInsideRadius); + DrawPieCenter(vh, serie, itemStyle, serieData.context.insideRadius); } - if (!serie.animation.CheckDetailBreak(serieData.runtimePieToAngle)) serie.animation.SetDataFinish(n); + if (!serie.animation.CheckDetailBreak(serieData.context.toAngle)) serie.animation.SetDataFinish(n); else break; } if (!serie.animation.IsFinish()) @@ -369,7 +372,7 @@ namespace XCharts { foreach (var serieData in serie.data) { - if (serieData.highlighted) return true; + if (serieData.context.highlighted) return true; } } } @@ -398,10 +401,10 @@ namespace XCharts && serieLabel.position == LabelStyle.Position.Outside && labelLine.show) { - var insideRadius = serieData.runtimePieInsideRadius; - var outSideRadius = serieData.runtimePieOutsideRadius; + var insideRadius = serieData.context.insideRadius; + var outSideRadius = serieData.context.outsideRadius; var center = serie.context.center; - var currAngle = serieData.runtimePieHalfAngle; + var currAngle = serieData.context.halfAngle; if (!ChartHelper.IsClearColor(labelLine.lineColor)) color = labelLine.lineColor; else if (labelLine.lineType == LabelLine.LineType.HorizontalLine) color *= color; float currSin = Mathf.Sin(currAngle * Mathf.Deg2Rad); @@ -414,7 +417,7 @@ namespace XCharts 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); - var pos2 = serieData.labelPosition; + var pos2 = serieData.context.labelPosition; if (pos2.x == 0) { pos2 = new Vector3(center.x + radius2 * currSin, center.y + radius2 * currCos); @@ -476,12 +479,12 @@ namespace XCharts private void DrawPieLabel(Serie serie, int dataIndex, SerieData serieData, Color serieColor) { if (serieData.labelObject == null) return; - var currAngle = serieData.runtimePieHalfAngle; - var isHighlight = (serieData.highlighted && serie.emphasis.label.show); + var currAngle = serieData.context.halfAngle; + var isHighlight = (serieData.context.highlighted && serie.emphasis.label.show); var serieLabel = SerieHelper.GetSerieLabel(serie, serieData); var labelLine = SerieHelper.GetSerieLabelLine(serie, serieData); var iconStyle = SerieHelper.GetIconStyle(serie, serieData); - var showLabel = ((serieLabel.show || isHighlight) && serieData.canShowLabel); + var showLabel = ((serieLabel.show || isHighlight) && serieData.context.canShowLabel); if (showLabel) { serieData.SetLabelActive(showLabel); @@ -553,11 +556,11 @@ namespace XCharts for (int i = 0; i < serie.data.Count; i++) { var serieData = serie.data[i]; - if (angle >= serieData.runtimePieStartAngle && angle <= serieData.runtimePieToAngle) + if (angle >= serieData.context.startAngle && angle <= serieData.context.toAngle) { var ndist = !serieData.selected ? dist : - Vector2.Distance(local, serieData.runtiemPieOffsetCenter); - if (ndist >= serieData.runtimePieInsideRadius && ndist <= serieData.runtimePieOutsideRadius) + Vector2.Distance(local, serieData.context.offsetCenter); + if (ndist >= serieData.context.insideRadius && ndist <= serieData.context.outsideRadius) { return i; } diff --git a/Assets/XCharts/Runtime/Serie/Radar/RadarHandler.cs b/Assets/XCharts/Runtime/Serie/Radar/RadarHandler.cs index fc007914..225f37cc 100644 --- a/Assets/XCharts/Runtime/Serie/Radar/RadarHandler.cs +++ b/Assets/XCharts/Runtime/Serie/Radar/RadarHandler.cs @@ -52,19 +52,19 @@ namespace XCharts if (serieData.labelObject == null) continue; var serieLabel = SerieHelper.GetSerieLabel(serie, serieData); var iconStyle = SerieHelper.GetIconStyle(serie, serieData); - var labelPos = serieData.labelPosition; + var labelPos = serieData.context.labelPosition; if (serieLabel.margin != 0) { labelPos += serieLabel.margin * (labelPos - center).normalized; } serieData.labelObject.SetPosition(labelPos); serieData.labelObject.UpdateIcon(iconStyle); - if (serie.show && serieLabel.show && serieData.canShowLabel) + if (serie.show && serieLabel.show && serieData.context.canShowLabel) { var value = serieData.GetCurrData(1); var max = radar.GetIndicatorMax(n); SerieLabelHelper.ResetLabel(serieData.labelObject.label, serieLabel, chart.theme, i); - serieData.SetLabelActive(serieData.labelPosition != Vector3.zero); + serieData.SetLabelActive(serieData.context.labelPosition != Vector3.zero); serieData.labelObject.SetLabelPosition(serieLabel.offset); var content = SerieLabelHelper.GetFormatterContent(serie, serieData, value, max, serieLabel, Color.clear); @@ -247,7 +247,7 @@ namespace XCharts private bool IsHighlight(RadarCoord radar, Serie serie, SerieData serieData, Tooltip tooltip, int dataIndex, int dimension) { - if (serie.highlighted || serieData.highlighted) return true; + if (serie.highlighted || serieData.context.highlighted) return true; if (tooltip == null) return false; var selectedSerieIndex = tooltip.runtimeDataIndex[0]; if (selectedSerieIndex < 0) return false; @@ -332,7 +332,7 @@ namespace XCharts } if (!serieData.show) { - serieData.labelPosition = Vector3.zero; + serieData.context.labelPosition = Vector3.zero; continue; } var isHighlight = IsHighlight(radar, serie, serieData, tooltip, j, 0); @@ -384,7 +384,7 @@ namespace XCharts startPoint = toPoint; lastColor = lineColor; } - serieData.labelPosition = startPoint; + serieData.context.labelPosition = startPoint; pointList.Add(startPoint); if (serie.areaStyle.show && j == endIndex) @@ -406,7 +406,7 @@ namespace XCharts { var serieData = serie.data[j]; if (!serieData.show) continue; - var isHighlight = serie.highlighted || serieData.highlighted || + var isHighlight = serie.highlighted || serieData.context.highlighted || (tooltip.show && tooltip.runtimeDataIndex[0] == i && tooltip.runtimeDataIndex[1] == j); var serieIndex = serieData.index; var symbolSize = isHighlight @@ -422,7 +422,7 @@ namespace XCharts symbolColor = radar.outRangeColor; symbolToColor = radar.outRangeColor; } - chart.DrawSymbol(vh, serie.symbol.type, symbolSize, symbolBorder, serieData.labelPosition, symbolColor, + chart.DrawSymbol(vh, serie.symbol.type, symbolSize, symbolBorder, serieData.context.labelPosition, symbolColor, symbolToColor, symbolEmptyColor, serie.symbol.gap, cornerRadius); } } diff --git a/Assets/XCharts/Runtime/Serie/Ring/RingHandler.cs b/Assets/XCharts/Runtime/Serie/Ring/RingHandler.cs index 14747d7a..aa1efff5 100644 --- a/Assets/XCharts/Runtime/Serie/Ring/RingHandler.cs +++ b/Assets/XCharts/Runtime/Serie/Ring/RingHandler.cs @@ -71,8 +71,6 @@ namespace XCharts var data = serie.data; serie.animation.InitProgress(data.Count, serie.startAngle, serie.startAngle + 360); SerieHelper.UpdateCenter(serie, chart.chartPosition, chart.chartWidth, chart.chartHeight); - //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.context.outsideRadius - serie.context.insideRadius; var dataChanging = false; @@ -86,9 +84,9 @@ namespace XCharts var degree = (float)(360 * value / max); var startDegree = GetStartAngle(serie); var toDegree = GetToAngle(serie, degree); - 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 itemStyle = SerieHelper.GetItemStyle(serie, serieData, serieData.context.highlighted); + var itemColor = SerieHelper.GetItemColor(serie, serieData, chart.theme, j, serieData.context.highlighted); + var itemToColor = SerieHelper.GetItemToColor(serie, serieData, chart.theme, j, serieData.context.highlighted); var outsideRadius = serie.context.outsideRadius - j * (ringWidth + serie.ringGap); var insideRadius = outsideRadius - ringWidth; var centerRadius = (outsideRadius + insideRadius) / 2; @@ -96,10 +94,10 @@ namespace XCharts var borderColor = itemStyle.borderColor; var roundCap = serie.roundCap && insideRadius > 0; - serieData.runtimePieStartAngle = serie.clockwise ? startDegree : toDegree; - serieData.runtimePieToAngle = serie.clockwise ? toDegree : startDegree; - serieData.runtimePieInsideRadius = insideRadius; - serieData.runtimePieOutsideRadius = outsideRadius; + serieData.context.startAngle = serie.clockwise ? startDegree : toDegree; + serieData.context.toAngle = serie.clockwise ? toDegree : startDegree; + serieData.context.insideRadius = insideRadius; + serieData.context.outsideRadius = serieData.radius > 0 ? serieData.radius : outsideRadius; if (itemStyle.backgroundColor.a != 0) { UGL.DrawDoughnut(vh, serie.context.center, insideRadius, outsideRadius, itemStyle.backgroundColor, @@ -201,23 +199,23 @@ namespace XCharts switch (serie.label.position) { case LabelStyle.Position.Center: - serieData.labelPosition = serie.context.center + serie.label.offset; + serieData.context.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.context.center + new Vector3(px1 + xDiff, py1); + serieData.context.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.context.center + new Vector3(px2, py2); + serieData.context.labelPosition = serie.context.center + new Vector3(px2, py2); break; } - serieData.labelObject.SetLabelPosition(serieData.labelPosition); + serieData.labelObject.SetLabelPosition(serieData.context.labelPosition); } private void DrawBackground(VertexHelper vh, Serie serie, SerieData serieData, int index, float insideRadius, float outsideRadius) @@ -280,10 +278,10 @@ namespace XCharts for (int i = 0; i < serie.data.Count; i++) { var serieData = serie.data[i]; - if (dist >= serieData.runtimePieInsideRadius && - dist <= serieData.runtimePieOutsideRadius && - angle >= serieData.runtimePieStartAngle && - angle <= serieData.runtimePieToAngle) + if (dist >= serieData.context.insideRadius && + dist <= serieData.context.outsideRadius && + angle >= serieData.context.startAngle && + angle <= serieData.context.toAngle) { return i; } diff --git a/Assets/XCharts/Runtime/Serie/Scatter/BaseScatterHandler.cs b/Assets/XCharts/Runtime/Serie/Scatter/BaseScatterHandler.cs index 25fff3f7..2027dcc1 100644 --- a/Assets/XCharts/Runtime/Serie/Scatter/BaseScatterHandler.cs +++ b/Assets/XCharts/Runtime/Serie/Scatter/BaseScatterHandler.cs @@ -87,9 +87,9 @@ namespace XCharts var serieData = serie.GetSerieData(lastDataIndex); var symbol = SerieHelper.GetSerieSymbol(serie, serieData); var symbolSize = symbol.GetSize(serieData.data, themeSymbolSize); - if (Vector3.Distance(serieData.runtimePosition, chart.pointerPos) <= symbolSize) + if (Vector3.Distance(serieData.context.position, chart.pointerPos) <= symbolSize) { - serieData.highlighted = true; + serieData.context.highlighted = true; serie.context.pointerItemDataIndex = lastDataIndex; return; } @@ -98,7 +98,7 @@ namespace XCharts serie.context.pointerItemDataIndex = -1; if (lastDataIndex >= 0) { - serie.GetSerieData(lastDataIndex).highlighted = false; + serie.GetSerieData(lastDataIndex).context.highlighted = false; chart.RefreshPainter(serie); } for (int i = serie.dataCount - 1; i >= 0; i--) @@ -110,9 +110,9 @@ namespace XCharts continue; var symbolSize = symbol.GetSize(serieData.data, themeSymbolSize); - if (Vector3.Distance(serieData.runtimePosition, chart.pointerPos) <= symbolSize) + if (Vector3.Distance(serieData.context.position, chart.pointerPos) <= symbolSize) { - serieData.highlighted = true; + serieData.context.highlighted = true; serie.context.pointerItemDataIndex = i; serie.context.pointerEnter = true; chart.RefreshPainter(serie); @@ -165,7 +165,7 @@ namespace XCharts if (!symbol.ShowSymbol(serieData.index, maxCount)) continue; - var highlight = serie.highlighted || serieData.highlighted; + var highlight = serie.highlighted || serieData.context.highlighted; var color = SerieHelper.GetItemColor(serie, serieData, theme, colorIndex, highlight); var toColor = SerieHelper.GetItemToColor(serie, serieData, theme, colorIndex, highlight); var emptyColor = SerieHelper.GetItemBackgroundColor(serie, serieData, theme, colorIndex, highlight, false); @@ -187,11 +187,11 @@ namespace XCharts continue; serie.context.dataPoints.Add(pos); - serieData.runtimePosition = pos; + serieData.context.position = pos; var datas = serieData.data; float symbolSize = 0; - if (serie.highlighted || serieData.highlighted) + if (serie.highlighted || serieData.context.highlighted) { symbolSize = symbol.GetSelectedSize(datas, theme.serie.scatterSymbolSelectedSize); } @@ -267,7 +267,7 @@ namespace XCharts if (!symbol.ShowSymbol(serieData.index, maxCount)) continue; - var highlight = serie.highlighted || serieData.highlighted; + var highlight = serie.highlighted || serieData.context.highlighted; var color = SerieHelper.GetItemColor(serie, serieData, theme, colorIndex, highlight); var toColor = SerieHelper.GetItemToColor(serie, serieData, theme, colorIndex, highlight); var emptyColor = SerieHelper.GetItemBackgroundColor(serie, serieData, theme, colorIndex, highlight, false); @@ -292,11 +292,11 @@ namespace XCharts pos = new Vector3(axis.context.x + xDataHig, axis.context.y + yDataHig); } serie.context.dataPoints.Add(pos); - serieData.runtimePosition = pos; + serieData.context.position = pos; var datas = serieData.data; var symbolSize = 0f; - if (serie.highlighted || serieData.highlighted) + if (serie.highlighted || serieData.context.highlighted) symbolSize = symbol.GetSelectedSize(datas, theme.serie.scatterSymbolSelectedSize); else symbolSize = symbol.GetSize(datas, theme.serie.scatterSymbolSize); diff --git a/Assets/XCharts/Runtime/Serie/Serie.cs b/Assets/XCharts/Runtime/Serie/Serie.cs index ab452fdd..d6f643e5 100644 --- a/Assets/XCharts/Runtime/Serie/Serie.cs +++ b/Assets/XCharts/Runtime/Serie/Serie.cs @@ -175,7 +175,7 @@ namespace XCharts } /// - /// 系列。每个系列通过 type 决定自己的图表类型。 + /// 系列。 /// [System.Serializable] public class Serie : BaseSerie, IComparable @@ -1285,7 +1285,7 @@ namespace XCharts serieData.name = name; serieData.index = m_Data.Count; serieData.data = new List() { parent.children.Count, value }; - serieData.runtimeParent = parent; + serieData.context.parent = parent; AddSerieData(serieData); parent.children.Add(serieData.index); return serieData; @@ -1296,7 +1296,7 @@ namespace XCharts serieData.name = name; serieData.index = m_Data.Count; serieData.data = new List(value); - serieData.runtimeParent = parent; + serieData.context.parent = parent; AddSerieData(serieData); parent.children.Add(serieData.index); return serieData; @@ -1577,7 +1577,7 @@ namespace XCharts { highlighted = false; foreach (var serieData in m_Data) - serieData.highlighted = false; + serieData.context.highlighted = false; } /// @@ -1587,7 +1587,7 @@ namespace XCharts { var serieData = GetSerieData(index); if (serieData != null) - serieData.highlighted = flag; + serieData.context.highlighted = flag; } public float GetBarWidth(float categoryWidth) @@ -1619,7 +1619,7 @@ namespace XCharts { if (index >= 0 && index < dataCount) { - return ChartHelper.IsIngore(data[index].runtimePosition); + return ChartHelper.IsIngore(data[index].context.position); } return false; } diff --git a/Assets/XCharts/Runtime/Serie/SerieContext.cs b/Assets/XCharts/Runtime/Serie/SerieContext.cs index b9940787..1d50733e 100644 --- a/Assets/XCharts/Runtime/Serie/SerieContext.cs +++ b/Assets/XCharts/Runtime/Serie/SerieContext.cs @@ -36,7 +36,6 @@ namespace XCharts /// 鼠标所在轴线上的数据项索引(可能有多个) /// public List pointerAxisDataIndexs = new List(); - /// /// 中心点 /// diff --git a/Assets/XCharts/Runtime/Serie/SerieData.cs b/Assets/XCharts/Runtime/Serie/SerieData.cs index 70df2a6f..d1a1837c 100644 --- a/Assets/XCharts/Runtime/Serie/SerieData.cs +++ b/Assets/XCharts/Runtime/Serie/SerieData.cs @@ -7,13 +7,12 @@ using System.Collections.Generic; using UnityEngine; -using UnityEngine.UI; namespace XCharts { /// /// A data item of serie. - /// 系列中的一个数据项。可存储数据名和1-n维的数据。 + /// 系列中的一个数据项。可存储数据名和1-n维个数据。 /// [System.Serializable] public class SerieData : ChildComponent @@ -36,7 +35,6 @@ namespace XCharts public ChartLabel labelObject { get; set; } private bool m_Show = true; - private float m_RtPieOutsideRadius; /// /// the name of data item. @@ -103,71 +101,7 @@ namespace XCharts /// 该数据项是否要显示。 /// public bool show { get { return m_Show; } set { m_Show = value; } } - /// - /// Whether the data item is highlighted. - /// 该数据项是否被高亮,一般由鼠标悬停或图例悬停触发高亮。 - /// - public bool highlighted { get; set; } - public Vector3 labelPosition { get; set; } - private bool m_CanShowLabel = true; - /// - /// 是否可以显示Label - /// - public bool canShowLabel { get { return m_CanShowLabel; } set { m_CanShowLabel = value; } } - /// - /// 饼图数据项的开始角度(运行时自动计算) - /// - public float runtimePieStartAngle { get; internal set; } - /// - /// 饼图数据项的结束角度(运行时自动计算) - /// - public float runtimePieToAngle { get; internal set; } - /// - /// 饼图数据项的一半时的角度(运行时自动计算) - /// - public float runtimePieHalfAngle { get; internal set; } - /// - /// 饼图数据项的当前角度(运行时自动计算) - /// - public float runtimePieCurrAngle { get; internal set; } - /// - /// 饼图数据项的内半径 - /// - public float runtimePieInsideRadius { get; internal set; } - /// - /// 饼图数据项的外半径 - /// - public float runtimePieOutsideRadius - { - get - { - if (radius > 0) return radius; - else return m_RtPieOutsideRadius; - } - internal set - { - m_RtPieOutsideRadius = value; - } - } - /// - /// 饼图数据项的偏移半径 - /// - public float runtimePieOffsetRadius { get; internal set; } - public Vector3 runtimePosition { get; set; } - /// - /// 绘制区域。 - /// - public Rect runtimeRect { get; set; } - public Rect runtimeSubRect { get; set; } - public int runtimeLevel { get; set; } - public SerieData runtimeParent { get; set; } - public Color32 runtimeColor { get; set; } - public double runtimeArea { get; set; } - public float runtimeAngle { get; set; } - public Vector3 runtiemPieOffsetCenter { get; set; } - public float runtimeStackHig { get; set; } - public Image runtimeSymbol { get; set; } private List m_PreviousData = new List(); private List m_DataUpdateTime = new List(); private List m_DataUpdateFlag = new List(); @@ -177,11 +111,11 @@ namespace XCharts { index = 0; labelObject = null; - highlighted = false; m_Name = string.Empty; m_Show = true; m_Selected = false; - m_CanShowLabel = true; + context.canShowLabel = true; + context.highlighted = false; m_Radius = 0; m_Data.Clear(); m_PreviousData.Clear(); diff --git a/Assets/XCharts/Runtime/Serie/SerieDataContext.cs b/Assets/XCharts/Runtime/Serie/SerieDataContext.cs index ea25d150..cea05a58 100644 --- a/Assets/XCharts/Runtime/Serie/SerieDataContext.cs +++ b/Assets/XCharts/Runtime/Serie/SerieDataContext.cs @@ -5,7 +5,6 @@ /* */ /************************************************/ -using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; @@ -13,5 +12,53 @@ namespace XCharts { public class SerieDataContext { + public Vector3 labelPosition { get; set; } + /// + /// 开始角度 + /// + public float startAngle { get; internal set; } + /// + /// 结束角度 + /// + public float toAngle { get; internal set; } + /// + /// 一半时的角度 + /// + public float halfAngle { get; internal set; } + /// + /// 当前角度 + /// + public float currentAngle { get; internal set; } + /// + /// 饼图数据项的内半径 + /// + public float insideRadius { get; internal set; } + /// + /// 饼图数据项的偏移半径 + /// + public float offsetRadius { get; internal set; } + public float outsideRadius { get; set; } + public Vector3 position { get; set; } + /// + /// 绘制区域。 + /// + public Rect rect { get; set; } + public Rect subRect { get; set; } + public int level { get; set; } + public SerieData parent { get; set; } + public Color32 color { get; set; } + public double area { get; set; } + public float angle { get; set; } + public Vector3 offsetCenter { get; set; } + public float stackHeight { get; set; } + + public bool canShowLabel { get; set; } + public Image symbol { get; set; } + /// + /// Whether the data item is highlighted. + /// 该数据项是否被高亮,一般由鼠标悬停或图例悬停触发高亮。 + /// + public bool highlighted { get; set; } + } } \ No newline at end of file diff --git a/Assets/XCharts/Runtime/Serie/SerieHandler.cs b/Assets/XCharts/Runtime/Serie/SerieHandler.cs index 278bcdc2..435f56d1 100644 --- a/Assets/XCharts/Runtime/Serie/SerieHandler.cs +++ b/Assets/XCharts/Runtime/Serie/SerieHandler.cs @@ -222,9 +222,9 @@ namespace XCharts var serieLabel = SerieHelper.GetSerieLabel(serie, serieData); var iconStyle = SerieHelper.GetIconStyle(serie, serieData); var isIgnore = serie.IsIgnoreIndex(serieData.index); - serieData.labelObject.SetPosition(serieData.runtimePosition); + serieData.labelObject.SetPosition(serieData.context.position); serieData.labelObject.UpdateIcon(iconStyle); - if (serie.show && serieLabel.show && serieData.canShowLabel && !isIgnore) + if (serie.show && serieLabel.show && serieData.context.canShowLabel && !isIgnore) { var value = serieData.GetData(1); var content = SerieLabelHelper.GetFormatterContent(serie, serieData, value, total, @@ -235,7 +235,7 @@ namespace XCharts && !serie.areaStyle.show; SerieLabelHelper.ResetLabel(serieData.labelObject.label, serieLabel, chart.theme, colorIndex); serieData.SetLabelActive(!isIgnore); - serieData.labelObject.SetPosition(serieData.runtimePosition + (invert ? -serieLabel.offset : serieLabel.offset)); + serieData.labelObject.SetPosition(serieData.context.position + (invert ? -serieLabel.offset : serieLabel.offset)); serieData.labelObject.SetText(content); } else