Geen omschrijving
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

VisualMapHelper.cs 6.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. using System;
  2. using UnityEngine;
  3. namespace XCharts.Runtime
  4. {
  5. public static class VisualMapHelper
  6. {
  7. public static void AutoSetLineMinMax(VisualMap visualMap, Serie serie, bool isY, Axis axis, Axis relativedAxis)
  8. {
  9. if (!IsNeedGradient(visualMap) || !visualMap.autoMinMax)
  10. return;
  11. double min = 0;
  12. double max = 0;
  13. var xAxis = isY ? relativedAxis : axis;
  14. var yAxis = isY ? axis : relativedAxis;
  15. if (visualMap.dimension == 0)
  16. {
  17. min = xAxis.IsCategory() ? 0 : xAxis.context.minValue;
  18. max = xAxis.IsCategory() ? serie.dataCount - 1 : xAxis.context.maxValue;
  19. SetMinMax(visualMap, min, max);
  20. }
  21. else
  22. {
  23. min = yAxis.IsCategory() ? 0 : yAxis.context.minValue;
  24. max = yAxis.IsCategory() ? serie.dataCount - 1 : yAxis.context.maxValue;
  25. SetMinMax(visualMap, min, max);
  26. }
  27. }
  28. public static void SetMinMax(VisualMap visualMap, double min, double max)
  29. {
  30. if ((visualMap.min != min || visualMap.max != max))
  31. {
  32. if (max >= min)
  33. {
  34. visualMap.min = min;
  35. visualMap.max = max;
  36. }
  37. else
  38. {
  39. throw new Exception("SetMinMax:max < min:" + min + "," + max);
  40. }
  41. }
  42. }
  43. public static void GetLineGradientColor(VisualMap visualMap, float xValue, float yValue,
  44. out Color32 startColor, out Color32 toColor)
  45. {
  46. startColor = ChartConst.clearColor32;
  47. toColor = ChartConst.clearColor32;
  48. if (visualMap.dimension == 0)
  49. {
  50. startColor = visualMap.IsPiecewise() ? visualMap.GetColor(xValue) : visualMap.GetColor(xValue - 1);
  51. toColor = visualMap.IsPiecewise() ? startColor : visualMap.GetColor(xValue);
  52. }
  53. else
  54. {
  55. startColor = visualMap.IsPiecewise() ? visualMap.GetColor(yValue) : visualMap.GetColor(yValue - 1);
  56. toColor = visualMap.IsPiecewise() ? startColor : visualMap.GetColor(yValue);
  57. }
  58. }
  59. public static Color32 GetLineGradientColor(VisualMap visualMap, Vector3 pos, GridCoord grid, Axis axis,
  60. Axis relativedAxis, Color32 defaultColor)
  61. {
  62. double value = 0;
  63. double min = 0;
  64. double max = 0;
  65. if (visualMap.dimension == 0)
  66. {
  67. min = axis.context.minValue;
  68. max = axis.context.maxValue;
  69. if (axis.IsCategory() && axis.boundaryGap)
  70. {
  71. float startX = grid.context.x + axis.context.scaleWidth / 2;
  72. value = (min + (pos.x - startX) / (grid.context.width - axis.context.scaleWidth) * (max - min));
  73. if (visualMap.IsPiecewise())
  74. value = (int) value;
  75. }
  76. else
  77. {
  78. value = min + (pos.x - grid.context.x) / grid.context.width * (max - min);
  79. }
  80. }
  81. else
  82. {
  83. min = relativedAxis.context.minValue;
  84. max = relativedAxis.context.maxValue;
  85. if (relativedAxis.IsCategory() && relativedAxis.boundaryGap)
  86. {
  87. float startY = grid.context.y + relativedAxis.context.scaleWidth / 2;
  88. value = (min + (pos.y - startY) / (grid.context.height - relativedAxis.context.scaleWidth) * (max - min));
  89. if (visualMap.IsPiecewise())
  90. value = (int) value;
  91. }
  92. else
  93. {
  94. value = min + (pos.y - grid.context.y) / grid.context.height * (max - min);
  95. }
  96. }
  97. var color = visualMap.GetColor(value);
  98. if (ChartHelper.IsClearColor(color))
  99. {
  100. return defaultColor;
  101. }
  102. else
  103. {
  104. if (color.a != 0)
  105. color.a = defaultColor.a;
  106. return color;
  107. }
  108. }
  109. public static Color32 GetItemStyleGradientColor(ItemStyle itemStyle, Vector3 pos, BaseChart chart,
  110. Axis axis, Color32 defaultColor)
  111. {
  112. var min = axis.context.minValue;
  113. var max = axis.context.maxValue;
  114. var grid = chart.GetChartComponent<GridCoord>(axis.gridIndex);
  115. var value = min + (pos.x - grid.context.x) / grid.context.width * (max - min);
  116. var rate = (value - min) / (max - min);
  117. var color = itemStyle.GetGradientColor((float) rate, defaultColor);
  118. if (ChartHelper.IsClearColor(color))
  119. return defaultColor;
  120. else
  121. return color;
  122. }
  123. public static Color32 GetLineStyleGradientColor(LineStyle lineStyle, Vector3 pos, GridCoord grid,
  124. Axis axis, Color32 defaultColor)
  125. {
  126. var min = axis.context.minValue;
  127. var max = axis.context.maxValue;
  128. var value = min + (pos.x - grid.context.x) / grid.context.width * (max - min);
  129. var rate = (value - min) / (max - min);
  130. var color = lineStyle.GetGradientColor((float) rate, defaultColor);
  131. if (ChartHelper.IsClearColor(color))
  132. return defaultColor;
  133. else
  134. return color;
  135. }
  136. public static bool IsNeedGradient(VisualMap visualMap)
  137. {
  138. if (visualMap == null)
  139. return false;
  140. if (!visualMap.show || (!visualMap.workOnLine && !visualMap.workOnArea))
  141. return false;
  142. if (visualMap.inRange.Count <= 0)
  143. return false;
  144. return true;
  145. }
  146. public static bool IsNeedLineGradient(VisualMap visualMap)
  147. {
  148. if (visualMap == null)
  149. return false;
  150. if (!visualMap.show || !visualMap.workOnLine)
  151. return false;
  152. if (visualMap.inRange.Count <= 0)
  153. return false;
  154. return true;
  155. }
  156. public static bool IsNeedAreaGradient(VisualMap visualMap)
  157. {
  158. if (visualMap == null)
  159. return false;
  160. if (!visualMap.show || !visualMap.workOnArea)
  161. return false;
  162. if (visualMap.inRange.Count <= 0)
  163. return false;
  164. return true;
  165. }
  166. public static int GetDimension(VisualMap visualMap, int defaultDimension)
  167. {
  168. if (visualMap == null || !visualMap.show)
  169. return defaultDimension;
  170. return visualMap != null && visualMap.dimension >= 0 ?
  171. visualMap.dimension : defaultDimension;
  172. }
  173. }
  174. }