Ejemplo n.º 1
0
 private void UpdateXYPosition(GridCoord grid, bool isY, Axis axis, Axis relativedAxis, int i, float categoryWidth, float barWidth, bool isStack,
                               double value, ref float pX, ref float pY)
 {
     if (isY)
     {
         if (axis.IsCategory())
         {
             pY = grid.context.y + i * categoryWidth + (axis.boundaryGap ? 0 : -categoryWidth * 0.5f);
         }
         else
         {
             if (axis.context.minMaxRange <= 0)
             {
                 pY = grid.context.y;
             }
             else
             {
                 var valueLen = (float)((value - axis.context.minValue) / axis.context.minMaxRange) * grid.context.height;
                 pY = grid.context.y + valueLen - categoryWidth * 0.5f;
             }
         }
         pX = AxisHelper.GetAxisValuePosition(grid, relativedAxis, categoryWidth, 0);
         if (isStack)
         {
             for (int n = 0; n < m_StackSerieData.Count - 1; n++)
             {
                 pX += m_StackSerieData[n][i].context.stackHeight;
             }
         }
     }
     else
     {
         if (axis.IsCategory())
         {
             pX = grid.context.x + i * categoryWidth + (axis.boundaryGap ? 0 : -categoryWidth * 0.5f);
         }
         else
         {
             if (axis.context.minMaxRange <= 0)
             {
                 pX = grid.context.x;
             }
             else
             {
                 var valueLen = (float)((value - axis.context.minValue) / axis.context.minMaxRange) * grid.context.width;
                 pX = grid.context.x + valueLen - categoryWidth * 0.5f;
             }
         }
         pY = AxisHelper.GetAxisValuePosition(grid, relativedAxis, categoryWidth, 0);
         if (isStack)
         {
             for (int n = 0; n < m_StackSerieData.Count - 1; n++)
             {
                 pY += m_StackSerieData[n][i].context.stackHeight;
             }
         }
     }
 }
 private static float GetDataHig(Axis axis, double value, float totalWidth)
 {
     if (axis.IsLog())
     {
         int   minIndex = axis.GetLogMinIndex();
         float nowIndex = axis.GetLogValue(value);
         return((nowIndex - minIndex) / axis.splitNumber * totalWidth);
     }
     else if (axis.IsCategory())
     {
         if (axis.boundaryGap)
         {
             float tick = (float)(totalWidth / (axis.context.minMaxRange + 1));
             return(tick / 2 + (float)(value - axis.context.minValue) * tick);
         }
         else
         {
             return((float)((value - axis.context.minValue) / axis.context.minMaxRange * totalWidth));
         }
     }
     else
     {
         return((float)((value - axis.context.minValue) / axis.context.minMaxRange * totalWidth));
     }
 }
        private void SetTooltipIndicatorLabel(Tooltip tooltip, Axis axis, ChartLabel label)
        {
            if (label == null)
            {
                return;
            }
            if (double.IsPositiveInfinity(axis.context.pointerValue))
            {
                return;
            }
            label.SetActive(true);
            label.SetTextActive(true);
            label.SetPosition(axis.context.pointerLabelPosition);
            if (axis.IsCategory())
            {
                label.SetText(axis.GetData((int)axis.context.pointerValue));
            }
            else
            {
                label.SetText(axis.context.pointerValue.ToString("f2"));
            }
            var textColor = axis.axisLabel.textStyle.GetColor(chart.theme.axis.textColor);

            if (ChartHelper.IsClearColor(tooltip.indicatorLabelStyle.background.color))
            {
                label.color = textColor;
            }
            else
            {
                label.color = tooltip.indicatorLabelStyle.background.color;
            }
            label.SetTextColor(Color.white);
        }
        public static Color32 GetLineGradientColor(VisualMap visualMap, Vector3 pos, GridCoord grid, Axis axis,
                                                   Axis relativedAxis, Color32 defaultColor)
        {
            double value = 0;
            double min   = 0;
            double max   = 0;

            if (visualMap.dimension == 0)
            {
                min = axis.context.minValue;
                max = axis.context.maxValue;
                if (axis.IsCategory() && axis.boundaryGap)
                {
                    float startX = grid.context.x + axis.context.scaleWidth / 2;
                    value = (min + (pos.x - startX) / (grid.context.width - axis.context.scaleWidth) * (max - min));
                    if (visualMap.IsPiecewise())
                    {
                        value = (int)value;
                    }
                }
                else
                {
                    value = min + (pos.x - grid.context.x) / grid.context.width * (max - min);
                }
            }
            else
            {
                min = relativedAxis.context.minValue;
                max = relativedAxis.context.maxValue;
                if (relativedAxis.IsCategory() && relativedAxis.boundaryGap)
                {
                    float startY = grid.context.y + relativedAxis.context.scaleWidth / 2;
                    value = (min + (pos.y - startY) / (grid.context.height - relativedAxis.context.scaleWidth) * (max - min));
                    if (visualMap.IsPiecewise())
                    {
                        value = (int)value;
                    }
                }
                else
                {
                    value = min + (pos.y - grid.context.y) / grid.context.height * (max - min);
                }
            }

            var color = visualMap.GetColor(value);

            if (ChartHelper.IsClearColor(color))
            {
                return(defaultColor);
            }
            else
            {
                if (color.a != 0)
                {
                    color.a = defaultColor.a;
                }

                return(color);
            }
        }
