123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189 |
- using System;
- using UnityEngine;
-
- namespace XCharts.Runtime
- {
- public static class VisualMapHelper
- {
- public static void AutoSetLineMinMax(VisualMap visualMap, Serie serie, bool isY, Axis axis, Axis relativedAxis)
- {
- if (!IsNeedGradient(visualMap) || !visualMap.autoMinMax)
- return;
-
- double min = 0;
- double max = 0;
- var xAxis = isY ? relativedAxis : axis;
- var yAxis = isY ? axis : relativedAxis;
- if (visualMap.dimension == 0)
- {
- min = xAxis.IsCategory() ? 0 : xAxis.context.minValue;
- max = xAxis.IsCategory() ? serie.dataCount - 1 : xAxis.context.maxValue;
- SetMinMax(visualMap, min, max);
- }
- else
- {
- min = yAxis.IsCategory() ? 0 : yAxis.context.minValue;
- max = yAxis.IsCategory() ? serie.dataCount - 1 : yAxis.context.maxValue;
- SetMinMax(visualMap, min, max);
- }
- }
-
- public static void SetMinMax(VisualMap visualMap, double min, double max)
- {
- if ((visualMap.min != min || visualMap.max != max))
- {
- if (max >= min)
- {
- visualMap.min = min;
- visualMap.max = max;
- }
- else
- {
- throw new Exception("SetMinMax:max < min:" + min + "," + max);
- }
- }
- }
-
- public static void GetLineGradientColor(VisualMap visualMap, float xValue, float yValue,
- out Color32 startColor, out Color32 toColor)
- {
- startColor = ChartConst.clearColor32;
- toColor = ChartConst.clearColor32;
- if (visualMap.dimension == 0)
- {
- startColor = visualMap.IsPiecewise() ? visualMap.GetColor(xValue) : visualMap.GetColor(xValue - 1);
- toColor = visualMap.IsPiecewise() ? startColor : visualMap.GetColor(xValue);
- }
- else
- {
- startColor = visualMap.IsPiecewise() ? visualMap.GetColor(yValue) : visualMap.GetColor(yValue - 1);
- toColor = visualMap.IsPiecewise() ? startColor : visualMap.GetColor(yValue);
- }
- }
-
- public static Color32 GetLineGradientColor(VisualMap visualMap, Vector3 pos, GridCoord grid, Axis axis,
- Axis relativedAxis, Color32 defaultColor)
- {
- double value = 0;
- double min = 0;
- double max = 0;
-
- if (visualMap.dimension == 0)
- {
- min = axis.context.minValue;
- max = axis.context.maxValue;
- if (axis.IsCategory() && axis.boundaryGap)
- {
- float startX = grid.context.x + axis.context.scaleWidth / 2;
- value = (min + (pos.x - startX) / (grid.context.width - axis.context.scaleWidth) * (max - min));
- if (visualMap.IsPiecewise())
- value = (int) value;
- }
- else
- {
- value = min + (pos.x - grid.context.x) / grid.context.width * (max - min);
- }
- }
- else
- {
- min = relativedAxis.context.minValue;
- max = relativedAxis.context.maxValue;
- if (relativedAxis.IsCategory() && relativedAxis.boundaryGap)
- {
- float startY = grid.context.y + relativedAxis.context.scaleWidth / 2;
- value = (min + (pos.y - startY) / (grid.context.height - relativedAxis.context.scaleWidth) * (max - min));
- if (visualMap.IsPiecewise())
- value = (int) value;
- }
- else
- {
- value = min + (pos.y - grid.context.y) / grid.context.height * (max - min);
- }
- }
-
- var color = visualMap.GetColor(value);
- if (ChartHelper.IsClearColor(color))
- {
- return defaultColor;
- }
- else
- {
- if (color.a != 0)
- color.a = defaultColor.a;
-
- return color;
- }
- }
-
- public static Color32 GetItemStyleGradientColor(ItemStyle itemStyle, Vector3 pos, BaseChart chart,
- Axis axis, Color32 defaultColor)
- {
- var min = axis.context.minValue;
- var max = axis.context.maxValue;
- var grid = chart.GetChartComponent<GridCoord>(axis.gridIndex);
- var value = min + (pos.x - grid.context.x) / grid.context.width * (max - min);
- var rate = (value - min) / (max - min);
- var color = itemStyle.GetGradientColor((float) rate, defaultColor);
-
- if (ChartHelper.IsClearColor(color))
- return defaultColor;
- else
- return color;
- }
-
- public static Color32 GetLineStyleGradientColor(LineStyle lineStyle, Vector3 pos, GridCoord grid,
- Axis axis, Color32 defaultColor)
- {
- var min = axis.context.minValue;
- var max = axis.context.maxValue;
- var value = min + (pos.x - grid.context.x) / grid.context.width * (max - min);
- var rate = (value - min) / (max - min);
- var color = lineStyle.GetGradientColor((float) rate, defaultColor);
-
- if (ChartHelper.IsClearColor(color))
- return defaultColor;
- else
- return color;
- }
-
- public static bool IsNeedGradient(VisualMap visualMap)
- {
- if (visualMap == null)
- return false;
- if (!visualMap.show || (!visualMap.workOnLine && !visualMap.workOnArea))
- return false;
- if (visualMap.inRange.Count <= 0)
- return false;
- return true;
- }
- public static bool IsNeedLineGradient(VisualMap visualMap)
- {
- if (visualMap == null)
- return false;
- if (!visualMap.show || !visualMap.workOnLine)
- return false;
- if (visualMap.inRange.Count <= 0)
- return false;
- return true;
- }
- public static bool IsNeedAreaGradient(VisualMap visualMap)
- {
- if (visualMap == null)
- return false;
- if (!visualMap.show || !visualMap.workOnArea)
- return false;
- if (visualMap.inRange.Count <= 0)
- return false;
- return true;
- }
-
- public static int GetDimension(VisualMap visualMap, int defaultDimension)
- {
- if (visualMap == null || !visualMap.show)
- return defaultDimension;
-
- return visualMap != null && visualMap.dimension >= 0 ?
- visualMap.dimension : defaultDimension;
- }
- }
- }
|