接口优化

This commit is contained in:
monitor1394
2021-06-26 21:45:56 +08:00
parent 943145d210
commit 63ec586f36
6 changed files with 94 additions and 41 deletions

View File

@@ -43,8 +43,8 @@ namespace XCharts
m_DrawRect.y += hig; m_DrawRect.y += hig;
m_Heights[m_KeyName] += hig; m_Heights[m_KeyName] += hig;
PropertyField(prop, "m_Name");
PropertyField(prop, "m_InsertDataToHead"); PropertyField(prop, "m_InsertDataToHead");
PropertyField(prop, "m_Name");
switch (serieType) switch (serieType)
{ {
case SerieType.Line: case SerieType.Line:

View File

@@ -182,7 +182,7 @@ namespace XCharts
/// <param name="serieName">the name of serie</param> /// <param name="serieName">the name of serie</param>
public virtual void RemoveData(string serieName) public virtual void RemoveData(string serieName)
{ {
m_Series.Remove(serieName); m_Series.RemoveSerie(serieName);
foreach (var legend in m_Legends) legend.RemoveData(serieName); foreach (var legend in m_Legends) legend.RemoveData(serieName);
m_SerieLabelRoot = null; m_SerieLabelRoot = null;
RefreshChart(); RefreshChart();
@@ -220,6 +220,11 @@ namespace XCharts
return AddSerie(type, serieName, show, addToHead); return AddSerie(type, serieName, show, addToHead);
} }
public virtual Serie InsertSerie(int index, SerieType serieType, string serieName = null, bool show = true)
{
return m_Series.InsertSerie(index, serieType, serieName, show);
}
/// <summary> /// <summary>
/// Add a data to serie. /// Add a data to serie.
/// If serieName doesn't exist in legend,will be add to legend. /// If serieName doesn't exist in legend,will be add to legend.

View File

@@ -562,6 +562,11 @@ namespace XCharts
return type == AxisType.Time; return type == AxisType.Time;
} }
public void SetNeedUpdateFilterData()
{
m_NeedUpdateFilterData = true;
}
/// <summary> /// <summary>
/// 添加一个类目到类目数据列表 /// 添加一个类目到类目数据列表
/// </summary> /// </summary>
@@ -663,37 +668,43 @@ namespace XCharts
{ {
if (dataZoom != null && dataZoom.enable && dataZoom.IsContainsAxis(this)) if (dataZoom != null && dataZoom.enable && dataZoom.IsContainsAxis(this))
{ {
var startIndex = (int)((data.Count - 1) * dataZoom.start / 100); var data = GetDataList();
var endIndex = (int)((data.Count - 1) * dataZoom.end / 100); var range = Mathf.RoundToInt(data.Count * (dataZoom.end - dataZoom.start) / 100);
if (endIndex < startIndex) endIndex = startIndex; if (range <= 0) range = 1;
if (startIndex != filterStart || endIndex != filterEnd || dataZoom.minShowNum != filterMinShow || m_NeedUpdateFilterData) int start = 0, end = 0;
if (dataZoom.runtimeInvert)
{ {
filterStart = startIndex; end = Mathf.CeilToInt(data.Count * dataZoom.end / 100);
filterEnd = endIndex; start = end - range;
if (start < 0) start = 0;
}
else
{
start = Mathf.FloorToInt(data.Count * dataZoom.start / 100);
end = start + range;
if (end > data.Count) end = data.Count;
}
if (start != filterStart || end != filterEnd || dataZoom.minShowNum != filterMinShow || m_NeedUpdateFilterData)
{
filterStart = start;
filterEnd = end;
filterMinShow = dataZoom.minShowNum; filterMinShow = dataZoom.minShowNum;
m_NeedUpdateFilterData = false; m_NeedUpdateFilterData = false;
var data = GetDataList();
if (data.Count > 0) if (data.Count > 0)
{ {
var count = endIndex == startIndex ? 1 : endIndex - startIndex + 1; if (range < dataZoom.minShowNum)
if (count < dataZoom.minShowNum)
{ {
if (dataZoom.minShowNum > data.Count) count = data.Count; if (dataZoom.minShowNum > data.Count) range = data.Count;
else count = dataZoom.minShowNum; else range = dataZoom.minShowNum;
} }
if (startIndex + count > data.Count) filterData = data.GetRange(start, range);
{
int start = endIndex - count;
filterData = data.GetRange(start < 0 ? 0 : start, count);
}
else filterData = data.GetRange(startIndex, count);
} }
else else
{ {
filterData = data; filterData = data;
} }
} }
else if (endIndex == 0) else if (end == 0)
{ {
filterData = emptyFliter; filterData = emptyFliter;
} }

View File

@@ -228,12 +228,28 @@ namespace XCharts
/// 移除指定名字的系列。 /// 移除指定名字的系列。
/// </summary> /// </summary>
/// <param name="serieName">the name of serie</param> /// <param name="serieName">the name of serie</param>
public void Remove(string serieName) public bool RemoveSerie(string serieName)
{ {
var serie = GetSerie(serieName); var serie = GetSerie(serieName);
if (serie != null) return RemoveSerie(serie);
}
public bool RemoveSerie(int serieIndex)
{
var serie = GetSerie(serieIndex);
return RemoveSerie(serie);
}
public bool RemoveSerie(Serie serie)
{
if (serie != null && m_Series.Remove(serie))
{ {
m_Series.Remove(serie); SetVerticesDirty();
return true;
}
else
{
return false;
} }
} }
@@ -255,6 +271,16 @@ namespace XCharts
/// <param name="show"></param> /// <param name="show"></param>
/// <returns></returns> /// <returns></returns>
public Serie AddSerie(SerieType type, string serieName, bool show = true, bool addToHead = false) public Serie AddSerie(SerieType type, string serieName, bool show = true, bool addToHead = false)
{
return InsertSerie(-1, type, serieName, show, addToHead);
}
public Serie InsertSerie(int index, SerieType type, string serieName, bool show = true)
{
return InsertSerie(index, type, serieName, show, false);
}
private Serie InsertSerie(int index, SerieType type, string serieName, bool show = true, bool addToHead = false)
{ {
var serie = new Serie(); var serie = new Serie();
serie.type = type; serie.type = type;
@@ -278,6 +304,7 @@ namespace XCharts
} }
serie.animation.Restart(); serie.animation.Restart();
if (addToHead) m_Series.Insert(0, serie); if (addToHead) m_Series.Insert(0, serie);
else if (index >= 0) m_Series.Insert(index, serie);
else m_Series.Add(serie); else m_Series.Add(serie);
for (int i = 0; i < m_Series.Count; i++) for (int i = 0; i < m_Series.Count; i++)
{ {

View File

@@ -506,38 +506,43 @@ namespace XCharts
private static void UpdateFilterData_Category(Serie serie, DataZoom dataZoom) private static void UpdateFilterData_Category(Serie serie, DataZoom dataZoom)
{ {
var data = serie.data; var data = serie.data;
var startIndex = (int)((data.Count - 1) * dataZoom.start / 100); var range = Mathf.RoundToInt(data.Count * (dataZoom.end - dataZoom.start) / 100);
var endIndex = (int)((data.Count - 1) * dataZoom.end / 100); if (range <= 0) range = 1;
if (endIndex < startIndex) endIndex = startIndex; int start = 0, end = 0;
if (dataZoom.runtimeInvert)
if (startIndex != serie.m_FilterStart || endIndex != serie.m_FilterEnd {
end = Mathf.CeilToInt(data.Count * dataZoom.end / 100);
start = end - range;
if (start < 0) start = 0;
}
else
{
start = Mathf.FloorToInt(data.Count * dataZoom.start / 100);
end = start + range;
if (end > data.Count) end = data.Count;
}
if (start != serie.m_FilterStart || end != serie.m_FilterEnd
|| dataZoom.minShowNum != serie.m_FilterMinShow || serie.m_NeedUpdateFilterData) || dataZoom.minShowNum != serie.m_FilterMinShow || serie.m_NeedUpdateFilterData)
{ {
serie.m_FilterStart = startIndex; serie.m_FilterStart = start;
serie.m_FilterEnd = endIndex; serie.m_FilterEnd = end;
serie.m_FilterMinShow = dataZoom.minShowNum; serie.m_FilterMinShow = dataZoom.minShowNum;
serie.m_NeedUpdateFilterData = false; serie.m_NeedUpdateFilterData = false;
var count = endIndex == startIndex ? 1 : endIndex - startIndex + 1;
if (count < dataZoom.minShowNum)
{
if (dataZoom.minShowNum > data.Count) count = data.Count;
else count = dataZoom.minShowNum;
}
if (data.Count > 0) if (data.Count > 0)
{ {
if (startIndex + count > data.Count) if (range < dataZoom.minShowNum)
{ {
int start = endIndex - count; if (dataZoom.minShowNum > data.Count) range = data.Count;
data = data.GetRange(start < 0 ? 0 : start, count); else range = dataZoom.minShowNum;
} }
else serie.m_FilterData = data.GetRange(startIndex, count); serie.m_FilterData = data.GetRange(start, range);
} }
else else
{ {
serie.m_FilterData = data; serie.m_FilterData = data;
} }
} }
else if (endIndex == 0) else if (end == 0)
{ {
serie.m_FilterData = emptyFilter; serie.m_FilterData = emptyFilter;
} }

View File

@@ -1053,5 +1053,10 @@ namespace XCharts
return true; return true;
} }
} }
public static bool IsInRect(Vector3 pos, float xMin, float xMax, float yMin, float yMax)
{
return pos.x >= xMin && pos.x <= xMax && pos.y <= yMax && pos.y >= yMin;
}
} }
} }