/******************************************/ /* */ /* Copyright (c) 2018 monitor1394 */ /* https://github.com/monitor1394 */ /* */ /******************************************/ using System; using System.Collections.Generic; using UnityEngine; namespace XCharts { /// /// The basic class of rectangular coordinate chart,such as LineChart,BarChart and ScatterChart. /// 直角坐标系类型图表的基类,如折线图LineChart,柱状图BarChart,散点图ScatterChart都属于这类型的图表。 /// 不可用直接将CoordinateChart绑定到GameObject上。 /// public partial class CoordinateChart { /// /// The lower left position x of coordinate system. /// 坐标系的左下角坐标X。 /// public float coordinateX { get { return m_Grid.left; } } /// /// The lower left position y of coordinate system. /// 坐标系的左下角坐标Y。 /// public float coordinateY { get { return m_Grid.bottom; } } [Obsolete("Use CoordinateChart.coordinateWidth instead.", true)] public float coordinateWid { get { return coordinateWidth; } } [Obsolete("Use CoordinateChart.coordinateHeight instead.", true)] public float coordinateHig { get { return coordinateHeight; } } /// /// the width of coordinate system。 /// 坐标系的宽。 /// public float coordinateWidth { get { return chartWidth - m_Grid.left - m_Grid.right; } } /// /// the height of coordinate system。 /// 坐标系的高。 /// public float coordinateHeight { get { return chartHeight - m_Grid.top - m_Grid.bottom; } } /// /// grid component. /// 网格组件。 /// public Grid grid { get { return m_Grid; } } /// /// the x axises,xAxises[0] is the first x axis, xAxises[1] is the second x axis. /// 两个x轴。 /// public List xAxises { get { return m_XAxises; } } /// /// the y axises, yAxises[0] is the first y axis, yAxises[1] is the second y axis. /// 两个y轴。 /// public List yAxises { get { return m_YAxises; } } /// /// dataZoom component. /// 区域缩放组件。 /// public DataZoom dataZoom { get { return m_DataZoom; } } /// /// visualMap component. /// 视觉映射组件。 /// public VisualMap visualMap { get { return m_VisualMap; } } /// /// X轴(下) /// public XAxis xAxis0 { get { return m_XAxises[0]; } } /// /// X轴(上) /// public XAxis xAxis1 { get { return m_XAxises[1]; } } /// /// Y轴(左) /// public YAxis yAxis0 { get { return m_YAxises[0]; } } /// /// Y轴(右) /// public YAxis yAxis1 { get { return m_YAxises[1]; } } /// /// Remove all data from series,legend and axis. /// It just emptying all of serie's data without emptying the list of series. /// 清空所有图例,系列和坐标轴类目数据。系列中指示清空系列中的数据,会保留系列列表。 /// public override void ClearData() { base.ClearData(); ClearAxisData(); } /// /// Remove all data from series,legend and axis. /// The series list is also cleared. /// 清空所有图例,系列和坐标轴类目数据。系列的列表也会被清空。 /// public override void RemoveData() { base.RemoveData(); ClearAxisData(); } /// /// Remove all data of axises. /// 清除所有x轴和y轴的类目数据。 /// public void ClearAxisData() { foreach (var item in m_XAxises) item.data.Clear(); foreach (var item in m_YAxises) item.data.Clear(); } /// /// Add a category data to xAxis. /// 添加一个类目数据到指定的x轴。 /// /// the category data /// which xAxis should category add to public void AddXAxisData(string category, int xAxisIndex = 0) { m_XAxises[xAxisIndex].AddData(category); } /// /// Add a category data to yAxis. /// 添加一个类目数据到指定的y轴。 /// /// the category data /// which yAxis should category add to public void AddYAxisData(string category, int yAxisIndex = 0) { m_YAxises[yAxisIndex].AddData(category); } /// /// reutrn true when all the show axis is `Value` type. /// 纯数值坐标轴(数值轴或对数轴)。 /// /// public bool IsValue() { foreach (var axis in m_XAxises) { if (axis.show && !axis.IsValue() && !axis.IsLog()) return false; } foreach (var axis in m_YAxises) { if (axis.show && !axis.IsValue() && !axis.IsLog()) return false; } return true; } public bool IsCategory() { foreach (var axis in m_XAxises) { if (axis.show && !axis.IsCategory()) return false; } foreach (var axis in m_YAxises) { if (axis.show && !axis.IsCategory()) return false; } return true; } public bool IsInCooridate(Vector2 local) { if (local.x < coordinateX - 1 || local.x > coordinateX + coordinateWidth + 1 || local.y < coordinateY - 1 || local.y > coordinateY + coordinateHeight + 1) { return false; } return true; } /// /// 在下一帧刷新DataZoom /// public void RefreshDataZoom() { RefreshDataZoomLabel(); } /// /// 立即刷新数值坐标轴的最大最小值 /// public void RefreshAxisMinMaxValue() { CheckMinMaxValue(); } public Vector3 ClampInCoordinate(Vector3 pos) { if (IsInCooridate(pos)) return pos; else { var np = new Vector3(pos.x, pos.y); if (np.x < coordinateX) np.x = coordinateX; if (np.x > coordinateX + coordinateWidth) np.x = coordinateX + coordinateWidth; if (np.y < coordinateY) np.y = coordinateY; if (np.y > coordinateY + coordinateHeight) np.y = coordinateY + coordinateHeight; return np; } } /// /// 转换X轴和Y轴的配置 /// /// 坐标轴索引,0或1 public void CovertXYAxis(int index) { if (index >= 0 && index <= 1) { var tempX = m_XAxises[index].Clone(); m_XAxises[index].Copy(m_YAxises[index]); m_YAxises[index].Copy(tempX); } } } }