using System.Collections.Generic; using UnityEngine; namespace XCharts.Runtime { public struct PointInfo { public Vector3 position; public bool isIgnoreBreak; public double xValue; public double yValue; public double zValue; // public PointInfo(Vector3 pos, bool ignore) // { // this.position = pos; // this.isIgnoreBreak = ignore; // } public PointInfo(Vector3 pos, bool ignore, double x = 0, double y = 0, double z = 0) { this.position = pos; this.isIgnoreBreak = ignore; this.xValue = x; this.yValue = y; this.zValue = z; } } public class SerieContext { [System.NonSerialized] internal double[] cachedMin = new double[3] { double.MaxValue, double.MaxValue, double.MaxValue }; [System.NonSerialized] internal double[] cachedMax = new double[3] { double.MinValue, double.MinValue, double.MinValue }; [System.NonSerialized] internal bool[] cacheValid = new bool[3] { false, false, false }; [System.NonSerialized] internal Dictionary dataZoomMinMaxCache = new Dictionary(); internal void InvalidateMinMaxCache() { for (int i = 0; i < cacheValid.Length; i++) cacheValid[i] = false; cachedMin[0] = cachedMin[1] = cachedMin[2] = double.MaxValue; cachedMax[0] = cachedMax[1] = cachedMax[2] = double.MinValue; dataZoomMinMaxCache.Clear(); } internal bool TryGetCachedMinMax(int dimension, out double minValue, out double maxValue) { minValue = 0; maxValue = 0; if (dimension < 0 || dimension > 2) return false; if (cacheValid[dimension]) { minValue = cachedMin[dimension]; maxValue = cachedMax[dimension]; return true; } return false; } internal void SetCachedMinMax(int dimension, double minValue, double maxValue) { if (dimension < 0 || dimension > 2) return; cachedMin[dimension] = minValue; cachedMax[dimension] = maxValue; cacheValid[dimension] = true; } internal bool TryGetDataZoomCachedMinMax(string key, int dimension, out double minValue, out double maxValue) { minValue = 0; maxValue = 0; if (string.IsNullOrEmpty(key)) return false; double[] arr; if (!dataZoomMinMaxCache.TryGetValue(key, out arr) || arr == null || arr.Length < 6) return false; int mi = dimension * 2; minValue = arr[mi]; maxValue = arr[mi + 1]; return true; } internal void SetDataZoomCachedMinMax(string key, int dimension, double minValue, double maxValue) { if (string.IsNullOrEmpty(key)) return; double[] arr; if (!dataZoomMinMaxCache.TryGetValue(key, out arr) || arr == null || arr.Length < 6) { arr = new double[6]; for (int i = 0; i < 6; i++) arr[i] = 0; dataZoomMinMaxCache[key] = arr; } int mi = dimension * 2; arr[mi] = minValue; arr[mi + 1] = maxValue; } /// /// 鼠标是否进入serie /// public bool pointerEnter; /// /// 鼠标当前指示的数据项索引(单个) /// public int pointerItemDataIndex = -1; /// /// 鼠标当前指示的数据项维度 /// public int pointerItemDataDimension = 1; /// /// 鼠标所在轴线上的数据项索引(可能有多个) /// public List pointerAxisDataIndexs = new List(); public bool isTriggerByAxis = false; public int dataZoomStartIndex = 0; public int dataZoomStartIndexOffset = 0; /// /// 中心点 /// public Vector3 center; /// /// 线段终点 /// public Vector3 lineEndPostion; public double lineEndValueX; public double lineEndValueY; public double lineEndValueZ; /// /// 内半径 /// public float insideRadius; /// /// 外半径 /// public float outsideRadius; public float startAngle; /// /// 最大值 /// public double dataMax; /// /// 最小值 /// public double dataMin; public double checkValue; /// /// 左下角坐标X /// public float x; /// /// 左下角坐标Y /// public float y; /// /// 宽 /// public float width; /// /// 高 /// public float height; /// /// 矩形区域 /// public Rect rect; /// /// 绘制顶点数 /// public int vertCount; /// /// theme的颜色索引 /// public int colorIndex; /// /// 数据对应的位置坐标。 /// public List dataPoints = new List(); /// /// 数据对应的位置坐标是否忽略(忽略时连线是透明的),dataIgnore 和 dataPoints 一一对应。 /// public List dataIgnores = new List(); /// /// 数据对应的index索引。dataIndexs 和 dataPoints 一一对应。 /// public List dataIndexs = new List(); /// /// 排序后的数据 /// public List sortedData = new List(); public List rootData = new List(); /// /// 绘制点 /// public List drawPoints = new List(); public SerieParams param = new SerieParams(); public ChartLabel titleObject { get; set; } public Tooltip.Type tooltipType; public Tooltip.Trigger tooltipTrigger; public int totalDataIndex; public int clickTotalDataIndex; /// /// 水平方向的 /// public bool isHorizontal; } }