internal override void UpdateAxisLabelText(Axis axis)
 {
     base.UpdateAxisLabelText(axis);
     if (axis.IsTime() || axis.IsValue())
     {
         for (int i = 0; i < axis.context.labelObjectList.Count; i++)
         {
             var label = axis.context.labelObjectList[i];
             if (label != null)
             {
                 var pos = GetLabelPosition(0, i);
                 label.SetPosition(pos);
                 CheckValueLabelActive(component, i, label, pos);
             }
         }
     }
 }
Ejemplo n.º 2
0
        /// <summary>
        /// 获得分割线条数
        /// </summary>
        /// <param name="dataZoom"></param>
        /// <returns></returns>
        public static int GetScaleNumber(Axis axis, float coordinateWidth, DataZoom dataZoom = null)
        {
            int splitNum = GetSplitNumber(axis, coordinateWidth, dataZoom);

            if (splitNum == 0)
            {
                return(0);
            }

            if (axis.IsCategory())
            {
                var dataCount = axis.GetDataList(dataZoom).Count;
                var scaleNum  = 0;

                if (axis.boundaryGap)
                {
                    scaleNum = dataCount > 2 && dataCount % splitNum == 0 ?
                               splitNum + 1 :
                               splitNum + 2;
                }
                else
                {
                    if (dataCount < splitNum)
                    {
                        scaleNum = splitNum;
                    }
                    else
                    {
                        scaleNum = dataCount > 2 && dataCount % splitNum == 0 ?
                                   splitNum :
                                   splitNum + 1;
                    }
                }
                return(scaleNum);
            }
            else if (axis.IsTime())
            {
                return(splitNum);
            }
            else
            {
                return(splitNum + 1);
            }
        }
        private void GetSerieDataIndexByAxis(Serie serie, Axis axis, GridCoord grid, int dimension = 0)
        {
            var currValue       = 0d;
            var lastValue       = 0d;
            var nextValue       = 0d;
            var axisValue       = axis.context.pointerValue;
            var isTimeAxis      = axis.IsTime();
            var dataCount       = serie.dataCount;
            var themeSymbolSize = chart.theme.serie.scatterSymbolSize;
            var data            = serie.data;

            if (!isTimeAxis)
            {
                serie.context.sortedData.Clear();
                for (int i = 0; i < dataCount; i++)
                {
                    var serieData = serie.data[i];
                    serieData.index = i;
                    serie.context.sortedData.Add(serieData);
                }
                serie.context.sortedData.Sort(delegate(SerieData a, SerieData b)
                {
                    return(a.GetData(dimension).CompareTo(b.GetData(dimension)));
                });
                data = serie.context.sortedData;
            }
            serie.context.pointerAxisDataIndexs.Clear();
            for (int i = 0; i < dataCount; i++)
            {
                var serieData = data[i];
                currValue = serieData.GetData(dimension);
                if (i == 0)
                {
                    nextValue = data[i + 1].GetData(dimension);
                    if (axisValue <= currValue + (nextValue - currValue) / 2)
                    {
                        serie.context.pointerAxisDataIndexs.Add(serieData.index);
                        break;
                    }
                }
                else if (i == dataCount - 1)
                {
                    if (axisValue > lastValue + (currValue - lastValue) / 2)
                    {
                        serie.context.pointerAxisDataIndexs.Add(serieData.index);
                        break;
                    }
                }
                else
                {
                    nextValue = data[i + 1].GetData(dimension);
                    if (axisValue > (currValue - (currValue - lastValue) / 2) && axisValue <= currValue + (nextValue - currValue) / 2)
                    {
                        serie.context.pointerAxisDataIndexs.Add(serieData.index);
                        break;
                    }
                }
                lastValue = currValue;
            }
            if (serie.context.pointerAxisDataIndexs.Count > 0)
            {
                var index = serie.context.pointerAxisDataIndexs[0];
                serie.context.pointerItemDataIndex = index;
                axis.context.axisTooltipValue      = serie.GetSerieData(index).GetData(dimension);
            }
            else
            {
                serie.context.pointerItemDataIndex = -1;
                axis.context.axisTooltipValue      = 0;
            }
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 获得分割段宽度
        /// </summary>
        /// <param name="coordinateWidth"></param>
        /// <param name="dataZoom"></param>
        /// <returns></returns>
        public static float GetScaleWidth(Axis axis, float coordinateWidth, int index, DataZoom dataZoom = null)
        {
            if (index < 0)
            {
                return(0);
            }

            int num      = GetScaleNumber(axis, coordinateWidth, dataZoom);
            int splitNum = GetSplitNumber(axis, coordinateWidth, dataZoom);

            if (num <= 0)
            {
                num = 1;
            }

            if (axis.IsTime() || axis.IsValue())
            {
                var value     = axis.GetLabelValue(index);
                var lastValue = axis.GetLabelValue(index - 1);
                return(axis.context.minMaxRange == 0 ?
                       0 :
                       (float)(coordinateWidth * (value - lastValue) / axis.context.minMaxRange));
            }
            else
            {
                var data = axis.GetDataList(dataZoom);
                if (axis.IsCategory() && data.Count > 0)
                {
                    var count = axis.boundaryGap ? data.Count : data.Count - 1;
                    int tick  = count / splitNum;
                    if (count <= 0)
                    {
                        return(0);
                    }

                    var each = coordinateWidth / count;
                    if (axis.insertDataToHead)
                    {
                        var max = axis.boundaryGap ? splitNum : splitNum - 1;
                        if (index == 1)
                        {
                            if (axis.axisTick.alignWithLabel)
                            {
                                return(each * tick);
                            }
                            else
                            {
                                return(coordinateWidth - each * tick * max);
                            }
                        }
                        else
                        {
                            if (count < splitNum)
                            {
                                return(each);
                            }
                            else
                            {
                                return(each * (count / splitNum));
                            }
                        }
                    }
                    else
                    {
                        var max = axis.boundaryGap ? num - 1 : num;
                        if (index >= max)
                        {
                            if (axis.axisTick.alignWithLabel)
                            {
                                return(each * tick);
                            }
                            else
                            {
                                return(coordinateWidth - each * tick * (index - 1));
                            }
                        }
                        else
                        {
                            if (count < splitNum)
                            {
                                return(each);
                            }
                            else
                            {
                                return(each * (count / splitNum));
                            }
                        }
                    }
                }
                else
                {
                    if (splitNum <= 0)
                    {
                        return(0);
                    }
                    else
                    {
                        return(coordinateWidth / splitNum);
                    }
                }
            }
        }