protected virtual void DrawSingAxisScatterSerie(VertexHelper vh, BaseScatter serie) { if (serie.animation.HasFadeOut()) { return; } if (!serie.show) { return; } var axis = chart.GetChartComponent <SingleAxis>(serie.singleAxisIndex); if (axis == null) { return; } DataZoom xDataZoom; DataZoom yDataZoom; chart.GetDataZoomOfSerie(serie, out xDataZoom, out yDataZoom); var theme = chart.theme; int maxCount = serie.maxShow > 0 ? (serie.maxShow > serie.dataCount ? serie.dataCount : serie.maxShow) : serie.dataCount; serie.animation.InitProgress(0, 1); var rate = serie.animation.GetCurrRate(); var dataChangeDuration = serie.animation.GetUpdateAnimationDuration(); var dataChanging = false; var dataList = serie.GetDataList(xDataZoom); var isEffectScatter = serie is EffectScatter; var colorIndex = serie.context.colorIndex; serie.containerIndex = axis.index; serie.containterInstanceId = axis.instanceId; foreach (var serieData in dataList) { var symbol = SerieHelper.GetSerieSymbol(serie, serieData); if (!symbol.ShowSymbol(serieData.index, maxCount)) { continue; } var highlight = serie.highlight || serieData.context.highlight; 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); var symbolBorder = SerieHelper.GetSymbolBorder(serie, serieData, theme, highlight); var borderColor = SerieHelper.GetSymbolBorderColor(serie, serieData, theme, highlight); var cornerRadius = SerieHelper.GetSymbolCornerRadius(serie, serieData, highlight); var xValue = serieData.GetCurrData(0, dataChangeDuration, axis.inverse); if (serieData.IsDataChanged()) { dataChanging = true; } var pos = Vector3.zero; if (axis.orient == Orient.Horizonal) { var xDataHig = GetDataHig(axis, xValue, axis.context.width); var yDataHig = axis.context.height / 2; pos = new Vector3(axis.context.x + xDataHig, axis.context.y + yDataHig); } else { var yDataHig = GetDataHig(axis, xValue, axis.context.width); var xDataHig = axis.context.height / 2; pos = new Vector3(axis.context.x + xDataHig, axis.context.y + yDataHig); } serie.context.dataPoints.Add(pos); serieData.context.position = pos; var datas = serieData.data; var symbolSize = 0f; if (serie.highlight || serieData.context.highlight) { symbolSize = symbol.GetSelectedSize(datas, theme.serie.scatterSymbolSelectedSize); } else { symbolSize = symbol.GetSize(datas, theme.serie.scatterSymbolSize); } symbolSize *= rate; if (isEffectScatter) { if (symbolSize > 100) { symbolSize = 100; } for (int count = 0; count < symbol.animationSize.Count; count++) { var nowSize = symbol.animationSize[count]; color.a = (byte)(255 * (symbolSize - nowSize) / symbolSize); chart.DrawSymbol(vh, symbol.type, nowSize, symbolBorder, pos, color, toColor, emptyColor, borderColor, symbol.gap, cornerRadius); } chart.RefreshPainter(serie); } else { if (symbolSize > 100) { symbolSize = 100; } chart.DrawSymbol(vh, symbol.type, symbolSize, symbolBorder, pos, color, toColor, emptyColor, borderColor, symbol.gap, cornerRadius); } } if (!serie.animation.IsFinish()) { serie.animation.CheckProgress(1); chart.RefreshPainter(serie); } if (dataChanging) { chart.RefreshPainter(serie); } }
protected virtual void DrawScatterSerie(VertexHelper vh, BaseScatter serie) { if (serie.animation.HasFadeOut()) { return; } if (!serie.show) { return; } XAxis xAxis; if (!chart.TryGetChartComponent <XAxis>(out xAxis, serie.xAxisIndex)) { return; } YAxis yAxis; if (!chart.TryGetChartComponent <YAxis>(out yAxis, serie.yAxisIndex)) { return; } if (!chart.TryGetChartComponent <GridCoord>(out m_Grid, xAxis.gridIndex)) { return; } DataZoom xDataZoom; DataZoom yDataZoom; chart.GetDataZoomOfSerie(serie, out xDataZoom, out yDataZoom); var theme = chart.theme; int maxCount = serie.maxShow > 0 ? (serie.maxShow > serie.dataCount ? serie.dataCount : serie.maxShow) : serie.dataCount; serie.animation.InitProgress(0, 1); var rate = serie.animation.GetCurrRate(); var dataChangeDuration = serie.animation.GetUpdateAnimationDuration(); var dataChanging = false; var interacting = false; var dataList = serie.GetDataList(xDataZoom); var isEffectScatter = serie is EffectScatter; var colorIndex = serie.context.colorIndex; serie.containerIndex = m_Grid.index; serie.containterInstanceId = m_Grid.instanceId; foreach (var serieData in dataList) { var symbol = SerieHelper.GetSerieSymbol(serie, serieData); if (!symbol.ShowSymbol(serieData.index, maxCount)) { continue; } var highlight = serie.highlight || serieData.context.highlight; 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); var symbolBorder = SerieHelper.GetSymbolBorder(serie, serieData, theme, highlight); var borderColor = SerieHelper.GetSymbolBorderColor(serie, serieData, theme, highlight); var cornerRadius = SerieHelper.GetSymbolCornerRadius(serie, serieData, highlight); double xValue = serieData.GetCurrData(0, dataChangeDuration, xAxis.inverse); double yValue = serieData.GetCurrData(1, dataChangeDuration, yAxis.inverse); if (serieData.IsDataChanged()) { dataChanging = true; } float pX = m_Grid.context.x + xAxis.axisLine.GetWidth(theme.axis.lineWidth); float pY = m_Grid.context.y + yAxis.axisLine.GetWidth(theme.axis.lineWidth); float xDataHig = GetDataHig(xAxis, xValue, m_Grid.context.width); float yDataHig = GetDataHig(yAxis, yValue, m_Grid.context.height); var pos = new Vector3(pX + xDataHig, pY + yDataHig); if (!m_Grid.Contains(pos)) { continue; } serie.context.dataPoints.Add(pos); serieData.context.position = pos; var datas = serieData.data; var symbolSize = serie.highlight || serieData.context.highlight ? theme.serie.scatterSymbolSelectedSize : theme.serie.scatterSymbolSize; if (!serieData.interact.TryGetValue(ref symbolSize, ref interacting)) { symbolSize = highlight ? symbol.GetSelectedSize(serieData.data, symbolSize) : symbol.GetSize(serieData.data, symbolSize); serieData.interact.SetValue(ref interacting, symbolSize); } symbolSize *= rate; if (isEffectScatter) { for (int count = 0; count < symbol.animationSize.Count; count++) { var nowSize = symbol.animationSize[count]; color.a = (byte)(255 * (symbolSize - nowSize) / symbolSize); chart.DrawSymbol(vh, symbol.type, nowSize, symbolBorder, pos, color, toColor, emptyColor, borderColor, symbol.gap, cornerRadius); } chart.RefreshPainter(serie); } else { if (symbolSize > 100) { symbolSize = 100; } chart.DrawSymbol(vh, symbol.type, symbolSize, symbolBorder, pos, color, toColor, emptyColor, borderColor, symbol.gap, cornerRadius); } } if (!serie.animation.IsFinish()) { serie.animation.CheckProgress(1); chart.RefreshPainter(serie); } if (dataChanging || interacting) { chart.RefreshPainter(serie); } }