mirror of
https://github.com/XCharts-Team/XCharts.git
synced 2026-05-21 07:50:16 +00:00
3.0 - serie context
This commit is contained in:
@@ -33,7 +33,7 @@ namespace XCharts.Examples
|
||||
chart.onCustomDrawAfterSerie = delegate (VertexHelper vh, Serie serie)
|
||||
{
|
||||
if (serie.index != 0) return;
|
||||
var dataPoints = serie.dataPoints;
|
||||
var dataPoints = serie.context.dataPoints;
|
||||
if (dataPoints.Count > 0)
|
||||
{
|
||||
var pos = dataPoints[3];
|
||||
|
||||
@@ -62,7 +62,7 @@ namespace XCharts.Examples
|
||||
chart.UpdateData(serieIndex, i, value);
|
||||
}
|
||||
}
|
||||
chart.GetChartComponent<Title>().subText = "max:" + serie.runtimeDataMax;
|
||||
chart.GetChartComponent<Title>().subText = "max:" + serie.context.dataMax;
|
||||
}
|
||||
|
||||
void UpdateMax()
|
||||
@@ -70,10 +70,10 @@ namespace XCharts.Examples
|
||||
var serieIndex = 0;
|
||||
var serie = chart.GetSerie(serieIndex);
|
||||
if (serie == null) return;
|
||||
if (serie.runtimeDataMax != max)
|
||||
if (serie.context.dataMax != max)
|
||||
{
|
||||
chart.GetChartComponent<Title>().subText = "max:" + serie.runtimeDataMax;
|
||||
max = serie.runtimeDataMax;
|
||||
chart.GetChartComponent<Title>().subText = "max:" + serie.context.dataMax;
|
||||
max = serie.context.dataMax;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -214,10 +214,10 @@ namespace XCharts
|
||||
if (serie.center.Length < 2) return;
|
||||
var centerX = serie.center[0] <= 1 ? chartWidth * serie.center[0] : serie.center[0];
|
||||
var centerY = serie.center[1] <= 1 ? chartHeight * serie.center[1] : serie.center[1];
|
||||
serie.runtimeCenterPos = chartPosition + new Vector3(centerX, centerY);
|
||||
serie.context.center = chartPosition + new Vector3(centerX, centerY);
|
||||
var minWidth = Mathf.Min(chartWidth, chartHeight);
|
||||
serie.runtimeInsideRadius = serie.radius[0] <= 1 ? minWidth * serie.radius[0] : serie.radius[0];
|
||||
serie.runtimeOutsideRadius = serie.radius[1] <= 1 ? minWidth * serie.radius[1] : serie.radius[1];
|
||||
serie.context.insideRadius = serie.radius[0] <= 1 ? minWidth * serie.radius[0] : serie.radius[0];
|
||||
serie.context.outsideRadius = serie.radius[1] <= 1 ? minWidth * serie.radius[1] : serie.radius[1];
|
||||
}
|
||||
|
||||
public static void UpdateRect(Serie serie, Vector3 chartPosition, float chartWidth, float chartHeight)
|
||||
@@ -229,22 +229,22 @@ namespace XCharts
|
||||
var runtimeTop = serie.top <= 1 ? serie.top * chartHeight : serie.top;
|
||||
var runtimeRight = serie.right <= 1 ? serie.right * chartWidth : serie.right;
|
||||
|
||||
serie.runtimeX = chartPosition.x + runtimeLeft;
|
||||
serie.runtimeY = chartPosition.y + runtimeBottom;
|
||||
serie.runtimeWidth = chartWidth - runtimeLeft - runtimeRight;
|
||||
serie.runtimeHeight = chartHeight - runtimeTop - runtimeBottom;
|
||||
serie.runtimeCenterPos = new Vector3(serie.runtimeX + serie.runtimeWidth / 2,
|
||||
serie.runtimeY + serie.runtimeHeight / 2);
|
||||
serie.runtimeRect = new Rect(serie.runtimeX, serie.runtimeY, serie.runtimeWidth, serie.runtimeHeight);
|
||||
serie.context.x = chartPosition.x + runtimeLeft;
|
||||
serie.context.y = chartPosition.y + runtimeBottom;
|
||||
serie.context.width = chartWidth - runtimeLeft - runtimeRight;
|
||||
serie.context.height = chartHeight - runtimeTop - runtimeBottom;
|
||||
serie.context.center = new Vector3(serie.context.x + serie.context.width / 2,
|
||||
serie.context.y + serie.context.height / 2);
|
||||
serie.context.rect = new Rect(serie.context.x, serie.context.y, serie.context.width, serie.context.height);
|
||||
}
|
||||
else
|
||||
{
|
||||
serie.runtimeX = chartPosition.x;
|
||||
serie.runtimeY = chartPosition.y;
|
||||
serie.runtimeWidth = chartWidth;
|
||||
serie.runtimeHeight = chartHeight;
|
||||
serie.runtimeCenterPos = chartPosition + new Vector3(chartWidth / 2, chartHeight / 2);
|
||||
serie.runtimeRect = new Rect(serie.runtimeX, serie.runtimeY, serie.runtimeWidth, serie.runtimeHeight);
|
||||
serie.context.x = chartPosition.x;
|
||||
serie.context.y = chartPosition.y;
|
||||
serie.context.width = chartWidth;
|
||||
serie.context.height = chartHeight;
|
||||
serie.context.center = chartPosition + new Vector3(chartWidth / 2, chartHeight / 2);
|
||||
serie.context.rect = new Rect(serie.context.x, serie.context.y, serie.context.width, serie.context.height);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -370,7 +370,7 @@ namespace XCharts
|
||||
|
||||
public static bool IsDownPoint(Serie serie, int index)
|
||||
{
|
||||
var dataPoints = serie.dataPoints;
|
||||
var dataPoints = serie.context.dataPoints;
|
||||
if (dataPoints.Count < 2) return false;
|
||||
else if (index > 0 && index < dataPoints.Count - 1)
|
||||
{
|
||||
@@ -549,13 +549,13 @@ namespace XCharts
|
||||
GetMinMaxData(serie, dimension, out min, out max, dataZoom);
|
||||
if (ceilRate < 0)
|
||||
{
|
||||
serie.runtimeDataMin = min;
|
||||
serie.runtimeDataMax = max;
|
||||
serie.context.dataMin = min;
|
||||
serie.context.dataMax = max;
|
||||
}
|
||||
else
|
||||
{
|
||||
serie.runtimeDataMin = ChartHelper.GetMinDivisibleValue(min, ceilRate);
|
||||
serie.runtimeDataMax = ChartHelper.GetMaxDivisibleValue(max, ceilRate);
|
||||
serie.context.dataMin = ChartHelper.GetMinDivisibleValue(min, ceilRate);
|
||||
serie.context.dataMax = ChartHelper.GetMaxDivisibleValue(max, ceilRate);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -565,13 +565,13 @@ namespace XCharts
|
||||
GetMinMaxData(serie, out min, out max, dataZoom);
|
||||
if (ceilRate < 0)
|
||||
{
|
||||
serie.runtimeDataMin = min;
|
||||
serie.runtimeDataMax = max;
|
||||
serie.context.dataMin = min;
|
||||
serie.context.dataMax = max;
|
||||
}
|
||||
else
|
||||
{
|
||||
serie.runtimeDataMin = ChartHelper.GetMinDivisibleValue(min, ceilRate);
|
||||
serie.runtimeDataMax = ChartHelper.GetMaxDivisibleValue(max, ceilRate);
|
||||
serie.context.dataMin = ChartHelper.GetMinDivisibleValue(min, ceilRate);
|
||||
serie.context.dataMax = ChartHelper.GetMaxDivisibleValue(max, ceilRate);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -689,16 +689,16 @@ namespace XCharts
|
||||
|
||||
public static void UpdateSerieRuntimeFilterData(Serie serie, bool filterInvisible = true)
|
||||
{
|
||||
serie.runtimeSortedData.Clear();
|
||||
serie.context.sortedData.Clear();
|
||||
foreach (var serieData in serie.data)
|
||||
{
|
||||
if (!filterInvisible || (filterInvisible && serieData.show))
|
||||
serie.runtimeSortedData.Add(serieData);
|
||||
serie.context.sortedData.Add(serieData);
|
||||
}
|
||||
switch (serie.dataSortType)
|
||||
{
|
||||
case SerieDataSortType.Ascending:
|
||||
serie.runtimeSortedData.Sort(delegate (SerieData data1, SerieData data2)
|
||||
serie.context.sortedData.Sort(delegate (SerieData data1, SerieData data2)
|
||||
{
|
||||
var value1 = data1.GetData(1);
|
||||
var value2 = data2.GetData(1);
|
||||
@@ -708,7 +708,7 @@ namespace XCharts
|
||||
});
|
||||
break;
|
||||
case SerieDataSortType.Descending:
|
||||
serie.runtimeSortedData.Sort(delegate (SerieData data1, SerieData data2)
|
||||
serie.context.sortedData.Sort(delegate (SerieData data1, SerieData data2)
|
||||
{
|
||||
var value1 = data1.GetData(1);
|
||||
var value2 = data2.GetData(1);
|
||||
|
||||
@@ -113,7 +113,7 @@ namespace XCharts
|
||||
var total = serie.max;
|
||||
var content = SerieLabelHelper.GetFormatterContent(serie, serieData, value, total, null, Color.clear);
|
||||
serieData.labelObject.SetText(content);
|
||||
serieData.labelObject.SetLabelPosition(serie.runtimeCenterPos + serie.label.offset);
|
||||
serieData.labelObject.SetLabelPosition(serie.context.center + serie.label.offset);
|
||||
if (!ChartHelper.IsClearColor(serie.label.textStyle.color))
|
||||
{
|
||||
serieData.labelObject.label.SetColor(serie.label.textStyle.color);
|
||||
@@ -191,22 +191,22 @@ namespace XCharts
|
||||
switch (serieLabel.position)
|
||||
{
|
||||
case LabelStyle.Position.Center:
|
||||
serieData.labelPosition = serie.runtimeCenterPos;
|
||||
serieData.labelPosition = serie.context.center;
|
||||
break;
|
||||
case LabelStyle.Position.Inside:
|
||||
var labelRadius = offsetRadius + insideRadius + (outsideRadius - insideRadius) / 2 + serieLabel.margin;
|
||||
var labelCenter = new Vector2(serie.runtimeCenterPos.x + labelRadius * Mathf.Sin(currRad),
|
||||
serie.runtimeCenterPos.y + labelRadius * Mathf.Cos(currRad));
|
||||
var labelCenter = new Vector2(serie.context.center.x + labelRadius * Mathf.Sin(currRad),
|
||||
serie.context.center.y + labelRadius * Mathf.Cos(currRad));
|
||||
serieData.labelPosition = labelCenter;
|
||||
break;
|
||||
case LabelStyle.Position.Outside:
|
||||
if (labelLine.lineType == LabelLine.LineType.HorizontalLine)
|
||||
{
|
||||
var radius1 = serie.runtimeOutsideRadius;
|
||||
var radius1 = serie.context.outsideRadius;
|
||||
var radius3 = insideRadius + (outsideRadius - insideRadius) / 2;
|
||||
var currSin = Mathf.Sin(currRad);
|
||||
var currCos = Mathf.Cos(currRad);
|
||||
var pos0 = new Vector3(serie.runtimeCenterPos.x + radius3 * currSin, serie.runtimeCenterPos.y + radius3 * currCos);
|
||||
var pos0 = new Vector3(serie.context.center.x + radius3 * currSin, serie.context.center.y + radius3 * currCos);
|
||||
if (currAngle > 180)
|
||||
{
|
||||
currSin = Mathf.Sin((360 - currAngle) * Mathf.Deg2Rad);
|
||||
@@ -219,9 +219,9 @@ namespace XCharts
|
||||
}
|
||||
else
|
||||
{
|
||||
labelRadius = serie.runtimeOutsideRadius + labelLine.lineLength1;
|
||||
labelCenter = new Vector2(serie.runtimeCenterPos.x + labelRadius * Mathf.Sin(currRad),
|
||||
serie.runtimeCenterPos.y + labelRadius * Mathf.Cos(currRad));
|
||||
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;
|
||||
}
|
||||
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.runtimeCenterPos.x)
|
||||
if (serieData.labelPosition.x != 0 && serieData.labelPosition.x < serie.context.center.x)
|
||||
{
|
||||
splitCount = n;
|
||||
break;
|
||||
@@ -276,13 +276,13 @@ namespace XCharts
|
||||
{
|
||||
if (lastCheckPos.y - serieData.labelPosition.y < fontSize)
|
||||
{
|
||||
var labelRadius = serie.runtimeOutsideRadius + labelLine.lineLength1;
|
||||
var labelRadius = serie.context.outsideRadius + labelLine.lineLength1;
|
||||
var y1 = lastCheckPos.y - fontSize;
|
||||
var cy = serie.runtimeCenterPos.y;
|
||||
var cy = serie.context.center.y;
|
||||
var diff = Mathf.Abs(y1 - cy);
|
||||
var diffX = labelRadius * labelRadius - diff * diff;
|
||||
diffX = diffX <= 0 ? 0 : diffX;
|
||||
var x1 = serie.runtimeCenterPos.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);
|
||||
}
|
||||
lastCheckPos = serieData.labelPosition;
|
||||
|
||||
@@ -577,7 +577,8 @@ namespace XCharts
|
||||
{
|
||||
m_OnCustomDrawSerieBeforeCallback.Invoke(vh, serie);
|
||||
}
|
||||
serie.dataPoints.Clear();
|
||||
serie.context.dataPoints.Clear();
|
||||
serie.context.dataIgnore.Clear();
|
||||
DrawPainterSerie(vh, serie);
|
||||
if (i >= 0 && i < m_SerieHandlers.Count)
|
||||
{
|
||||
|
||||
@@ -69,7 +69,7 @@ namespace XCharts
|
||||
{
|
||||
var colorIndex = chart.GetLegendRealShowNameIndex(serie.legendName);
|
||||
var yCategory = ComponentHelper.IsAnyCategoryOfYAxis(chart.components);
|
||||
serie.dataPoints.Clear();
|
||||
serie.context.dataPoints.Clear();
|
||||
if (yCategory) DrawYBarSerie(vh, serie, colorIndex);
|
||||
else DrawXBarSerie(vh, serie, colorIndex);
|
||||
}
|
||||
@@ -134,7 +134,7 @@ namespace XCharts
|
||||
var serieData = showData[i];
|
||||
if (!serieData.show || serie.IsIgnoreValue(serieData))
|
||||
{
|
||||
serie.dataPoints.Add(Vector3.zero);
|
||||
serie.context.dataPoints.Add(Vector3.zero);
|
||||
continue;
|
||||
}
|
||||
var highlight = serie.data[i].highlighted
|
||||
@@ -211,7 +211,7 @@ namespace XCharts
|
||||
top = chart.ClampInGrid(grid, top);
|
||||
}
|
||||
serieData.runtimeRect = Rect.MinMaxRect(plb.x, plb.y, prb.x, prt.y);
|
||||
serie.dataPoints.Add(top);
|
||||
serie.context.dataPoints.Add(top);
|
||||
if (serie.show)
|
||||
{
|
||||
switch (serie.barType)
|
||||
@@ -278,7 +278,7 @@ namespace XCharts
|
||||
var serieData = showData[i];
|
||||
if (!serieData.show || serie.IsIgnoreValue(serieData))
|
||||
{
|
||||
serie.dataPoints.Add(Vector3.zero);
|
||||
serie.context.dataPoints.Add(Vector3.zero);
|
||||
continue;
|
||||
}
|
||||
var highlight = serie.data[i].highlighted
|
||||
@@ -364,7 +364,7 @@ namespace XCharts
|
||||
top = chart.ClampInGrid(grid, top);
|
||||
}
|
||||
serieData.runtimeRect = Rect.MinMaxRect(plb.x, plb.y, prb.x, prt.y);
|
||||
serie.dataPoints.Add(top);
|
||||
serie.context.dataPoints.Add(top);
|
||||
if (serie.show && currHig != 0)
|
||||
{
|
||||
switch (serie.barType)
|
||||
|
||||
@@ -53,7 +53,7 @@ namespace XCharts
|
||||
var serieData = showData[i];
|
||||
if (serie.IsIgnoreValue(serieData))
|
||||
{
|
||||
serie.dataPoints.Add(Vector3.zero);
|
||||
serie.context.dataPoints.Add(Vector3.zero);
|
||||
continue;
|
||||
}
|
||||
var highlight = serie.data[i].highlighted || serie.highlighted;
|
||||
@@ -98,7 +98,7 @@ namespace XCharts
|
||||
prb = chart.ClampInGrid(grid, prb);
|
||||
top = chart.ClampInGrid(grid, top);
|
||||
}
|
||||
serie.dataPoints.Add(top);
|
||||
serie.context.dataPoints.Add(top);
|
||||
var areaColor = isRise
|
||||
? itemStyle.GetColor(theme.serie.candlestickColor)
|
||||
: itemStyle.GetColor0(theme.serie.candlestickColor0);
|
||||
|
||||
@@ -138,14 +138,14 @@ namespace XCharts
|
||||
var totalValue = serie.max - serie.min;
|
||||
var diffAngle = totalAngle / count;
|
||||
var diffValue = totalValue / count;
|
||||
var radius = serie.runtimeInsideRadius - serie.gaugeAxis.axisLabel.margin;
|
||||
var radius = serie.context.insideRadius - serie.gaugeAxis.axisLabel.margin;
|
||||
var serieData = serie.GetSerieData(0);
|
||||
var customLabelText = serie.gaugeAxis.axisLabelText;
|
||||
for (int j = 0; j <= count; j++)
|
||||
{
|
||||
var angle = serie.startAngle + j * diffAngle;
|
||||
var value = serie.min + j * diffValue;
|
||||
var pos = ChartHelper.GetPosition(serie.runtimeCenterPos, angle, radius);
|
||||
var pos = ChartHelper.GetPosition(serie.context.center, angle, radius);
|
||||
var text = customLabelText != null && j < customLabelText.Count ? customLabelText[j] :
|
||||
SerieLabelHelper.GetFormatterContent(serie, serieData, value, totalValue,
|
||||
serie.gaugeAxis.axisLabel, Color.clear);
|
||||
@@ -186,13 +186,13 @@ namespace XCharts
|
||||
var color = serie.gaugeAxis.GetAxisLineColor(chart.theme, serie.index);
|
||||
var backgroundColor = serie.gaugeAxis.GetAxisLineBackgroundColor(chart.theme, serie.index);
|
||||
var lineWidth = serie.gaugeAxis.axisLine.GetWidth(chart.theme.gauge.lineWidth);
|
||||
var outsideRadius = serie.runtimeInsideRadius + lineWidth;
|
||||
var outsideRadius = serie.context.insideRadius + lineWidth;
|
||||
var borderWidth = serie.itemStyle.borderWidth;
|
||||
var borderColor = serie.itemStyle.borderColor;
|
||||
UGL.DrawDoughnut(vh, serie.runtimeCenterPos, serie.runtimeInsideRadius, outsideRadius,
|
||||
UGL.DrawDoughnut(vh, serie.context.center, serie.context.insideRadius, outsideRadius,
|
||||
backgroundColor, backgroundColor, Color.clear, serie.startAngle, serie.endAngle, 0, Color.clear,
|
||||
0, chart.settings.cicleSmoothness, serie.roundCap);
|
||||
UGL.DrawDoughnut(vh, serie.runtimeCenterPos, serie.runtimeInsideRadius, outsideRadius,
|
||||
UGL.DrawDoughnut(vh, serie.context.center, serie.context.insideRadius, outsideRadius,
|
||||
color, color, Color.clear, serie.startAngle, currAngle, 0, Color.clear,
|
||||
0, chart.settings.cicleSmoothness, serie.roundCap);
|
||||
}
|
||||
@@ -205,14 +205,14 @@ namespace XCharts
|
||||
var tempStartAngle = serie.startAngle;
|
||||
var tempEndAngle = serie.startAngle;
|
||||
var lineWidth = serie.gaugeAxis.axisLine.GetWidth(chart.theme.gauge.lineWidth);
|
||||
var outsideRadius = serie.runtimeInsideRadius + lineWidth;
|
||||
var outsideRadius = serie.context.insideRadius + lineWidth;
|
||||
serie.gaugeAxis.runtimeStageAngle.Clear();
|
||||
for (int i = 0; i < serie.gaugeAxis.axisLine.stageColor.Count; i++)
|
||||
{
|
||||
var stageColor = serie.gaugeAxis.axisLine.stageColor[i];
|
||||
tempEndAngle = serie.startAngle + totalAngle * stageColor.percent;
|
||||
serie.gaugeAxis.runtimeStageAngle.Add(tempEndAngle);
|
||||
UGL.DrawDoughnut(vh, serie.runtimeCenterPos, serie.runtimeInsideRadius, outsideRadius,
|
||||
UGL.DrawDoughnut(vh, serie.context.center, serie.context.insideRadius, outsideRadius,
|
||||
stageColor.color, stageColor.color, Color.clear, tempStartAngle, tempEndAngle, 0, Color.clear,
|
||||
0, chart.settings.cicleSmoothness);
|
||||
tempStartAngle = tempEndAngle;
|
||||
@@ -225,12 +225,12 @@ namespace XCharts
|
||||
var pointerColor = serie.gaugeAxis.GetPointerColor(chart.theme, serie.index, currAngle, serie.itemStyle);
|
||||
var pointerToColor = !ChartHelper.IsClearColor(serie.itemStyle.toColor) ? serie.itemStyle.toColor : pointerColor;
|
||||
var len = serie.gaugePointer.length < 1 && serie.gaugePointer.length > -1 ?
|
||||
serie.runtimeInsideRadius * serie.gaugePointer.length :
|
||||
serie.context.insideRadius * serie.gaugePointer.length :
|
||||
serie.gaugePointer.length;
|
||||
var p1 = ChartHelper.GetPosition(serie.runtimeCenterPos, currAngle, len);
|
||||
var p2 = ChartHelper.GetPosition(serie.runtimeCenterPos, currAngle + 180, serie.gaugePointer.width);
|
||||
var p3 = ChartHelper.GetPosition(serie.runtimeCenterPos, currAngle - 90, serie.gaugePointer.width / 2);
|
||||
var p4 = ChartHelper.GetPosition(serie.runtimeCenterPos, currAngle + 90, serie.gaugePointer.width / 2);
|
||||
var p1 = ChartHelper.GetPosition(serie.context.center, currAngle, len);
|
||||
var p2 = ChartHelper.GetPosition(serie.context.center, currAngle + 180, serie.gaugePointer.width);
|
||||
var p3 = ChartHelper.GetPosition(serie.context.center, currAngle - 90, serie.gaugePointer.width / 2);
|
||||
var p4 = ChartHelper.GetPosition(serie.context.center, currAngle + 90, serie.gaugePointer.width / 2);
|
||||
UGL.DrawTriangle(vh, p2, p3, p1, pointerColor, pointerColor, pointerToColor);
|
||||
UGL.DrawTriangle(vh, p4, p2, p1, pointerColor, pointerColor, pointerToColor);
|
||||
}
|
||||
@@ -246,14 +246,14 @@ namespace XCharts
|
||||
var lineWidth = serie.gaugeAxis.axisLine.GetWidth(chart.theme.gauge.lineWidth);
|
||||
var splitLineWidth = splitLine.GetWidth(chart.theme.gauge.splitLineWidth);
|
||||
var splitLineLength = splitLine.GetLength(chart.theme.gauge.splitLineLength);
|
||||
var outsideRadius = serie.runtimeInsideRadius + lineWidth;
|
||||
var outsideRadius = serie.context.insideRadius + lineWidth;
|
||||
var insideRadius = outsideRadius - splitLineLength;
|
||||
for (int i = 0; i < serie.splitNumber + 1; i++)
|
||||
{
|
||||
var angle = serie.startAngle + i * diffAngle;
|
||||
var lineColor = serie.gaugeAxis.GetSplitLineColor(chart.theme.gauge.splitLineColor, serie.index, angle);
|
||||
var p1 = ChartHelper.GetPosition(serie.runtimeCenterPos, angle, insideRadius);
|
||||
var p2 = ChartHelper.GetPosition(serie.runtimeCenterPos, angle, outsideRadius);
|
||||
var p1 = ChartHelper.GetPosition(serie.context.center, angle, insideRadius);
|
||||
var p2 = ChartHelper.GetPosition(serie.context.center, angle, outsideRadius);
|
||||
UGL.DrawLine(vh, p1, p2, splitLineWidth, lineColor);
|
||||
}
|
||||
}
|
||||
@@ -269,7 +269,7 @@ namespace XCharts
|
||||
var lineWidth = serie.gaugeAxis.axisLine.GetWidth(chart.theme.gauge.lineWidth);
|
||||
var tickWidth = axisTick.GetWidth(chart.theme.gauge.tickWidth);
|
||||
var tickLength = axisTick.GetLength(chart.theme.gauge.tickLength);
|
||||
var outsideRadius = serie.runtimeInsideRadius + lineWidth;
|
||||
var outsideRadius = serie.context.insideRadius + lineWidth;
|
||||
|
||||
var insideRadius = outsideRadius - (tickLength < 1 ? lineWidth * tickLength : tickLength);
|
||||
for (int i = 0; i < serie.splitNumber; i++)
|
||||
@@ -278,8 +278,8 @@ namespace XCharts
|
||||
{
|
||||
var angle = serie.startAngle + i * diffAngle + j * (diffAngle / axisTick.splitNumber);
|
||||
var lineColor = serie.gaugeAxis.GetSplitLineColor(chart.theme.gauge.tickColor, serie.index, angle);
|
||||
var p1 = ChartHelper.GetPosition(serie.runtimeCenterPos, angle, insideRadius);
|
||||
var p2 = ChartHelper.GetPosition(serie.runtimeCenterPos, angle, outsideRadius);
|
||||
var p1 = ChartHelper.GetPosition(serie.context.center, angle, insideRadius);
|
||||
var p2 = ChartHelper.GetPosition(serie.context.center, angle, outsideRadius);
|
||||
UGL.DrawLine(vh, p1, p2, tickWidth, lineColor);
|
||||
}
|
||||
}
|
||||
@@ -298,7 +298,7 @@ namespace XCharts
|
||||
if (serie.dataCount > 0)
|
||||
{
|
||||
var serieData = serie.data[0];
|
||||
serieData.labelPosition = serie.runtimeCenterPos + serie.label.offset;
|
||||
serieData.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);
|
||||
@@ -348,14 +348,14 @@ namespace XCharts
|
||||
continue;
|
||||
|
||||
var len = serie.gaugePointer.length < 1 && serie.gaugePointer.length > -1
|
||||
? serie.runtimeInsideRadius * serie.gaugePointer.length
|
||||
? serie.context.insideRadius * serie.gaugePointer.length
|
||||
: serie.gaugePointer.length;
|
||||
if (Vector3.Distance(local, serie.runtimeCenterPos) > len) continue;
|
||||
if (Vector3.Distance(local, serie.context.center) > len) continue;
|
||||
var currAngle = (float)(serie.animation.IsFinish() ? GetCurrAngle(serie, false) : serie.animation.GetCurrDetail());
|
||||
var p1 = ChartHelper.GetPosition(serie.runtimeCenterPos, currAngle, len);
|
||||
var p2 = ChartHelper.GetPosition(serie.runtimeCenterPos, currAngle + 180, serie.gaugePointer.width);
|
||||
var p3 = ChartHelper.GetPosition(serie.runtimeCenterPos, currAngle - 90, serie.gaugePointer.width / 2);
|
||||
var p4 = ChartHelper.GetPosition(serie.runtimeCenterPos, currAngle + 90, serie.gaugePointer.width / 2);
|
||||
var p1 = ChartHelper.GetPosition(serie.context.center, currAngle, len);
|
||||
var p2 = ChartHelper.GetPosition(serie.context.center, currAngle + 180, serie.gaugePointer.width);
|
||||
var p3 = ChartHelper.GetPosition(serie.context.center, currAngle - 90, serie.gaugePointer.width / 2);
|
||||
var p4 = ChartHelper.GetPosition(serie.context.center, currAngle + 90, serie.gaugePointer.width / 2);
|
||||
if (ChartHelper.IsPointInQuadrilateral(local, p1, p3, p2, p4))
|
||||
{
|
||||
return serie;
|
||||
|
||||
@@ -84,7 +84,7 @@ namespace XCharts
|
||||
borderColor.a = (byte)(borderColor.a * serie.itemStyle.opacity);
|
||||
var borderToColor = serie.itemStyle.opacity > 0 ? serie.itemStyle.borderToColor : ChartConst.clearColor32;
|
||||
borderToColor.a = (byte)(borderToColor.a * serie.itemStyle.opacity);
|
||||
serie.dataPoints.Clear();
|
||||
serie.context.dataPoints.Clear();
|
||||
serie.animation.InitProgress(1, 0, xCount);
|
||||
var animationIndex = serie.animation.GetCurrIndex();
|
||||
var dataChangeDuration = serie.animation.GetUpdateAnimationDuration();
|
||||
@@ -101,7 +101,7 @@ namespace XCharts
|
||||
var dimension = VisualMapHelper.GetDimension(visualMap, serieData.data.Count);
|
||||
if (serie.IsIgnoreIndex(dataIndex, dimension))
|
||||
{
|
||||
serie.dataPoints.Add(Vector3.zero);
|
||||
serie.context.dataPoints.Add(Vector3.zero);
|
||||
continue;
|
||||
}
|
||||
var value = serieData.GetCurrData(dimension, dataChangeDuration, yAxis.inverse,
|
||||
@@ -109,7 +109,7 @@ namespace XCharts
|
||||
if (serieData.IsDataChanged()) dataChanging = true;
|
||||
var pos = new Vector3(zeroX + (i + (xAxis.boundaryGap ? 0.5f : 0)) * xWidth,
|
||||
zeroY + (j + (yAxis.boundaryGap ? 0.5f : 0)) * yWidth);
|
||||
serie.dataPoints.Add(pos);
|
||||
serie.context.dataPoints.Add(pos);
|
||||
serieData.canShowLabel = false;
|
||||
serieData.runtimeRect = new Rect(pos.x - rectWid / 2, pos.y - rectHig / 2, rectWid, rectHig);
|
||||
if (value == 0) continue;
|
||||
|
||||
@@ -94,9 +94,6 @@ namespace XCharts
|
||||
public override void DrawSerie(VertexHelper vh)
|
||||
{
|
||||
var colorIndex = chart.GetLegendRealShowNameIndex(serie.legendName);
|
||||
|
||||
serie.dataPoints.Clear();
|
||||
serie.dataIgnore.Clear();
|
||||
serie.context.colorIndex = colorIndex;
|
||||
|
||||
if (serie.IsUseCoord<PolarCoord>())
|
||||
@@ -163,7 +160,7 @@ namespace XCharts
|
||||
if (!serie.show || serie.IsPerformanceMode())
|
||||
return;
|
||||
|
||||
var count = serie.dataPoints.Count;
|
||||
var count = serie.context.dataPoints.Count;
|
||||
var clip = SeriesHelper.IsAnyClipSerie(chart.series);
|
||||
XAxis xAxis;
|
||||
YAxis yAxis;
|
||||
@@ -193,7 +190,7 @@ namespace XCharts
|
||||
continue;
|
||||
}
|
||||
|
||||
if (ChartHelper.IsIngore(serie.dataPoints[i]))
|
||||
if (ChartHelper.IsIngore(serie.context.dataPoints[i]))
|
||||
continue;
|
||||
|
||||
var highlight = serie.data[i].highlighted || serie.highlighted;
|
||||
@@ -207,9 +204,9 @@ namespace XCharts
|
||||
var cornerRadius = SerieHelper.GetSymbolCornerRadius(serie, serieData, highlight);
|
||||
|
||||
symbolSize = serie.animation.GetSysmbolSize(symbolSize);
|
||||
chart.DrawClipSymbol(vh, symbol.type, symbolSize, symbolBorder, serie.dataPoints[i],
|
||||
chart.DrawClipSymbol(vh, symbol.type, symbolSize, symbolBorder, serie.context.dataPoints[i],
|
||||
symbolColor, symbolToColor, symbolEmptyColor, symbol.gap, clip, cornerRadius, grid,
|
||||
i > 0 ? serie.dataPoints[i - 1] : grid.context.position);
|
||||
i > 0 ? serie.context.dataPoints[i - 1] : grid.context.position);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -218,29 +215,26 @@ namespace XCharts
|
||||
if (!serie.show || !serie.lineArrow.show)
|
||||
return;
|
||||
|
||||
if (serie.dataPoints.Count < 2)
|
||||
if (serie.context.dataPoints.Count < 2)
|
||||
return;
|
||||
|
||||
var lineColor = SerieHelper.GetLineColor(serie, chart.theme, serie.index, false);
|
||||
var startPos = Vector3.zero;
|
||||
var arrowPos = Vector3.zero;
|
||||
var lineArrow = serie.lineArrow.arrow;
|
||||
|
||||
var dataPoints = serie.context.drawPoints;
|
||||
switch (serie.lineArrow.position)
|
||||
{
|
||||
case LineArrow.Position.End:
|
||||
|
||||
var dataPoints = serie.GetUpSmoothList(serie.dataCount - 1);
|
||||
if (dataPoints.Count < 3)
|
||||
{
|
||||
dataPoints = serie.dataPoints;
|
||||
startPos = dataPoints[dataPoints.Count - 2];
|
||||
arrowPos = dataPoints[dataPoints.Count - 1];
|
||||
startPos = dataPoints[dataPoints.Count - 2].position;
|
||||
arrowPos = dataPoints[dataPoints.Count - 1].position;
|
||||
}
|
||||
else
|
||||
{
|
||||
startPos = dataPoints[dataPoints.Count - 3];
|
||||
arrowPos = dataPoints[dataPoints.Count - 2];
|
||||
startPos = dataPoints[dataPoints.Count - 3].position;
|
||||
arrowPos = dataPoints[dataPoints.Count - 2].position;
|
||||
}
|
||||
UGL.DrawArrow(vh, startPos, arrowPos, lineArrow.width, lineArrow.height,
|
||||
lineArrow.offset, lineArrow.dent, lineArrow.GetColor(lineColor));
|
||||
@@ -248,11 +242,8 @@ namespace XCharts
|
||||
break;
|
||||
|
||||
case LineArrow.Position.Start:
|
||||
|
||||
dataPoints = serie.GetUpSmoothList(1);
|
||||
if (dataPoints.Count < 2) dataPoints = serie.dataPoints;
|
||||
startPos = dataPoints[1];
|
||||
arrowPos = dataPoints[0];
|
||||
startPos = dataPoints[1].position;
|
||||
arrowPos = dataPoints[0].position;
|
||||
UGL.DrawArrow(vh, startPos, arrowPos, lineArrow.width, lineArrow.height,
|
||||
lineArrow.offset, lineArrow.dent, lineArrow.GetColor(lineColor));
|
||||
|
||||
@@ -332,15 +323,15 @@ namespace XCharts
|
||||
{
|
||||
serieData.runtimeStackHig = 0;
|
||||
serieData.runtimePosition = Vector3.zero;
|
||||
if (serie.ignoreLineBreak && serie.dataIgnore.Count > 0)
|
||||
if (serie.ignoreLineBreak && serie.context.dataIgnore.Count > 0)
|
||||
{
|
||||
serie.dataIgnore[serie.dataIgnore.Count - 1] = true;
|
||||
serie.context.dataIgnore[serie.context.dataIgnore.Count - 1] = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var np = Vector3.zero;
|
||||
var xValue = serieData.GetData(0, axis.inverse);
|
||||
var xValue = axis.IsCategory() ? i : serieData.GetData(0, axis.inverse);
|
||||
var relativedValue = DataHelper.SampleValue(ref showData, serie.sampleType, rate, serie.minShow,
|
||||
maxCount, totalAverage, i, dataChangeDuration, ref dataChanging, relativedAxis);
|
||||
|
||||
@@ -349,18 +340,18 @@ namespace XCharts
|
||||
|
||||
serieData.runtimePosition = np;
|
||||
|
||||
serie.dataPoints.Add(np);
|
||||
serie.dataIgnore.Add(false);
|
||||
serie.context.dataPoints.Add(np);
|
||||
serie.context.dataIgnore.Add(false);
|
||||
}
|
||||
}
|
||||
|
||||
if (dataChanging)
|
||||
chart.RefreshPainter(serie);
|
||||
|
||||
if (serie.dataPoints.Count <= 0)
|
||||
if (serie.context.dataPoints.Count <= 0)
|
||||
return;
|
||||
|
||||
serie.animation.InitProgress(serie.dataPoints, isY);
|
||||
serie.animation.InitProgress(serie.context.dataPoints, isY);
|
||||
serie.animation.SetDataFinish(0);
|
||||
|
||||
VisualMapHelper.AutoSetLineMinMax(visualMap, serie, isY, axis, relativedAxis);
|
||||
|
||||
@@ -44,7 +44,7 @@ namespace XCharts
|
||||
var currDetailProgress = 0f;
|
||||
var totalDetailProgress = datas.Count;
|
||||
|
||||
serie.animation.InitProgress(serie.dataPoints.Count, currDetailProgress, totalDetailProgress);
|
||||
serie.animation.InitProgress(serie.context.dataPoints.Count, currDetailProgress, totalDetailProgress);
|
||||
serie.animation.SetDataFinish(0);
|
||||
|
||||
for (int i = 1; i < datas.Count; i++)
|
||||
|
||||
@@ -373,9 +373,9 @@ namespace XCharts
|
||||
UpdateStepLineDrawPoints(serie, setting, theme, isY);
|
||||
break;
|
||||
default:
|
||||
for (int i = 0; i < serie.dataPoints.Count; i++)
|
||||
for (int i = 0; i < serie.context.dataPoints.Count; i++)
|
||||
{
|
||||
serie.context.drawPoints.Add(new PointInfo(serie.dataPoints[i], serie.dataIgnore[i]));
|
||||
serie.context.drawPoints.Add(new PointInfo(serie.context.dataPoints[i], serie.context.dataIgnore[i]));
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -383,7 +383,7 @@ namespace XCharts
|
||||
|
||||
private static void UpdateSmoothLineDrawPoints(Serie serie, Settings setting, bool isY)
|
||||
{
|
||||
var points = serie.dataPoints;
|
||||
var points = serie.context.dataPoints;
|
||||
float smoothness = setting.lineSmoothness;
|
||||
for (int i = 0; i < points.Count - 1; i++)
|
||||
{
|
||||
@@ -391,7 +391,7 @@ namespace XCharts
|
||||
var ep = points[i + 1];
|
||||
var lsp = i > 0 ? points[i - 1] : sp;
|
||||
var nep = i < points.Count - 2 ? points[i + 2] : ep;
|
||||
var ignore = serie.dataIgnore[i];
|
||||
var ignore = serie.context.dataIgnore[i];
|
||||
if (isY)
|
||||
UGLHelper.GetBezierListVertical(ref s_CurvesPosList, sp, ep, smoothness);
|
||||
else
|
||||
@@ -406,15 +406,15 @@ namespace XCharts
|
||||
|
||||
private static void UpdateStepLineDrawPoints(Serie serie, Settings setting, ThemeStyle theme, bool isY)
|
||||
{
|
||||
var points = serie.dataPoints;
|
||||
var points = serie.context.dataPoints;
|
||||
var lp = points[0];
|
||||
var lineWidth = serie.lineStyle.GetWidth(theme.serie.lineWidth);
|
||||
serie.context.drawPoints.Clear();
|
||||
serie.context.drawPoints.Add(new PointInfo(lp, serie.dataIgnore[0]));
|
||||
serie.context.drawPoints.Add(new PointInfo(lp, serie.context.dataIgnore[0]));
|
||||
for (int i = 1; i < points.Count; i++)
|
||||
{
|
||||
var cp = points[i];
|
||||
var ignore = serie.dataIgnore[i];
|
||||
var ignore = serie.context.dataIgnore[i];
|
||||
if ((isY && Mathf.Abs(lp.x - cp.x) <= lineWidth)
|
||||
|| (!isY && Mathf.Abs(lp.y - cp.y) <= lineWidth))
|
||||
{
|
||||
|
||||
@@ -155,9 +155,9 @@ namespace XCharts
|
||||
if (serieData == null) return;
|
||||
var dataChangeDuration = serie.animation.GetUpdateAnimationDuration();
|
||||
var value = serieData.GetCurrData(1, dataChangeDuration);
|
||||
if (serie.runtimeCheckValue != value)
|
||||
if (serie.context.checkValue != value)
|
||||
{
|
||||
serie.runtimeCheckValue = value;
|
||||
serie.context.checkValue = value;
|
||||
m_UpdateLabelText = true;
|
||||
}
|
||||
if (serieData.labelPosition != cenPos)
|
||||
@@ -268,9 +268,9 @@ namespace XCharts
|
||||
if (serieData == null) return;
|
||||
var dataChangeDuration = serie.animation.GetUpdateAnimationDuration();
|
||||
var value = serieData.GetCurrData(1, dataChangeDuration);
|
||||
if (serie.runtimeCheckValue != value)
|
||||
if (serie.context.checkValue != value)
|
||||
{
|
||||
serie.runtimeCheckValue = value;
|
||||
serie.context.checkValue = value;
|
||||
m_UpdateLabelText = true;
|
||||
}
|
||||
if (serieData.labelPosition != cenPos)
|
||||
|
||||
@@ -62,7 +62,7 @@ namespace XCharts
|
||||
serie.animation.InitProgress(serie.showDataDimension, currDetailProgress, totalDetailProgress);
|
||||
serie.animation.SetDataFinish(0);
|
||||
|
||||
serie.dataPoints.Clear();
|
||||
serie.context.dataPoints.Clear();
|
||||
serie.containerIndex = parallel.index;
|
||||
serie.containterInstanceId = parallel.instanceId;
|
||||
|
||||
|
||||
@@ -160,7 +160,7 @@ namespace XCharts
|
||||
private void UpdateRuntimeData(Serie serie)
|
||||
{
|
||||
var data = serie.data;
|
||||
serie.runtimeDataMax = serie.yMax;
|
||||
serie.context.dataMax = serie.yMax;
|
||||
var runtimePieDataTotal = serie.yTotal;
|
||||
|
||||
SerieHelper.UpdateCenter(serie, chart.chartPosition, chart.chartWidth, chart.chartHeight);
|
||||
@@ -180,7 +180,7 @@ namespace XCharts
|
||||
{
|
||||
totalDegree = 360;
|
||||
zeroReplaceValue = totalDegree / data.Count;
|
||||
serie.runtimeDataMax = zeroReplaceValue;
|
||||
serie.context.dataMax = zeroReplaceValue;
|
||||
runtimePieDataTotal = 360;
|
||||
dataTotalFilterMinAngle = 360;
|
||||
}
|
||||
@@ -208,8 +208,8 @@ namespace XCharts
|
||||
if (serie.minAngle > 0 && degree < serie.minAngle) degree = serie.minAngle;
|
||||
serieData.runtimePieToAngle = startDegree + degree;
|
||||
serieData.runtimePieOutsideRadius = serie.pieRoseType > 0 ?
|
||||
serie.runtimeInsideRadius + (float)((serie.runtimeOutsideRadius - serie.runtimeInsideRadius) * value / serie.runtimeDataMax) :
|
||||
serie.runtimeOutsideRadius;
|
||||
serie.context.insideRadius + (float)((serie.context.outsideRadius - serie.context.insideRadius) * value / serie.context.dataMax) :
|
||||
serie.context.outsideRadius;
|
||||
if (serieData.highlighted)
|
||||
{
|
||||
serieData.runtimePieOutsideRadius += chart.theme.serie.pieTooltipExtraRadius;
|
||||
@@ -229,8 +229,8 @@ namespace XCharts
|
||||
}
|
||||
var halfDegree = (serieData.runtimePieToAngle - startDegree) / 2;
|
||||
serieData.runtimePieHalfAngle = startDegree + halfDegree;
|
||||
serieData.runtiemPieOffsetCenter = serie.runtimeCenterPos;
|
||||
serieData.runtimePieInsideRadius = serie.runtimeInsideRadius;
|
||||
serieData.runtiemPieOffsetCenter = serie.context.center;
|
||||
serieData.runtimePieInsideRadius = serie.context.insideRadius;
|
||||
if (offset > 0)
|
||||
{
|
||||
var currRad = serieData.runtimePieHalfAngle * Mathf.Deg2Rad;
|
||||
@@ -249,8 +249,8 @@ namespace XCharts
|
||||
serieData.runtimePieOutsideRadius += chart.theme.serie.pieSelectedOffset;
|
||||
}
|
||||
serieData.runtiemPieOffsetCenter = new Vector3(
|
||||
serie.runtimeCenterPos.x + serieData.runtimePieOffsetRadius * currSin,
|
||||
serie.runtimeCenterPos.y + serieData.runtimePieOffsetRadius * currCos);
|
||||
serie.context.center.x + serieData.runtimePieOffsetRadius * currSin,
|
||||
serie.context.center.y + serieData.runtimePieOffsetRadius * currCos);
|
||||
}
|
||||
serieData.canShowLabel = serieData.runtimePieCurrAngle >= serieData.runtimePieHalfAngle;
|
||||
startDegree = serieData.runtimePieToAngle;
|
||||
@@ -288,7 +288,7 @@ namespace XCharts
|
||||
if (!ChartHelper.IsClearColor(itemStyle.centerColor))
|
||||
{
|
||||
var radius = insideRadius - itemStyle.centerGap;
|
||||
UGL.DrawCricle(vh, serie.runtimeCenterPos, radius, itemStyle.centerColor, chart.settings.cicleSmoothness);
|
||||
UGL.DrawCricle(vh, serie.context.center, radius, itemStyle.centerColor, chart.settings.cicleSmoothness);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -331,7 +331,7 @@ namespace XCharts
|
||||
{
|
||||
var drawEndDegree = serieData.runtimePieCurrAngle;
|
||||
var needRoundCap = serie.roundCap && serieData.runtimePieInsideRadius > 0;
|
||||
UGL.DrawDoughnut(vh, serie.runtimeCenterPos, serieData.runtimePieInsideRadius,
|
||||
UGL.DrawDoughnut(vh, serie.context.center, serieData.runtimePieInsideRadius,
|
||||
serieData.runtimePieOutsideRadius, color, toColor, Color.clear, serieData.runtimePieStartAngle,
|
||||
drawEndDegree, borderWidth, borderColor, serie.pieSpace / 2, chart.settings.cicleSmoothness,
|
||||
needRoundCap, true);
|
||||
@@ -400,17 +400,17 @@ namespace XCharts
|
||||
{
|
||||
var insideRadius = serieData.runtimePieInsideRadius;
|
||||
var outSideRadius = serieData.runtimePieOutsideRadius;
|
||||
var center = serie.runtimeCenterPos;
|
||||
var center = serie.context.center;
|
||||
var currAngle = serieData.runtimePieHalfAngle;
|
||||
if (!ChartHelper.IsClearColor(labelLine.lineColor)) color = labelLine.lineColor;
|
||||
else if (labelLine.lineType == LabelLine.LineType.HorizontalLine) color *= color;
|
||||
float currSin = Mathf.Sin(currAngle * Mathf.Deg2Rad);
|
||||
float currCos = Mathf.Cos(currAngle * Mathf.Deg2Rad);
|
||||
var radius1 = labelLine.lineType == LabelLine.LineType.HorizontalLine ?
|
||||
serie.runtimeOutsideRadius : outSideRadius;
|
||||
var radius2 = serie.runtimeOutsideRadius + labelLine.lineLength1;
|
||||
serie.context.outsideRadius : outSideRadius;
|
||||
var radius2 = serie.context.outsideRadius + labelLine.lineLength1;
|
||||
var radius3 = insideRadius + (outSideRadius - insideRadius) / 2;
|
||||
if (radius1 < serie.runtimeInsideRadius) radius1 = serie.runtimeInsideRadius;
|
||||
if (radius1 < serie.context.insideRadius) radius1 = serie.context.insideRadius;
|
||||
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);
|
||||
@@ -545,10 +545,10 @@ namespace XCharts
|
||||
private int GetPiePosIndex(Serie serie, Vector2 local)
|
||||
{
|
||||
if (!(serie is Pie)) return -1;
|
||||
var dist = Vector2.Distance(local, serie.runtimeCenterPos);
|
||||
var maxRadius = serie.runtimeOutsideRadius + 3 * chart.theme.serie.pieSelectedOffset;
|
||||
if (dist < serie.runtimeInsideRadius || dist > maxRadius) return -1;
|
||||
Vector2 dir = local - new Vector2(serie.runtimeCenterPos.x, serie.runtimeCenterPos.y);
|
||||
var dist = Vector2.Distance(local, serie.context.center);
|
||||
var maxRadius = serie.context.outsideRadius + 3 * chart.theme.serie.pieSelectedOffset;
|
||||
if (dist < serie.context.insideRadius || dist > maxRadius) return -1;
|
||||
Vector2 dir = local - new Vector2(serie.context.center.x, serie.context.center.y);
|
||||
float angle = ChartHelper.GetAngle360(Vector2.up, dir);
|
||||
for (int i = 0; i < serie.data.Count; i++)
|
||||
{
|
||||
@@ -569,8 +569,8 @@ namespace XCharts
|
||||
private bool PointerIsInPieSerie(Serie serie, Vector2 local)
|
||||
{
|
||||
if (!(serie is Pie)) return false;
|
||||
var dist = Vector2.Distance(local, serie.runtimeCenterPos);
|
||||
if (dist >= serie.runtimeInsideRadius && dist <= serie.runtimeOutsideRadius) return true;
|
||||
var dist = Vector2.Distance(local, serie.context.center);
|
||||
if (dist >= serie.context.insideRadius && dist <= serie.context.outsideRadius) return true;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -179,7 +179,7 @@ namespace XCharts
|
||||
if (serieData.IsDataChanged()) dataChanging = true;
|
||||
if (max == 0)
|
||||
{
|
||||
max = serie.runtimeDataMax;
|
||||
max = serie.context.dataMax;
|
||||
}
|
||||
var radius = (float)(max < 0 ? radar.context.dataRadius - radar.context.dataRadius * value / max
|
||||
: radar.context.dataRadius * value / max);
|
||||
@@ -347,7 +347,7 @@ namespace XCharts
|
||||
if (serieData.IsDataChanged()) dataChanging = true;
|
||||
if (max == 0)
|
||||
{
|
||||
max = serie.runtimeDataMax;
|
||||
max = serie.context.dataMax;
|
||||
}
|
||||
if (!radar.IsInIndicatorRange(j, serieData.GetData(1)))
|
||||
{
|
||||
|
||||
@@ -74,7 +74,7 @@ namespace XCharts
|
||||
//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.runtimeOutsideRadius - serie.runtimeInsideRadius;
|
||||
var ringWidth = serie.context.outsideRadius - serie.context.insideRadius;
|
||||
var dataChanging = false;
|
||||
for (int j = 0; j < data.Count; j++)
|
||||
{
|
||||
@@ -89,7 +89,7 @@ namespace XCharts
|
||||
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 outsideRadius = serie.runtimeOutsideRadius - j * (ringWidth + serie.ringGap);
|
||||
var outsideRadius = serie.context.outsideRadius - j * (ringWidth + serie.ringGap);
|
||||
var insideRadius = outsideRadius - ringWidth;
|
||||
var centerRadius = (outsideRadius + insideRadius) / 2;
|
||||
var borderWidth = itemStyle.borderWidth;
|
||||
@@ -102,11 +102,11 @@ namespace XCharts
|
||||
serieData.runtimePieOutsideRadius = outsideRadius;
|
||||
if (itemStyle.backgroundColor.a != 0)
|
||||
{
|
||||
UGL.DrawDoughnut(vh, serie.runtimeCenterPos, insideRadius, outsideRadius, itemStyle.backgroundColor,
|
||||
UGL.DrawDoughnut(vh, serie.context.center, insideRadius, outsideRadius, itemStyle.backgroundColor,
|
||||
itemStyle.backgroundColor, Color.clear, 0, 360, borderWidth, borderColor, 0,
|
||||
chart.settings.cicleSmoothness, false, serie.clockwise);
|
||||
}
|
||||
UGL.DrawDoughnut(vh, serie.runtimeCenterPos, insideRadius, outsideRadius, itemColor, itemToColor,
|
||||
UGL.DrawDoughnut(vh, serie.context.center, insideRadius, outsideRadius, itemColor, itemToColor,
|
||||
Color.clear, startDegree, toDegree, borderWidth, borderColor, 0, chart.settings.cicleSmoothness,
|
||||
roundCap, serie.clockwise);
|
||||
DrawCenter(vh, serie, serieData, insideRadius, j == data.Count - 1);
|
||||
@@ -189,7 +189,7 @@ namespace XCharts
|
||||
{
|
||||
var radius = insideRadius - itemStyle.centerGap;
|
||||
var smoothness = chart.settings.cicleSmoothness;
|
||||
UGL.DrawCricle(vh, serie.runtimeCenterPos, radius, itemStyle.centerColor, smoothness);
|
||||
UGL.DrawCricle(vh, serie.context.center, radius, itemStyle.centerColor, smoothness);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -201,20 +201,20 @@ namespace XCharts
|
||||
switch (serie.label.position)
|
||||
{
|
||||
case LabelStyle.Position.Center:
|
||||
serieData.labelPosition = serie.runtimeCenterPos + serie.label.offset;
|
||||
serieData.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.runtimeCenterPos + new Vector3(px1 + xDiff, py1);
|
||||
serieData.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.runtimeCenterPos + new Vector3(px2, py2);
|
||||
serieData.labelPosition = serie.context.center + new Vector3(px2, py2);
|
||||
break;
|
||||
}
|
||||
serieData.labelObject.SetLabelPosition(serieData.labelPosition);
|
||||
@@ -229,12 +229,12 @@ namespace XCharts
|
||||
var centerRadius = (outsideRadius + insideRadius) / 2;
|
||||
var inradius = centerRadius - itemStyle.backgroundWidth / 2;
|
||||
var outradius = centerRadius + itemStyle.backgroundWidth / 2;
|
||||
UGL.DrawDoughnut(vh, serie.runtimeCenterPos, inradius,
|
||||
UGL.DrawDoughnut(vh, serie.context.center, inradius,
|
||||
outradius, backgroundColor, Color.clear, chart.settings.cicleSmoothness);
|
||||
}
|
||||
else
|
||||
{
|
||||
UGL.DrawDoughnut(vh, serie.runtimeCenterPos, insideRadius,
|
||||
UGL.DrawDoughnut(vh, serie.context.center, insideRadius,
|
||||
outsideRadius, backgroundColor, Color.clear, chart.settings.cicleSmoothness);
|
||||
}
|
||||
}
|
||||
@@ -244,10 +244,10 @@ namespace XCharts
|
||||
var itemStyle = SerieHelper.GetItemStyle(serie, serieData);
|
||||
if (itemStyle.show && itemStyle.borderWidth > 0 && !ChartHelper.IsClearColor(itemStyle.borderColor))
|
||||
{
|
||||
UGL.DrawDoughnut(vh, serie.runtimeCenterPos, outsideRadius,
|
||||
UGL.DrawDoughnut(vh, serie.context.center, outsideRadius,
|
||||
outsideRadius + itemStyle.borderWidth, itemStyle.borderColor,
|
||||
Color.clear, chart.settings.cicleSmoothness);
|
||||
UGL.DrawDoughnut(vh, serie.runtimeCenterPos, insideRadius,
|
||||
UGL.DrawDoughnut(vh, serie.context.center, insideRadius,
|
||||
insideRadius + itemStyle.borderWidth, itemStyle.borderColor,
|
||||
Color.clear, chart.settings.cicleSmoothness);
|
||||
}
|
||||
@@ -273,9 +273,9 @@ namespace XCharts
|
||||
private int GetRingIndex(Serie serie, Vector2 local)
|
||||
{
|
||||
if (!(serie is Ring)) return -1;
|
||||
var dist = Vector2.Distance(local, serie.runtimeCenterPos);
|
||||
if (dist > serie.runtimeOutsideRadius) return -1;
|
||||
Vector2 dir = local - new Vector2(serie.runtimeCenterPos.x, serie.runtimeCenterPos.y);
|
||||
var dist = Vector2.Distance(local, serie.context.center);
|
||||
if (dist > serie.context.outsideRadius) return -1;
|
||||
Vector2 dir = local - new Vector2(serie.context.center.x, serie.context.center.y);
|
||||
float angle = VectorAngle(Vector2.up, dir);
|
||||
for (int i = 0; i < serie.data.Count; i++)
|
||||
{
|
||||
|
||||
@@ -186,7 +186,7 @@ namespace XCharts
|
||||
if (!grid.Contains(pos))
|
||||
continue;
|
||||
|
||||
serie.dataPoints.Add(pos);
|
||||
serie.context.dataPoints.Add(pos);
|
||||
serieData.runtimePosition = pos;
|
||||
var datas = serieData.data;
|
||||
float symbolSize = 0;
|
||||
@@ -291,7 +291,7 @@ namespace XCharts
|
||||
var xDataHig = axis.context.height / 2;
|
||||
pos = new Vector3(axis.context.x + xDataHig, axis.context.y + yDataHig);
|
||||
}
|
||||
serie.dataPoints.Add(pos);
|
||||
serie.context.dataPoints.Add(pos);
|
||||
serieData.runtimePosition = pos;
|
||||
|
||||
var datas = serieData.data;
|
||||
|
||||
@@ -259,7 +259,6 @@ namespace XCharts
|
||||
[SerializeField] private float m_Top;
|
||||
[SerializeField] private float m_Bottom;
|
||||
[SerializeField] private bool m_InsertDataToHead;
|
||||
|
||||
[SerializeField] private List<SerieData> m_Data = new List<SerieData>();
|
||||
|
||||
[NonSerialized] internal int m_FilterStart;
|
||||
@@ -269,11 +268,6 @@ namespace XCharts
|
||||
[NonSerialized] internal int m_FilterMinShow;
|
||||
[NonSerialized] internal bool m_NeedUpdateFilterData;
|
||||
[NonSerialized] public List<SerieData> m_FilterData = new List<SerieData>();
|
||||
[NonSerialized] internal List<SerieData> m_SortedData = new List<SerieData>();
|
||||
[NonSerialized] private Dictionary<int, List<Vector3>> m_UpSmoothPoints = new Dictionary<int, List<Vector3>>();
|
||||
[NonSerialized] private Dictionary<int, List<Vector3>> m_DownSmoothPoints = new Dictionary<int, List<Vector3>>();
|
||||
[NonSerialized] private List<Vector3> m_DataPoints = new List<Vector3>();
|
||||
[NonSerialized] private List<bool> m_DataIgnore = new List<bool>();
|
||||
[NonSerialized] private bool m_NameDirty;
|
||||
|
||||
/// <summary>
|
||||
@@ -993,38 +987,6 @@ namespace XCharts
|
||||
/// 数据项个数。
|
||||
/// </summary>
|
||||
public int dataCount { get { return m_Data.Count; } }
|
||||
/// <summary>
|
||||
/// 数据项位置坐标。
|
||||
/// </summary>
|
||||
public List<Vector3> dataPoints { get { return m_DataPoints; } }
|
||||
public List<bool> dataIgnore { get { return m_DataIgnore; } }
|
||||
/// <summary>
|
||||
/// 饼图的中心点位置。
|
||||
/// </summary>
|
||||
public Vector3 runtimeCenterPos { get; internal set; }
|
||||
/// <summary>
|
||||
/// 饼图的内径
|
||||
/// </summary>
|
||||
public float runtimeInsideRadius { get; internal set; }
|
||||
/// <summary>
|
||||
/// 饼图的外径
|
||||
/// </summary>
|
||||
public float runtimeOutsideRadius { get; internal set; }
|
||||
/// <summary>
|
||||
/// 运行时的最大数据值
|
||||
/// </summary>
|
||||
public double runtimeDataMax { get; internal set; }
|
||||
/// <summary>
|
||||
/// 运行时的最小数据值
|
||||
/// </summary>
|
||||
public double runtimeDataMin { get; internal set; }
|
||||
public double runtimeCheckValue { get; set; }
|
||||
public float runtimeX { get; internal set; }
|
||||
public float runtimeY { get; internal set; }
|
||||
public float runtimeWidth { get; internal set; }
|
||||
public float runtimeHeight { get; internal set; }
|
||||
public Rect runtimeRect { get; internal set; }
|
||||
public List<SerieData> runtimeSortedData { get { return m_SortedData; } }
|
||||
public bool nameDirty { get { return m_NameDirty; } }
|
||||
public bool labelDirty { get; set; }
|
||||
public bool titleDirty { get; set; }
|
||||
@@ -1043,45 +1005,6 @@ namespace XCharts
|
||||
{
|
||||
base.ClearDirty();
|
||||
}
|
||||
internal List<Vector3> GetUpSmoothList(int dataIndex, int size = 100)
|
||||
{
|
||||
if (m_UpSmoothPoints.ContainsKey(dataIndex))
|
||||
{
|
||||
return m_UpSmoothPoints[dataIndex];
|
||||
}
|
||||
else
|
||||
{
|
||||
var list = ListPool<Vector3>.Get();
|
||||
m_UpSmoothPoints[dataIndex] = list;
|
||||
return list;
|
||||
}
|
||||
}
|
||||
|
||||
internal List<Vector3> GetDownSmoothList(int dataIndex, int size = 100)
|
||||
{
|
||||
if (m_DownSmoothPoints.ContainsKey(dataIndex))
|
||||
{
|
||||
return m_DownSmoothPoints[dataIndex];
|
||||
}
|
||||
else
|
||||
{
|
||||
var list = ListPool<Vector3>.Get();
|
||||
m_DownSmoothPoints[dataIndex] = list;
|
||||
return list;
|
||||
}
|
||||
}
|
||||
|
||||
internal void ClearSmoothList(int dataIndex)
|
||||
{
|
||||
if (m_UpSmoothPoints.ContainsKey(dataIndex))
|
||||
{
|
||||
m_UpSmoothPoints[dataIndex].Clear();
|
||||
}
|
||||
if (m_DownSmoothPoints.ContainsKey(dataIndex))
|
||||
{
|
||||
m_DownSmoothPoints[dataIndex].Clear();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 维度Y对应数据中最大值。
|
||||
@@ -1226,16 +1149,6 @@ namespace XCharts
|
||||
{
|
||||
SerieLabelPool.Release(serieData.labelObject.gameObject);
|
||||
}
|
||||
if (m_UpSmoothPoints.ContainsKey(serieData.index))
|
||||
{
|
||||
ListPool<Vector3>.Release(m_UpSmoothPoints[serieData.index]);
|
||||
m_UpSmoothPoints.Remove(serieData.index);
|
||||
}
|
||||
if (m_DownSmoothPoints.ContainsKey(serieData.index))
|
||||
{
|
||||
ListPool<Vector3>.Release(m_DownSmoothPoints[serieData.index]);
|
||||
m_DownSmoothPoints.Remove(serieData.index);
|
||||
}
|
||||
m_Data.RemoveAt(index);
|
||||
m_NeedUpdateFilterData = true;
|
||||
labelDirty = true;
|
||||
@@ -1571,7 +1484,7 @@ namespace XCharts
|
||||
}
|
||||
else
|
||||
{
|
||||
return runtimeSortedData.Count > 0 ? runtimeSortedData : m_Data;
|
||||
return context.sortedData.Count > 0 ? context.sortedData : m_Data;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1704,9 +1617,9 @@ namespace XCharts
|
||||
|
||||
public bool IsIgnorePoint(int index)
|
||||
{
|
||||
if (index >= 0 && index < dataPoints.Count)
|
||||
if (index >= 0 && index < dataCount)
|
||||
{
|
||||
return ChartHelper.IsIngore(dataPoints[index]);
|
||||
return ChartHelper.IsIngore(data[index].runtimePosition);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -37,9 +37,70 @@ namespace XCharts
|
||||
/// </summary>
|
||||
public List<int> pointerAxisDataIndexs = new List<int>();
|
||||
|
||||
public int vertCount;
|
||||
|
||||
/// <summary>
|
||||
/// 中心点
|
||||
/// </summary>
|
||||
public Vector3 center { get; internal set; }
|
||||
/// <summary>
|
||||
/// 内半径
|
||||
/// </summary>
|
||||
public float insideRadius { get; internal set; }
|
||||
/// <summary>
|
||||
/// 外半径
|
||||
/// </summary>
|
||||
public float outsideRadius { get; internal set; }
|
||||
/// <summary>
|
||||
/// 最大值
|
||||
/// </summary>
|
||||
public double dataMax { get; internal set; }
|
||||
/// <summary>
|
||||
/// 最小值
|
||||
/// </summary>
|
||||
public double dataMin { get; internal set; }
|
||||
public double checkValue { get; set; }
|
||||
/// <summary>
|
||||
/// 左下角坐标X
|
||||
/// </summary>
|
||||
public float x { get; internal set; }
|
||||
/// <summary>
|
||||
/// 左下角坐标Y
|
||||
/// </summary>
|
||||
public float y { get; internal set; }
|
||||
/// <summary>
|
||||
/// 宽
|
||||
/// </summary>
|
||||
public float width { get; internal set; }
|
||||
/// <summary>
|
||||
/// 高
|
||||
/// </summary>
|
||||
public float height { get; internal set; }
|
||||
/// <summary>
|
||||
/// 矩形区域
|
||||
/// </summary>
|
||||
public Rect rect { get; internal set; }
|
||||
/// <summary>
|
||||
/// 绘制顶点数
|
||||
/// </summary>
|
||||
public int vertCount { get; internal set; }
|
||||
/// <summary>
|
||||
/// 数据对应的位置坐标。
|
||||
/// </summary>
|
||||
public List<Vector3> dataPoints = new List<Vector3>();
|
||||
/// <summary>
|
||||
/// 数据对应的位置坐标是否忽略(忽略时连线是透明的),dataIgnore 和 dataPoints 一一对应。
|
||||
/// </summary>
|
||||
public List<bool> dataIgnore = new List<bool>();
|
||||
/// <summary>
|
||||
/// 排序后的数据
|
||||
/// </summary>
|
||||
public List<SerieData> sortedData = new List<SerieData>();
|
||||
/// <summary>
|
||||
/// theme的颜色索引
|
||||
/// </summary>
|
||||
internal int colorIndex;
|
||||
/// <summary>
|
||||
/// 绘制点
|
||||
/// </summary>
|
||||
internal List<PointInfo> drawPoints = new List<PointInfo>();
|
||||
}
|
||||
}
|
||||
@@ -203,7 +203,7 @@ namespace XCharts
|
||||
txt.SetLocalEulerAngles(Vector2.zero);
|
||||
txt.SetActive(serie.titleStyle.show);
|
||||
serie.titleStyle.runtimeText = txt;
|
||||
serie.titleStyle.UpdatePosition(serie.runtimeCenterPos);
|
||||
serie.titleStyle.UpdatePosition(serie.context.center);
|
||||
var serieData = serie.GetSerieData(0);
|
||||
if (serieData != null)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user