Esempio n. 1
0
        public static TooltipView CreateView(Tooltip tooltip, ThemeStyle theme, Transform parent)
        {
            var view = new TooltipView();

            view.tooltip = tooltip;
            view.theme   = theme.tooltip;

            view.gameObject = ChartHelper.AddObject("view", parent, anchorMin, anchorMax, pivot, Vector3.zero);
            view.gameObject.transform.localPosition = Vector3.zero;
            view.transform = view.gameObject.transform;

            view.background        = ChartHelper.GetOrAddComponent <Image>(view.gameObject);
            view.background.sprite = tooltip.backgroundImage;
            view.background.type   = tooltip.backgroundType;
            view.background.color  = ChartHelper.IsClearColor(tooltip.backgroundColor) ?
                                     Color.white : tooltip.backgroundColor;

            view.border                 = ChartHelper.GetOrAddComponent <Outline>(view.gameObject);
            view.border.enabled         = tooltip.borderWidth > 0;
            view.border.useGraphicAlpha = false;
            view.border.effectColor     = tooltip.borderColor;
            view.border.effectDistance  = new Vector2(tooltip.borderWidth, -tooltip.borderWidth);

            view.layout = ChartHelper.GetOrAddComponent <VerticalLayoutGroup>(view.gameObject);
            view.layout.childControlHeight     = false;
            view.layout.childControlWidth      = false;
            view.layout.childForceExpandHeight = false;
            view.layout.childForceExpandWidth  = false;
            view.layout.padding = new RectOffset(tooltip.paddingLeftRight,
                                                 tooltip.paddingLeftRight,
                                                 tooltip.paddingTopBottom,
                                                 tooltip.paddingTopBottom);

            view.title = ChartHelper.AddChartLabel("title", view.gameObject.transform, tooltip.titleLabelStyle, theme.tooltip,
                                                   "", Color.clear, TextAnchor.MiddleLeft);

            var item = CreateViewItem(0, view.gameObject.transform, tooltip, theme.tooltip);

            view.m_Items.Add(item);

            view.Refresh();

            return(view);
        }
        public static Color32 GetItemStyleGradientColor(ItemStyle itemStyle, Vector3 pos, BaseChart chart,
                                                        Axis axis, Color32 defaultColor)
        {
            var min   = axis.context.minValue;
            var max   = axis.context.maxValue;
            var grid  = chart.GetChartComponent <GridCoord>(axis.gridIndex);
            var value = min + (pos.x - grid.context.x) / grid.context.width * (max - min);
            var rate  = (value - min) / (max - min);
            var color = itemStyle.GetGradientColor((float)rate, defaultColor);

            if (ChartHelper.IsClearColor(color))
            {
                return(defaultColor);
            }
            else
            {
                return(color);
            }
        }
Esempio n. 3
0
        public static Color GetContentColor(BaseChart chart, int legendIndex, string legendName, Legend legend, ThemeStyle theme, bool active)
        {
            var textStyle = legend.labelStyle.textStyle;

            if (active)
            {
                if (legend.labelStyle.textStyle.autoColor)
                {
                    return(SeriesHelper.GetNameColor(chart, legendIndex, legendName));
                }
                else
                {
                    return(!ChartHelper.IsClearColor(textStyle.color) ? textStyle.color : theme.legend.textColor);
                }
            }
            else
            {
                return(theme.legend.unableColor);
            }
        }
Esempio n. 4
0
        public static Color32 GetItemBackgroundColor(Serie serie, SerieData serieData, ThemeStyle theme, int index,
                                                     bool highlight, bool useDefault = true)
        {
            var color = ChartConst.clearColor32;

            if (highlight)
            {
                var itemStyleEmphasis = GetItemStyleEmphasis(serie, serieData);
                if (itemStyleEmphasis != null && !ChartHelper.IsClearColor(itemStyleEmphasis.backgroundColor))
                {
                    color = itemStyleEmphasis.backgroundColor;
                    ChartHelper.SetColorOpacity(ref color, itemStyleEmphasis.opacity);
                    return(color);
                }
            }
            var itemStyle = GetItemStyle(serie, serieData);

            if (!ChartHelper.IsClearColor(itemStyle.backgroundColor))
            {
                color = itemStyle.backgroundColor;
                if (highlight)
                {
                    color = ChartHelper.GetHighlightColor(color);
                }
                ChartHelper.SetColorOpacity(ref color, itemStyle.opacity);
                return(color);
            }
            else if (useDefault)
            {
                color = theme.GetColor(index);
                if (highlight)
                {
                    color = ChartHelper.GetHighlightColor(color);
                }
                color.a = 50;
                return(color);
            }
            return(color);
        }