Ejemplo n.º 5
0
 private void UpdateXYPosition(GridCoord grid, bool isY, Axis axis, Axis relativedAxis, int i, float categoryWidth, float barWidth,
                               double value, ref float pX, ref float pY)
 {
     if (isY)
     {
         if (axis.IsCategory())
         {
             pY = grid.context.y + i * categoryWidth + (axis.boundaryGap ? 0 : -categoryWidth * 0.5f);
         }
         else
         {
             if (axis.context.minMaxRange <= 0)
             {
                 pY = grid.context.y;
             }
             else
             {
                 pY = grid.context.y + (float)((value - axis.context.minValue) / axis.context.minMaxRange) * (grid.context.height - barWidth);
             }
         }
         pX = AxisHelper.GetAxisValuePosition(grid, relativedAxis, categoryWidth, 0);
     }
     else
     {
         if (axis.IsCategory())
         {
             pX = grid.context.x + i * categoryWidth + (axis.boundaryGap ? 0 : -categoryWidth * 0.5f);
         }
         else
         {
             if (axis.context.minMaxRange <= 0)
             {
                 pX = grid.context.x;
             }
             else
             {
                 pX = grid.context.x + (float)((value - axis.context.minValue) / axis.context.minMaxRange) * (grid.context.width - barWidth);
             }
         }
         pY = AxisHelper.GetAxisValuePosition(grid, relativedAxis, categoryWidth, 0);
     }
 }
 private void GetStartEndPos(Axis xAxis, Axis yAxis, GridCoord grid, double value, ref Vector3 sp, ref Vector3 ep)
 {
     if (xAxis.IsCategory())
     {
         var pY = AxisHelper.GetAxisPosition(grid, yAxis, value);
         sp = new Vector3(grid.context.x, pY);
         ep = new Vector3(grid.context.x + grid.context.width, pY);
     }
     else
     {
         var pX = AxisHelper.GetAxisPosition(grid, xAxis, value);
         sp = new Vector3(pX, grid.context.y);
         ep = new Vector3(pX, grid.context.y + grid.context.height);
     }
 }
Ejemplo n.º 7
0
 public static bool NeedShowSplit(Axis axis)
 {
     if (!axis.show)
     {
         return(false);
     }
     if (axis.IsCategory() && axis.GetDataList().Count <= 0)
     {
         return(false);
     }
     else
     {
         return(true);
     }
 }
Ejemplo n.º 8
0
 private Vector3 GetPosition(Axis xAxis, Axis yAxis, GridCoord grid, double value, bool start)
 {
     if (yAxis.IsCategory())
     {
         var pX = AxisHelper.GetAxisPosition(grid, xAxis, value);
         return(start ?
                new Vector3(pX, grid.context.y + grid.context.height) :
                new Vector3(pX, grid.context.y));
     }
     else
     {
         var pY = AxisHelper.GetAxisPosition(grid, yAxis, value);
         return(start ?
                new Vector3(grid.context.x, pY + grid.context.height) :
                new Vector3(grid.context.x + grid.context.width, pY));
     }
 }
Ejemplo n.º 9
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);
            }
        }
Ejemplo n.º 10
0
        private static float GetAxisPositionInternal(GridCoord grid, Axis axis, float scaleWidth, double value, bool includeGridXY, bool realLength)
        {
            var isY        = axis is YAxis;
            var gridHeight = isY ? grid.context.height : grid.context.width;
            var gridXY     = isY ? grid.context.y : grid.context.x;

            if (axis.IsLog())
            {
                int   minIndex = axis.GetLogMinIndex();
                float nowIndex = axis.GetLogValue(value);
                return(includeGridXY ?
                       gridXY + (nowIndex - minIndex) / axis.splitNumber * gridHeight :
                       (nowIndex - minIndex) / axis.splitNumber * gridHeight);
            }
            else if (axis.IsCategory())
            {
                var categoryIndex = (int)value;
                return(includeGridXY ?
                       gridXY + (axis.boundaryGap ? scaleWidth / 2 : 0) + scaleWidth * categoryIndex :
                       (axis.boundaryGap ? scaleWidth / 2 : 0) + scaleWidth * categoryIndex);
            }
            else
            {
                var yDataHig = 0f;
                if (axis.context.minMaxRange != 0)
                {
                    if (realLength)
                    {
                        yDataHig = (float)(value * gridHeight / axis.context.minMaxRange);
                    }
                    else
                    {
                        yDataHig = (float)((value - axis.context.minValue) / axis.context.minMaxRange * gridHeight);
                    }
                }
                return(includeGridXY ?
                       gridXY + yDataHig :
                       yDataHig);
            }
        }
Ejemplo n.º 11
0
        public static float GetAxisPosition(GridCoord grid, Axis axis, double value, int dataCount = 0, DataZoom dataZoom = null)
        {
            var gridHeight = axis is YAxis ? grid.context.height : grid.context.width;
            var gridXY     = axis is YAxis ? grid.context.y : grid.context.x;

            if (axis.IsCategory())
            {
                if (dataCount == 0)
                {
                    dataCount = axis.data.Count;
                }
                var   categoryIndex = (int)value;
                var   scaleWid      = AxisHelper.GetDataWidth(axis, gridHeight, dataCount, dataZoom);
                float startY        = gridXY + (axis.boundaryGap ? scaleWid / 2 : 0);
                return(startY + scaleWid * categoryIndex);
            }
            else
            {
                var yDataHig = (axis.context.minMaxRange == 0) ? 0f :
                               (float)((value - axis.context.minValue) / axis.context.minMaxRange * gridHeight);
                return(gridXY + yDataHig);
            }
        }
Ejemplo n.º 12
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);
                    }
                }
            }
        }