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

View File

@@ -156,8 +156,10 @@ namespace XCharts
protected override void DrawChart(VertexHelper vh) protected override void DrawChart(VertexHelper vh)
{ {
base.DrawChart(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); radar.UpdateRadarCenter(chartPosition, chartWidth, chartHeight);
if (radar.shape == Radar.Shape.Circle) if (radar.shape == Radar.Shape.Circle)
{ {
@@ -269,8 +271,7 @@ namespace XCharts
{ {
continue; continue;
} }
var isHighlight = serie.highlighted || serieData.highlighted || var isHighlight = IsHighlight(radar, serie, serieData, j, 0);
(m_Tooltip.show && m_Tooltip.runtimeDataIndex[0] == i && m_Tooltip.runtimeDataIndex[1] == j);
var areaColor = SerieHelper.GetAreaColor(serie, m_ThemeInfo, serieIndex, isHighlight); var areaColor = SerieHelper.GetAreaColor(serie, m_ThemeInfo, serieIndex, isHighlight);
var areaToColor = SerieHelper.GetAreaToColor(serie, m_ThemeInfo, serieIndex, isHighlight); var areaToColor = SerieHelper.GetAreaToColor(serie, m_ThemeInfo, serieIndex, isHighlight);
var lineColor = SerieHelper.GetLineColor(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) if (serie.symbol.show && serie.symbol.type != SerieSymbolType.None)
{ {
var symbolSize = (isHighlight ? serie.symbol.selectedSize : serie.symbol.size); for (int m = 0; m < pointList.Count; m++)
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)
{ {
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, DrawSymbol(vh, serie.symbol.type, symbolSize, symbolBorder, point, symbolColor,
symbolToColor, serie.symbol.gap, cornerRadius); 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) private void DrawSingleRadar(VertexHelper vh, Serie serie, int i)
{ {
var startPoint = Vector3.zero; var startPoint = Vector3.zero;
@@ -403,8 +431,7 @@ namespace XCharts
serieData.labelPosition = Vector3.zero; serieData.labelPosition = Vector3.zero;
continue; continue;
} }
var isHighlight = serie.highlighted || serieData.highlighted || var isHighlight = IsHighlight(radar, serie, serieData, j, 0);
(m_Tooltip.show && m_Tooltip.runtimeDataIndex[0] == i && m_Tooltip.runtimeDataIndex[1] == j);
var areaColor = SerieHelper.GetAreaColor(serie, m_ThemeInfo, serieIndex, isHighlight); var areaColor = SerieHelper.GetAreaColor(serie, m_ThemeInfo, serieIndex, isHighlight);
var areaToColor = SerieHelper.GetAreaToColor(serie, m_ThemeInfo, serieIndex, isHighlight); var areaToColor = SerieHelper.GetAreaToColor(serie, m_ThemeInfo, serieIndex, isHighlight);
var lineColor = SerieHelper.GetLineColor(serie, m_ThemeInfo, serieIndex, isHighlight); var lineColor = SerieHelper.GetLineColor(serie, m_ThemeInfo, serieIndex, isHighlight);
@@ -620,7 +647,7 @@ namespace XCharts
if (m_IsEnterLegendButtom) return; if (m_IsEnterLegendButtom) return;
bool highlight = false; bool highlight = false;
//m_Tooltip.ClearValue(); m_Tooltip.ClearValue();
for (int i = 0; i < m_Series.Count; i++) for (int i = 0; i < m_Series.Count; i++)
{ {
if (!IsActive(i)) continue; if (!IsActive(i)) continue;