3.0 - serie data context

This commit is contained in:
monitor1394
2021-12-09 07:12:15 +08:00
parent 6109b62eb7
commit cd1a36cc18
25 changed files with 303 additions and 255 deletions

View File

@@ -80,7 +80,7 @@ namespace XCharts
public static void ResetItemPosition(Legend legend, Vector3 chartPos, float chartWidth, float chartHeight) public static void ResetItemPosition(Legend legend, Vector3 chartPos, float chartWidth, float chartHeight)
{ {
legend.location.UpdateRuntimeData(chartWidth,chartHeight); legend.location.UpdateRuntimeData(chartWidth, chartHeight);
var startX = 0f; var startX = 0f;
var startY = 0f; var startY = 0f;
var legendMaxWidth = chartWidth - legend.location.runtimeLeft - legend.location.runtimeRight; var legendMaxWidth = chartWidth - legend.location.runtimeLeft - legend.location.runtimeRight;
@@ -252,7 +252,7 @@ namespace XCharts
if (legendName.Equals(data.name)) if (legendName.Equals(data.name))
{ {
data.show = show; data.show = show;
data.highlighted = false; data.context.highlighted = false;
if (data.show) needShow = true; if (data.show) needShow = true;
} }
} }
@@ -276,8 +276,8 @@ namespace XCharts
{ {
if (legendName.Equals(data.name)) if (legendName.Equals(data.name))
{ {
data.highlighted = heighlight; data.context.highlighted = heighlight;
if (data.highlighted) show = true; if (data.context.highlighted) show = true;
} }
} }
} }

View File

@@ -291,11 +291,11 @@ namespace XCharts
if (System.Math.Abs(dist) <= symbolSize) if (System.Math.Abs(dist) <= symbolSize)
{ {
serie.context.pointerAxisDataIndexs.Add(i); serie.context.pointerAxisDataIndexs.Add(i);
serieData.highlighted = true; serieData.context.highlighted = true;
} }
else else
{ {
serieData.highlighted = false; serieData.context.highlighted = false;
} }
} }
} }

View File

