Ejemplo n.º 1
0
        public static void DrawRoundCap(VertexHelper vh, Vector3 center, float width, float radius, float angle,
                                        bool clockwise, Color color, bool end)
        {
            var px  = Mathf.Sin(angle * Mathf.Deg2Rad) * radius;
            var py  = Mathf.Cos(angle * Mathf.Deg2Rad) * radius;
            var pos = new Vector3(px, py) + center;

            if (end)
            {
                if (clockwise)
                {
                    ChartDrawer.DrawSector(vh, pos, width, color, angle, angle + 180);
                }
                else
                {
                    ChartDrawer.DrawSector(vh, pos, width, color, angle, angle - 180);
                }
            }
            else
            {
                if (clockwise)
                {
                    ChartDrawer.DrawSector(vh, pos, width, color, angle + 180, angle + 360);
                }
                else
                {
                    ChartDrawer.DrawSector(vh, pos, width, color, angle - 180, angle - 360);
                }
            }
        }
Ejemplo n.º 2
0
        protected override void DrawTooltip(VertexHelper vh)
        {
            if (m_Tooltip.runtimeAngle < 0)
            {
                return;
            }
            var lineColor    = TooltipHelper.GetLineColor(tooltip, m_ThemeInfo);
            var cenPos       = m_Polar.runtimeCenterPos;
            var radius       = m_Polar.runtimeRadius;
            var sp           = m_Polar.runtimeCenterPos;
            var tooltipAngle = m_Tooltip.runtimeAngle + m_AngleAxis.runtimeStartAngle;
            var ep           = ChartHelper.GetPos(sp, radius, tooltipAngle, true);

            switch (m_Tooltip.type)
            {
            case Tooltip.Type.Corss:
                ChartDrawer.DrawLineStyle(vh, m_Tooltip.lineStyle, sp, ep, lineColor);
                var dist = Vector2.Distance(pointerPos, cenPos);
                if (dist > radius)
                {
                    dist = radius;
                }
                var outsideRaidus = dist + m_Tooltip.lineStyle.width * 2;
                ChartDrawer.DrawDoughnut(vh, cenPos, dist, outsideRaidus, lineColor, Color.clear);
                break;

            case Tooltip.Type.Line:
                ChartDrawer.DrawLineStyle(vh, m_Tooltip.lineStyle, sp, ep, lineColor);
                break;

            case Tooltip.Type.Shadow:
                ChartDrawer.DrawSector(vh, cenPos, radius, lineColor, tooltipAngle - 2, tooltipAngle + 2, m_Settings.cicleSmoothness);
                break;
            }
        }
Ejemplo n.º 3
0
        private void DrawRoundCap(VertexHelper vh, Serie serie, float angle, Color color, bool invert = false)
        {
            var radius     = serie.gaugeAxis.axisLine.width / 2;
            var len        = serie.runtimeInsideRadius + radius;
            var pos        = ChartHelper.GetPosition(serie.runtimeCenterPos, angle, len);
            var startAngle = invert ? angle + 180 : angle;
            var endAngle   = invert ? angle + 360 : angle + 180;

            ChartDrawer.DrawSector(vh, pos, radius, color, startAngle, endAngle);
        }