Esempio n. 5
0
        public static Color32 GetItemToColor(Serie serie, SerieData serieData, ThemeStyle theme, int index, bool highlight, bool opacity = true)
        {
            if (serie == null)
            {
                return(ChartConst.clearColor32);
            }

            ItemStyle itemStyle = null;

            if (highlight)
            {
                itemStyle = GetItemStyleEmphasis(serie, serieData);
            }
            if (itemStyle == null)
            {
                itemStyle = GetItemStyle(serie, serieData);
            }

            var color = itemStyle.toColor;

            if (ChartHelper.IsClearColor(color))
            {
                color = ChartHelper.IsClearColor(itemStyle.color) ?
                        theme.GetColor(index) :
                        itemStyle.color;
            }

            if (highlight)
            {
                color = ChartHelper.GetHighlightColor(color);
            }

            if (opacity)
            {
                ChartHelper.SetColorOpacity(ref color, itemStyle.opacity);
            }
            return(color);
        }
Esempio n. 6
0
 private void DrawCoord(VertexHelper vh, GridCoord grid)
 {
     if (!grid.show)
     {
         return;
     }
     if (!ChartHelper.IsClearColor(grid.backgroundColor))
     {
         var p1 = new Vector2(grid.context.x, grid.context.y);
         var p2 = new Vector2(grid.context.x, grid.context.y + grid.context.height);
         var p3 = new Vector2(grid.context.x + grid.context.width, grid.context.y + grid.context.height);
         var p4 = new Vector2(grid.context.x + grid.context.width, grid.context.y);
         UGL.DrawQuadrilateral(vh, p1, p2, p3, p4, grid.backgroundColor);
     }
     if (grid.showBorder)
     {
         var borderWidth = grid.borderWidth == 0 ? chart.theme.axis.lineWidth * 2 : grid.borderWidth;
         var borderColor = ChartHelper.IsClearColor(grid.borderColor) ?
                           chart.theme.axis.lineColor :
                           grid.borderColor;
         UGL.DrawBorder(vh, grid.context.center, grid.context.width - borderWidth,
                        grid.context.height - borderWidth, borderWidth, borderColor);
     }
 }
 public bool IsNeedGradient()
 {
     return(!ChartHelper.IsClearColor(m_ToColor) || !ChartHelper.IsClearColor(m_ToColor2));
 }
 /// <summary>
 /// 是否需要显示边框。
 /// </summary>
 public bool NeedShowBorder()
 {
     return(borderWidth != 0 && !ChartHelper.IsClearColor(borderColor));
 }
Esempio n. 9
0
 private static bool IsColorAlphaZero(Color color)
 {
     return(!ChartHelper.IsClearColor(color) && color.a == 0);
 }