@@ -110,7 +110,7 @@ namespace XCharts
var numericFormatter = GetItemNumericFormatter(tooltip, serie, serieData); var numericFormatter = GetItemNumericFormatter(tooltip, serie, serieData);
if (isCartesian) if (isCartesian)
{ {
if (serieData != null && serieData.highlighted) if (serieData != null && serieData.context.highlighted)
{ {
sb.Append(key).Append(!string.IsNullOrEmpty(key) ? " : " : ""); sb.Append(key).Append(!string.IsNullOrEmpty(key) ? " : " : "");
sb.Append("[").Append(ChartCached.FloatToStr(xValue, numericFormatter)).Append(",") sb.Append("[").Append(ChartCached.FloatToStr(xValue, numericFormatter)).Append(",")

View File

@@ -76,7 +76,7 @@ namespace XCharts
public static bool CanShowLabel(Serie serie, SerieData serieData, LabelStyle label, int dimesion) public static bool CanShowLabel(Serie serie, SerieData serieData, LabelStyle label, int dimesion)
{ {
return serie.show && serieData.canShowLabel && !serie.IsIgnoreValue(serieData, dimesion); return serie.show && serieData.context.canShowLabel && !serie.IsIgnoreValue(serieData, dimesion);
} }
public static string GetFormatterContent(Serie serie, SerieData serieData, public static string GetFormatterContent(Serie serie, SerieData serieData,
@@ -125,7 +125,7 @@ namespace XCharts
for (int i = 0; i < serie.dataCount; i++) for (int i = 0; i < serie.dataCount; i++)
{ {
var serieData = serie.data[i]; var serieData = serie.data[i];
var serieLabel = SerieHelper.GetSerieLabel(serie, serieData, serieData.highlighted); var serieLabel = SerieHelper.GetSerieLabel(serie, serieData, serieData.context.highlighted);
if (serieLabel.show && serieData.labelObject != null) if (serieLabel.show && serieData.labelObject != null)
{ {
if (!serie.show || !serieData.show) if (!serie.show || !serieData.show)
@@ -144,13 +144,13 @@ namespace XCharts
{ {
var labelWidth = serieData.GetLabelWidth(); var labelWidth = serieData.GetLabelWidth();
if (serie.clockwise) if (serie.clockwise)
serieData.labelObject.SetLabelPosition(serieData.labelPosition - new Vector3(labelWidth / 2, 0)); serieData.labelObject.SetLabelPosition(serieData.context.labelPosition - new Vector3(labelWidth / 2, 0));
else else
serieData.labelObject.SetLabelPosition(serieData.labelPosition + new Vector3(labelWidth / 2, 0)); serieData.labelObject.SetLabelPosition(serieData.context.labelPosition + new Vector3(labelWidth / 2, 0));
} }
else else
{ {
serieData.labelObject.SetLabelPosition(serieData.labelPosition); serieData.labelObject.SetLabelPosition(serieData.context.labelPosition);
} }
} }
} }
@@ -160,7 +160,7 @@ namespace XCharts
{ {
var serieData = serie.GetSerieData(0); var serieData = serie.GetSerieData(0);
if (serieData == null) return; if (serieData == null) return;
var serieLabel = SerieHelper.GetSerieLabel(serie, serieData, serieData.highlighted); var serieLabel = SerieHelper.GetSerieLabel(serie, serieData, serieData.context.highlighted);
if (serieLabel.show && serieData.labelObject != null) if (serieLabel.show && serieData.labelObject != null)
{ {
if (!serie.show || !serieData.show) if (!serie.show || !serieData.show)
@@ -174,30 +174,30 @@ namespace XCharts
serieData.SetLabelActive(true); serieData.SetLabelActive(true);
serieData.labelObject.SetText(content); serieData.labelObject.SetText(content);
serieData.labelObject.SetTextColor(GetLabelColor(serie, theme, colorIndex)); serieData.labelObject.SetTextColor(GetLabelColor(serie, theme, colorIndex));
serieData.labelObject.SetLabelPosition(serieData.labelPosition + serieLabel.offset); serieData.labelObject.SetLabelPosition(serieData.context.labelPosition + serieLabel.offset);
} }
} }
public static void UpdatePieLabelPosition(Serie serie, SerieData serieData) public static void UpdatePieLabelPosition(Serie serie, SerieData serieData)
{ {
if (serieData.labelObject == null) return; if (serieData.labelObject == null) return;
var currAngle = serieData.runtimePieHalfAngle; var currAngle = serieData.context.halfAngle;
var currRad = currAngle * Mathf.Deg2Rad; var currRad = currAngle * Mathf.Deg2Rad;
var offsetRadius = serieData.runtimePieOffsetRadius; var offsetRadius = serieData.context.offsetRadius;
var insideRadius = serieData.runtimePieInsideRadius; var insideRadius = serieData.context.insideRadius;
var outsideRadius = serieData.runtimePieOutsideRadius; var outsideRadius = serieData.context.outsideRadius;
var serieLabel = SerieHelper.GetSerieLabel(serie, serieData); var serieLabel = SerieHelper.GetSerieLabel(serie, serieData);
var labelLine = SerieHelper.GetSerieLabelLine(serie, serieData); var labelLine = SerieHelper.GetSerieLabelLine(serie, serieData);
switch (serieLabel.position) switch (serieLabel.position)
{ {
case LabelStyle.Position.Center: case LabelStyle.Position.Center:
serieData.labelPosition = serie.context.center; serieData.context.labelPosition = serie.context.center;
break; break;
case LabelStyle.Position.Inside: case LabelStyle.Position.Inside:
var labelRadius = offsetRadius + insideRadius + (outsideRadius - insideRadius) / 2 + serieLabel.margin; var labelRadius = offsetRadius + insideRadius + (outsideRadius - insideRadius) / 2 + serieLabel.margin;
var labelCenter = new Vector2(serie.context.center.x + labelRadius * Mathf.Sin(currRad), var labelCenter = new Vector2(serie.context.center.x + labelRadius * Mathf.Sin(currRad),
serie.context.center.y + labelRadius * Mathf.Cos(currRad)); serie.context.center.y + labelRadius * Mathf.Cos(currRad));
serieData.labelPosition = labelCenter; serieData.context.labelPosition = labelCenter;
break; break;
case LabelStyle.Position.Outside: case LabelStyle.Position.Outside:
if (labelLine.lineType == LabelLine.LineType.HorizontalLine) if (labelLine.lineType == LabelLine.LineType.HorizontalLine)
@@ -215,14 +215,14 @@ namespace XCharts
var r4 = Mathf.Sqrt(radius1 * radius1 - Mathf.Pow(currCos * radius3, 2)) - currSin * radius3; var r4 = Mathf.Sqrt(radius1 * radius1 - Mathf.Pow(currCos * radius3, 2)) - currSin * radius3;
r4 += labelLine.lineLength1 + labelLine.lineWidth * 4; r4 += labelLine.lineLength1 + labelLine.lineWidth * 4;
r4 += serieData.labelObject.label.GetPreferredWidth() / 2; r4 += serieData.labelObject.label.GetPreferredWidth() / 2;
serieData.labelPosition = pos0 + (currAngle > 180 ? Vector3.left : Vector3.right) * r4; serieData.context.labelPosition = pos0 + (currAngle > 180 ? Vector3.left : Vector3.right) * r4;
} }
else else
{ {
labelRadius = serie.context.outsideRadius + labelLine.lineLength1; labelRadius = serie.context.outsideRadius + labelLine.lineLength1;
labelCenter = new Vector2(serie.context.center.x + labelRadius * Mathf.Sin(currRad), labelCenter = new Vector2(serie.context.center.x + labelRadius * Mathf.Sin(currRad),
serie.context.center.y + labelRadius * Mathf.Cos(currRad)); serie.context.center.y + labelRadius * Mathf.Cos(currRad));
serieData.labelPosition = labelCenter; serieData.context.labelPosition = labelCenter;
} }
break; break;
} }
@@ -237,7 +237,7 @@ namespace XCharts
for (int n = 0; n < data.Count; n++) for (int n = 0; n < data.Count; n++)
{ {
var serieData = data[n]; var serieData = data[n];
if (serieData.labelPosition.x != 0 && serieData.labelPosition.x < serie.context.center.x) if (serieData.context.labelPosition.x != 0 && serieData.context.labelPosition.x < serie.context.center.x)
{ {
splitCount = n; splitCount = n;
break; break;
@@ -257,7 +257,7 @@ namespace XCharts
private static void CheckSerieDataLabel(Serie serie, SerieData serieData, bool isLeft, ComponentTheme theme, private static void CheckSerieDataLabel(Serie serie, SerieData serieData, bool isLeft, ComponentTheme theme,
ref Vector3 lastCheckPos) ref Vector3 lastCheckPos)
{ {
if (!serieData.canShowLabel) if (!serieData.context.canShowLabel)
{ {
serieData.SetLabelActive(false); serieData.SetLabelActive(false);
return; return;
@@ -270,11 +270,11 @@ namespace XCharts
if (serieLabel.position != LabelStyle.Position.Outside) return; if (serieLabel.position != LabelStyle.Position.Outside) return;
if (lastCheckPos == Vector3.zero) if (lastCheckPos == Vector3.zero)
{ {
lastCheckPos = serieData.labelPosition; lastCheckPos = serieData.context.labelPosition;
} }
else if (serieData.labelPosition.x != 0) else if (serieData.context.labelPosition.x != 0)
{ {
if (lastCheckPos.y - serieData.labelPosition.y < fontSize) if (lastCheckPos.y - serieData.context.labelPosition.y < fontSize)
{ {
var labelRadius = serie.context.outsideRadius + labelLine.lineLength1; var labelRadius = serie.context.outsideRadius + labelLine.lineLength1;
var y1 = lastCheckPos.y - fontSize; var y1 = lastCheckPos.y - fontSize;
@@ -283,9 +283,9 @@ namespace XCharts
var diffX = labelRadius * labelRadius - diff * diff; var diffX = labelRadius * labelRadius - diff * diff;
diffX = diffX <= 0 ? 0 : diffX; diffX = diffX <= 0 ? 0 : diffX;
var x1 = serie.context.center.x + Mathf.Sqrt(diffX) * (isLeft ? -1 : 1); var x1 = serie.context.center.x + Mathf.Sqrt(diffX) * (isLeft ? -1 : 1);
serieData.labelPosition = new Vector3(x1, y1); serieData.context.labelPosition = new Vector3(x1, y1);
} }
lastCheckPos = serieData.labelPosition; lastCheckPos = serieData.context.labelPosition;
serieData.labelObject.SetPosition(SerieLabelHelper.GetRealLabelPosition(serieData, serieLabel, labelLine)); serieData.labelObject.SetPosition(SerieLabelHelper.GetRealLabelPosition(serieData, serieLabel, labelLine));
} }
} }
@@ -294,16 +294,16 @@ namespace XCharts
{ {
if (label.position == LabelStyle.Position.Outside && labelLine.lineType != LabelLine.LineType.HorizontalLine) if (label.position == LabelStyle.Position.Outside && labelLine.lineType != LabelLine.LineType.HorizontalLine)
{ {
var currAngle = serieData.runtimePieHalfAngle; var currAngle = serieData.context.halfAngle;
var offset = labelLine.lineLength2 + serieData.labelObject.GetLabelWidth() / 2; var offset = labelLine.lineLength2 + serieData.labelObject.GetLabelWidth() / 2;
if (currAngle > 180) if (currAngle > 180)
return serieData.labelPosition + new Vector3(-offset, 0, 0); return serieData.context.labelPosition + new Vector3(-offset, 0, 0);
else else
return serieData.labelPosition + new Vector3(offset, 0, 0); return serieData.context.labelPosition + new Vector3(offset, 0, 0);
} }
else else
{ {
return serieData.labelPosition; return serieData.context.labelPosition;
} }
} }
} }

View File

@@ -389,7 +389,8 @@ namespace XCharts
{ {
var serie = series[i]; var serie = series[i];
if ((isPolar && serie.polarIndex != axisIndex) if ((isPolar && serie.polarIndex != axisIndex)
|| (!isPolar && serie.yAxisIndex != axisIndex)) continue; || (!isPolar && serie.yAxisIndex != axisIndex)
|| !serie.show) continue;
if (isPercentStack && SeriesHelper.IsPercentStack<Bar>(series, serie.serieName)) if (isPercentStack && SeriesHelper.IsPercentStack<Bar>(series, serie.serieName))
{ {
if (100 > max) max = 100; if (100 > max) max = 100;
@@ -431,7 +432,8 @@ namespace XCharts
{ {
var serie = ss.Value[i]; var serie = ss.Value[i];
if ((isPolar && serie.polarIndex != axisIndex) if ((isPolar && serie.polarIndex != axisIndex)
|| (!isPolar && serie.yAxisIndex != axisIndex)) continue; || (!isPolar && serie.yAxisIndex != axisIndex)
|| !serie.show) continue;
var showData = serie.GetDataList(dataZoom); var showData = serie.GetDataList(dataZoom);
if (SeriesHelper.IsPercentStack<Bar>(series, serie.stack)) if (SeriesHelper.IsPercentStack<Bar>(series, serie.stack))
{ {

View File

@@ -0,0 +1,48 @@
/******************************************/
/* */
/* Copyright (c) 2021 monitor1394 */
/* https://github.com/monitor1394 */
/* */
/******************************************/
using System;
namespace XCharts
{
[AttributeUsage(AttributeTargets.Class, AllowMultiple = true)]
public sealed class SerieConvertAttribute : Attribute
{
public readonly Type type0;
public readonly Type type1;
public readonly Type type2;
public readonly Type type3;
public SerieConvertAttribute(Type serie)
{
type0 = serie;
}
public SerieConvertAttribute(Type serie, Type serie2)
{
type0 = serie;
type1 = serie2;
}
public SerieConvertAttribute(Type serie, Type serie2, Type serie3)
{
type0 = serie;
type1 = serie2;
type2 = serie3;
}
public SerieConvertAttribute(Type serie, Type serie2, Type serie3, Type serie4)
{
type0 = serie;
type1 = serie2;
type2 = serie3;
type3 = serie4;
}
public bool Contains<T>() where T : CoordSystem
{
var type = typeof(T);
return (type == type0 || type == type1 || type == type2 || type == type3);
}
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 74af4595d38cb43ca8f11348cc979137
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -185,21 +185,26 @@ namespace XCharts
public bool SetText(string text) public bool SetText(string text)
{ {
if (m_LabelRect == null) return false; if (m_LabelRect == null || m_LabelText == null)
if (m_LabelText != null && !m_LabelText.GetText().Equals(text)) return false;
if (text == null)
text = "";
if (!m_LabelText.GetText().Equals(text))
{ {
m_LabelText.SetText(text); m_LabelText.SetText(text);
if (m_LabelAutoSize) if (m_LabelAutoSize)
{ {
var newSize = string.IsNullOrEmpty(text) ? Vector2.zero : var newSize = string.IsNullOrEmpty(text) ? Vector2.zero :
new Vector2(m_LabelText.GetPreferredWidth() + m_LabelPaddingLeftRight * 2, new Vector2(m_LabelText.GetPreferredWidth() + m_LabelPaddingLeftRight * 2,
m_LabelText.GetPreferredHeight() + m_LabelPaddingTopBottom * 2); m_LabelText.GetPreferredHeight() + m_LabelPaddingTopBottom * 2);
var sizeChange = newSize.x != m_LabelRect.sizeDelta.x || newSize.y != m_LabelRect.sizeDelta.y; var sizeChange = newSize.x != m_LabelRect.sizeDelta.x || newSize.y != m_LabelRect.sizeDelta.y;
if (sizeChange) if (sizeChange)
{ {
m_LabelRect.sizeDelta = newSize; m_LabelRect.sizeDelta = newSize;
if (m_LabelBackgroundRect != null) if (m_LabelBackgroundRect != null)
m_LabelBackgroundRect.sizeDelta = newSize; m_LabelBackgroundRect.sizeDelta = newSize;
AdjustIconPos(); AdjustIconPos();
} }
return sizeChange; return sizeChange;

View File

@@ -81,16 +81,16 @@ namespace XCharts
serie.context.pointerEnter = false; serie.context.pointerEnter = false;
foreach (var serieData in serie.data) foreach (var serieData in serie.data)
{ {
if (serieData.runtimeRect.Contains(chart.pointerPos)) if (serieData.context.rect.Contains(chart.pointerPos))
{ {
serie.context.pointerItemDataIndex = serieData.index; serie.context.pointerItemDataIndex = serieData.index;
serie.context.pointerEnter = true; serie.context.pointerEnter = true;
serieData.highlighted = true; serieData.context.highlighted = true;
chart.RefreshTopPainter(); chart.RefreshTopPainter();
} }
else else
{ {
serieData.highlighted = false; serieData.context.highlighted = false;
} }
} }
} }
@@ -137,11 +137,11 @@ namespace XCharts
serie.context.dataPoints.Add(Vector3.zero); serie.context.dataPoints.Add(Vector3.zero);
continue; continue;
} }
var highlight = serie.data[i].highlighted var highlight = serie.data[i].context.highlighted
|| serie.highlighted; || serie.highlighted;
var itemStyle = SerieHelper.GetItemStyle(serie, serieData, highlight); var itemStyle = SerieHelper.GetItemStyle(serie, serieData, highlight);
serieData.canShowLabel = true; serieData.context.canShowLabel = true;
double value = showData[i].GetCurrData(1, dataChangeDuration, xAxis.inverse, xMinValue, xMaxValue); double value = showData[i].GetCurrData(1, dataChangeDuration, xAxis.inverse, xMinValue, xMaxValue);
float borderWidth = value == 0 ? 0 : itemStyle.runtimeBorderWidth; float borderWidth = value == 0 ? 0 : itemStyle.runtimeBorderWidth;
if (showData[i].IsDataChanged()) dataChanging = true; if (showData[i].IsDataChanged()) dataChanging = true;
@@ -155,7 +155,7 @@ namespace XCharts
{ {
for (int n = 0; n < m_StackSerieData.Count - 1; n++) for (int n = 0; n < m_StackSerieData.Count - 1; n++)
{ {
pX += m_StackSerieData[n][i].runtimeStackHig; pX += m_StackSerieData[n][i].context.stackHeight;
} }
} }
@@ -182,7 +182,7 @@ namespace XCharts
/ valueTotal * grid.context.width); / valueTotal * grid.context.width);
} }
} }
serieData.runtimeStackHig = barHig; serieData.context.stackHeight = barHig;
var isBarEnd = false; var isBarEnd = false;
float currHig = chart.CheckSerieBarAnimation(serie, i, barHig, out isBarEnd); float currHig = chart.CheckSerieBarAnimation(serie, i, barHig, out isBarEnd);
if (!isBarEnd) isAllBarEnd = false; if (!isBarEnd) isAllBarEnd = false;
@@ -210,7 +210,7 @@ namespace XCharts
plb = chart.ClampInGrid(grid, plb); plb = chart.ClampInGrid(grid, plb);
top = chart.ClampInGrid(grid, top); top = chart.ClampInGrid(grid, top);
} }
serieData.runtimeRect = Rect.MinMaxRect(plb.x, plb.y, prb.x, prt.y); serieData.context.rect = Rect.MinMaxRect(plb.x, plb.y, prb.x, prt.y);
serie.context.dataPoints.Add(top); serie.context.dataPoints.Add(top);
if (serie.show) if (serie.show)
{ {
@@ -281,7 +281,7 @@ namespace XCharts
serie.context.dataPoints.Add(Vector3.zero); serie.context.dataPoints.Add(Vector3.zero);
continue; continue;
} }
var highlight = serie.data[i].highlighted var highlight = serie.data[i].context.highlighted
|| serie.highlighted; || serie.highlighted;
var itemStyle = SerieHelper.GetItemStyle(serie, serieData, highlight); var itemStyle = SerieHelper.GetItemStyle(serie, serieData, highlight);
double value = serieData.GetCurrData(1, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue); double value = serieData.GetCurrData(1, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue);
@@ -307,7 +307,7 @@ namespace XCharts
{ {
for (int n = 0; n < m_StackSerieData.Count - 1; n++) for (int n = 0; n < m_StackSerieData.Count - 1; n++)
{ {
pY += m_StackSerieData[n][i].runtimeStackHig; pY += m_StackSerieData[n][i].context.stackHeight;
} }
} }
@@ -335,7 +335,7 @@ namespace XCharts
} }
} }
} }
serieData.runtimeStackHig = barHig; serieData.context.stackHeight = barHig;
var isBarEnd = false; var isBarEnd = false;
float currHig = chart.CheckSerieBarAnimation(serie, i, barHig, out isBarEnd); float currHig = chart.CheckSerieBarAnimation(serie, i, barHig, out isBarEnd);
if (!isBarEnd) isAllBarEnd = false; if (!isBarEnd) isAllBarEnd = false;
@@ -363,7 +363,7 @@ namespace XCharts
prb = chart.ClampInGrid(grid, prb); prb = chart.ClampInGrid(grid, prb);
top = chart.ClampInGrid(grid, top); top = chart.ClampInGrid(grid, top);
} }
serieData.runtimeRect = Rect.MinMaxRect(plb.x, plb.y, prb.x, prt.y); serieData.context.rect = Rect.MinMaxRect(plb.x, plb.y, prb.x, prt.y);
serie.context.dataPoints.Add(top); serie.context.dataPoints.Add(top);
if (serie.show && currHig != 0) if (serie.show && currHig != 0)
{ {

View File

@@ -56,7 +56,7 @@ namespace XCharts
serie.context.dataPoints.Add(Vector3.zero); serie.context.dataPoints.Add(Vector3.zero);
continue; continue;
} }
var highlight = serie.data[i].highlighted || serie.highlighted; var highlight = serie.data[i].context.highlighted || serie.highlighted;
var itemStyle = SerieHelper.GetItemStyle(serie, serieData, highlight); var itemStyle = SerieHelper.GetItemStyle(serie, serieData, highlight);
var open = serieData.GetCurrData(0, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue); var open = serieData.GetCurrData(0, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue);
var close = serieData.GetCurrData(1, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue); var close = serieData.GetCurrData(1, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue);
@@ -79,7 +79,7 @@ namespace XCharts
barHig = (float)((close - open) / valueTotal * grid.context.height); barHig = (float)((close - open) / valueTotal * grid.context.height);
pY += (float)((open - minCut) / valueTotal * grid.context.height); pY += (float)((open - minCut) / valueTotal * grid.context.height);
} }
serieData.runtimeStackHig = barHig; serieData.context.stackHeight = barHig;
var isBarEnd = false; var isBarEnd = false;
float currHig = chart.CheckSerieBarAnimation(serie, i, barHig, out isBarEnd); float currHig = chart.CheckSerieBarAnimation(serie, i, barHig, out isBarEnd);
if (!isBarEnd) isAllBarEnd = false; if (!isBarEnd) isAllBarEnd = false;

View File

@@ -298,7 +298,7 @@ namespace XCharts
if (serie.dataCount > 0) if (serie.dataCount > 0)
{ {
var serieData = serie.data[0]; var serieData = serie.data[0];
serieData.labelPosition = serie.context.center + serie.label.offset; serieData.context.labelPosition = serie.context.center + serie.label.offset;
value = dest ? serieData.GetData(1) value = dest ? serieData.GetData(1)
: serieData.GetCurrData(1, serie.animation.GetUpdateAnimationDuration()); : serieData.GetCurrData(1, serie.animation.GetUpdateAnimationDuration());
value = MathUtil.Clamp(value, serie.min, serie.max); value = MathUtil.Clamp(value, serie.min, serie.max);

View File

@@ -40,16 +40,16 @@ namespace XCharts
if (!grid.IsPointerEnter()) return; if (!grid.IsPointerEnter()) return;
foreach (var serieData in serie.data) foreach (var serieData in serie.data)
{ {
if (serieData.runtimeRect.Contains(chart.pointerPos)) if (serieData.context.rect.Contains(chart.pointerPos))
{ {
serie.context.pointerItemDataIndex = serieData.index; serie.context.pointerItemDataIndex = serieData.index;
serie.context.pointerEnter = true; serie.context.pointerEnter = true;
serieData.highlighted = true; serieData.context.highlighted = true;
chart.RefreshTopPainter(); chart.RefreshTopPainter();
} }
else else
{ {
serieData.highlighted = false; serieData.context.highlighted = false;
} }
} }
} }
@@ -110,8 +110,8 @@ namespace XCharts
var pos = new Vector3(zeroX + (i + (xAxis.boundaryGap ? 0.5f : 0)) * xWidth, var pos = new Vector3(zeroX + (i + (xAxis.boundaryGap ? 0.5f : 0)) * xWidth,
zeroY + (j + (yAxis.boundaryGap ? 0.5f : 0)) * yWidth); zeroY + (j + (yAxis.boundaryGap ? 0.5f : 0)) * yWidth);
serie.context.dataPoints.Add(pos); serie.context.dataPoints.Add(pos);
serieData.canShowLabel = false; serieData.context.canShowLabel = false;
serieData.runtimeRect = new Rect(pos.x - rectWid / 2, pos.y - rectHig / 2, rectWid, rectHig); serieData.context.rect = new Rect(pos.x - rectWid / 2, pos.y - rectHig / 2, rectWid, rectHig);
if (value == 0) continue; if (value == 0) continue;
if ((value < rangeMin && rangeMin != visualMap.min) if ((value < rangeMin && rangeMin != visualMap.min)
|| (value > rangeMax && rangeMax != visualMap.max)) || (value > rangeMax && rangeMax != visualMap.max))
@@ -121,8 +121,8 @@ namespace XCharts
if (!visualMap.IsInSelectedValue(value)) continue; if (!visualMap.IsInSelectedValue(value)) continue;
color = visualMap.GetColor(value); color = visualMap.GetColor(value);
if (animationIndex >= 0 && i > animationIndex) continue; if (animationIndex >= 0 && i > animationIndex) continue;
serieData.canShowLabel = true; serieData.context.canShowLabel = true;
var emphasis = (serieData.highlighted) var emphasis = (serieData.context.highlighted)
|| visualMap.context.pointerIndex > 0; || visualMap.context.pointerIndex > 0;
UGL.DrawRectangle(vh, pos, rectWid / 2, rectHig / 2, color); UGL.DrawRectangle(vh, pos, rectWid / 2, rectHig / 2, color);

View File

@@ -12,6 +12,7 @@ namespace XCharts
{ {
[Serializable] [Serializable]
[SerieHandler(typeof(LineHandler), true)] [SerieHandler(typeof(LineHandler), true)]
[SerieConvert(typeof(Bar))]
[CoordOptions(typeof(GridCoord), typeof(PolarCoord))] [CoordOptions(typeof(GridCoord), typeof(PolarCoord))]
public class Line : Serie, INeedSerieContainer public class Line : Serie, INeedSerieContainer
{ {

View File

@@ -137,7 +137,7 @@ namespace XCharts
foreach (var serieData in serie.data) foreach (var serieData in serie.data)
{ {
var dist = Vector3.Distance(chart.pointerPos, serieData.runtimePosition); var dist = Vector3.Distance(chart.pointerPos, serieData.context.position);
var symbol = SerieHelper.GetSerieSymbol(serie, serieData); var symbol = SerieHelper.GetSerieSymbol(serie, serieData);
var symbolSize = symbol.GetSize(serieData.data, themeSymbolSize); var symbolSize = symbol.GetSize(serieData.data, themeSymbolSize);
@@ -145,12 +145,12 @@ namespace XCharts
{ {
serie.context.pointerItemDataIndex = serieData.index; serie.context.pointerItemDataIndex = serieData.index;
serie.context.pointerEnter = true; serie.context.pointerEnter = true;
serieData.highlighted = true; serieData.context.highlighted = true;
chart.RefreshTopPainter(); chart.RefreshTopPainter();
} }
else else
{ {
serieData.highlighted = false; serieData.context.highlighted = false;
} }
} }
} }
@@ -193,7 +193,7 @@ namespace XCharts
if (ChartHelper.IsIngore(serie.context.dataPoints[i])) if (ChartHelper.IsIngore(serie.context.dataPoints[i]))
continue; continue;
var highlight = serie.data[i].highlighted || serie.highlighted; var highlight = serie.data[i].context.highlighted || serie.highlighted;
var symbolSize = highlight var symbolSize = highlight
? symbol.GetSelectedSize(serie.data[i].data, theme.serie.lineSymbolSelectedSize) ? symbol.GetSelectedSize(serie.data[i].data, theme.serie.lineSymbolSelectedSize)
: symbol.GetSize(serie.data[i].data, theme.serie.lineSymbolSize); : symbol.GetSize(serie.data[i].data, theme.serie.lineSymbolSize);
@@ -321,8 +321,8 @@ namespace XCharts
var isIgnore = serie.IsIgnoreValue(serieData); var isIgnore = serie.IsIgnoreValue(serieData);
if (isIgnore) if (isIgnore)
{ {
serieData.runtimeStackHig = 0; serieData.context.stackHeight = 0;
serieData.runtimePosition = Vector3.zero; serieData.context.position = Vector3.zero;
if (serie.ignoreLineBreak && serie.context.dataIgnore.Count > 0) if (serie.ignoreLineBreak && serie.context.dataIgnore.Count > 0)
{ {
serie.context.dataIgnore[serie.context.dataIgnore.Count - 1] = true; serie.context.dataIgnore[serie.context.dataIgnore.Count - 1] = true;
@@ -335,10 +335,10 @@ namespace XCharts
var relativedValue = DataHelper.SampleValue(ref showData, serie.sampleType, rate, serie.minShow, var relativedValue = DataHelper.SampleValue(ref showData, serie.sampleType, rate, serie.minShow,
maxCount, totalAverage, i, dataChangeDuration, ref dataChanging, relativedAxis); maxCount, totalAverage, i, dataChangeDuration, ref dataChanging, relativedAxis);
serieData.runtimeStackHig = GetDataPoint(isY, axis, relativedAxis, grid, xValue, relativedValue, serieData.context.stackHeight = GetDataPoint(isY, axis, relativedAxis, grid, xValue, relativedValue,
i, scaleWid, isStack, ref np); i, scaleWid, isStack, ref np);
serieData.runtimePosition = np; serieData.context.position = np;
serie.context.dataPoints.Add(np); serie.context.dataPoints.Add(np);
serie.context.dataIgnore.Add(false); serie.context.dataIgnore.Add(false);
@@ -382,7 +382,7 @@ namespace XCharts
if (isStack) if (isStack)
{ {
for (int n = 0; n < m_StackSerieData.Count - 1; n++) for (int n = 0; n < m_StackSerieData.Count - 1; n++)
yPos += m_StackSerieData[n][i].runtimeStackHig; yPos += m_StackSerieData[n][i].context.stackHeight;
} }
} }
else else
@@ -392,7 +392,7 @@ namespace XCharts
if (isStack) if (isStack)
{ {
for (int n = 0; n < m_StackSerieData.Count - 1; n++) for (int n = 0; n < m_StackSerieData.Count - 1; n++)
xPos += m_StackSerieData[n][i].runtimeStackHig; xPos += m_StackSerieData[n][i].context.stackHeight;
} }
} }
np = new Vector3(xPos, yPos); np = new Vector3(xPos, yPos);

View File

@@ -83,12 +83,12 @@ namespace XCharts
{ {
var serieData = serie.GetSerieData(i); var serieData = serie.GetSerieData(i);
var symbol = SerieHelper.GetSerieSymbol(serie, serieData); var symbol = SerieHelper.GetSerieSymbol(serie, serieData);
if (ChartHelper.IsIngore(serieData.runtimePosition)) if (ChartHelper.IsIngore(serieData.context.position))
continue; continue;
bool highlight = serieData.highlighted || serie.highlighted; bool highlight = serieData.context.highlighted || serie.highlighted;
if ((!symbol.show || !symbol.ShowSymbol(i, count) || serie.IsPerformanceMode()) if ((!symbol.show || !symbol.ShowSymbol(i, count) || serie.IsPerformanceMode())
&& !serieData.highlighted) && !serieData.context.highlighted)
continue; continue;
var symbolSize = highlight var symbolSize = highlight
@@ -102,7 +102,7 @@ namespace XCharts
var cornerRadius = SerieHelper.GetSymbolCornerRadius(serie, serieData, highlight); var cornerRadius = SerieHelper.GetSymbolCornerRadius(serie, serieData, highlight);
symbolSize = serie.animation.GetSysmbolSize(symbolSize); symbolSize = serie.animation.GetSysmbolSize(symbolSize);
chart.DrawSymbol(vh, symbol.type, symbolSize, symbolBorder, serieData.runtimePosition, chart.DrawSymbol(vh, symbol.type, symbolSize, symbolBorder, serieData.context.position,
symbolColor, symbolToColor, symbolEmptyColor, symbol.gap, cornerRadius); symbolColor, symbolToColor, symbolEmptyColor, symbol.gap, cornerRadius);
} }
} }
@@ -126,10 +126,10 @@ namespace XCharts
var radius = (float)((value - min) / (max - min) * polarRadius); var radius = (float)((value - min) / (max - min) * polarRadius);
angle = (angle + 360) % 360; angle = (angle + 360) % 360;
serieData.runtimeAngle = angle; serieData.context.angle = angle;
serieData.runtimePosition = ChartHelper.GetPos(m_Polar.context.center, radius, angle, true); serieData.context.position = ChartHelper.GetPos(m_Polar.context.center, radius, angle, true);
return serieData.runtimePosition; return serieData.context.position;
} }
} }
} }

