mirror of
https://github.com/XCharts-Team/XCharts.git
synced 2026-05-15 04:20:09 +00:00
158 lines
6.3 KiB
C#
158 lines
6.3 KiB
C#
/************************************************/
|
|
/* */
|
|
/* Copyright (c) 2018 - 2021 monitor1394 */
|
|
/* https://github.com/monitor1394 */
|
|
/* */
|
|
/************************************************/
|
|
|
|
using System;
|
|
using UnityEngine;
|
|
|
|
namespace XCharts
|
|
{
|
|
public static class VisualMapHelper
|
|
{
|
|
public static void AutoSetLineMinMax(VisualMap visualMap, Serie serie, XAxis xAxis, YAxis yAxis)
|
|
{
|
|
if (!IsNeedGradient(visualMap) || !visualMap.autoMinMax) return;
|
|
double min = 0;
|
|
double max = 0;
|
|
if (visualMap.dimension == 0)
|
|
{
|
|
min = xAxis.IsCategory() ? 0 : xAxis.runtimeMinValue;
|
|
max = xAxis.IsCategory() ? serie.dataCount - 1 : xAxis.runtimeMaxValue;
|
|
SetMinMax(visualMap, min, max);
|
|
}
|
|
else
|
|
{
|
|
min = yAxis.IsCategory() ? 0 : yAxis.runtimeMinValue;
|
|
max = yAxis.IsCategory() ? serie.dataCount - 1 : yAxis.runtimeMaxValue;
|
|
SetMinMax(visualMap, min, max);
|
|
}
|
|
}
|
|
|
|
public static void SetMinMax(VisualMap visualMap, double min, double max)
|
|
{
|
|
if (visualMap.enable && (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, CoordinateChart chart, Axis axis,
|
|
Color32 defaultColor)
|
|
{
|
|
double value = 0;
|
|
double min = 0;
|
|
double max = 0;
|
|
if (visualMap.dimension == 0)
|
|
{
|
|
min = axis.runtimeMinValue;
|
|
max = axis.runtimeMaxValue;
|
|
var grid = chart.GetAxisGridOrDefault(axis);
|
|
if (axis.IsCategory() && axis.boundaryGap)
|
|
{
|
|
float startX = grid.runtimeX + axis.runtimeScaleWidth / 2;
|
|
value = (int)(min + (pos.x - startX) / (grid.runtimeWidth - axis.runtimeScaleWidth) * (max - min));
|
|
}
|
|
else
|
|
{
|
|
value = min + (pos.x - grid.runtimeX) / grid.runtimeWidth * (max - min);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Axis yAxis;
|
|
if (axis is YAxis)
|
|
{
|
|
yAxis = chart.xAxes[axis.index];
|
|
min = yAxis.runtimeMinValue;
|
|
max = yAxis.runtimeMaxValue;
|
|
}
|
|
else
|
|
{
|
|
yAxis = chart.yAxes[axis.index];
|
|
min = yAxis.runtimeMinValue;
|
|
max = yAxis.runtimeMaxValue;
|
|
}
|
|
var grid = chart.GetAxisGridOrDefault(axis);
|
|
if (yAxis.IsCategory() && yAxis.boundaryGap)
|
|
{
|
|
float startY = grid.runtimeY + yAxis.runtimeScaleWidth / 2;
|
|
value = (int)(min + (pos.y - startY) / (grid.runtimeHeight - yAxis.runtimeScaleWidth) * (max - min));
|
|
}
|
|
else
|
|
{
|
|
value = min + (pos.y - grid.runtimeY) / grid.runtimeHeight * (max - min);
|
|
}
|
|
}
|
|
var color = visualMap.GetColor(value);
|
|
if (ChartHelper.IsClearColor(color)) return defaultColor;
|
|
else return color;
|
|
}
|
|
|
|
public static Color32 GetItemStyleGradientColor(ItemStyle itemStyle, Vector3 pos, CoordinateChart chart,
|
|
Axis axis, Color32 defaultColor)
|
|
{
|
|
var min = axis.runtimeMinValue;
|
|
var max = axis.runtimeMaxValue;
|
|
var grid = chart.GetAxisGridOrDefault(axis);
|
|
var value = min + (pos.x - grid.runtimeX) / grid.runtimeWidth * (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, CoordinateChart chart,
|
|
Axis axis, Color32 defaultColor)
|
|
{
|
|
var min = axis.runtimeMinValue;
|
|
var max = axis.runtimeMaxValue;
|
|
var grid = chart.GetAxisGridOrDefault(axis);
|
|
var value = min + (pos.x - grid.runtimeX) / grid.runtimeWidth * (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.enable || visualMap.inRange.Count <= 0) return false;
|
|
return true;
|
|
}
|
|
|
|
public static int GetDimension(VisualMap visualMap, int serieDataCount)
|
|
{
|
|
var dimension = visualMap.enable && visualMap.dimension >= 0 ? visualMap.dimension : serieDataCount - 1;
|
|
if (dimension > serieDataCount - 1) dimension = serieDataCount - 1;
|
|
return dimension;
|
|
}
|
|
}
|
|
} |