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)
{
legend.location.UpdateRuntimeData(chartWidth,chartHeight);
legend.location.UpdateRuntimeData(chartWidth, chartHeight);
var startX = 0f;
var startY = 0f;
var legendMaxWidth = chartWidth - legend.location.runtimeLeft - legend.location.runtimeRight;
@@ -252,7 +252,7 @@ namespace XCharts
if (legendName.Equals(data.name))
{
data.show = show;
data.highlighted = false;
data.context.highlighted = false;
if (data.show) needShow = true;
}
}
@@ -276,8 +276,8 @@ namespace XCharts
{
if (legendName.Equals(data.name))
{
data.highlighted = heighlight;
if (data.highlighted) show = true;
data.context.highlighted = heighlight;
if (data.context.highlighted) show = true;
}
}
}

View File

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

View File

@@ -110,7 +110,7 @@ namespace XCharts
var numericFormatter = GetItemNumericFormatter(tooltip, serie, serieData);
if (isCartesian)
{
if (serieData != null && serieData.highlighted)
if (serieData != null && serieData.context.highlighted)
{
sb.Append(key).Append(!string.IsNullOrEmpty(key) ? " : " : "");
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)
{
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,
@@ -125,7 +125,7 @@ namespace XCharts
for (int i = 0; i < serie.dataCount; 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 (!serie.show || !serieData.show)
@@ -144,13 +144,13 @@ namespace XCharts
{
var labelWidth = serieData.GetLabelWidth();
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
serieData.labelObject.SetLabelPosition(serieData.labelPosition + new Vector3(labelWidth / 2, 0));
serieData.labelObject.SetLabelPosition(serieData.context.labelPosition + new Vector3(labelWidth / 2, 0));
}
else
{
serieData.labelObject.SetLabelPosition(serieData.labelPosition);
serieData.labelObject.SetLabelPosition(serieData.context.labelPosition);
}
}
}
@@ -160,7 +160,7 @@ namespace XCharts
{
var serieData = serie.GetSerieData(0);
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 (!serie.show || !serieData.show)
@@ -174,30 +174,30 @@ namespace XCharts
serieData.SetLabelActive(true);
serieData.labelObject.SetText(content);
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)
{
if (serieData.labelObject == null) return;
var currAngle = serieData.runtimePieHalfAngle;
var currAngle = serieData.context.halfAngle;
var currRad = currAngle * Mathf.Deg2Rad;
var offsetRadius = serieData.runtimePieOffsetRadius;
var insideRadius = serieData.runtimePieInsideRadius;
var outsideRadius = serieData.runtimePieOutsideRadius;
var offsetRadius = serieData.context.offsetRadius;
var insideRadius = serieData.context.insideRadius;
var outsideRadius = serieData.context.outsideRadius;
var serieLabel = SerieHelper.GetSerieLabel(serie, serieData);
var labelLine = SerieHelper.GetSerieLabelLine(serie, serieData);
switch (serieLabel.position)
{
case LabelStyle.Position.Center:
serieData.labelPosition = serie.context.center;
serieData.context.labelPosition = serie.context.center;
break;
case LabelStyle.Position.Inside:
var labelRadius = offsetRadius + insideRadius + (outsideRadius - insideRadius) / 2 + serieLabel.margin;
var labelCenter = new Vector2(serie.context.center.x + labelRadius * Mathf.Sin(currRad),
serie.context.center.y + labelRadius * Mathf.Cos(currRad));
serieData.labelPosition = labelCenter;
serieData.context.labelPosition = labelCenter;
break;
case LabelStyle.Position.Outside:
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;
r4 += labelLine.lineLength1 + labelLine.lineWidth * 4;
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
{
labelRadius = serie.context.outsideRadius + labelLine.lineLength1;
labelCenter = new Vector2(serie.context.center.x + labelRadius * Mathf.Sin(currRad),
serie.context.center.y + labelRadius * Mathf.Cos(currRad));
serieData.labelPosition = labelCenter;
serieData.context.labelPosition = labelCenter;
}
break;
}
@@ -237,7 +237,7 @@ namespace XCharts
for (int n = 0; n < data.Count; 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;
break;
@@ -257,7 +257,7 @@ namespace XCharts
private static void CheckSerieDataLabel(Serie serie, SerieData serieData, bool isLeft, ComponentTheme theme,
ref Vector3 lastCheckPos)
{
if (!serieData.canShowLabel)
if (!serieData.context.canShowLabel)
{
serieData.SetLabelActive(false);
return;
@@ -270,11 +270,11 @@ namespace XCharts
if (serieLabel.position != LabelStyle.Position.Outside) return;
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 y1 = lastCheckPos.y - fontSize;
@@ -283,9 +283,9 @@ namespace XCharts
var diffX = labelRadius * labelRadius - diff * diff;
diffX = diffX <= 0 ? 0 : diffX;
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));
}
}
@@ -294,16 +294,16 @@ namespace XCharts
{
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;
if (currAngle > 180)
return serieData.labelPosition + new Vector3(-offset, 0, 0);
return serieData.context.labelPosition + new Vector3(-offset, 0, 0);
else
return serieData.labelPosition + new Vector3(offset, 0, 0);
return serieData.context.labelPosition + new Vector3(offset, 0, 0);
}
else
{
return serieData.labelPosition;
return serieData.context.labelPosition;
}
}
}