Ejemplo n.º 4
0
        private void DrawArcShape(VertexHelper vh, Serie serie, SerieData serieData, Vector3 centerPos,
                                  Color color, ref float drawStartDegree, ref float drawEndDegree)
        {
            if (serie.arcShaped && serieData.runtimePieInsideRadius > 0)
            {
                var width      = (serieData.runtimePieOutsideRadius - serieData.runtimePieInsideRadius) / 2;
                var radius     = serieData.runtimePieInsideRadius + width;
                var diffDegree = Mathf.Asin(width / radius) * Mathf.Rad2Deg;
                drawStartDegree += diffDegree;
                drawEndDegree   -= diffDegree;

                var px  = Mathf.Sin(drawStartDegree * Mathf.Deg2Rad) * radius;
                var py  = Mathf.Cos(drawStartDegree * Mathf.Deg2Rad) * radius;
                var pos = new Vector3(px, py) + centerPos;
                ChartDrawer.DrawSector(vh, pos, width, color, drawStartDegree + 180, drawStartDegree + 360);
                px  = Mathf.Sin(drawEndDegree * Mathf.Deg2Rad) * radius;
                py  = Mathf.Cos(drawEndDegree * Mathf.Deg2Rad) * radius;
                pos = new Vector3(px, py) + centerPos;
                ChartDrawer.DrawSector(vh, pos, width, color, drawEndDegree, drawEndDegree + 180);
            }
        }
        private void DrawCapsuleBar(VertexHelper vh, Serie serie, SerieData serieData, ItemStyle itemStyle, int colorIndex,
                                    bool highlight, float space, float barWidth, float pX, float pY, Vector3 plb, Vector3 plt, Vector3 prt,
                                    Vector3 prb, bool isYAxis)
        {
            Color areaColor   = SerieHelper.GetItemColor(serie, serieData, m_ThemeInfo, colorIndex, highlight);
            Color areaToColor = SerieHelper.GetItemToColor(serie, serieData, m_ThemeInfo, colorIndex, highlight);

            DrawBarBackground(vh, serie, serieData, itemStyle, colorIndex, highlight, pX, pY, space, barWidth, isYAxis);
            var borderWidth = itemStyle.runtimeBorderWidth;
            var radius      = barWidth / 2 - borderWidth;

            if (isYAxis)
            {
                var diff = Vector3.right * radius;
                var pcl  = (plt + plb) / 2 + diff;
                var pcr  = (prt + prb) / 2 - diff;
                if (pcr.x > pcl.x)
                {
                    CheckClipAndDrawPolygon(vh, plb + diff, plt + diff, prt - diff, prb - diff, areaColor, areaToColor, serie.clip);
                    ChartDrawer.DrawSector(vh, pcl, radius, areaColor, 180, 360);
                    ChartDrawer.DrawSector(vh, pcr, radius, areaToColor, 0, 180);
                }
            }
            else
            {
                var diff = Vector3.up * radius;
                var pct  = (plt + prt) / 2 - diff;
                var pcb  = (plb + prb) / 2 + diff;
                if (pct.y > pcb.y)
                {
                    CheckClipAndDrawPolygon(vh, prb + diff, plb + diff, plt - diff, prt - diff, areaColor, areaToColor, serie.clip);
                    ChartDrawer.DrawSector(vh, pct, radius, areaToColor, 270, 450);
                    ChartDrawer.DrawSector(vh, pcb, radius, areaColor, 90, 270);
                }
            }
        }
