private void DrawLineSerie(VertexHelper vh, Line serie) { if (!serie.show) { return; } if (serie.animation.HasFadeOut()) { return; } Axis axis; Axis relativedAxis; var isY = chart.GetSerieGridCoordAxis(serie, out axis, out relativedAxis); if (axis == null) { return; } if (relativedAxis == null) { return; } m_SerieGrid = chart.GetChartComponent <GridCoord>(axis.gridIndex); if (m_SerieGrid == null) { return; } if (m_EndLabel != null && !m_SerieGrid.context.endLabelList.Contains(m_EndLabel)) { m_SerieGrid.context.endLabelList.Add(m_EndLabel); } var visualMap = chart.GetVisualMapOfSerie(serie); var dataZoom = chart.GetDataZoomOfAxis(axis); var showData = serie.GetDataList(dataZoom); if (showData.Count <= 0) { return; } var axisLength = isY ? m_SerieGrid.context.height : m_SerieGrid.context.width; var scaleWid = AxisHelper.GetDataWidth(axis, axisLength, showData.Count, dataZoom); int maxCount = serie.maxShow > 0 ? (serie.maxShow > showData.Count ? showData.Count : serie.maxShow) : showData.Count; int rate = LineHelper.GetDataAverageRate(serie, m_SerieGrid, maxCount, false); var totalAverage = serie.sampleAverage > 0 ? serie.sampleAverage : DataHelper.DataAverage(ref showData, serie.sampleType, serie.minShow, maxCount, rate); var dataChanging = false; var dataChangeDuration = serie.animation.GetUpdateAnimationDuration(); var interacting = false; var lineWidth = LineHelper.GetLineWidth(ref interacting, serie, chart.theme.serie.lineWidth); axis.context.scaleWidth = scaleWid; serie.containerIndex = m_SerieGrid.index; serie.containterInstanceId = m_SerieGrid.instanceId; Serie lastSerie = null; var isStack = SeriesHelper.IsStack <Line>(chart.series, serie.stack); if (isStack) { lastSerie = SeriesHelper.GetLastStackSerie(chart.series, serie); SeriesHelper.UpdateStackDataList(chart.series, serie, dataZoom, m_StackSerieData); } var lp = Vector3.zero; for (int i = serie.minShow; i < maxCount; i += rate) { var serieData = showData[i]; var isIgnore = serie.IsIgnoreValue(serieData); if (isIgnore) { serieData.context.stackHeight = 0; serieData.context.position = Vector3.zero; if (serie.ignoreLineBreak && serie.context.dataIgnores.Count > 0) { serie.context.dataIgnores[serie.context.dataIgnores.Count - 1] = true; } } else { var np = Vector3.zero; 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); serieData.context.stackHeight = GetDataPoint(isY, axis, relativedAxis, m_SerieGrid, xValue, relativedValue, i, scaleWid, isStack, ref np); serieData.context.isClip = false; if (serie.clip && !m_SerieGrid.Contains(np)) { if (m_SerieGrid.BoundaryPoint(lp, np, ref np)) { serieData.context.isClip = true; } } serie.context.dataIgnores.Add(false); serieData.context.position = np; serie.context.dataPoints.Add(np); lp = np; } } if (dataChanging || interacting) { chart.RefreshPainter(serie); } if (serie.context.dataPoints.Count <= 0) { return; } serie.animation.InitProgress(serie.context.dataPoints, isY); VisualMapHelper.AutoSetLineMinMax(visualMap, serie, isY, axis, relativedAxis); LineHelper.UpdateSerieDrawPoints(serie, chart.settings, chart.theme, visualMap, lineWidth, isY); LineHelper.DrawSerieLineArea(vh, serie, lastSerie, chart.theme, visualMap, isY, axis, relativedAxis, m_SerieGrid); LineHelper.DrawSerieLine(vh, chart.theme, serie, visualMap, m_SerieGrid, axis, relativedAxis, lineWidth); serie.context.vertCount = vh.currentVertCount; if (!serie.animation.IsFinish()) { serie.animation.CheckProgress(); serie.animation.CheckSymbol(serie.symbol.GetSize(null, chart.theme.serie.lineSymbolSize)); chart.RefreshPainter(serie); } }