ChartDrawer.cs 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. /************************************************/
  2. /* */
  3. /* Copyright (c) 2018 - 2021 monitor1394 */
  4. /* https://github.com/monitor1394 */
  5. /* */
  6. /************************************************/
  7. using System.Collections.Generic;
  8. using UnityEngine;
  9. using UnityEngine.UI;
  10. using XUGL;
  11. namespace XCharts
  12. {
  13. public static class ChartDrawer
  14. {
  15. public static void DrawSymbol(VertexHelper vh, SerieSymbolType type, float symbolSize,
  16. float tickness, Vector3 pos, Color32 color, Color32 toColor, float gap, float[] cornerRadius,
  17. Color32 centerFillColor, Color32 backgroundColor, float smoothness, Vector3 startPos)
  18. {
  19. switch (type)
  20. {
  21. case SerieSymbolType.None:
  22. break;
  23. case SerieSymbolType.Circle:
  24. if (gap > 0)
  25. {
  26. UGL.DrawDoughnut(vh, pos, symbolSize, symbolSize + gap, backgroundColor, backgroundColor, color, smoothness);
  27. }
  28. else
  29. {
  30. UGL.DrawCricle(vh, pos, symbolSize, color, toColor, smoothness);
  31. }
  32. break;
  33. case SerieSymbolType.EmptyCircle:
  34. if (gap > 0)
  35. {
  36. UGL.DrawCricle(vh, pos, symbolSize + gap, backgroundColor, smoothness);
  37. UGL.DrawEmptyCricle(vh, pos, symbolSize, tickness, color, color, centerFillColor, smoothness);
  38. }
  39. else
  40. {
  41. UGL.DrawEmptyCricle(vh, pos, symbolSize, tickness, color, color, centerFillColor, smoothness);
  42. }
  43. break;
  44. case SerieSymbolType.Rect:
  45. if (gap > 0)
  46. {
  47. UGL.DrawSquare(vh, pos, symbolSize + gap, backgroundColor);
  48. UGL.DrawSquare(vh, pos, symbolSize, color, toColor);
  49. }
  50. else
  51. {
  52. UGL.DrawRoundRectangle(vh, pos, symbolSize, symbolSize, color, color, 0, cornerRadius, true);
  53. }
  54. break;
  55. case SerieSymbolType.EmptyRect:
  56. if (gap > 0)
  57. {
  58. UGL.DrawSquare(vh, pos, symbolSize + gap, backgroundColor);
  59. UGL.DrawBorder(vh, pos, symbolSize / 2, symbolSize / 2, tickness, color);
  60. }
  61. else
  62. {
  63. UGL.DrawBorder(vh, pos, symbolSize / 2, symbolSize / 2, tickness, color);
  64. }
  65. break;
  66. case SerieSymbolType.Triangle:
  67. if (gap > 0)
  68. {
  69. UGL.DrawTriangle(vh, pos, symbolSize + gap, backgroundColor);
  70. UGL.DrawTriangle(vh, pos, symbolSize, color, toColor);
  71. }
  72. else
  73. {
  74. UGL.DrawTriangle(vh, pos, symbolSize, color, toColor);
  75. }
  76. break;
  77. case SerieSymbolType.EmptyTriangle:
  78. if (gap > 0)
  79. {
  80. UGL.DrawTriangle(vh, pos, symbolSize + gap, backgroundColor);
  81. UGL.DrawTriangle(vh, pos, symbolSize, color, toColor);
  82. UGL.DrawTriangle(vh, pos, symbolSize - tickness, centerFillColor, centerFillColor);
  83. }
  84. else
  85. {
  86. UGL.DrawTriangle(vh, pos, symbolSize, color, toColor);
  87. UGL.DrawTriangle(vh, pos, symbolSize - tickness, centerFillColor, centerFillColor);
  88. }
  89. break;
  90. case SerieSymbolType.Diamond:
  91. if (gap > 0)
  92. {
  93. UGL.DrawDiamond(vh, pos, symbolSize + gap, backgroundColor);
  94. UGL.DrawDiamond(vh, pos, symbolSize, color, toColor);
  95. }
  96. else
  97. {
  98. UGL.DrawDiamond(vh, pos, symbolSize, color, toColor);
  99. }
  100. break;
  101. case SerieSymbolType.EmptyDiamond:
  102. if (gap > 0)
  103. {
  104. UGL.DrawDiamond(vh, pos, symbolSize + gap, backgroundColor);
  105. UGL.DrawDiamond(vh, pos, symbolSize, color, toColor);
  106. UGL.DrawDiamond(vh, pos, symbolSize - tickness, centerFillColor, centerFillColor);
  107. }
  108. else
  109. {
  110. UGL.DrawDiamond(vh, pos, symbolSize, color, toColor);
  111. UGL.DrawDiamond(vh, pos, symbolSize - tickness, centerFillColor, centerFillColor);
  112. }
  113. break;
  114. case SerieSymbolType.Arrow:
  115. var arrowWidth = symbolSize * 2;
  116. var arrowHeight = arrowWidth * 1.5f;
  117. var arrowOffset = 0;
  118. var arrowDent = arrowWidth / 3.3f;
  119. UGL.DrawArrow(vh, startPos, pos, arrowWidth, arrowHeight,
  120. arrowOffset, arrowDent, color);
  121. break;
  122. }
  123. }
  124. public static void DrawLineStyle(VertexHelper vh, LineStyle lineStyle, Vector3 startPos, Vector3 endPos,
  125. Color32 defaultColor, float themeWidth, LineStyle.Type themeType)
  126. {
  127. var type = lineStyle.GetType(themeType);
  128. var width = lineStyle.GetWidth(themeWidth);
  129. var color = lineStyle.GetColor(defaultColor);
  130. DrawLineStyle(vh, type, width, startPos, endPos, color, color);
  131. }
  132. public static void DrawLineStyle(VertexHelper vh, LineStyle lineStyle, Vector3 startPos, Vector3 endPos,
  133. float themeWidth, LineStyle.Type themeType, Color32 defaultColor, Color32 defaultToColor)
  134. {
  135. var type = lineStyle.GetType(themeType);
  136. var width = lineStyle.GetWidth(themeWidth);
  137. var color = lineStyle.GetColor(defaultColor);
  138. var toColor = ChartHelper.IsClearColor(defaultToColor) ? color : defaultToColor;
  139. DrawLineStyle(vh, type, width, startPos, endPos, color, toColor);
  140. }
  141. public static void DrawLineStyle(VertexHelper vh, LineStyle.Type lineType, float lineWidth,
  142. Vector3 startPos, Vector3 endPos, Color32 color)
  143. {
  144. DrawLineStyle(vh, lineType, lineWidth, startPos, endPos, color, color);
  145. }
  146. public static void DrawLineStyle(VertexHelper vh, LineStyle.Type lineType, float lineWidth,
  147. Vector3 startPos, Vector3 endPos, Color32 color, Color32 toColor)
  148. {
  149. switch (lineType)
  150. {
  151. case LineStyle.Type.Dashed:
  152. UGL.DrawDashLine(vh, startPos, endPos, lineWidth, color, toColor);
  153. break;
  154. case LineStyle.Type.Dotted:
  155. UGL.DrawDotLine(vh, startPos, endPos, lineWidth, color, toColor);
  156. break;
  157. case LineStyle.Type.Solid:
  158. UGL.DrawLine(vh, startPos, endPos, lineWidth, color, toColor);
  159. break;
  160. case LineStyle.Type.DashDot:
  161. UGL.DrawDashDotLine(vh, startPos, endPos, lineWidth, color);
  162. break;
  163. case LineStyle.Type.DashDotDot:
  164. UGL.DrawDashDotDotLine(vh, startPos, endPos, lineWidth, color);
  165. break;
  166. }
  167. }
  168. }
  169. }