View File

@@ -389,7 +389,8 @@ namespace XCharts
{
var serie = series[i];
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 (100 > max) max = 100;
@@ -431,7 +432,8 @@ namespace XCharts
{
var serie = ss.Value[i];
if ((isPolar && serie.polarIndex != axisIndex)
|| (!isPolar && serie.yAxisIndex != axisIndex)) continue;
|| (!isPolar && serie.yAxisIndex != axisIndex)
|| !serie.show) continue;
var showData = serie.GetDataList(dataZoom);
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)
{
if (m_LabelRect == null) return false;
if (m_LabelText != null && !m_LabelText.GetText().Equals(text))
if (m_LabelRect == null || m_LabelText == null)
return false;
if (text == null)
text = "";
if (!m_LabelText.GetText().Equals(text))
{
m_LabelText.SetText(text);
if (m_LabelAutoSize)
{
var newSize = string.IsNullOrEmpty(text) ? Vector2.zero :
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;
if (sizeChange)
{
m_LabelRect.sizeDelta = newSize;
if (m_LabelBackgroundRect != null)
m_LabelBackgroundRect.sizeDelta = newSize;
AdjustIconPos();
}
return sizeChange;

View File

@@ -81,16 +81,16 @@ namespace XCharts
serie.context.pointerEnter = false;
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.pointerEnter = true;
serieData.highlighted = true;
serieData.context.highlighted = true;
chart.RefreshTopPainter();
}
else
{
serieData.highlighted = false;
serieData.context.highlighted = false;
}
}
}
@@ -137,11 +137,11 @@ namespace XCharts
serie.context.dataPoints.Add(Vector3.zero);
continue;
}
var highlight = serie.data[i].highlighted
var highlight = serie.data[i].context.highlighted
|| serie.highlighted;
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);
float borderWidth = value == 0 ? 0 : itemStyle.runtimeBorderWidth;
if (showData[i].IsDataChanged()) dataChanging = true;
@@ -155,7 +155,7 @@ namespace XCharts
{
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);
}
}
serieData.runtimeStackHig = barHig;
serieData.context.stackHeight = barHig;
var isBarEnd = false;
float currHig = chart.CheckSerieBarAnimation(serie, i, barHig, out isBarEnd);
if (!isBarEnd) isAllBarEnd = false;
@@ -210,7 +210,7 @@ namespace XCharts
plb = chart.ClampInGrid(grid, plb);
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);
if (serie.show)
{
@@ -281,7 +281,7 @@ namespace XCharts
serie.context.dataPoints.Add(Vector3.zero);
continue;
}
var highlight = serie.data[i].highlighted
var highlight = serie.data[i].context.highlighted
|| serie.highlighted;
var itemStyle = SerieHelper.GetItemStyle(serie, serieData, highlight);
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++)
{
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;
float currHig = chart.CheckSerieBarAnimation(serie, i, barHig, out isBarEnd);
if (!isBarEnd) isAllBarEnd = false;
@@ -363,7 +363,7 @@ namespace XCharts
prb = chart.ClampInGrid(grid, prb);
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);
if (serie.show && currHig != 0)
{

View File

@@ -56,7 +56,7 @@ namespace XCharts
serie.context.dataPoints.Add(Vector3.zero);
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 open = serieData.GetCurrData(0, 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);
pY += (float)((open - minCut) / valueTotal * grid.context.height);
}
serieData.runtimeStackHig = barHig;
serieData.context.stackHeight = barHig;
var isBarEnd = false;
float currHig = chart.CheckSerieBarAnimation(serie, i, barHig, out isBarEnd);
if (!isBarEnd) isAllBarEnd = false;

