mirror of
https://github.com/XCharts-Team/XCharts.git
synced 2026-05-20 15:30:09 +00:00
优化RadarChart#77
This commit is contained in:
@@ -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.
|
||||
/// 雷达图在容器中的具体中心点。
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user