优化RadarChart#77

This commit is contained in:
monitor1394
2020-07-31 22:36:34 +08:00
parent fa118d93f8
commit 3c3730db44
3 changed files with 45 additions and 18 deletions

View File

@@ -202,6 +202,7 @@ namespace XCharts
/// </summary>
public List<Indicator> indicatorList { get { return m_IndicatorList; } }
public int index { get; internal set; }
/// <summary>
/// the center position of radar in container.
/// 雷达图在容器中的具体中心点。

View File

@@ -83,8 +83,11 @@ namespace XCharts
public static void InitRadarTooltip(ref StringBuilder sb, Tooltip tooltip, Serie serie, Radar radar,
ThemeInfo themeInfo)
{
if (!serie.show) return;
if (serie.radarIndex != radar.index) return;
var dataIndex = tooltip.runtimeDataIndex[1];
var serieData = serie.GetSerieData(dataIndex);
if (!serieData.show) return;
var numericFormatter = GetItemNumericFormatter(tooltip, serie, serieData);
switch (serie.radarType)
{
@@ -99,7 +102,7 @@ namespace XCharts
for (int i = 0; i < serie.dataCount; i++)
{
var sd = serie.GetSerieData(i);
if (!sd.show) continue;
var key = sd.name;
var value = sd.GetData(dimension);
var itemFormatter = GetItemFormatter(tooltip, serie, sd);
@@ -109,15 +112,11 @@ namespace XCharts
sb.Append("<color=#").Append(themeInfo.GetColorStr(i)).Append(">● </color>");
if (string.IsNullOrEmpty(itemFormatter))
{
if (string.IsNullOrEmpty(key)) key = radar.indicatorList[dataIndex].name;
if (string.IsNullOrEmpty(key))
{
//key = radar.indicatorList[dataIndex].name;
sb.AppendFormat("{0}\n", ChartCached.FloatToStr(value, numericFormatter));
}
else
{
sb.AppendFormat("{0}: {1}\n", key, ChartCached.FloatToStr(value, numericFormatter));
}
}
else
{

View File

@@ -156,8 +156,10 @@ namespace XCharts
protected override void DrawChart(VertexHelper vh)
{
base.DrawChart(vh);
foreach (var radar in m_Radars)
for (int i = 0; i < m_Radars.Count; i++)
{
var radar = m_Radars[i];
radar.index = i;
radar.UpdateRadarCenter(chartPosition, chartWidth, chartHeight);
if (radar.shape == Radar.Shape.Circle)
{
@@ -269,8 +271,7 @@ namespace XCharts
{
continue;
}
var isHighlight = serie.highlighted || serieData.highlighted ||
(m_Tooltip.show && m_Tooltip.runtimeDataIndex[0] == i && m_Tooltip.runtimeDataIndex[1] == j);
var isHighlight = IsHighlight(radar, serie, serieData, j, 0);
var areaColor = SerieHelper.GetAreaColor(serie, m_ThemeInfo, serieIndex, isHighlight);
var areaToColor = SerieHelper.GetAreaToColor(serie, m_ThemeInfo, serieIndex, isHighlight);
var lineColor = SerieHelper.GetLineColor(serie, m_ThemeInfo, serieIndex, isHighlight);
@@ -322,13 +323,15 @@ namespace XCharts
}
if (serie.symbol.show && serie.symbol.type != SerieSymbolType.None)
{
var symbolSize = (isHighlight ? serie.symbol.selectedSize : serie.symbol.size);
var symbolColor = SerieHelper.GetItemColor(serie, serieData, m_ThemeInfo, serieIndex, isHighlight);
var symbolToColor = SerieHelper.GetItemToColor(serie, serieData, m_ThemeInfo, serieIndex, isHighlight);
var symbolBorder = SerieHelper.GetSymbolBorder(serie, serieData, isHighlight);
var cornerRadius = SerieHelper.GetSymbolCornerRadius(serie, serieData, isHighlight);
foreach (var point in pointList)
for (int m = 0; m < pointList.Count; m++)
{
var point = pointList[m];
isHighlight = IsHighlight(radar, serie, serieData, j, m);
var symbolSize = (isHighlight ? serie.symbol.selectedSize : serie.symbol.size);
var symbolColor = SerieHelper.GetItemColor(serie, serieData, m_ThemeInfo, serieIndex, isHighlight);
var symbolToColor = SerieHelper.GetItemToColor(serie, serieData, m_ThemeInfo, serieIndex, isHighlight);
var symbolBorder = SerieHelper.GetSymbolBorder(serie, serieData, isHighlight);
var cornerRadius = SerieHelper.GetSymbolCornerRadius(serie, serieData, isHighlight);
DrawSymbol(vh, serie.symbol.type, symbolSize, symbolBorder, point, symbolColor,
symbolToColor, serie.symbol.gap, cornerRadius);
}
@@ -345,6 +348,31 @@ namespace XCharts
}
}
private bool IsHighlight(Radar radar, Serie serie, SerieData serieData, int dataIndex, int dimension)
{
if (serie.highlighted || serieData.highlighted) return true;
if (!m_Tooltip.show) return false;
var selectedSerieIndex = m_Tooltip.runtimeDataIndex[0];
if (selectedSerieIndex < 0) return false;
if (m_Series.GetSerie(selectedSerieIndex).radarIndex != serie.radarIndex) return false;
switch (serie.radarType)
{
case RadarType.Multiple:
if (radar.isAxisTooltip)
{
var selectedDimension = tooltip.runtimeDataIndex[2];
return selectedDimension == dimension;
}
else
{
return m_Tooltip.runtimeDataIndex[0] == serie.index && m_Tooltip.runtimeDataIndex[1] == dataIndex;
}
case RadarType.Single:
return m_Tooltip.runtimeDataIndex[1] == dataIndex;
}
return false;
}
private void DrawSingleRadar(VertexHelper vh, Serie serie, int i)
{
var startPoint = Vector3.zero;
@@ -403,8 +431,7 @@ namespace XCharts
serieData.labelPosition = Vector3.zero;
continue;
}
var isHighlight = serie.highlighted || serieData.highlighted ||
(m_Tooltip.show && m_Tooltip.runtimeDataIndex[0] == i && m_Tooltip.runtimeDataIndex[1] == j);
var isHighlight = IsHighlight(radar, serie, serieData, j, 0);
var areaColor = SerieHelper.GetAreaColor(serie, m_ThemeInfo, serieIndex, isHighlight);
var areaToColor = SerieHelper.GetAreaToColor(serie, m_ThemeInfo, serieIndex, isHighlight);
var lineColor = SerieHelper.GetLineColor(serie, m_ThemeInfo, serieIndex, isHighlight);
@@ -620,7 +647,7 @@ namespace XCharts
if (m_IsEnterLegendButtom) return;
bool highlight = false;
//m_Tooltip.ClearValue();
m_Tooltip.ClearValue();
for (int i = 0; i < m_Series.Count; i++)
{
if (!IsActive(i)) continue;