protected int GetPiePosIndex(Serie serie, Vector2 local) { if (serie.type != SerieType.Pie) { return(-1); } var dist = Vector2.Distance(local, serie.runtimeCenterPos); if (dist < serie.runtimeInsideRadius || dist > serie.runtimeOutsideRadius) { return(-1); } Vector2 dir = local - new Vector2(serie.runtimeCenterPos.x, serie.runtimeCenterPos.y); float angle = ChartHelper.GetAngle360(Vector2.up, dir); for (int i = 0; i < serie.data.Count; i++) { var serieData = serie.data[i]; if (angle >= serieData.runtimePieStartAngle && angle <= serieData.runtimePieToAngle) { return(i); } } return(-1); }
protected int GetPiePosIndex(Serie serie, Vector2 local) { if (serie.type != SerieType.Pie) { return(-1); } var dist = Vector2.Distance(local, serie.runtimeCenterPos); var maxRadius = serie.runtimeOutsideRadius + 3 * chart.theme.serie.pieSelectedOffset; if (dist < serie.runtimeInsideRadius || dist > maxRadius) { return(-1); } Vector2 dir = local - new Vector2(serie.runtimeCenterPos.x, serie.runtimeCenterPos.y); float angle = ChartHelper.GetAngle360(Vector2.up, dir); for (int i = 0; i < serie.data.Count; i++) { var serieData = serie.data[i]; if (angle >= serieData.runtimePieStartAngle && angle <= serieData.runtimePieToAngle) { var ndist = !serieData.selected ? dist : Vector2.Distance(local, serieData.runtiemPieOffsetCenter); if (ndist >= serieData.runtimePieInsideRadius && ndist <= serieData.runtimePieOutsideRadius) { return(i); } } } return(-1); }
protected override void CheckTootipArea(Vector2 local) { var dist = Vector2.Distance(local, m_Polar.runtimeCenterPos); if (dist > m_Polar.runtimeRadius) { m_Tooltip.runtimeAngle = -1; if (m_Tooltip.IsActive()) { foreach (var kv in m_Tooltip.runtimeSerieIndex) { var serie = m_Series.GetSerie(kv.Key); foreach (var dataIndex in kv.Value) { serie.GetSerieData(dataIndex).highlighted = false; } } m_Tooltip.ClearSerieDataIndex(); m_Tooltip.SetActive(false); m_AngleAxis.SetTooltipLabelActive(false); m_RadiusAxis.SetTooltipLabelActive(false); RefreshChart(); } return; } m_Tooltip.ClearSerieDataIndex(); Vector2 dir = local - new Vector2(m_Polar.runtimeCenterPos.x, m_Polar.runtimeCenterPos.y); float angle = ChartHelper.GetAngle360(Vector2.up, dir); foreach (var serie in m_Series.list) { switch (serie.type) { case SerieType.Line: bool refresh = false; var count = serie.data.Count; SerieHelper.UpdateMinMaxData(serie, 1, -1); var diff = (serie.runtimeDataMax - serie.runtimeDataMin) / (count - 1); for (int j = 0; j < count; j++) { var serieData = serie.data[j]; var flag = Mathf.Abs(serieData.runtimeAngle - angle) < Mathf.Abs(diff / 2); if (serieData.highlighted != flag) { refresh = true; } serieData.highlighted = flag; if (flag) { m_Tooltip.runtimeAngle = (serieData.runtimeAngle - m_AngleAxis.runtimeStartAngle + 360) % 360; m_Tooltip.AddSerieDataIndex(serie.index, j); } } if (refresh) { RefreshChart(); } break; case SerieType.Bar: break; case SerieType.Scatter: case SerieType.EffectScatter: break; } } m_Tooltip.UpdateContentPos(local + m_Tooltip.offset); UpdateTooltip(); if (m_Tooltip.type == Tooltip.Type.Corss) { RefreshChart(); } }