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