Ejemplo n.º 6
0
        private void DrawBarBackground(VertexHelper vh, Serie serie, SerieData serieData, ItemStyle itemStyle, int colorIndex,
                                       bool highlight, float pX, float pY, float space, float barWidth, bool isYAxis)
        {
            Color color = SerieHelper.GetItemBackgroundColor(serie, serieData, m_ThemeInfo, colorIndex, highlight, false);

            if (ChartHelper.IsClearColor(color))
            {
                return;
            }
            if (isYAxis)
            {
                var     axis      = m_YAxises[serie.axisIndex];
                var     axisWidth = axis.axisLine.width;
                Vector3 plt       = new Vector3(m_CoordinateX + axisWidth, pY + space + barWidth);
                Vector3 prt       = new Vector3(m_CoordinateX + axisWidth + m_CoordinateWidth, pY + space + barWidth);
                Vector3 prb       = new Vector3(m_CoordinateX + axisWidth + m_CoordinateWidth, pY + space);
                Vector3 plb       = new Vector3(m_CoordinateX + axisWidth, pY + space);
                if (serie.barType == BarType.Capsule)
                {
                    var radius = barWidth / 2;
                    var diff   = Vector3.right * radius;
                    var pcl    = (plt + plb) / 2 + diff;
                    var pcr    = (prt + prb) / 2 - diff;
                    CheckClipAndDrawPolygon(vh, plb + diff, plt + diff, prt - diff, prb - diff, color, color, serie.clip);
                    ChartDrawer.DrawSector(vh, pcl, radius, color, 180, 360);
                    ChartDrawer.DrawSector(vh, pcr, radius, color, 0, 180);
                    if (itemStyle.NeedShowBorder())
                    {
                        var borderWidth = itemStyle.borderWidth;
                        var borderColor = itemStyle.borderColor;
                        var smoothness  = m_Settings.cicleSmoothness;
                        var inRadius    = radius - borderWidth;
                        var outRadius   = radius;
                        var p1          = plb + diff + Vector3.up * borderWidth / 2;
                        var p2          = prb - diff + Vector3.up * borderWidth / 2;
                        var p3          = plt + diff - Vector3.up * borderWidth / 2;
                        var p4          = prt - diff - Vector3.up * borderWidth / 2;
                        ChartDrawer.DrawLine(vh, p1, p2, borderWidth / 2, borderColor);
                        ChartDrawer.DrawLine(vh, p3, p4, borderWidth / 2, borderColor);
                        ChartDrawer.DrawDoughnut(vh, pcl, inRadius, outRadius, borderColor, Color.clear, 180, 360, smoothness);
                        ChartDrawer.DrawDoughnut(vh, pcr, inRadius, outRadius, borderColor, Color.clear, 0, 180, smoothness);
                    }
                }
                else
                {
                    CheckClipAndDrawPolygon(vh, ref plb, ref plt, ref prt, ref prb, color, color, serie.clip);
                }
            }
            else
            {
                var     axis      = m_XAxises[serie.axisIndex];
                var     axisWidth = axis.axisLine.width;
                Vector3 plb       = new Vector3(pX + space, m_CoordinateY + axisWidth);
                Vector3 plt       = new Vector3(pX + space, m_CoordinateY + m_CoordinateHeight + axisWidth);
                Vector3 prt       = new Vector3(pX + space + barWidth, m_CoordinateY + m_CoordinateHeight + axisWidth);
                Vector3 prb       = new Vector3(pX + space + barWidth, m_CoordinateY + axisWidth);
                if (serie.barType == BarType.Capsule)
                {
                    var radius = barWidth / 2;
                    var diff   = Vector3.up * radius;
                    var pct    = (plt + prt) / 2 - diff;
                    var pcb    = (plb + prb) / 2 + diff;
                    CheckClipAndDrawPolygon(vh, prb + diff, plb + diff, plt - diff, prt - diff, color, color, serie.clip);
                    ChartDrawer.DrawSector(vh, pct, radius, color, 270, 450);
                    ChartDrawer.DrawSector(vh, pcb, radius, color, 90, 270);
                    if (itemStyle.NeedShowBorder())
                    {
                        var borderWidth = itemStyle.borderWidth;
                        var borderColor = itemStyle.borderColor;
                        var smoothness  = m_Settings.cicleSmoothness;
                        var inRadius    = radius - borderWidth;
                        var outRadius   = radius;
                        var p1          = plb + diff + Vector3.right * borderWidth / 2;
                        var p2          = plt - diff + Vector3.right * borderWidth / 2;
                        var p3          = prb + diff - Vector3.right * borderWidth / 2;
                        var p4          = prt - diff - Vector3.right * borderWidth / 2;
                        ChartDrawer.DrawLine(vh, p1, p2, borderWidth / 2, borderColor);
                        ChartDrawer.DrawLine(vh, p3, p4, borderWidth / 2, borderColor);
                        ChartDrawer.DrawDoughnut(vh, pct, inRadius, outRadius, borderColor, Color.clear, 270, 450, smoothness);
                        ChartDrawer.DrawDoughnut(vh, pcb, inRadius, outRadius, borderColor, Color.clear, 90, 270, smoothness);
                    }
                }
                else
                {
                    CheckClipAndDrawPolygon(vh, ref prb, ref plb, ref plt, ref prt, color, color, serie.clip);
                }
            }
        }