View File

@@ -160,9 +160,9 @@ namespace XCharts
serie.context.checkValue = value; serie.context.checkValue = value;
m_UpdateLabelText = true; m_UpdateLabelText = true;
} }
if (serieData.labelPosition != cenPos) if (serieData.context.labelPosition != cenPos)
{ {
serieData.labelPosition = cenPos; serieData.context.labelPosition = cenPos;
m_UpdateLabelText = true; m_UpdateLabelText = true;
} }
if (value <= 0) return; if (value <= 0) return;
@@ -273,9 +273,9 @@ namespace XCharts
serie.context.checkValue = value; serie.context.checkValue = value;
m_UpdateLabelText = true; m_UpdateLabelText = true;
} }
if (serieData.labelPosition != cenPos) if (serieData.context.labelPosition != cenPos)
{ {
serieData.labelPosition = cenPos; serieData.context.labelPosition = cenPos;
m_UpdateLabelText = true; m_UpdateLabelText = true;
} }
if (value <= 0) return; if (value <= 0) return;

View File

@@ -53,7 +53,7 @@ namespace XCharts
for (int n = 0; n < data.Count; n++) for (int n = 0; n < data.Count; n++)
{ {
var serieData = data[n]; var serieData = data[n];
if (!serieData.canShowLabel || serie.IsIgnoreValue(serieData)) if (!serieData.context.canShowLabel || serie.IsIgnoreValue(serieData))
{ {
serieData.SetLabelActive(false); serieData.SetLabelActive(false);
continue; continue;
@@ -133,16 +133,16 @@ namespace XCharts
if (dataIndex >= 0) if (dataIndex >= 0)
{ {
if (lastDataIndex >= 0) if (lastDataIndex >= 0)
serie.GetSerieData(lastDataIndex).highlighted = false; serie.GetSerieData(lastDataIndex).context.highlighted = false;
if (lastDataIndex != dataIndex) if (lastDataIndex != dataIndex)
chart.RefreshPainter(serie); chart.RefreshPainter(serie);
serie.GetSerieData(dataIndex).highlighted = true; serie.GetSerieData(dataIndex).context.highlighted = true;
serie.context.pointerItemDataIndex = dataIndex; serie.context.pointerItemDataIndex = dataIndex;
} }
else else
{ {
if (lastDataIndex >= 0) if (lastDataIndex >= 0)
serie.GetSerieData(lastDataIndex).highlighted = false; serie.GetSerieData(lastDataIndex).context.highlighted = false;
serie.context.pointerItemDataIndex = -1; serie.context.pointerItemDataIndex = -1;
} }
} }
@@ -151,7 +151,7 @@ namespace XCharts
if (lastPointerEnter) if (lastPointerEnter)
{ {
foreach (var serieData in serie.data) foreach (var serieData in serie.data)
serieData.highlighted = false; serieData.context.highlighted = false;
} }
serie.context.pointerItemDataIndex = -1; serie.context.pointerItemDataIndex = -1;
} }
@@ -171,7 +171,7 @@ namespace XCharts
foreach (var sd in serie.data) foreach (var sd in serie.data)
{ {
if (sd.show && serie.pieRoseType == RoseType.Area) showdataCount++; if (sd.show && serie.pieRoseType == RoseType.Area) showdataCount++;
sd.canShowLabel = false; sd.context.canShowLabel = false;
} }
float dataChangeDuration = serie.animation.GetUpdateAnimationDuration(); float dataChangeDuration = serie.animation.GetUpdateAnimationDuration();
bool isAllZeroValue = SerieHelper.IsAllZeroValue(serie, 1); bool isAllZeroValue = SerieHelper.IsAllZeroValue(serie, 1);
@@ -194,10 +194,10 @@ namespace XCharts
var serieData = data[n]; var serieData = data[n];
serieData.index = n; serieData.index = n;
var value = isAllZeroValue ? zeroReplaceValue : serieData.GetCurrData(1, dataChangeDuration); var value = isAllZeroValue ? zeroReplaceValue : serieData.GetCurrData(1, dataChangeDuration);
serieData.runtimePieStartAngle = startDegree; serieData.context.startAngle = startDegree;
serieData.runtimePieToAngle = startDegree; serieData.context.toAngle = startDegree;
serieData.runtimePieHalfAngle = startDegree; serieData.context.halfAngle = startDegree;
serieData.runtimePieCurrAngle = startDegree; serieData.context.currentAngle = startDegree;
if (!serieData.show) if (!serieData.show)
{ {
continue; continue;
@@ -206,54 +206,57 @@ namespace XCharts
? (totalDegree / showdataCount) ? (totalDegree / showdataCount)
: (float)(totalDegree * value / dataTotalFilterMinAngle); : (float)(totalDegree * value / dataTotalFilterMinAngle);
if (serie.minAngle > 0 && degree < serie.minAngle) degree = serie.minAngle; if (serie.minAngle > 0 && degree < serie.minAngle) degree = serie.minAngle;
serieData.runtimePieToAngle = startDegree + degree; serieData.context.toAngle = startDegree + degree;
serieData.runtimePieOutsideRadius = serie.pieRoseType > 0 ? if (serieData.radius > 0)
serieData.context.outsideRadius = serieData.radius;
else
serieData.context.outsideRadius = serie.pieRoseType > 0 ?
serie.context.insideRadius + (float)((serie.context.outsideRadius - serie.context.insideRadius) * value / serie.context.dataMax) : serie.context.insideRadius + (float)((serie.context.outsideRadius - serie.context.insideRadius) * value / serie.context.dataMax) :
serie.context.outsideRadius; serie.context.outsideRadius;
if (serieData.highlighted) if (serieData.context.highlighted)
{ {
serieData.runtimePieOutsideRadius += chart.theme.serie.pieTooltipExtraRadius; serieData.context.outsideRadius += chart.theme.serie.pieTooltipExtraRadius;
} }
var offset = 0f; var offset = 0f;
if (serie.pieClickOffset && serieData.selected) if (serie.pieClickOffset && serieData.selected)
{ {
offset += chart.theme.serie.pieSelectedOffset; offset += chart.theme.serie.pieSelectedOffset;
} }
if (serie.animation.CheckDetailBreak(serieData.runtimePieToAngle)) if (serie.animation.CheckDetailBreak(serieData.context.toAngle))
{ {
serieData.runtimePieCurrAngle = serie.animation.GetCurrDetail(); serieData.context.currentAngle = serie.animation.GetCurrDetail();
} }
else else
{ {
serieData.runtimePieCurrAngle = serieData.runtimePieToAngle; serieData.context.currentAngle = serieData.context.toAngle;
} }
var halfDegree = (serieData.runtimePieToAngle - startDegree) / 2; var halfDegree = (serieData.context.toAngle - startDegree) / 2;
serieData.runtimePieHalfAngle = startDegree + halfDegree; serieData.context.halfAngle = startDegree + halfDegree;
serieData.runtiemPieOffsetCenter = serie.context.center; serieData.context.offsetCenter = serie.context.center;
serieData.runtimePieInsideRadius = serie.context.insideRadius; serieData.context.insideRadius = serie.context.insideRadius;
if (offset > 0) if (offset > 0)
{ {
var currRad = serieData.runtimePieHalfAngle * Mathf.Deg2Rad; var currRad = serieData.context.halfAngle * Mathf.Deg2Rad;
var currSin = Mathf.Sin(currRad); var currSin = Mathf.Sin(currRad);
var currCos = Mathf.Cos(currRad); var currCos = Mathf.Cos(currRad);
serieData.runtimePieOffsetRadius = 0; serieData.context.offsetRadius = 0;
serieData.runtimePieInsideRadius -= serieData.runtimePieOffsetRadius; serieData.context.insideRadius -= serieData.context.offsetRadius;
serieData.runtimePieOutsideRadius -= serieData.runtimePieOffsetRadius; serieData.context.outsideRadius -= serieData.context.offsetRadius;
if (serie.pieClickOffset && serieData.selected) if (serie.pieClickOffset && serieData.selected)
{ {
serieData.runtimePieOffsetRadius += chart.theme.serie.pieSelectedOffset; serieData.context.offsetRadius += chart.theme.serie.pieSelectedOffset;
if (serieData.runtimePieInsideRadius > 0) if (serieData.context.insideRadius > 0)
{ {
serieData.runtimePieInsideRadius += chart.theme.serie.pieSelectedOffset; serieData.context.insideRadius += chart.theme.serie.pieSelectedOffset;
} }
serieData.runtimePieOutsideRadius += chart.theme.serie.pieSelectedOffset; serieData.context.outsideRadius += chart.theme.serie.pieSelectedOffset;
} }
serieData.runtiemPieOffsetCenter = new Vector3( serieData.context.offsetCenter = new Vector3(
serie.context.center.x + serieData.runtimePieOffsetRadius * currSin, serie.context.center.x + serieData.context.offsetRadius * currSin,
serie.context.center.y + serieData.runtimePieOffsetRadius * currCos); serie.context.center.y + serieData.context.offsetRadius * currCos);
} }
serieData.canShowLabel = serieData.runtimePieCurrAngle >= serieData.runtimePieHalfAngle; serieData.context.canShowLabel = serieData.context.currentAngle >= serieData.context.halfAngle;
startDegree = serieData.runtimePieToAngle; startDegree = serieData.context.toAngle;
SerieLabelHelper.UpdatePieLabelPosition(serie, serieData); SerieLabelHelper.UpdatePieLabelPosition(serie, serieData);
} }
SerieLabelHelper.AvoidLabelOverlap(serie, chart.theme.common); SerieLabelHelper.AvoidLabelOverlap(serie, chart.theme.common);
@@ -308,36 +311,36 @@ namespace XCharts
{ {
continue; continue;
} }
var itemStyle = SerieHelper.GetItemStyle(serie, serieData, serieData.highlighted); var itemStyle = SerieHelper.GetItemStyle(serie, serieData, serieData.context.highlighted);
if (serieData.IsDataChanged()) dataChanging = true; if (serieData.IsDataChanged()) dataChanging = true;
var serieNameCount = chart.m_LegendRealShowName.IndexOf(serieData.legendName); var serieNameCount = chart.m_LegendRealShowName.IndexOf(serieData.legendName);
var color = SerieHelper.GetItemColor(serie, serieData, chart.theme, serieNameCount, var color = SerieHelper.GetItemColor(serie, serieData, chart.theme, serieNameCount,
serieData.highlighted); serieData.context.highlighted);
var toColor = SerieHelper.GetItemToColor(serie, serieData, chart.theme, serieNameCount, var toColor = SerieHelper.GetItemToColor(serie, serieData, chart.theme, serieNameCount,
serieData.highlighted); serieData.context.highlighted);
var borderWidth = itemStyle.borderWidth; var borderWidth = itemStyle.borderWidth;
var borderColor = itemStyle.borderColor; var borderColor = itemStyle.borderColor;
if (serie.pieClickOffset && serieData.selected) if (serie.pieClickOffset && serieData.selected)
{ {
var drawEndDegree = serieData.runtimePieCurrAngle; var drawEndDegree = serieData.context.currentAngle;
var needRoundCap = serie.roundCap && serieData.runtimePieInsideRadius > 0; var needRoundCap = serie.roundCap && serieData.context.insideRadius > 0;
UGL.DrawDoughnut(vh, serieData.runtiemPieOffsetCenter, serieData.runtimePieInsideRadius, UGL.DrawDoughnut(vh, serieData.context.offsetCenter, serieData.context.insideRadius,
serieData.runtimePieOutsideRadius, color, toColor, Color.clear, serieData.runtimePieStartAngle, serieData.context.outsideRadius, color, toColor, Color.clear, serieData.context.startAngle,
drawEndDegree, borderWidth, borderColor, serie.pieSpace / 2, chart.settings.cicleSmoothness, drawEndDegree, borderWidth, borderColor, serie.pieSpace / 2, chart.settings.cicleSmoothness,
needRoundCap, true); needRoundCap, true);
} }
else else
{ {
var drawEndDegree = serieData.runtimePieCurrAngle; var drawEndDegree = serieData.context.currentAngle;
var needRoundCap = serie.roundCap && serieData.runtimePieInsideRadius > 0; var needRoundCap = serie.roundCap && serieData.context.insideRadius > 0;
UGL.DrawDoughnut(vh, serie.context.center, serieData.runtimePieInsideRadius, UGL.DrawDoughnut(vh, serie.context.center, serieData.context.insideRadius,
serieData.runtimePieOutsideRadius, color, toColor, Color.clear, serieData.runtimePieStartAngle, serieData.context.outsideRadius, color, toColor, Color.clear, serieData.context.startAngle,
drawEndDegree, borderWidth, borderColor, serie.pieSpace / 2, chart.settings.cicleSmoothness, drawEndDegree, borderWidth, borderColor, serie.pieSpace / 2, chart.settings.cicleSmoothness,
needRoundCap, true); needRoundCap, true);
DrawPieCenter(vh, serie, itemStyle, serieData.runtimePieInsideRadius); DrawPieCenter(vh, serie, itemStyle, serieData.context.insideRadius);
} }
if (!serie.animation.CheckDetailBreak(serieData.runtimePieToAngle)) serie.animation.SetDataFinish(n); if (!serie.animation.CheckDetailBreak(serieData.context.toAngle)) serie.animation.SetDataFinish(n);
else break; else break;
} }
if (!serie.animation.IsFinish()) if (!serie.animation.IsFinish())
@@ -369,7 +372,7 @@ namespace XCharts
{ {
foreach (var serieData in serie.data) foreach (var serieData in serie.data)
{ {
if (serieData.highlighted) return true; if (serieData.context.highlighted) return true;
} }
} }
} }
@@ -398,10 +401,10 @@ namespace XCharts
&& serieLabel.position == LabelStyle.Position.Outside && serieLabel.position == LabelStyle.Position.Outside
&& labelLine.show) && labelLine.show)
{ {
var insideRadius = serieData.runtimePieInsideRadius; var insideRadius = serieData.context.insideRadius;
var outSideRadius = serieData.runtimePieOutsideRadius; var outSideRadius = serieData.context.outsideRadius;
var center = serie.context.center; var center = serie.context.center;
var currAngle = serieData.runtimePieHalfAngle; var currAngle = serieData.context.halfAngle;
if (!ChartHelper.IsClearColor(labelLine.lineColor)) color = labelLine.lineColor; if (!ChartHelper.IsClearColor(labelLine.lineColor)) color = labelLine.lineColor;
else if (labelLine.lineType == LabelLine.LineType.HorizontalLine) color *= color; else if (labelLine.lineType == LabelLine.LineType.HorizontalLine) color *= color;
float currSin = Mathf.Sin(currAngle * Mathf.Deg2Rad); float currSin = Mathf.Sin(currAngle * Mathf.Deg2Rad);
@@ -414,7 +417,7 @@ namespace XCharts
radius1 -= 0.1f; radius1 -= 0.1f;
var pos0 = new Vector3(center.x + radius3 * currSin, center.y + radius3 * currCos); var pos0 = new Vector3(center.x + radius3 * currSin, center.y + radius3 * currCos);
var pos1 = new Vector3(center.x + radius1 * currSin, center.y + radius1 * currCos); var pos1 = new Vector3(center.x + radius1 * currSin, center.y + radius1 * currCos);
var pos2 = serieData.labelPosition; var pos2 = serieData.context.labelPosition;
if (pos2.x == 0) if (pos2.x == 0)
{ {
pos2 = new Vector3(center.x + radius2 * currSin, center.y + radius2 * currCos); pos2 = new Vector3(center.x + radius2 * currSin, center.y + radius2 * currCos);
@@ -476,12 +479,12 @@ namespace XCharts
private void DrawPieLabel(Serie serie, int dataIndex, SerieData serieData, Color serieColor) private void DrawPieLabel(Serie serie, int dataIndex, SerieData serieData, Color serieColor)
{ {
if (serieData.labelObject == null) return; if (serieData.labelObject == null) return;
var currAngle = serieData.runtimePieHalfAngle; var currAngle = serieData.context.halfAngle;
var isHighlight = (serieData.highlighted && serie.emphasis.label.show); var isHighlight = (serieData.context.highlighted && serie.emphasis.label.show);
var serieLabel = SerieHelper.GetSerieLabel(serie, serieData); var serieLabel = SerieHelper.GetSerieLabel(serie, serieData);
var labelLine = SerieHelper.GetSerieLabelLine(serie, serieData); var labelLine = SerieHelper.GetSerieLabelLine(serie, serieData);
var iconStyle = SerieHelper.GetIconStyle(serie, serieData); var iconStyle = SerieHelper.GetIconStyle(serie, serieData);
var showLabel = ((serieLabel.show || isHighlight) && serieData.canShowLabel); var showLabel = ((serieLabel.show || isHighlight) && serieData.context.canShowLabel);
if (showLabel) if (showLabel)
{ {
serieData.SetLabelActive(showLabel); serieData.SetLabelActive(showLabel);
@@ -553,11 +556,11 @@ namespace XCharts
for (int i = 0; i < serie.data.Count; i++) for (int i = 0; i < serie.data.Count; i++)
{ {
var serieData = serie.data[i]; var serieData = serie.data[i];
if (angle >= serieData.runtimePieStartAngle && angle <= serieData.runtimePieToAngle) if (angle >= serieData.context.startAngle && angle <= serieData.context.toAngle)
{ {
var ndist = !serieData.selected ? dist : var ndist = !serieData.selected ? dist :
Vector2.Distance(local, serieData.runtiemPieOffsetCenter); Vector2.Distance(local, serieData.context.offsetCenter);
if (ndist >= serieData.runtimePieInsideRadius && ndist <= serieData.runtimePieOutsideRadius) if (ndist >= serieData.context.insideRadius && ndist <= serieData.context.outsideRadius)
{ {
return i; return i;
} }

View File

@@ -52,19 +52,19 @@ namespace XCharts
if (serieData.labelObject == null) continue; if (serieData.labelObject == null) continue;
var serieLabel = SerieHelper.GetSerieLabel(serie, serieData); var serieLabel = SerieHelper.GetSerieLabel(serie, serieData);
var iconStyle = SerieHelper.GetIconStyle(serie, serieData); var iconStyle = SerieHelper.GetIconStyle(serie, serieData);
var labelPos = serieData.labelPosition; var labelPos = serieData.context.labelPosition;
if (serieLabel.margin != 0) if (serieLabel.margin != 0)
{ {
labelPos += serieLabel.margin * (labelPos - center).normalized; labelPos += serieLabel.margin * (labelPos - center).normalized;
} }
serieData.labelObject.SetPosition(labelPos); serieData.labelObject.SetPosition(labelPos);
serieData.labelObject.UpdateIcon(iconStyle); serieData.labelObject.UpdateIcon(iconStyle);
if (serie.show && serieLabel.show && serieData.canShowLabel) if (serie.show && serieLabel.show && serieData.context.canShowLabel)
{ {
var value = serieData.GetCurrData(1); var value = serieData.GetCurrData(1);
var max = radar.GetIndicatorMax(n); var max = radar.GetIndicatorMax(n);
SerieLabelHelper.ResetLabel(serieData.labelObject.label, serieLabel, chart.theme, i); SerieLabelHelper.ResetLabel(serieData.labelObject.label, serieLabel, chart.theme, i);
serieData.SetLabelActive(serieData.labelPosition != Vector3.zero); serieData.SetLabelActive(serieData.context.labelPosition != Vector3.zero);
serieData.labelObject.SetLabelPosition(serieLabel.offset); serieData.labelObject.SetLabelPosition(serieLabel.offset);
var content = SerieLabelHelper.GetFormatterContent(serie, serieData, value, max, var content = SerieLabelHelper.GetFormatterContent(serie, serieData, value, max,
serieLabel, Color.clear); serieLabel, Color.clear);
@@ -247,7 +247,7 @@ namespace XCharts
private bool IsHighlight(RadarCoord radar, Serie serie, SerieData serieData, Tooltip tooltip, int dataIndex, int dimension) private bool IsHighlight(RadarCoord radar, Serie serie, SerieData serieData, Tooltip tooltip, int dataIndex, int dimension)
{ {
if (serie.highlighted || serieData.highlighted) return true; if (serie.highlighted || serieData.context.highlighted) return true;
if (tooltip == null) return false; if (tooltip == null) return false;
var selectedSerieIndex = tooltip.runtimeDataIndex[0]; var selectedSerieIndex = tooltip.runtimeDataIndex[0];
if (selectedSerieIndex < 0) return false; if (selectedSerieIndex < 0) return false;
@@ -332,7 +332,7 @@ namespace XCharts
} }
if (!serieData.show) if (!serieData.show)
{ {
serieData.labelPosition = Vector3.zero; serieData.context.labelPosition = Vector3.zero;
continue; continue;
} }
var isHighlight = IsHighlight(radar, serie, serieData, tooltip, j, 0); var isHighlight = IsHighlight(radar, serie, serieData, tooltip, j, 0);
@@ -384,7 +384,7 @@ namespace XCharts
startPoint = toPoint; startPoint = toPoint;
lastColor = lineColor; lastColor = lineColor;
} }
serieData.labelPosition = startPoint; serieData.context.labelPosition = startPoint;
pointList.Add(startPoint); pointList.Add(startPoint);
if (serie.areaStyle.show && j == endIndex) if (serie.areaStyle.show && j == endIndex)
@@ -406,7 +406,7 @@ namespace XCharts
{ {
var serieData = serie.data[j]; var serieData = serie.data[j];
if (!serieData.show) continue; if (!serieData.show) continue;
var isHighlight = serie.highlighted || serieData.highlighted || var isHighlight = serie.highlighted || serieData.context.highlighted ||
(tooltip.show && tooltip.runtimeDataIndex[0] == i && tooltip.runtimeDataIndex[1] == j); (tooltip.show && tooltip.runtimeDataIndex[0] == i && tooltip.runtimeDataIndex[1] == j);
var serieIndex = serieData.index; var serieIndex = serieData.index;
var symbolSize = isHighlight var symbolSize = isHighlight
@@ -422,7 +422,7 @@ namespace XCharts
symbolColor = radar.outRangeColor; symbolColor = radar.outRangeColor;
symbolToColor = radar.outRangeColor; symbolToColor = radar.outRangeColor;
} }
chart.DrawSymbol(vh, serie.symbol.type, symbolSize, symbolBorder, serieData.labelPosition, symbolColor, chart.DrawSymbol(vh, serie.symbol.type, symbolSize, symbolBorder, serieData.context.labelPosition, symbolColor,
symbolToColor, symbolEmptyColor, serie.symbol.gap, cornerRadius); symbolToColor, symbolEmptyColor, serie.symbol.gap, cornerRadius);
} }
} }

View File

@@ -71,8 +71,6 @@ namespace XCharts
var data = serie.data; var data = serie.data;
serie.animation.InitProgress(data.Count, serie.startAngle, serie.startAngle + 360); serie.animation.InitProgress(data.Count, serie.startAngle, serie.startAngle + 360);
SerieHelper.UpdateCenter(serie, chart.chartPosition, chart.chartWidth, chart.chartHeight); SerieHelper.UpdateCenter(serie, chart.chartPosition, chart.chartWidth, chart.chartHeight);
//TitleStyleHelper.CheckTitle(serie, ref chart.m_ReinitTitle, ref m_UpdateTitleText);
//SerieLabelHelper.CheckLabel(serie, ref chart.m_ReinitLabel, ref m_UpdateLabelText);
var dataChangeDuration = serie.animation.GetUpdateAnimationDuration(); var dataChangeDuration = serie.animation.GetUpdateAnimationDuration();
var ringWidth = serie.context.outsideRadius - serie.context.insideRadius; var ringWidth = serie.context.outsideRadius - serie.context.insideRadius;
var dataChanging = false; var dataChanging = false;
@@ -86,9 +84,9 @@ namespace XCharts
var degree = (float)(360 * value / max); var degree = (float)(360 * value / max);
var startDegree = GetStartAngle(serie); var startDegree = GetStartAngle(serie);
var toDegree = GetToAngle(serie, degree); var toDegree = GetToAngle(serie, degree);
var itemStyle = SerieHelper.GetItemStyle(serie, serieData, serieData.highlighted); var itemStyle = SerieHelper.GetItemStyle(serie, serieData, serieData.context.highlighted);
var itemColor = SerieHelper.GetItemColor(serie, serieData, chart.theme, j, serieData.highlighted); var itemColor = SerieHelper.GetItemColor(serie, serieData, chart.theme, j, serieData.context.highlighted);
var itemToColor = SerieHelper.GetItemToColor(serie, serieData, chart.theme, j, serieData.highlighted); var itemToColor = SerieHelper.GetItemToColor(serie, serieData, chart.theme, j, serieData.context.highlighted);
var outsideRadius = serie.context.outsideRadius - j * (ringWidth + serie.ringGap); var outsideRadius = serie.context.outsideRadius - j * (ringWidth + serie.ringGap);
var insideRadius = outsideRadius - ringWidth; var insideRadius = outsideRadius - ringWidth;
var centerRadius = (outsideRadius + insideRadius) / 2; var centerRadius = (outsideRadius + insideRadius) / 2;
@@ -96,10 +94,10 @@ namespace XCharts
var borderColor = itemStyle.borderColor; var borderColor = itemStyle.borderColor;
var roundCap = serie.roundCap && insideRadius > 0; var roundCap = serie.roundCap && insideRadius > 0;
serieData.runtimePieStartAngle = serie.clockwise ? startDegree : toDegree; serieData.context.startAngle = serie.clockwise ? startDegree : toDegree;
serieData.runtimePieToAngle = serie.clockwise ? toDegree : startDegree; serieData.context.toAngle = serie.clockwise ? toDegree : startDegree;
serieData.runtimePieInsideRadius = insideRadius; serieData.context.insideRadius = insideRadius;
serieData.runtimePieOutsideRadius = outsideRadius; serieData.context.outsideRadius = serieData.radius > 0 ? serieData.radius : outsideRadius;
if (itemStyle.backgroundColor.a != 0) if (itemStyle.backgroundColor.a != 0)
{ {
UGL.DrawDoughnut(vh, serie.context.center, insideRadius, outsideRadius, itemStyle.backgroundColor, UGL.DrawDoughnut(vh, serie.context.center, insideRadius, outsideRadius, itemStyle.backgroundColor,
@@ -201,23 +199,23 @@ namespace XCharts
switch (serie.label.position) switch (serie.label.position)
{ {
case LabelStyle.Position.Center: case LabelStyle.Position.Center:
serieData.labelPosition = serie.context.center + serie.label.offset; serieData.context.labelPosition = serie.context.center + serie.label.offset;
break; break;
case LabelStyle.Position.Bottom: case LabelStyle.Position.Bottom:
var px1 = Mathf.Sin(startAngle * Mathf.Deg2Rad) * centerRadius; var px1 = Mathf.Sin(startAngle * Mathf.Deg2Rad) * centerRadius;
var py1 = Mathf.Cos(startAngle * Mathf.Deg2Rad) * centerRadius; var py1 = Mathf.Cos(startAngle * Mathf.Deg2Rad) * centerRadius;
var xDiff = serie.clockwise ? -serie.label.margin : serie.label.margin; var xDiff = serie.clockwise ? -serie.label.margin : serie.label.margin;
serieData.labelPosition = serie.context.center + new Vector3(px1 + xDiff, py1); serieData.context.labelPosition = serie.context.center + new Vector3(px1 + xDiff, py1);
break; break;
case LabelStyle.Position.Top: case LabelStyle.Position.Top:
startAngle += serie.clockwise ? -serie.label.margin : serie.label.margin; startAngle += serie.clockwise ? -serie.label.margin : serie.label.margin;
toAngle += serie.clockwise ? serie.label.margin : -serie.label.margin; toAngle += serie.clockwise ? serie.label.margin : -serie.label.margin;
var px2 = Mathf.Sin(toAngle * Mathf.Deg2Rad) * centerRadius; var px2 = Mathf.Sin(toAngle * Mathf.Deg2Rad) * centerRadius;
var py2 = Mathf.Cos(toAngle * Mathf.Deg2Rad) * centerRadius; var py2 = Mathf.Cos(toAngle * Mathf.Deg2Rad) * centerRadius;
serieData.labelPosition = serie.context.center + new Vector3(px2, py2); serieData.context.labelPosition = serie.context.center + new Vector3(px2, py2);
break; break;
} }
serieData.labelObject.SetLabelPosition(serieData.labelPosition); serieData.labelObject.SetLabelPosition(serieData.context.labelPosition);
} }
private void DrawBackground(VertexHelper vh, Serie serie, SerieData serieData, int index, float insideRadius, float outsideRadius) private void DrawBackground(VertexHelper vh, Serie serie, SerieData serieData, int index, float insideRadius, float outsideRadius)
@@ -280,10 +278,10 @@ namespace XCharts
for (int i = 0; i < serie.data.Count; i++) for (int i = 0; i < serie.data.Count; i++)
{ {
var serieData = serie.data[i]; var serieData = serie.data[i];
if (dist >= serieData.runtimePieInsideRadius && if (dist >= serieData.context.insideRadius &&
dist <= serieData.runtimePieOutsideRadius && dist <= serieData.context.outsideRadius &&
angle >= serieData.runtimePieStartAngle && angle >= serieData.context.startAngle &&
angle <= serieData.runtimePieToAngle) angle <= serieData.context.toAngle)
{ {
return i; return i;
} }

View File

@@ -87,9 +87,9 @@ namespace XCharts
var serieData = serie.GetSerieData(lastDataIndex); var serieData = serie.GetSerieData(lastDataIndex);
var symbol = SerieHelper.GetSerieSymbol(serie, serieData); var symbol = SerieHelper.GetSerieSymbol(serie, serieData);
var symbolSize = symbol.GetSize(serieData.data, themeSymbolSize); var symbolSize = symbol.GetSize(serieData.data, themeSymbolSize);
if (Vector3.Distance(serieData.runtimePosition, chart.pointerPos) <= symbolSize) if (Vector3.Distance(serieData.context.position, chart.pointerPos) <= symbolSize)
{ {
serieData.highlighted = true; serieData.context.highlighted = true;
serie.context.pointerItemDataIndex = lastDataIndex; serie.context.pointerItemDataIndex = lastDataIndex;
return; return;
} }
@@ -98,7 +98,7 @@ namespace XCharts
serie.context.pointerItemDataIndex = -1; serie.context.pointerItemDataIndex = -1;
if (lastDataIndex >= 0) if (lastDataIndex >= 0)
{ {
serie.GetSerieData(lastDataIndex).highlighted = false; serie.GetSerieData(lastDataIndex).context.highlighted = false;
chart.RefreshPainter(serie); chart.RefreshPainter(serie);
} }
for (int i = serie.dataCount - 1; i >= 0; i--) for (int i = serie.dataCount - 1; i >= 0; i--)
@@ -110,9 +110,9 @@ namespace XCharts
continue; continue;
var symbolSize = symbol.GetSize(serieData.data, themeSymbolSize); var symbolSize = symbol.GetSize(serieData.data, themeSymbolSize);
if (Vector3.Distance(serieData.runtimePosition, chart.pointerPos) <= symbolSize) if (Vector3.Distance(serieData.context.position, chart.pointerPos) <= symbolSize)
{ {
serieData.highlighted = true; serieData.context.highlighted = true;
serie.context.pointerItemDataIndex = i; serie.context.pointerItemDataIndex = i;
serie.context.pointerEnter = true; serie.context.pointerEnter = true;
chart.RefreshPainter(serie); chart.RefreshPainter(serie);
@@ -165,7 +165,7 @@ namespace XCharts
if (!symbol.ShowSymbol(serieData.index, maxCount)) if (!symbol.ShowSymbol(serieData.index, maxCount))
continue; continue;
var highlight = serie.highlighted || serieData.highlighted; var highlight = serie.highlighted || serieData.context.highlighted;
var color = SerieHelper.GetItemColor(serie, serieData, theme, colorIndex, highlight); var color = SerieHelper.GetItemColor(serie, serieData, theme, colorIndex, highlight);
var toColor = SerieHelper.GetItemToColor(serie, serieData, theme, colorIndex, highlight); var toColor = SerieHelper.GetItemToColor(serie, serieData, theme, colorIndex, highlight);
var emptyColor = SerieHelper.GetItemBackgroundColor(serie, serieData, theme, colorIndex, highlight, false); var emptyColor = SerieHelper.GetItemBackgroundColor(serie, serieData, theme, colorIndex, highlight, false);
@@ -187,11 +187,11 @@ namespace XCharts
continue; continue;
serie.context.dataPoints.Add(pos); serie.context.dataPoints.Add(pos);
serieData.runtimePosition = pos; serieData.context.position = pos;
var datas = serieData.data; var datas = serieData.data;
float symbolSize = 0; float symbolSize = 0;
if (serie.highlighted || serieData.highlighted) if (serie.highlighted || serieData.context.highlighted)
{ {
symbolSize = symbol.GetSelectedSize(datas, theme.serie.scatterSymbolSelectedSize); symbolSize = symbol.GetSelectedSize(datas, theme.serie.scatterSymbolSelectedSize);
} }
@@ -267,7 +267,7 @@ namespace XCharts
if (!symbol.ShowSymbol(serieData.index, maxCount)) if (!symbol.ShowSymbol(serieData.index, maxCount))
continue; continue;
var highlight = serie.highlighted || serieData.highlighted; var highlight = serie.highlighted || serieData.context.highlighted;
var color = SerieHelper.GetItemColor(serie, serieData, theme, colorIndex, highlight); var color = SerieHelper.GetItemColor(serie, serieData, theme, colorIndex, highlight);
var toColor = SerieHelper.GetItemToColor(serie, serieData, theme, colorIndex, highlight); var toColor = SerieHelper.GetItemToColor(serie, serieData, theme, colorIndex, highlight);
var emptyColor = SerieHelper.GetItemBackgroundColor(serie, serieData, theme, colorIndex, highlight, false); var emptyColor = SerieHelper.GetItemBackgroundColor(serie, serieData, theme, colorIndex, highlight, false);
@@ -292,11 +292,11 @@ namespace XCharts
pos = new Vector3(axis.context.x + xDataHig, axis.context.y + yDataHig); pos = new Vector3(axis.context.x + xDataHig, axis.context.y + yDataHig);
} }
serie.context.dataPoints.Add(pos); serie.context.dataPoints.Add(pos);
serieData.runtimePosition = pos; serieData.context.position = pos;
var datas = serieData.data; var datas = serieData.data;
var symbolSize = 0f; var symbolSize = 0f;
if (serie.highlighted || serieData.highlighted) if (serie.highlighted || serieData.context.highlighted)
symbolSize = symbol.GetSelectedSize(datas, theme.serie.scatterSymbolSelectedSize); symbolSize = symbol.GetSelectedSize(datas, theme.serie.scatterSymbolSelectedSize);
else else
symbolSize = symbol.GetSize(datas, theme.serie.scatterSymbolSize); symbolSize = symbol.GetSize(datas, theme.serie.scatterSymbolSize);

View File

@@ -175,7 +175,7 @@ namespace XCharts
} }
/// <summary> /// <summary>
/// 系列。每个系列通过 type 决定自己的图表类型。 /// 系列。
/// </summary> /// </summary>
[System.Serializable] [System.Serializable]
public class Serie : BaseSerie, IComparable public class Serie : BaseSerie, IComparable
@@ -1285,7 +1285,7 @@ namespace XCharts
serieData.name = name; serieData.name = name;
serieData.index = m_Data.Count; serieData.index = m_Data.Count;
serieData.data = new List<double>() { parent.children.Count, value }; serieData.data = new List<double>() { parent.children.Count, value };
serieData.runtimeParent = parent; serieData.context.parent = parent;
AddSerieData(serieData); AddSerieData(serieData);
parent.children.Add(serieData.index); parent.children.Add(serieData.index);
return serieData; return serieData;
@@ -1296,7 +1296,7 @@ namespace XCharts
serieData.name = name; serieData.name = name;
serieData.index = m_Data.Count; serieData.index = m_Data.Count;
serieData.data = new List<double>(value); serieData.data = new List<double>(value);
serieData.runtimeParent = parent; serieData.context.parent = parent;
AddSerieData(serieData); AddSerieData(serieData);
parent.children.Add(serieData.index); parent.children.Add(serieData.index);
return serieData; return serieData;
@@ -1577,7 +1577,7 @@ namespace XCharts
{ {
highlighted = false; highlighted = false;
foreach (var serieData in m_Data) foreach (var serieData in m_Data)
serieData.highlighted = false; serieData.context.highlighted = false;
} }
/// <summary> /// <summary>
@@ -1587,7 +1587,7 @@ namespace XCharts
{ {
var serieData = GetSerieData(index); var serieData = GetSerieData(index);
if (serieData != null) if (serieData != null)
serieData.highlighted = flag; serieData.context.highlighted = flag;
} }
public float GetBarWidth(float categoryWidth) public float GetBarWidth(float categoryWidth)
@@ -1619,7 +1619,7 @@ namespace XCharts
{ {
if (index >= 0 && index < dataCount) if (index >= 0 && index < dataCount)
{ {
return ChartHelper.IsIngore(data[index].runtimePosition); return ChartHelper.IsIngore(data[index].context.position);
} }
return false; return false;
} }

View File

@@ -36,7 +36,6 @@ namespace XCharts
/// 鼠标所在轴线上的数据项索引(可能有多个) /// 鼠标所在轴线上的数据项索引(可能有多个)
/// </summary> /// </summary>
public List<int> pointerAxisDataIndexs = new List<int>(); public List<int> pointerAxisDataIndexs = new List<int>();
/// <summary> /// <summary>
/// 中心点 /// 中心点
/// </summary> /// </summary>

View File

@@ -7,13 +7,12 @@
using System.Collections.Generic; using System.Collections.Generic;
using UnityEngine; using UnityEngine;
using UnityEngine.UI;
namespace XCharts namespace XCharts
{ {
/// <summary> /// <summary>
/// A data item of serie. /// A data item of serie.
/// 系列中的一个数据项。可存储数据名和1-n维数据。 /// 系列中的一个数据项。可存储数据名和1-n维数据。
/// </summary> /// </summary>
[System.Serializable] [System.Serializable]
public class SerieData : ChildComponent public class SerieData : ChildComponent
@@ -36,7 +35,6 @@ namespace XCharts
public ChartLabel labelObject { get; set; } public ChartLabel labelObject { get; set; }
private bool m_Show = true; private bool m_Show = true;
private float m_RtPieOutsideRadius;
/// <summary> /// <summary>
/// the name of data item. /// the name of data item.
@@ -103,71 +101,7 @@ namespace XCharts
/// 该数据项是否要显示。 /// 该数据项是否要显示。
/// </summary> /// </summary>
public bool show { get { return m_Show; } set { m_Show = value; } } public bool show { get { return m_Show; } set { m_Show = value; } }
/// <summary>
/// Whether the data item is highlighted.
/// 该数据项是否被高亮,一般由鼠标悬停或图例悬停触发高亮。
/// </summary>
public bool highlighted { get; set; }
public Vector3 labelPosition { get; set; }
private bool m_CanShowLabel = true;
/// <summary>
/// 是否可以显示Label
/// </summary>
public bool canShowLabel { get { return m_CanShowLabel; } set { m_CanShowLabel = value; } }
/// <summary>
/// 饼图数据项的开始角度(运行时自动计算)
/// </summary>
public float runtimePieStartAngle { get; internal set; }
/// <summary>
/// 饼图数据项的结束角度(运行时自动计算)
/// </summary>
public float runtimePieToAngle { get; internal set; }
/// <summary>
/// 饼图数据项的一半时的角度(运行时自动计算)
/// </summary>
public float runtimePieHalfAngle { get; internal set; }
/// <summary>
/// 饼图数据项的当前角度(运行时自动计算)
/// </summary>
public float runtimePieCurrAngle { get; internal set; }
/// <summary>
/// 饼图数据项的内半径
/// </summary>
public float runtimePieInsideRadius { get; internal set; }
/// <summary>
/// 饼图数据项的外半径
/// </summary>
public float runtimePieOutsideRadius
{
get
{
if (radius > 0) return radius;
else return m_RtPieOutsideRadius;
}
internal set
{
m_RtPieOutsideRadius = value;
}
}
/// <summary>
/// 饼图数据项的偏移半径
/// </summary>
public float runtimePieOffsetRadius { get; internal set; }
public Vector3 runtimePosition { get; set; }
/// <summary>
/// 绘制区域。
/// </summary>
public Rect runtimeRect { get; set; }
public Rect runtimeSubRect { get; set; }
public int runtimeLevel { get; set; }
public SerieData runtimeParent { get; set; }
public Color32 runtimeColor { get; set; }
public double runtimeArea { get; set; }
public float runtimeAngle { get; set; }
public Vector3 runtiemPieOffsetCenter { get; set; }
public float runtimeStackHig { get; set; }
public Image runtimeSymbol { get; set; }
private List<double> m_PreviousData = new List<double>(); private List<double> m_PreviousData = new List<double>();
private List<float> m_DataUpdateTime = new List<float>(); private List<float> m_DataUpdateTime = new List<float>();
private List<bool> m_DataUpdateFlag = new List<bool>(); private List<bool> m_DataUpdateFlag = new List<bool>();
@@ -177,11 +111,11 @@ namespace XCharts
{ {
index = 0; index = 0;
labelObject = null; labelObject = null;
highlighted = false;
m_Name = string.Empty; m_Name = string.Empty;
m_Show = true; m_Show = true;
m_Selected = false; m_Selected = false;
m_CanShowLabel = true; context.canShowLabel = true;
context.highlighted = false;
m_Radius = 0; m_Radius = 0;
m_Data.Clear(); m_Data.Clear();
m_PreviousData.Clear(); m_PreviousData.Clear();

View File

@@ -5,7 +5,6 @@
/* */ /* */
/************************************************/ /************************************************/
using System.Collections.Generic;
using UnityEngine; using UnityEngine;
using UnityEngine.UI; using UnityEngine.UI;
@@ -13,5 +12,53 @@ namespace XCharts
{ {
public class SerieDataContext public class SerieDataContext
{ {
public Vector3 labelPosition { get; set; }
/// <summary>
/// 开始角度
/// </summary>
public float startAngle { get; internal set; }
/// <summary>
/// 结束角度
/// </summary>
public float toAngle { get; internal set; }
/// <summary>
/// 一半时的角度
/// </summary>
public float halfAngle { get; internal set; }
/// <summary>
/// 当前角度
/// </summary>
public float currentAngle { get; internal set; }
/// <summary>
/// 饼图数据项的内半径
/// </summary>
public float insideRadius { get; internal set; }
/// <summary>
/// 饼图数据项的偏移半径
/// </summary>
public float offsetRadius { get; internal set; }
public float outsideRadius { get; set; }
public Vector3 position { get; set; }
/// <summary>
/// 绘制区域。
/// </summary>
public Rect rect { get; set; }
public Rect subRect { get; set; }
public int level { get; set; }
public SerieData parent { get; set; }
public Color32 color { get; set; }
public double area { get; set; }
public float angle { get; set; }
public Vector3 offsetCenter { get; set; }
public float stackHeight { get; set; }
public bool canShowLabel { get; set; }
public Image symbol { get; set; }
/// <summary>
/// Whether the data item is highlighted.
/// 该数据项是否被高亮,一般由鼠标悬停或图例悬停触发高亮。
/// </summary>
public bool highlighted { get; set; }
} }
} }

View File

@@ -222,9 +222,9 @@ namespace XCharts
var serieLabel = SerieHelper.GetSerieLabel(serie, serieData); var serieLabel = SerieHelper.GetSerieLabel(serie, serieData);
var iconStyle = SerieHelper.GetIconStyle(serie, serieData); var iconStyle = SerieHelper.GetIconStyle(serie, serieData);
var isIgnore = serie.IsIgnoreIndex(serieData.index); var isIgnore = serie.IsIgnoreIndex(serieData.index);
serieData.labelObject.SetPosition(serieData.runtimePosition); serieData.labelObject.SetPosition(serieData.context.position);
serieData.labelObject.UpdateIcon(iconStyle); serieData.labelObject.UpdateIcon(iconStyle);
if (serie.show && serieLabel.show && serieData.canShowLabel && !isIgnore) if (serie.show && serieLabel.show && serieData.context.canShowLabel && !isIgnore)
{ {
var value = serieData.GetData(1); var value = serieData.GetData(1);
var content = SerieLabelHelper.GetFormatterContent(serie, serieData, value, total, var content = SerieLabelHelper.GetFormatterContent(serie, serieData, value, total,
@@ -235,7 +235,7 @@ namespace XCharts
&& !serie.areaStyle.show; && !serie.areaStyle.show;
SerieLabelHelper.ResetLabel(serieData.labelObject.label, serieLabel, chart.theme, colorIndex); SerieLabelHelper.ResetLabel(serieData.labelObject.label, serieLabel, chart.theme, colorIndex);
serieData.SetLabelActive(!isIgnore); serieData.SetLabelActive(!isIgnore);
serieData.labelObject.SetPosition(serieData.runtimePosition + (invert ? -serieLabel.offset : serieLabel.offset)); serieData.labelObject.SetPosition(serieData.context.position + (invert ? -serieLabel.offset : serieLabel.offset));
serieData.labelObject.SetText(content); serieData.labelObject.SetText(content);
} }
else else