コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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();
            }
        }