private static void CheckSerieDataLabel(Serie serie, SerieData serieData, int total, bool isLeft, ComponentTheme theme, ref Vector3 lastCheckPos, ref float lastX) { if (!serieData.context.canShowLabel) { serieData.SetLabelActive(false); return; } if (!serieData.show) { return; } var serieLabel = SerieHelper.GetSerieLabel(serie, serieData); var isOutside = serieLabel.position == LabelStyle.Position.Outside || serieLabel.position == LabelStyle.Position.Default; if (!serieLabel.show) { return; } if (!isOutside) { return; } var labelLine = SerieHelper.GetSerieLabelLine(serie, serieData); var fontSize = serieData.labelObject.GetHeight(); if (lastCheckPos == Vector3.zero) { lastCheckPos = serieData.context.labelPosition; } else if (serieData.context.labelPosition.x != 0) { if (lastCheckPos.y - serieData.context.labelPosition.y < fontSize) { var labelRadius = serie.context.outsideRadius + labelLine.lineLength1; var y1 = lastCheckPos.y - fontSize; 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.context.center.x + Mathf.Sqrt(diffX) * (isLeft ? -1 : 1); var newPos = new Vector3(x1, y1); serieData.context.labelPosition = newPos; var angle = ChartHelper.GetAngle360(Vector2.up, newPos - serie.context.center); if (angle >= 180 && angle <= 270) { serieData.context.labelPosition = new Vector3(isLeft?(++lastX): (--lastX), y1); } else if (angle < 180 && angle >= 90) { serieData.context.labelPosition = new Vector3(isLeft?(++lastX): (--lastX), y1); } else { lastX = x1; } } else { lastX = serieData.context.labelPosition.x; } lastCheckPos = serieData.context.labelPosition; serieData.labelObject.SetPosition(SerieLabelHelper.GetRealLabelPosition(serie, serieData, serieLabel, labelLine)); } }
public override Vector3 GetSerieDataLabelPosition(SerieData serieData, LabelStyle label) { var labelLine = SerieHelper.GetSerieLabelLine(serie, serieData); return(SerieLabelHelper.GetRealLabelPosition(serie, serieData, label, labelLine)); }