Esempio n. 10
0
        private void DrawPieLabelLine(VertexHelper vh, Serie serie, SerieData serieData, Color color)
        {
            var serieLabel = SerieHelper.GetSerieLabel(serie, serieData);
            var labelLine  = SerieHelper.GetSerieLabelLine(serie, serieData);

            if (serieLabel != null && serieLabel.show &&
                labelLine != null && labelLine.show &&
                (serieLabel.IsDefaultPosition(LabelStyle.Position.Outside)))
            {
                var insideRadius  = serieData.context.insideRadius;
                var outSideRadius = serieData.context.outsideRadius;
                var center        = serie.context.center;
                var currAngle     = serieData.context.halfAngle;

                if (!ChartHelper.IsClearColor(labelLine.lineColor))
                {
                    color = labelLine.lineColor;
                }
                else if (labelLine.lineType == LabelLine.LineType.HorizontalLine)
                {
                    color *= color;
                }

                float currSin = Mathf.Sin(currAngle * Mathf.Deg2Rad);
                float currCos = Mathf.Cos(currAngle * Mathf.Deg2Rad);
                var   radius1 = labelLine.lineType == LabelLine.LineType.HorizontalLine ?
                                serie.context.outsideRadius : outSideRadius;
                var radius3 = insideRadius + (outSideRadius - insideRadius) / 2;
                if (radius1 < serie.context.insideRadius)
                {
                    radius1 = serie.context.insideRadius;
                }
                radius1 -= 0.1f;
                var     pos0 = new Vector3(center.x + radius3 * currSin, center.y + radius3 * currCos);
                var     pos1 = new Vector3(center.x + radius1 * currSin, center.y + radius1 * currCos);
                var     pos2 = serieData.context.labelPosition;
                Vector3 pos4, pos6;
                var     horizontalLineCircleRadius = labelLine.lineWidth * 4f;
                var     lineCircleDiff             = horizontalLineCircleRadius - 0.3f;
                var     startAngle                 = serie.context.startAngle;
                if (currAngle < 90)
                {
                    var r4 = Mathf.Sqrt(radius1 * radius1 - Mathf.Pow(currCos * radius3, 2)) - currSin * radius3;
                    r4  += labelLine.lineLength1 - lineCircleDiff;
                    pos6 = pos0 + Vector3.right * lineCircleDiff;
                    pos4 = pos6 + Vector3.right * r4;
                }
                else if (currAngle < 180)
                {
                    var r4 = Mathf.Sqrt(radius1 * radius1 - Mathf.Pow(currCos * radius3, 2)) - currSin * radius3;
                    r4  += labelLine.lineLength1 - lineCircleDiff;
                    pos6 = pos0 + Vector3.right * lineCircleDiff;
                    pos4 = pos6 + Vector3.right * r4;
                }
                else if (currAngle < 270)
                {
                    var currSin1 = Mathf.Sin((360 - currAngle) * Mathf.Deg2Rad);
                    var currCos1 = Mathf.Cos((360 - currAngle) * Mathf.Deg2Rad);
                    var r4       = Mathf.Sqrt(radius1 * radius1 - Mathf.Pow(currCos1 * radius3, 2)) - currSin1 * radius3;
                    r4  += labelLine.lineLength1 - lineCircleDiff;
                    pos6 = pos0 + Vector3.left * lineCircleDiff;
                    pos4 = pos6 + Vector3.left * r4;
                }
                else
                {
                    var currSin1 = Mathf.Sin((360 - currAngle) * Mathf.Deg2Rad);
                    var currCos1 = Mathf.Cos((360 - currAngle) * Mathf.Deg2Rad);
                    var r4       = Mathf.Sqrt(radius1 * radius1 - Mathf.Pow(currCos1 * radius3, 2)) - currSin1 * radius3;
                    r4  += labelLine.lineLength1 - lineCircleDiff;
                    pos6 = pos0 + Vector3.left * lineCircleDiff;
                    pos4 = pos6 + Vector3.left * r4;
                }
                var pos5X = (currAngle - startAngle) % 360 > 180 ?
                            pos2.x - labelLine.lineLength2 : pos2.x + labelLine.lineLength2;
                var pos5  = new Vector3(pos5X, pos2.y);
                var angle = Vector3.Angle(pos1 - center, pos2 - pos1);
                if (angle > 15)
                {
                    UGL.DrawLine(vh, pos1, pos5, labelLine.lineWidth, color);
                }
                else
                {
                    switch (labelLine.lineType)
                    {
                    case LabelLine.LineType.BrokenLine:
                        UGL.DrawLine(vh, pos1, pos2, pos5, labelLine.lineWidth, color);
                        break;

                    case LabelLine.LineType.Curves:
                        UGL.DrawCurves(vh, pos1, pos5, pos1, pos2, labelLine.lineWidth, color,
                                       chart.settings.lineSmoothness);
                        break;

                    case LabelLine.LineType.HorizontalLine:
                        UGL.DrawCricle(vh, pos0, horizontalLineCircleRadius, color);
                        UGL.DrawLine(vh, pos6, pos4, labelLine.lineWidth, color);
                        break;
                    }
                }
            }
        }
