| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 | using System.Collections.Generic;using UnityEngine;using UnityEngine.UI;using XUGL;namespace XCharts.Runtime{    public static class ChartDrawer    {        public static void DrawSymbol(VertexHelper vh, SymbolType type, float symbolSize, float tickness,            Vector3 pos, Color32 color, Color32 toColor, float gap, float[] cornerRadius,            Color32 emptyColor, Color32 backgroundColor, Color32 borderColor, float smoothness, Vector3 startPos)        {            switch (type)            {                case SymbolType.None:                    break;                case SymbolType.Circle:                    if (gap > 0)                    {                        UGL.DrawDoughnut(vh, pos, symbolSize, symbolSize + gap, backgroundColor, backgroundColor, color, smoothness);                    }                    else                    {                        if (tickness > 0)                            UGL.DrawDoughnut(vh, pos, symbolSize, symbolSize + tickness, borderColor, borderColor, color, smoothness);                        else                            UGL.DrawCricle(vh, pos, symbolSize, color, toColor, smoothness);                    }                    break;                case SymbolType.EmptyCircle:                    if (gap > 0)                    {                        UGL.DrawCricle(vh, pos, symbolSize + gap, backgroundColor, smoothness);                        UGL.DrawEmptyCricle(vh, pos, symbolSize, tickness, color, color, emptyColor, smoothness);                    }                    else                    {                        UGL.DrawEmptyCricle(vh, pos, symbolSize, tickness, color, color, emptyColor, smoothness);                    }                    break;                case SymbolType.Rect:                    if (gap > 0)                    {                        UGL.DrawSquare(vh, pos, symbolSize + gap, backgroundColor);                        UGL.DrawSquare(vh, pos, symbolSize, color, toColor);                    }                    else                    {                        if (tickness > 0)                        {                            UGL.DrawRoundRectangle(vh, pos, symbolSize * 2, symbolSize * 2, color, color, 0, cornerRadius, true);                            UGL.DrawBorder(vh, pos, symbolSize, symbolSize, tickness, borderColor, 0, cornerRadius);                        }                        else                            UGL.DrawRoundRectangle(vh, pos, symbolSize * 2, symbolSize * 2, color, color, 0, cornerRadius, true);                    }                    break;                case SymbolType.EmptyRect:                    if (gap > 0)                    {                        UGL.DrawSquare(vh, pos, symbolSize + gap, backgroundColor);                        UGL.DrawBorder(vh, pos, symbolSize * 2, symbolSize * 2, tickness, color);                    }                    else                    {                        UGL.DrawBorder(vh, pos, symbolSize * 2 - tickness * 2, symbolSize * 2 - tickness * 2, tickness, color);                    }                    break;                case SymbolType.Triangle:                case SymbolType.EmptyTriangle:                    if (gap > 0)                    {                        UGL.DrawEmptyTriangle(vh, pos, symbolSize * 1.4f + gap * 2, gap * 2, backgroundColor);                    }                    if (type == SymbolType.EmptyTriangle)                    {                        UGL.DrawEmptyTriangle(vh, pos, symbolSize * 1.4f, tickness * 2f, color, emptyColor);                    }                    else                    {                        UGL.DrawTriangle(vh, pos, symbolSize * 1.4f, color, toColor);                    }                    break;                case SymbolType.Diamond:                case SymbolType.EmptyDiamond:                    var xRadius = symbolSize;                    var yRadius = symbolSize * 1.5f;                    if (gap > 0)                    {                        UGL.DrawEmptyDiamond(vh, pos, xRadius + gap, yRadius + gap, gap, backgroundColor);                    }                    if (type == SymbolType.EmptyDiamond)                    {                        UGL.DrawEmptyDiamond(vh, pos, xRadius, yRadius, tickness, color, emptyColor);                    }                    else                    {                        UGL.DrawDiamond(vh, pos, xRadius, yRadius, color, toColor);                    }                    break;                case SymbolType.Arrow:                case SymbolType.EmptyArrow:                    var arrowWidth = symbolSize * 2;                    var arrowHeight = arrowWidth * 1.5f;                    var arrowOffset = 0;                    var arrowDent = arrowWidth / 3.3f;                    if (gap > 0)                    {                        arrowWidth = (symbolSize + gap) * 2;                        arrowHeight = arrowWidth * 1.5f;                        arrowOffset = 0;                        arrowDent = arrowWidth / 3.3f;                        var dir = (pos - startPos).normalized;                        var sharpPos = pos + gap * dir;                        UGL.DrawArrow(vh, startPos, sharpPos, arrowWidth, arrowHeight,                            arrowOffset, arrowDent, backgroundColor);                    }                    arrowWidth = symbolSize * 2;                    arrowHeight = arrowWidth * 1.5f;                    arrowOffset = 0;                    arrowDent = arrowWidth / 3.3f;                    UGL.DrawArrow(vh, startPos, pos, arrowWidth, arrowHeight,                        arrowOffset, arrowDent, color);                    if (type == SymbolType.EmptyArrow)                    {                        arrowWidth = (symbolSize - tickness) * 2;                        arrowHeight = arrowWidth * 1.5f;                        arrowOffset = 0;                        arrowDent = arrowWidth / 3.3f;                        var dir = (pos - startPos).normalized;                        var sharpPos = pos - tickness * dir;                        UGL.DrawArrow(vh, startPos, sharpPos, arrowWidth, arrowHeight,                            arrowOffset, arrowDent, backgroundColor);                    }                    break;                case SymbolType.Plus:                    if (gap > 0)                    {                        UGL.DrawPlus(vh, pos, symbolSize + gap, tickness + gap, backgroundColor);                    }                    UGL.DrawPlus(vh, pos, symbolSize, tickness, color);                    break;                case SymbolType.Minus:                    if (gap > 0)                    {                        UGL.DrawMinus(vh, pos, symbolSize + gap, tickness + gap, backgroundColor);                    }                    UGL.DrawMinus(vh, pos, symbolSize, tickness, color);                    break;            }        }        public static void DrawLineStyle(VertexHelper vh, LineStyle lineStyle, Vector3 startPos, Vector3 endPos,            Color32 defaultColor, float themeWidth, LineStyle.Type themeType)        {            var type = lineStyle.GetType(themeType);            var width = lineStyle.GetWidth(themeWidth);            var color = lineStyle.GetColor(defaultColor);            DrawLineStyle(vh, type, width, startPos, endPos, color, color);        }        public static void DrawLineStyle(VertexHelper vh, LineStyle lineStyle, Vector3 startPos, Vector3 endPos,            float themeWidth, LineStyle.Type themeType, Color32 defaultColor, Color32 defaultToColor)        {            var type = lineStyle.GetType(themeType);            var width = lineStyle.GetWidth(themeWidth);            var color = lineStyle.GetColor(defaultColor);            var toColor = ChartHelper.IsClearColor(defaultToColor) ? color : defaultToColor;            DrawLineStyle(vh, type, width, startPos, endPos, color, toColor);        }        public static void DrawLineStyle(VertexHelper vh, LineStyle.Type lineType, float lineWidth,            Vector3 startPos, Vector3 endPos, Color32 color)        {            DrawLineStyle(vh, lineType, lineWidth, startPos, endPos, color, color);        }        public static void DrawLineStyle(VertexHelper vh, LineStyle.Type lineType, float lineWidth,            Vector3 startPos, Vector3 endPos, Color32 color, Color32 toColor)        {            switch (lineType)            {                case LineStyle.Type.Dashed:                    UGL.DrawDashLine(vh, startPos, endPos, lineWidth, color, toColor);                    break;                case LineStyle.Type.Dotted:                    UGL.DrawDotLine(vh, startPos, endPos, lineWidth, color, toColor);                    break;                case LineStyle.Type.Solid:                    UGL.DrawLine(vh, startPos, endPos, lineWidth, color, toColor);                    break;                case LineStyle.Type.DashDot:                    UGL.DrawDashDotLine(vh, startPos, endPos, lineWidth, color);                    break;                case LineStyle.Type.DashDotDot:                    UGL.DrawDashDotDotLine(vh, startPos, endPos, lineWidth, color);                    break;            }        }    }}
 |