增加旧版本数据自动转移功能;完善AddData数据接口

This commit is contained in:
monitor1394
2019-07-25 09:42:00 +08:00
parent a54415059e
commit fe703b7771
6 changed files with 148 additions and 22 deletions

View File

@@ -145,7 +145,6 @@ namespace XCharts
/// <summary>
/// Add a data to serie.
/// When serie doesn't exist, the data is ignored.
/// If serieName doesn't exist in legend,will be add to legend.
/// </summary>
/// <param name="serieName">the name of serie</param>
@@ -161,7 +160,6 @@ namespace XCharts
/// <summary>
/// Add a data to serie.
/// When serie doesn't exist, the data is ignored.
/// </summary>
/// <param name="serieIndex">the index of serie</param>
/// <param name="value">the data to add</param>
@@ -173,15 +171,40 @@ namespace XCharts
return success;
}
/// <summary>
/// Add an arbitray dimension data to serie,such as (x,y,z,...).
/// </summary>
/// <param name="serieName">the name of serie</param>
/// <param name="multidimensionalData">the (x,y,z,...) data</param>
/// <returns>Returns True on success</returns>
public virtual bool AddData(string serieName, List<float> multidimensionalData)
{
var success = m_Series.AddData(serieName, multidimensionalData, m_MaxCacheDataNumber);
if (success) RefreshChart();
return success;
}
/// <summary>
/// Add an arbitray dimension data to serie,such as (x,y,z,...).
/// </summary>
/// <param name="serieIndex">the index of serie,index starts at 0</param>
/// <param name="multidimensionalData">the (x,y,z,...) data</param>
/// <returns>Returns True on success</returns>
public virtual bool AddData(int serieIndex, List<float> multidimensionalData)
{
var success = m_Series.AddData(serieIndex, multidimensionalData, m_MaxCacheDataNumber);
if (success) RefreshChart();
return success;
}
/// <summary>
/// Add a (x,y) data to serie.
/// When serie doesn't exist, the data is ignored.
/// </summary>
/// <param name="serieName">the name of serie</param>
/// <param name="xValue">x data</param>
/// <param name="yValue">y data</param>
/// <returns>Returns True on success</returns>
public virtual bool AddXYData(string serieName, float xValue, float yValue)
public virtual bool AddData(string serieName, float xValue, float yValue)
{
var success = m_Series.AddXYData(serieName, xValue, yValue, m_MaxCacheDataNumber);
if (success) RefreshChart();
@@ -190,13 +213,12 @@ namespace XCharts
/// <summary>
/// Add a (x,y) data to serie.
/// When serie doesn't exist, the data is ignored.
/// </summary>
/// <param name="serieIndex">the index of serie</param>
/// <param name="xValue">x data</param>
/// <param name="yValue">y data</param>
/// <returns>Returns True on success</returns>
public virtual bool AddXYData(int serieIndex, float xValue, float yValue)
public virtual bool AddData(int serieIndex, float xValue, float yValue)
{
var success = m_Series.AddXYData(serieIndex, xValue, yValue, m_MaxCacheDataNumber);
if (success) RefreshChart();
@@ -313,6 +335,7 @@ namespace XCharts
InitTitle();
InitLegend();
InitTooltip();
TransferOldVersionData();
}
protected virtual void Update()
@@ -363,6 +386,24 @@ namespace XCharts
}
}
private void TransferOldVersionData()
{
foreach (var serie in m_Series.series)
{
if (serie.yData.Count > 0 && serie.data.Count == 0)
{
for (int i = 0; i < serie.yData.Count; i++)
{
float xvalue, yvalue;
serie.GetXYData(i, null, out xvalue, out yvalue);
var serieData = new SerieData();
serieData.data = new List<float>() { xvalue, yvalue };
serie.data.Add(serieData);
}
}
}
}
private void InitTitle()
{
m_Title.OnChanged();

View File

@@ -141,7 +141,7 @@ namespace XCharts
public void AddData(string name)
{
if (!m_Data.Contains(name))
if (!m_Data.Contains(name) && !string.IsNullOrEmpty(name))
{
m_Data.Add(name);
}

View File

@@ -301,13 +301,53 @@ namespace XCharts
m_Data.Add(new SerieData() { data = new List<float>() { xValue, yValue }, name = dataName });
}
public void AddData(List<float> valueList, int maxDataNumber = 0, string dataName = null)
{
if (valueList == null || valueList.Count == 0) return;
if (valueList.Count == 1)
{
AddYData(valueList[0], maxDataNumber, dataName);
}
else if (valueList.Count == 2)
{
AddXYData(valueList[0], valueList[1], maxDataNumber, dataName);
}
else
{
if (maxDataNumber > 0)
{
while (m_XData.Count > maxDataNumber) m_XData.RemoveAt(0);
while (m_YData.Count > maxDataNumber) m_YData.RemoveAt(0);
while (m_Data.Count > maxDataNumber) m_Data.RemoveAt(0);
}
var serieData = new SerieData();
serieData.name = dataName;
for (int i = 0; i < valueList.Count; i++)
{
if (i == 0) m_XData.Add(valueList[i]);
else if (i == 1) m_YData.Add(valueList[i]);
serieData.data.Add(valueList[0]);
}
m_Data.Add(serieData);
}
}
public float GetYData(int index, DataZoom dataZoom = null)
{
if (index < 0) return 0;
var showData = GetYDataList(dataZoom);
if (index >= 0 && index <= showData.Count - 1)
if (index < showData.Count)
{
return showData[index];
}
else
{
var serieData = GetDataList(dataZoom);
if (index < serieData.Count)
{
return serieData[index].data[1];
}
}
return 0;
}
@@ -325,10 +365,24 @@ namespace XCharts
{
xValue = 0;
yVlaue = 0;
if (index < 0) return;
var xShowData = GetXDataList(dataZoom);
if (index >= 0 && index < xShowData.Count) xValue = xShowData[index];
var yShowData = GetYDataList(dataZoom);
if (index >= 0 && index < yShowData.Count) yVlaue = yShowData[index];
if (index < xShowData.Count && index < yShowData.Count)
{
xValue = xShowData[index];
yVlaue = yShowData[index];
}
else
{
var showData = GetDataList(dataZoom);
if (index < showData.Count)
{
var serieData = showData[index];
xValue = serieData.data[0];
yVlaue = serieData.data[1];
}
}
}
public List<float> GetYDataList(DataZoom dataZoom)
@@ -437,21 +491,29 @@ namespace XCharts
public void UpdateYData(int index, float value)
{
if (index >= 0 && index <= m_YData.Count - 1)
{
m_YData[index] = value;
}
UpdateData(index, 2, value);
}
public void UpdateXYData(int index, float xValue, float yValue)
{
if (index >= 0 && index <= m_YData.Count - 1)
UpdateData(index, 1, xValue);
UpdateData(index, 2, yValue);
}
public void UpdateData(int index, int dimension, float value)
{
if (index < 0) return;
if (dimension == 1)
{
m_YData[index] = yValue;
if (index < m_XData.Count) m_XData[index] = value;
}
if (index >= 0 && index <= m_XData.Count - 1)
else if (dimension == 2)
{
m_XData[index] = xValue;
if (index < m_YData.Count) m_YData[index] = value;
}
if (index < m_Data.Count && dimension < m_Data[index].data.Count)
{
m_Data[index].data[dimension] = value;
}
}
@@ -463,7 +525,8 @@ namespace XCharts
jsonData = jsonData.Replace("\n", "");
int startIndex = jsonData.IndexOf("[");
int endIndex = jsonData.LastIndexOf("]");
if (startIndex == -1 || endIndex == -1){
if (startIndex == -1 || endIndex == -1)
{
Debug.LogError("json data need include in [ ]");
return;
}

View File

@@ -172,6 +172,28 @@ namespace XCharts
return false;
}
public bool AddData(string serieName, List<float> multidimensionalData, int maxDataNumber = 0)
{
var serie = GetSerie(serieName);
if (serie != null)
{
serie.AddData(multidimensionalData, maxDataNumber);
return true;
}
return false;
}
public bool AddData(int serieIndex, List<float> multidimensionalData, int maxDataNumber = 0)
{
var serie = GetSerie(serieIndex);
if (serie != null)
{
serie.AddData(multidimensionalData, maxDataNumber);
return true;
}
return false;
}
public bool AddXYData(string serieName, float xValue, float yValue, int maxDataNumber = 0)
{
var serie = GetSerie(serieName);