Ejemplo n.º 7
0
        private void DrawCapsuleBar(VertexHelper vh, Serie serie, SerieData serieData, ItemStyle itemStyle, int colorIndex,
                                    bool highlight, float space, float barWidth, float pX, float pY, Vector3 plb, Vector3 plt, Vector3 prt,
                                    Vector3 prb, bool isYAxis)
        {
            Color areaColor   = SerieHelper.GetItemColor(serie, serieData, m_ThemeInfo, colorIndex, highlight);
            Color areaToColor = SerieHelper.GetItemToColor(serie, serieData, m_ThemeInfo, colorIndex, highlight);

            DrawBarBackground(vh, serie, serieData, itemStyle, colorIndex, highlight, pX, pY, space, barWidth, isYAxis);
            var borderWidth = itemStyle.runtimeBorderWidth;
            var radius      = barWidth / 2 - borderWidth;
            var isGradient  = !ChartHelper.IsValueEqualsColor(areaColor, areaToColor);

            if (isYAxis)
            {
                var diff = Vector3.right * radius;
                if (plt.x < prt.x)
                {
                    var pcl = (plt + plb) / 2 + diff;
                    var pcr = (prt + prb) / 2 - diff;
                    if (pcr.x > pcl.x)
                    {
                        if (isGradient)
                        {
                            var barLen         = prt.x - plt.x;
                            var rectStartColor = Color.Lerp(areaColor, areaToColor, radius / barLen);
                            var rectEndColor   = Color.Lerp(areaColor, areaToColor, (barLen - radius) / barLen);
                            CheckClipAndDrawPolygon(vh, plb + diff, plt + diff, prt - diff, prb - diff, rectStartColor, rectEndColor, serie.clip);
                            ChartDrawer.DrawSector(vh, pcl, radius, areaColor, rectStartColor, 180, 360, 1, isYAxis);
                            ChartDrawer.DrawSector(vh, pcr, radius, rectEndColor, areaToColor, 0, 180, 1, isYAxis);
                        }
                        else
                        {
                            CheckClipAndDrawPolygon(vh, plb + diff, plt + diff, prt - diff, prb - diff, areaColor, areaToColor, serie.clip);
                            ChartDrawer.DrawSector(vh, pcl, radius, areaColor, 180, 360);
                            ChartDrawer.DrawSector(vh, pcr, radius, areaToColor, 0, 180);
                        }
                    }
                }
                else if (plt.x > prt.x)
                {
                    var pcl = (plt + plb) / 2 - diff;
                    var pcr = (prt + prb) / 2 + diff;
                    if (pcr.x < pcl.x)
                    {
                        if (isGradient)
                        {
                            var barLen         = plt.x - prt.x;
                            var rectStartColor = Color.Lerp(areaColor, areaToColor, radius / barLen);
                            var rectEndColor   = Color.Lerp(areaColor, areaToColor, (barLen - radius) / barLen);
                            CheckClipAndDrawPolygon(vh, plb - diff, plt - diff, prt + diff, prb + diff, rectStartColor, rectEndColor, serie.clip);
                            ChartDrawer.DrawSector(vh, pcl, radius, rectStartColor, areaColor, 0, 180, 1, isYAxis);
                            ChartDrawer.DrawSector(vh, pcr, radius, areaToColor, rectEndColor, 180, 360, 1, isYAxis);
                        }
                        else
                        {
                            CheckClipAndDrawPolygon(vh, plb - diff, plt - diff, prt + diff, prb + diff, areaColor, areaToColor, serie.clip);
                            ChartDrawer.DrawSector(vh, pcl, radius, areaColor, 0, 180);
                            ChartDrawer.DrawSector(vh, pcr, radius, areaToColor, 180, 360);
                        }
                    }
                }
            }
            else
            {
                var diff = Vector3.up * radius;
                if (plt.y > plb.y)
                {
                    var pct = (plt + prt) / 2 - diff;
                    var pcb = (plb + prb) / 2 + diff;
                    if (pct.y > pcb.y)
                    {
                        if (isGradient)
                        {
                            var barLen         = plt.y - plb.y;
                            var rectStartColor = Color.Lerp(areaColor, areaToColor, radius / barLen);
                            var rectEndColor   = Color.Lerp(areaColor, areaToColor, (barLen - radius) / barLen);
                            CheckClipAndDrawPolygon(vh, prb + diff, plb + diff, plt - diff, prt - diff, rectStartColor, rectEndColor, serie.clip);
                            ChartDrawer.DrawSector(vh, pct, radius, rectEndColor, areaToColor, 270, 450, 1, isYAxis);
                            ChartDrawer.DrawSector(vh, pcb, radius, rectStartColor, areaColor, 90, 270, 1, isYAxis);
                        }
                        else
                        {
                            CheckClipAndDrawPolygon(vh, prb + diff, plb + diff, plt - diff, prt - diff, areaColor, areaToColor, serie.clip);
                            ChartDrawer.DrawSector(vh, pct, radius, areaToColor, 270, 450);
                            ChartDrawer.DrawSector(vh, pcb, radius, areaColor, 90, 270);
                        }
                    }
                }
                else if (plt.y < plb.y)
                {
                    var pct = (plt + prt) / 2 + diff;
                    var pcb = (plb + prb) / 2 - diff;
                    if (pct.y < pcb.y)
                    {
                        if (isGradient)
                        {
                            var barLen         = plb.y - plt.y;
                            var rectStartColor = Color.Lerp(areaColor, areaToColor, radius / barLen);
                            var rectEndColor   = Color.Lerp(areaColor, areaToColor, (barLen - radius) / barLen);
                            CheckClipAndDrawPolygon(vh, prb - diff, plb - diff, plt + diff, prt + diff, rectStartColor, rectEndColor, serie.clip);
                            ChartDrawer.DrawSector(vh, pct, radius, rectEndColor, areaToColor, 90, 270, 1, isYAxis);
                            ChartDrawer.DrawSector(vh, pcb, radius, rectStartColor, areaColor, 270, 450, 1, isYAxis);
                        }
                        else
                        {
                            CheckClipAndDrawPolygon(vh, prb - diff, plb - diff, plt + diff, prt + diff, areaColor, areaToColor, serie.clip);
                            ChartDrawer.DrawSector(vh, pct, radius, areaToColor, 90, 270);
                            ChartDrawer.DrawSector(vh, pcb, radius, areaColor, 270, 450);
                        }
                    }
                }
            }
        }