View File

@@ -298,7 +298,7 @@ namespace XCharts
if (serie.dataCount > 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)
: serieData.GetCurrData(1, serie.animation.GetUpdateAnimationDuration());
value = MathUtil.Clamp(value, serie.min, serie.max);

View File

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

View File

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

View File

@@ -137,7 +137,7 @@ namespace XCharts
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 symbolSize = symbol.GetSize(serieData.data, themeSymbolSize);
@@ -145,12 +145,12 @@ namespace XCharts
{
serie.context.pointerItemDataIndex = serieData.index;
serie.context.pointerEnter = true;
serieData.highlighted = true;
serieData.context.highlighted = true;
chart.RefreshTopPainter();
}
else
{
serieData.highlighted = false;
serieData.context.highlighted = false;
}
}
}
@@ -193,7 +193,7 @@ namespace XCharts
if (ChartHelper.IsIngore(serie.context.dataPoints[i]))
continue;
var highlight = serie.data[i].highlighted || serie.highlighted;
var highlight = serie.data[i].context.highlighted || serie.highlighted;
var symbolSize = highlight
? symbol.GetSelectedSize(serie.data[i].data, theme.serie.lineSymbolSelectedSize)
: symbol.GetSize(serie.data[i].data, theme.serie.lineSymbolSize);
@@ -321,8 +321,8 @@ namespace XCharts
var isIgnore = serie.IsIgnoreValue(serieData);
if (isIgnore)
{
serieData.runtimeStackHig = 0;
serieData.runtimePosition = Vector3.zero;
serieData.context.stackHeight = 0;
serieData.context.position = Vector3.zero;
if (serie.ignoreLineBreak && serie.context.dataIgnore.Count > 0)
{
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,
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);
serieData.runtimePosition = np;
serieData.context.position = np;
serie.context.dataPoints.Add(np);
serie.context.dataIgnore.Add(false);
@@ -382,7 +382,7 @@ namespace XCharts
if (isStack)
{
for (int n = 0; n < m_StackSerieData.Count - 1; n++)
yPos += m_StackSerieData[n][i].runtimeStackHig;
yPos += m_StackSerieData[n][i].context.stackHeight;
}
}
else
@@ -392,7 +392,7 @@ namespace XCharts
if (isStack)
{
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);

View File

