ChartDrawer.cs 9.2 KB

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