Esempio n. 11
0
        private void DrawHeatmapSerie(VertexHelper vh, Heatmap serie)
        {
            if (serie.animation.HasFadeOut())
            {
                return;
            }
            XAxis xAxis;
            YAxis yAxis;

            if (!chart.TryGetChartComponent <XAxis>(out xAxis, serie.xAxisIndex))
            {
                return;
            }
            if (!chart.TryGetChartComponent <YAxis>(out yAxis, serie.yAxisIndex))
            {
                return;
            }
            m_SerieGrid       = chart.GetChartComponent <GridCoord>(xAxis.gridIndex);
            xAxis.boundaryGap = true;
            yAxis.boundaryGap = true;
            var visualMap         = chart.GetVisualMapOfSerie(serie);
            var emphasisItemStyle = serie.emphasisItemStyle;
            var xCount            = xAxis.data.Count;
            var yCount            = yAxis.data.Count;
            var xWidth            = m_SerieGrid.context.width / xCount;
            var yWidth            = m_SerieGrid.context.height / yCount;

            var zeroX       = m_SerieGrid.context.x;
            var zeroY       = m_SerieGrid.context.y;
            var rangeMin    = visualMap.rangeMin;
            var rangeMax    = visualMap.rangeMax;
            var color       = chart.theme.GetColor(serie.index);
            var borderWidth = serie.itemStyle.show ? serie.itemStyle.borderWidth : 0;
            var rectWid     = xWidth - 2 * borderWidth;
            var rectHig     = yWidth - 2 * borderWidth;

            var borderColor = serie.itemStyle.opacity > 0 ?
                              serie.itemStyle.borderColor :
                              ChartConst.clearColor32;

            borderColor.a = (byte)(borderColor.a * serie.itemStyle.opacity);

            var borderToColor = serie.itemStyle.opacity > 0 ?
                                serie.itemStyle.borderToColor :
                                ChartConst.clearColor32;

            borderToColor.a = (byte)(borderToColor.a * serie.itemStyle.opacity);

            serie.context.dataPoints.Clear();
            serie.animation.InitProgress(0, xCount);
            var animationIndex     = serie.animation.GetCurrIndex();
            var dataChangeDuration = serie.animation.GetUpdateAnimationDuration();
            var dataChanging       = false;

            serie.containerIndex       = m_SerieGrid.index;
            serie.containterInstanceId = m_SerieGrid.instanceId;
            for (int n = 0; n < serie.dataCount; n++)
            {
                var serieData = serie.data[n];
                serieData.index = n;
                var i         = (int)serieData.GetData(0);
                var j         = (int)serieData.GetData(1);
                var dimension = VisualMapHelper.GetDimension(visualMap, serieData.data.Count);
                if (serie.IsIgnoreValue(serieData, dimension))
                {
                    serie.context.dataPoints.Add(Vector3.zero);
                    continue;
                }
                var value = serieData.GetCurrData(dimension, dataChangeDuration, yAxis.inverse,
                                                  yAxis.context.minValue, yAxis.context.maxValue);
                if (serieData.IsDataChanged())
                {
                    dataChanging = true;
                }
                var pos = new Vector3(zeroX + (i + (xAxis.boundaryGap ? 0.5f : 0)) * xWidth,
                                      zeroY + (j + (yAxis.boundaryGap ? 0.5f : 0)) * yWidth);
                serie.context.dataPoints.Add(pos);
                serieData.context.position = pos;

                serieData.context.canShowLabel = false;
                serieData.context.rect         = new Rect(pos.x - rectWid / 2, pos.y - rectHig / 2, rectWid, rectHig);
                if (value == 0)
                {
                    continue;
                }
                if ((value < rangeMin && rangeMin != visualMap.min) ||
                    (value > rangeMax && rangeMax != visualMap.max))
                {
                    continue;
                }
                if (!visualMap.IsInSelectedValue(value))
                {
                    continue;
                }
                if (animationIndex >= 0 && i > animationIndex)
                {
                    continue;
                }
                color = visualMap.GetColor(value);
                if (serieData.context.highlight)
                {
                    color = ChartHelper.GetHighlightColor(color);
                }

                serieData.context.canShowLabel = true;
                serieData.context.color        = color;

                var highlight = (serieData.context.highlight) ||
                                visualMap.context.pointerIndex > 0;

                //UGL.DrawRectangle(vh, pos, rectWid / 2, rectHig / 2, color);
                UGL.DrawRectangle(vh, serieData.context.rect, color);

                if (borderWidth > 0 && !ChartHelper.IsClearColor(borderColor))
                {
                    UGL.DrawBorder(vh, pos, rectWid, rectHig, borderWidth, borderColor, borderToColor);
                }
                if (visualMap.hoverLink && highlight && emphasisItemStyle != null &&
                    emphasisItemStyle.borderWidth > 0)
                {
                    var emphasisBorderWidth = emphasisItemStyle.borderWidth;
                    var emphasisBorderColor = emphasisItemStyle.opacity > 0 ?
                                              emphasisItemStyle.borderColor : ChartConst.clearColor32;
                    var emphasisBorderToColor = emphasisItemStyle.opacity > 0 ?
                                                emphasisItemStyle.borderToColor : ChartConst.clearColor32;
                    UGL.DrawBorder(vh, pos, rectWid, rectHig, emphasisBorderWidth, emphasisBorderColor,
                                   emphasisBorderToColor);
                }
            }
            if (!serie.animation.IsFinish())
            {
                serie.animation.CheckProgress(xCount);
                chart.RefreshPainter(serie);
            }
            if (dataChanging)
            {
                chart.RefreshPainter(serie);
            }
        }
Esempio n. 12
0
 public Color32 GetColor(Color32 defaultColor)
 {
     return(ChartHelper.IsClearColor(m_Color) ? defaultColor : m_Color);
 }