@@ -83,12 +83,12 @@ namespace XCharts
{
var serieData = serie.GetSerieData(i);
var symbol = SerieHelper.GetSerieSymbol(serie, serieData);
if (ChartHelper.IsIngore(serieData.runtimePosition))
if (ChartHelper.IsIngore(serieData.context.position))
continue;
bool highlight = serieData.highlighted || serie.highlighted;
bool highlight = serieData.context.highlighted || serie.highlighted;
if ((!symbol.show || !symbol.ShowSymbol(i, count) || serie.IsPerformanceMode())
&& !serieData.highlighted)
&& !serieData.context.highlighted)
continue;
var symbolSize = highlight
@@ -102,7 +102,7 @@ namespace XCharts
var cornerRadius = SerieHelper.GetSymbolCornerRadius(serie, serieData, highlight);
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);
}
}
@@ -126,10 +126,10 @@ namespace XCharts
var radius = (float)((value - min) / (max - min) * polarRadius);
angle = (angle + 360) % 360;
serieData.runtimeAngle = angle;
serieData.runtimePosition = ChartHelper.GetPos(m_Polar.context.center, radius, angle, true);
serieData.context.angle = angle;
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;
m_UpdateLabelText = true;
}
if (serieData.labelPosition != cenPos)
if (serieData.context.labelPosition != cenPos)
{
serieData.labelPosition = cenPos;
serieData.context.labelPosition = cenPos;
m_UpdateLabelText = true;
}
if (value <= 0) return;
@@ -273,9 +273,9 @@ namespace XCharts
serie.context.checkValue = value;
m_UpdateLabelText = true;
}
if (serieData.labelPosition != cenPos)
if (serieData.context.labelPosition != cenPos)
{
serieData.labelPosition = cenPos;
serieData.context.labelPosition = cenPos;
m_UpdateLabelText = true;
}
if (value <= 0) return;

View File

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

View File

@@ -52,19 +52,19 @@ namespace XCharts
if (serieData.labelObject == null) continue;
var serieLabel = SerieHelper.GetSerieLabel(serie, serieData);
var iconStyle = SerieHelper.GetIconStyle(serie, serieData);
var labelPos = serieData.labelPosition;
var labelPos = serieData.context.labelPosition;
if (serieLabel.margin != 0)
{
labelPos += serieLabel.margin * (labelPos - center).normalized;
}
serieData.labelObject.SetPosition(labelPos);
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 max = radar.GetIndicatorMax(n);
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);
var content = SerieLabelHelper.GetFormatterContent(serie, serieData, value, max,
serieLabel, Color.clear);
@@ -247,7 +247,7 @@ namespace XCharts
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;
var selectedSerieIndex = tooltip.runtimeDataIndex[0];
if (selectedSerieIndex < 0) return false;
@@ -332,7 +332,7 @@ namespace XCharts
}
if (!serieData.show)
{
serieData.labelPosition = Vector3.zero;
serieData.context.labelPosition = Vector3.zero;
continue;
}
var isHighlight = IsHighlight(radar, serie, serieData, tooltip, j, 0);
@@ -384,7 +384,7 @@ namespace XCharts
startPoint = toPoint;
lastColor = lineColor;
}
serieData.labelPosition = startPoint;
serieData.context.labelPosition = startPoint;
pointList.Add(startPoint);
if (serie.areaStyle.show && j == endIndex)
@@ -406,7 +406,7 @@ namespace XCharts
{
var serieData = serie.data[j];
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);
var serieIndex = serieData.index;
var symbolSize = isHighlight
@@ -422,7 +422,7 @@ namespace XCharts
symbolColor = 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);
}
}

View File

