增加旧版本数据自动转移功能;完善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

@@ -46,7 +46,7 @@ public class Demo11_AddSinCurve : MonoBehaviour
{ {
float xvalue = Mathf.PI / 180 * angle; float xvalue = Mathf.PI / 180 * angle;
float yvalue = Mathf.Sin(xvalue); float yvalue = Mathf.Sin(xvalue);
chart.AddXYData(0, xvalue, yvalue); chart.AddData(0, xvalue, yvalue);
} }
} }
@@ -56,6 +56,6 @@ public class Demo11_AddSinCurve : MonoBehaviour
angle++; angle++;
float xvalue = Mathf.PI / 180 * angle; float xvalue = Mathf.PI / 180 * angle;
float yvalue = Mathf.Sin(xvalue); float yvalue = Mathf.Sin(xvalue);
chart.AddXYData(0, xvalue, yvalue); chart.AddData(0, xvalue, yvalue);
} }
} }

View File

@@ -145,7 +145,6 @@ namespace XCharts
/// <summary> /// <summary>
/// Add a data to serie. /// 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. /// If serieName doesn't exist in legend,will be add to legend.
/// </summary> /// </summary>
/// <param name="serieName">the name of serie</param> /// <param name="serieName">the name of serie</param>
@@ -161,7 +160,6 @@ namespace XCharts
/// <summary> /// <summary>
/// Add a data to serie. /// Add a data to serie.
/// When serie doesn't exist, the data is ignored.
/// </summary> /// </summary>
/// <param name="serieIndex">the index of serie</param> /// <param name="serieIndex">the index of serie</param>
/// <param name="value">the data to add</param> /// <param name="value">the data to add</param>
@@ -173,15 +171,40 @@ namespace XCharts
return success; 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> /// <summary>
/// Add a (x,y) data to serie. /// Add a (x,y) data to serie.
/// When serie doesn't exist, the data is ignored.
/// </summary> /// </summary>
/// <param name="serieName">the name of serie</param> /// <param name="serieName">the name of serie</param>
/// <param name="xValue">x data</param> /// <param name="xValue">x data</param>
/// <param name="yValue">y data</param> /// <param name="yValue">y data</param>
/// <returns>Returns True on success</returns> /// <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); var success = m_Series.AddXYData(serieName, xValue, yValue, m_MaxCacheDataNumber);
if (success) RefreshChart(); if (success) RefreshChart();
@@ -190,13 +213,12 @@ namespace XCharts
/// <summary> /// <summary>
/// Add a (x,y) data to serie. /// Add a (x,y) data to serie.
/// When serie doesn't exist, the data is ignored.
/// </summary> /// </summary>
/// <param name="serieIndex">the index of serie</param> /// <param name="serieIndex">the index of serie</param>
/// <param name="xValue">x data</param> /// <param name="xValue">x data</param>
/// <param name="yValue">y data</param> /// <param name="yValue">y data</param>
/// <returns>Returns True on success</returns> /// <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); var success = m_Series.AddXYData(serieIndex, xValue, yValue, m_MaxCacheDataNumber);
if (success) RefreshChart(); if (success) RefreshChart();
@@ -313,6 +335,7 @@ namespace XCharts
InitTitle(); InitTitle();
InitLegend(); InitLegend();
InitTooltip(); InitTooltip();
TransferOldVersionData();
} }
protected virtual void Update() 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() private void InitTitle()
{ {
m_Title.OnChanged(); m_Title.OnChanged();

View File

@@ -141,7 +141,7 @@ namespace XCharts
public void AddData(string name) public void AddData(string name)
{ {
if (!m_Data.Contains(name)) if (!m_Data.Contains(name) && !string.IsNullOrEmpty(name))
{ {
m_Data.Add(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 }); 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) public float GetYData(int index, DataZoom dataZoom = null)
{ {
if (index < 0) return 0;
var showData = GetYDataList(dataZoom); var showData = GetYDataList(dataZoom);
if (index >= 0 && index <= showData.Count - 1) if (index < showData.Count)
{ {
return showData[index]; return showData[index];
} }
else
{
var serieData = GetDataList(dataZoom);
if (index < serieData.Count)
{
return serieData[index].data[1];
}
}
return 0; return 0;
} }
@@ -325,10 +365,24 @@ namespace XCharts
{ {
xValue = 0; xValue = 0;
yVlaue = 0; yVlaue = 0;
if (index < 0) return;
var xShowData = GetXDataList(dataZoom); var xShowData = GetXDataList(dataZoom);
if (index >= 0 && index < xShowData.Count) xValue = xShowData[index];
var yShowData = GetYDataList(dataZoom); 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) public List<float> GetYDataList(DataZoom dataZoom)
@@ -437,21 +491,29 @@ namespace XCharts
public void UpdateYData(int index, float value) public void UpdateYData(int index, float value)
{ {
if (index >= 0 && index <= m_YData.Count - 1) UpdateData(index, 2, value);
{
m_YData[index] = value;
}
} }
public void UpdateXYData(int index, float xValue, float yValue) 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);
m_YData[index] = yValue;
} }
if (index >= 0 && index <= m_XData.Count - 1)
public void UpdateData(int index, int dimension, float value)
{ {
m_XData[index] = xValue; if (index < 0) return;
if (dimension == 1)
{
if (index < m_XData.Count) m_XData[index] = value;
}
else if (dimension == 2)
{
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", ""); jsonData = jsonData.Replace("\n", "");
int startIndex = jsonData.IndexOf("["); int startIndex = jsonData.IndexOf("[");
int endIndex = jsonData.LastIndexOf("]"); int endIndex = jsonData.LastIndexOf("]");
if (startIndex == -1 || endIndex == -1){ if (startIndex == -1 || endIndex == -1)
{
Debug.LogError("json data need include in [ ]"); Debug.LogError("json data need include in [ ]");
return; return;
} }

View File

@@ -172,6 +172,28 @@ namespace XCharts
return false; 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) public bool AddXYData(string serieName, float xValue, float yValue, int maxDataNumber = 0)
{ {
var serie = GetSerie(serieName); var serie = GetSerie(serieName);

View File

@@ -33,7 +33,7 @@ namespace XCharts
AddSerie("serie1", SerieType.Scatter); AddSerie("serie1", SerieType.Scatter);
for (int i = 0; i < 10; i++) for (int i = 0; i < 10; i++)
{ {
AddXYData(0, Random.Range(10, 100), Random.Range(10, 100)); AddData(0, Random.Range(10, 100), Random.Range(10, 100));
} }
} }
#endif #endif