diff --git a/Assets/XCharts/Runtime/Component/Main/Radar.cs b/Assets/XCharts/Runtime/Component/Main/Radar.cs index 3142c796..ed8ddaa8 100644 --- a/Assets/XCharts/Runtime/Component/Main/Radar.cs +++ b/Assets/XCharts/Runtime/Component/Main/Radar.cs @@ -202,6 +202,7 @@ namespace XCharts /// public List indicatorList { get { return m_IndicatorList; } } + public int index { get; internal set; } /// /// the center position of radar in container. /// 雷达图在容器中的具体中心点。 diff --git a/Assets/XCharts/Runtime/Internal/Helper/TooltipHelper.cs b/Assets/XCharts/Runtime/Internal/Helper/TooltipHelper.cs index 758269c7..bcb041c3 100644 --- a/Assets/XCharts/Runtime/Internal/Helper/TooltipHelper.cs +++ b/Assets/XCharts/Runtime/Internal/Helper/TooltipHelper.cs @@ -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("● "); 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 { diff --git a/Assets/XCharts/Runtime/RadarChart.cs b/Assets/XCharts/Runtime/RadarChart.cs index fe751cc2..1b1eb9bd 100644 --- a/Assets/XCharts/Runtime/RadarChart.cs +++ b/Assets/XCharts/Runtime/RadarChart.cs @@ -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;