@@ -71,8 +71,6 @@ namespace XCharts
var data = serie.data;
serie.animation.InitProgress(data.Count, serie.startAngle, serie.startAngle + 360);
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 ringWidth = serie.context.outsideRadius - serie.context.insideRadius;
var dataChanging = false;
@@ -86,9 +84,9 @@ namespace XCharts
var degree = (float)(360 * value / max);
var startDegree = GetStartAngle(serie);
var toDegree = GetToAngle(serie, degree);
var itemStyle = SerieHelper.GetItemStyle(serie, serieData, serieData.highlighted);
var itemColor = SerieHelper.GetItemColor(serie, serieData, chart.theme, j, serieData.highlighted);
var itemToColor = SerieHelper.GetItemToColor(serie, serieData, chart.theme, j, serieData.highlighted);
var itemStyle = SerieHelper.GetItemStyle(serie, serieData, serieData.context.highlighted);
var itemColor = SerieHelper.GetItemColor(serie, serieData, chart.theme, j, serieData.context.highlighted);
var itemToColor = SerieHelper.GetItemToColor(serie, serieData, chart.theme, j, serieData.context.highlighted);
var outsideRadius = serie.context.outsideRadius - j * (ringWidth + serie.ringGap);
var insideRadius = outsideRadius - ringWidth;
var centerRadius = (outsideRadius + insideRadius) / 2;
@@ -96,10 +94,10 @@ namespace XCharts
var borderColor = itemStyle.borderColor;
var roundCap = serie.roundCap && insideRadius > 0;
serieData.runtimePieStartAngle = serie.clockwise ? startDegree : toDegree;
serieData.runtimePieToAngle = serie.clockwise ? toDegree : startDegree;
serieData.runtimePieInsideRadius = insideRadius;
serieData.runtimePieOutsideRadius = outsideRadius;
serieData.context.startAngle = serie.clockwise ? startDegree : toDegree;
serieData.context.toAngle = serie.clockwise ? toDegree : startDegree;
serieData.context.insideRadius = insideRadius;
serieData.context.outsideRadius = serieData.radius > 0 ? serieData.radius : outsideRadius;
if (itemStyle.backgroundColor.a != 0)
{
UGL.DrawDoughnut(vh, serie.context.center, insideRadius, outsideRadius, itemStyle.backgroundColor,
@@ -201,23 +199,23 @@ namespace XCharts
switch (serie.label.position)
{
case LabelStyle.Position.Center:
serieData.labelPosition = serie.context.center + serie.label.offset;
serieData.context.labelPosition = serie.context.center + serie.label.offset;
break;
case LabelStyle.Position.Bottom:
var px1 = Mathf.Sin(startAngle * Mathf.Deg2Rad) * centerRadius;
var py1 = Mathf.Cos(startAngle * Mathf.Deg2Rad) * centerRadius;
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;
case LabelStyle.Position.Top:
startAngle += 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 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;
}
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)
@@ -280,10 +278,10 @@ namespace XCharts
for (int i = 0; i < serie.data.Count; i++)
{
var serieData = serie.data[i];
if (dist >= serieData.runtimePieInsideRadius &&
dist <= serieData.runtimePieOutsideRadius &&
angle >= serieData.runtimePieStartAngle &&
angle <= serieData.runtimePieToAngle)
if (dist >= serieData.context.insideRadius &&
dist <= serieData.context.outsideRadius &&
angle >= serieData.context.startAngle &&
angle <= serieData.context.toAngle)
{
return i;
}

View File

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

View File

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

View File

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

View File

@@ -7,13 +7,12 @@
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
namespace XCharts
{
/// <summary>
/// A data item of serie.
/// 系列中的一个数据项。可存储数据名和1-n维数据。
/// 系列中的一个数据项。可存储数据名和1-n维数据。
/// </summary>
[System.Serializable]
public class SerieData : ChildComponent
@@ -36,7 +35,6 @@ namespace XCharts
public ChartLabel labelObject { get; set; }
private bool m_Show = true;
private float m_RtPieOutsideRadius;
/// <summary>
/// the name of data item.
@@ -103,71 +101,7 @@ namespace XCharts
/// 该数据项是否要显示。
/// </summary>
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<float> m_DataUpdateTime = new List<float>();
private List<bool> m_DataUpdateFlag = new List<bool>();
@@ -177,11 +111,11 @@ namespace XCharts
{
index = 0;
labelObject = null;
highlighted = false;
m_Name = string.Empty;
m_Show = true;
m_Selected = false;
m_CanShowLabel = true;
context.canShowLabel = true;
context.highlighted = false;
m_Radius = 0;
m_Data.Clear();
m_PreviousData.Clear();

View File

@@ -5,7 +5,6 @@
/* */
/************************************************/
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
@@ -13,5 +12,53 @@ namespace XCharts
{
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 iconStyle = SerieHelper.GetIconStyle(serie, serieData);
var isIgnore = serie.IsIgnoreIndex(serieData.index);
serieData.labelObject.SetPosition(serieData.runtimePosition);
serieData.labelObject.SetPosition(serieData.context.position);
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 content = SerieLabelHelper.GetFormatterContent(serie, serieData, value, total,
@@ -235,7 +235,7 @@ namespace XCharts
&& !serie.areaStyle.show;
SerieLabelHelper.ResetLabel(serieData.labelObject.label, serieLabel, chart.theme, colorIndex);
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);
}
else