private void DrawMakLineData(VertexHelper vh, MarkLineData data, AnimationStyle animation, Serie serie, GridCoord grid, Color32 serieColor, Vector3 sp, Vector3 ep) { if (!animation.IsFinish()) { ep = Vector3.Lerp(sp, ep, animation.GetCurrDetail()); } data.runtimeCurrentEndPosition = ep; if (sp != Vector3.zero || ep != Vector3.zero) { m_RefreshLabel = true; chart.ClampInChart(ref sp); chart.ClampInChart(ref ep); var theme = chart.theme.axis; var lineColor = ChartHelper.IsClearColor(data.lineStyle.color) ? serieColor : data.lineStyle.color; var lineWidth = data.lineStyle.width == 0 ? theme.lineWidth : data.lineStyle.width; ChartDrawer.DrawLineStyle(vh, data.lineStyle, sp, ep, lineWidth, LineStyle.Type.Dashed, lineColor, lineColor); if (data.startSymbol != null && data.startSymbol.show) { DrawMarkLineSymbol(vh, data.startSymbol, serie, grid, chart.theme, sp, sp, lineColor); } if (data.endSymbol != null && data.endSymbol.show) { DrawMarkLineSymbol(vh, data.endSymbol, serie, grid, chart.theme, ep, sp, lineColor); } } }
private void InitMarkLineLabel(Serie serie, MarkLineData data, Color serieColor) { data.painter = chart.m_PainterUpper; data.refreshComponent = delegate() { var textName = string.Format("markLine_{0}_{1}", serie.index, data.index); var content = MarkLineHelper.GetFormatterContent(serie, data); var label = ChartHelper.AddChartLabel(textName, m_MarkLineLabelRoot.transform, data.label, chart.theme.axis, content, Color.clear, TextAnchor.MiddleCenter); label.SetIconActive(false); label.SetActive(data.label.show); label.SetPosition(MarkLineHelper.GetLabelPosition(data)); data.runtimeLabel = label; }; data.refreshComponent(); }
public static Vector3 GetLabelPosition(MarkLineData data) { if (!data.label.show) { return(Vector3.zero); } var dir = (data.runtimeEndPosition - data.runtimeStartPosition).normalized; var horizontal = Mathf.Abs(Vector3.Dot(dir, Vector3.right)) == 1; var labelWidth = data.runtimeLabel == null ? 50 : data.runtimeLabel.GetTextWidth(); var labelHeight = data.runtimeLabel == null ? 20 : data.runtimeLabel.GetTextHeight(); switch (data.label.position) { case LabelStyle.Position.Start: if (horizontal) { return(data.runtimeStartPosition + data.label.offset + labelWidth / 2 * Vector3.left); } else { return(data.runtimeStartPosition + data.label.offset + labelHeight / 2 * Vector3.down); } case LabelStyle.Position.Middle: var center = (data.runtimeStartPosition + data.runtimeCurrentEndPosition) / 2; if (horizontal) { return(center + data.label.offset + labelHeight / 2 * Vector3.up); } else { return(center + data.label.offset + labelWidth / 2 * Vector3.right); } default: if (horizontal) { return(data.runtimeCurrentEndPosition + data.label.offset + labelWidth / 2 * Vector3.right); } else { return(data.runtimeCurrentEndPosition + data.label.offset + labelHeight / 2 * Vector3.up); } } }
public override void SetDefaultValue() { data.Clear(); var item = new MarkLineData(); item.name = "average"; item.type = MarkLineType.Average; item.lineStyle.type = LineStyle.Type.Dashed; item.lineStyle.color = Color.clear; item.startSymbol.show = true; item.startSymbol.type = SymbolType.Circle; item.startSymbol.size = 4; item.endSymbol.show = true; item.endSymbol.type = SymbolType.Arrow; item.endSymbol.size = 5; item.label.show = true; item.label.numericFormatter = "f1"; item.label.formatter = "{c}"; data.Add(item); }
public static string GetFormatterContent(Serie serie, MarkLineData data) { var serieLabel = data.label; var numericFormatter = serieLabel.numericFormatter; if (string.IsNullOrEmpty(serieLabel.formatter)) { var content = ChartCached.NumberToStr(data.runtimeValue, numericFormatter); return(serieLabel.formatterFunction == null? content: serieLabel.formatterFunction(data.index, data.runtimeValue, null, content)); } else { var content = serieLabel.formatter; FormatterHelper.ReplaceSerieLabelContent(ref content, numericFormatter, serie.dataCount, data.runtimeValue, 0, serie.serieName, data.name, data.name, Color.clear, null); return(serieLabel.formatterFunction == null? content: serieLabel.formatterFunction(data.index, data.runtimeValue, null, content)); } }
private Vector3 GetSinglePos(Axis xAxis, Axis yAxis, GridCoord grid, Serie serie, DataZoom dataZoom, MarkLineData data, int serieDataCount) { switch (data.type) { case MarkLineType.Min: var serieData = SerieHelper.GetMinSerieData(serie, data.dimension, dataZoom); data.runtimeValue = serieData.GetData(data.dimension); var pX = GetAxisPosition(grid, xAxis, dataZoom, serieDataCount, serieData.index); var pY = GetAxisPosition(grid, yAxis, dataZoom, serieDataCount, data.runtimeValue); return(new Vector3(pX, pY)); case MarkLineType.Max: serieData = SerieHelper.GetMaxSerieData(serie, data.dimension, dataZoom); data.runtimeValue = serieData.GetData(data.dimension); pX = GetAxisPosition(grid, xAxis, dataZoom, serieDataCount, serieData.index); pY = GetAxisPosition(grid, yAxis, dataZoom, serieDataCount, data.runtimeValue); return(new Vector3(pX, pY)); case MarkLineType.None: if (data.zeroPosition) { data.runtimeValue = 0; return(grid.context.position); } else { pX = data.xPosition != 0 ? grid.context.x + data.xPosition : GetAxisPosition(grid, xAxis, dataZoom, serieDataCount, data.xValue); pY = data.yPosition != 0 ? grid.context.y + data.yPosition : GetAxisPosition(grid, yAxis, dataZoom, serieDataCount, data.yValue); data.runtimeValue = data.yValue; return(new Vector3(pX, pY)); } default: return(grid.context.position); } }