3.0 - bar chart

This commit is contained in:
monitor1394
2022-01-13 21:45:59 +08:00
parent 0282dae582
commit c9addaf02c
22 changed files with 195 additions and 106 deletions

View File

@@ -38,6 +38,7 @@ namespace XCharts.Editor
PropertyField("m_Large");
PropertyField("m_LargeThreshold");
PropertyField("m_Clip");
PropertyField("m_PlaceHolder");
});
PropertyField("m_ItemStyle");
PropertyField("m_Animation");

View File

@@ -160,6 +160,8 @@ namespace XCharts.Editor
{
editor.serie.AddExtraComponent(type);
RefreshEditors();
chart.RefreshAllComponent();
EditorUtility.SetDirty(chart);
}, size == 0));
}
foreach (var type in attribute.types)
@@ -169,6 +171,8 @@ namespace XCharts.Editor
{
editor.serie.RemoveExtraComponent(type);
RefreshEditors();
chart.RefreshAllComponent();
EditorUtility.SetDirty(chart);
}, size > 0));
}
}

View File

@@ -3,8 +3,9 @@
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
@@ -134,7 +135,7 @@ MonoBehaviour:
m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
m_TextColor: {r: 0, g: 0, b: 0, a: 1}
m_TextBackgroundColor: {r: 1, g: 1, b: 1, a: 1}
m_FontSize: 22
m_FontSize: 20
m_LineType: 0
m_LineWidth: 0.8
m_LineColor:

View File

@@ -1,5 +1,4 @@

using UnityEngine;
using UnityEngine;
using System.Collections.Generic;
using System;
using UnityEngine.UI;
@@ -113,7 +112,7 @@ namespace XCharts
/// </summary>
public virtual void ClearData()
{
foreach(var serie in m_Series)
foreach (var serie in m_Series)
serie.ClearData();
foreach (var component in m_Components)
component.ClearData();
@@ -214,6 +213,8 @@ namespace XCharts
Debug.LogError("UpdateTheme: not support switch to Custom theme.");
return false;
}
if (m_Theme.sharedTheme == null)
m_Theme.sharedTheme = XCThemeMgr.GetTheme(ThemeType.Default);
m_Theme.sharedTheme.CopyTheme(theme);
return true;
}

View File

@@ -488,17 +488,46 @@ namespace XCharts
}
}
public static float GetAxisPosition(GridCoord grid, Axis axis, float scaleWidth, double value)
/// <summary>
/// 获得数值value在坐标轴上的坐标位置
/// </summary>
/// <param name="grid"></param>
/// <param name="axis"></param>
/// <param name="scaleWidth"></param>
/// <param name="value"></param>
/// <returns></returns>
public static float GetAxisValuePosition(GridCoord grid, Axis axis, float scaleWidth, double value)
{
return GetAxisPositionInternal(grid, axis, scaleWidth, value, true);
return GetAxisPositionInternal(grid, axis, scaleWidth, value, true, false);
}
/// <summary>
/// 获得数值value在坐标轴上相对起点的距离
/// </summary>
/// <param name="grid"></param>
/// <param name="axis"></param>
/// <param name="scaleWidth"></param>
/// <param name="value"></param>
/// <returns></returns>
public static float GetAxisValueDistance(GridCoord grid, Axis axis, float scaleWidth, double value)
{
return GetAxisPositionInternal(grid, axis, scaleWidth, value, false, false);
}
/// <summary>
/// 获得数值value在坐标轴上对于的长度
/// </summary>
/// <param name="grid"></param>
/// <param name="axis"></param>
/// <param name="scaleWidth"></param>
/// <param name="value"></param>
/// <returns></returns>
public static float GetAxisValueLength(GridCoord grid, Axis axis, float scaleWidth, double value)
{
return GetAxisPositionInternal(grid, axis, scaleWidth, value, false);
return GetAxisPositionInternal(grid, axis, scaleWidth, value, false, true);
}
private static float GetAxisPositionInternal(GridCoord grid, Axis axis, float scaleWidth, double value, bool includeGridXY)
private static float GetAxisPositionInternal(GridCoord grid, Axis axis, float scaleWidth, double value, bool includeGridXY, bool realLength)
{
var isY = axis is YAxis;
var gridHeight = isY ? grid.context.height : grid.context.width;
@@ -521,8 +550,14 @@ namespace XCharts
}
else
{
var yDataHig = (axis.context.minMaxRange == 0) ? 0f :
(float)((value - axis.context.minValue) / axis.context.minMaxRange * gridHeight);
var yDataHig = 0f;
if (axis.context.minMaxRange != 0)
{
if (!realLength || (realLength && axis.context.minValue > 0))
yDataHig = (float)((value - axis.context.minValue) / axis.context.minMaxRange * gridHeight);
else
yDataHig = (float)(value / axis.context.minMaxRange * gridHeight);
}
return includeGridXY
? gridXY + yDataHig
: yDataHig;

View File

@@ -22,10 +22,19 @@ namespace XCharts
tooltip.numericFormatter, null, chart);
}
}
for (int i = tooltip.context.data.param.Count - 1; i >= 0; i--)
{
var param = tooltip.context.data.param[i];
if (TooltipHelper.IsIgnoreItemFormatter(param.itemFormatter))
{
tooltip.context.data.param.RemoveAt(i);
}
}
foreach (var param in tooltip.context.data.param)
{
if (!string.IsNullOrEmpty(param.itemFormatter))
{
param.columns.Clear();
var content = param.itemFormatter;
FormatterHelper.ReplaceSerieLabelContent(ref content,
param.numericFormatter,
@@ -35,9 +44,6 @@ namespace XCharts
param.category,
param.serieData.name,
param.color);
param.columns.Clear();
foreach (var item in content.Split('|'))
{
param.columns.Add(item);
@@ -46,6 +52,11 @@ namespace XCharts
}
}
public static bool IsIgnoreItemFormatter(string itemFormatter)
{
return "-".Equals(itemFormatter);
}
public static void LimitInRect(Tooltip tooltip, Rect chartRect)
{
if (tooltip.view == null)

View File

@@ -76,8 +76,12 @@ namespace XCharts
{
var item = GetItem(i);
var param = data.param[i];
if (param.columns.Count <= 0)
{
item.gameObject.SetActive(false);
continue;
}
item.gameObject.SetActive(true);
for (int j = 0; j < param.columns.Count; j++)
{
var column = GetItemColumn(item, j);
@@ -135,7 +139,7 @@ namespace XCharts
}
else
{
if (!string.IsNullOrEmpty(title.text.text))
if (!string.IsNullOrEmpty(title.GetText()))
maxHig += tooltip.titleHeight;
maxHig += tooltip.itemHeight * tooltip.context.data.param.Count;
maxHig += tooltip.paddingTopBottom * 2;

View File

@@ -24,6 +24,7 @@ namespace XCharts
for (int n = 0; n < series.Count; n++)
{
var serie = series[n];
if (serie.placeHolder) continue;
if (serie.useDataNameForColor)
{
for (int i = 0; i < serie.data.Count; i++)
@@ -52,6 +53,7 @@ namespace XCharts
for (int n = 0; n < chart.series.Count; n++)
{
var serie = chart.series[n];
if (serie.placeHolder) continue;
if (serie.useDataNameForColor)
{
for (int i = 0; i < serie.data.Count; i++)
@@ -81,6 +83,7 @@ namespace XCharts
for (int n = 0; n < series.Count; n++)
{
var serie = series[n];
if (serie.placeHolder) continue;
if (serie.useDataNameForColor)
{
bool found = false;

View File

@@ -788,9 +788,9 @@ namespace XCharts
Debug.LogError("Serie no Handler:" + serie.GetType());
return;
}
var attrubte = serie.GetType().GetAttribute<SerieHandlerAttribute>();
var handler = (SerieHandler)Activator.CreateInstance(attrubte.handler);
handler.attribute = attrubte;
var attribute = serie.GetType().GetAttribute<SerieHandlerAttribute>();
var handler = (SerieHandler)Activator.CreateInstance(attribute.handler);
handler.attribute = attribute;
handler.chart = this;
handler.SetSerie(serie);
serie.handler = handler;

View File

@@ -73,16 +73,5 @@ namespace XCharts
if (handler != null)
handler.RefreshLabelNextFrame();
}
#if UNITY_EDITOR
protected virtual void Reset()
{
}
protected virtual void OnValidate()
{
SetAllDirty();
}
#endif
}
}

View File

@@ -653,8 +653,9 @@ namespace XCharts
count++;
intvalue = (int)(max * Mathf.Pow(10, count));
}
if (max > 0) return 1 / Mathf.Pow(10, count - 1);
else return -1 / Mathf.Pow(10, count);
var pow = Mathf.Pow(10, count);
if (max > 0) return (int)((max * pow + 1)) / pow;
else return (int)((max * pow - 1)) / pow;
}
if (ceilRate == 0)
{
@@ -694,8 +695,9 @@ namespace XCharts
count++;
intvalue = (int)(min * Mathf.Pow(10, count));
}
if (min > 0) return 1 / Mathf.Pow(10, count);
else return -1 / Mathf.Pow(10, count - 1);
var pow = Mathf.Pow(10, count);
if (min > 0) return (int)((min * pow + 1)) / pow;
else return (int)((min * pow - 1)) / pow;
}
if (ceilRate == 0)
{
@@ -797,7 +799,7 @@ namespace XCharts
}
public static Vector3 RotateRound(Vector3 position, Vector3 center, Vector3 axis, float angle)
{

View File

@@ -153,6 +153,7 @@ namespace XCharts
public static bool AddCustomTheme(Theme theme)
{
if (theme == null) return false;
if (Instance == null || Instance.m_CustomThemes == null) return false;
if (!Instance.m_CustomThemes.Contains(theme))
{
Instance.m_CustomThemes.Add(theme);

View File

@@ -14,7 +14,7 @@ namespace XCharts
typeof(LabelStyle),
typeof(IconStyle),
typeof(Emphasis))]
public class Bar : Serie, INeedSerieContainer, ISimplifiedSerie
public class Bar : Serie, INeedSerieContainer
{
public int containerIndex { get; internal set; }
public int containterInstanceId { get; internal set; }

View File

@@ -1,6 +1,5 @@
using System.Collections.Generic;
using System.Text;
using UnityEngine;
using UnityEngine.UI;
using XUGL;
@@ -32,6 +31,21 @@ namespace XCharts
DrawBarSerie(vh, serie, serie.context.colorIndex);
}
public override Vector3 GetSerieDataLabelPosition(SerieData serieData, LabelStyle label)
{
switch (label.position)
{
case LabelStyle.Position.Bottom:
var center = serieData.context.rect.center;
return new Vector3(center.x, center.y - serieData.context.rect.height / 2);
case LabelStyle.Position.Center:
case LabelStyle.Position.Inside:
return serieData.context.rect.center;
default:
return serieData.context.position;
}
}
private void UpdateSerieContext()
{
if (m_SerieGrid == null)
@@ -129,7 +143,6 @@ namespace XCharts
return;
if (m_SerieGrid == null)
return;
var dataZoom = chart.GetDataZoomOfAxis(axis);
var showData = serie.GetDataList(dataZoom);
@@ -137,6 +150,7 @@ namespace XCharts
return;
var axisLength = isY ? m_SerieGrid.context.height : m_SerieGrid.context.width;
var relativedAxisLength = isY ? m_SerieGrid.context.width : m_SerieGrid.context.height;
var axisXY = isY ? m_SerieGrid.context.y : m_SerieGrid.context.x;
var isStack = SeriesHelper.IsStack<Bar>(chart.series, serie.stack);
@@ -200,7 +214,7 @@ namespace XCharts
if (isPercentStack)
{
var valueTotal = chart.GetSerieSameStackTotalValue<Bar>(serie.stack, i);
barHig = valueTotal != 0 ? (float)(relativedValue / valueTotal * axisLength) : 0;
barHig = valueTotal != 0 ? (float)(relativedValue / valueTotal * relativedAxisLength) : 0;
}
else
{
@@ -208,7 +222,6 @@ namespace XCharts
}
float currHig = AnimationStyleHelper.CheckDataAnimation(chart, serie, i, barHig);
Vector3 plb, plt, prt, prb, top;
UpdateRectPosition(m_SerieGrid, isY, relativedValue, pX, pY, space, borderWidth, barWidth, currHig,
out plb, out plt, out prt, out prb, out top);
@@ -216,25 +229,24 @@ namespace XCharts
serieData.context.position = top;
serieData.context.rect = Rect.MinMaxRect(plb.x, plb.y, prb.x, prt.y);
serie.context.dataPoints.Add(top);
if (serie.show && currHig != 0)
if (serie.show && currHig != 0 && !serie.placeHolder)
{
switch (serie.barType)
{
case BarType.Normal:
DrawNormalBar(vh, serie, serieData, itemStyle, colorIndex, highlight, space, barWidth,
pX, pY, plb, plt, prt, prb, false, m_SerieGrid, areaColor, areaToColor);
pX, pY, plb, plt, prt, prb, isY, m_SerieGrid, axis, areaColor, areaToColor);
break;
case BarType.Zebra:
DrawZebraBar(vh, serie, serieData, itemStyle, colorIndex, highlight, space, barWidth,
pX, pY, plb, plt, prt, prb, false, m_SerieGrid, areaColor, areaToColor);
pX, pY, plb, plt, prt, prb, isY, m_SerieGrid, axis, areaColor, areaToColor);
break;
case BarType.Capsule:
DrawCapsuleBar(vh, serie, serieData, itemStyle, colorIndex, highlight, space, barWidth,
pX, pY, plb, plt, prt, prb, false, m_SerieGrid, areaColor, areaToColor);
pX, pY, plb, plt, prt, prb, isY, m_SerieGrid, axis, areaColor, areaToColor);
break;
}
}
if (serie.animation.CheckDetailBreak(top, isY))
{
break;
@@ -265,7 +277,7 @@ namespace XCharts
if (axis.context.minMaxRange <= 0) pY = grid.context.y;
else pY = grid.context.y + (float)((value - axis.context.minValue) / axis.context.minMaxRange) * (grid.context.height - barWidth);
}
pX = AxisHelper.GetAxisPosition(grid, relativedAxis, categoryWidth, 0);
pX = AxisHelper.GetAxisValuePosition(grid, relativedAxis, categoryWidth, 0);
if (isStack)
{
for (int n = 0; n < m_StackSerieData.Count - 1; n++)
@@ -283,7 +295,7 @@ namespace XCharts
if (axis.context.minMaxRange <= 0) pX = grid.context.x;
else pX = grid.context.x + (float)((value - axis.context.minValue) / axis.context.minMaxRange) * (grid.context.width - barWidth);
}
pY = AxisHelper.GetAxisPosition(grid, relativedAxis, categoryWidth, 0);
pY = AxisHelper.GetAxisValuePosition(grid, relativedAxis, categoryWidth, 0);
if (isStack)
{
for (int n = 0; n < m_StackSerieData.Count - 1; n++)
@@ -319,8 +331,8 @@ namespace XCharts
if (yValue < 0)
{
plb = new Vector3(pX + space + borderWidth, pY - borderWidth);
plt = new Vector3(pX + space + borderWidth, pY + currHig + borderWidth);
prt = new Vector3(pX + space + barWidth - borderWidth, pY + currHig + borderWidth);
plt = new Vector3(pX + space + borderWidth, pY + currHig - borderWidth);
prt = new Vector3(pX + space + barWidth - borderWidth, pY + currHig - borderWidth);
prb = new Vector3(pX + space + barWidth - borderWidth, pY - borderWidth);
}
else
@@ -344,10 +356,9 @@ namespace XCharts
private void DrawNormalBar(VertexHelper vh, Serie serie, SerieData serieData, ItemStyle itemStyle, int colorIndex,
bool highlight, float space, float barWidth, float pX, float pY, Vector3 plb, Vector3 plt, Vector3 prt,
Vector3 prb, bool isYAxis, GridCoord grid, Color32 areaColor, Color32 areaToColor)
Vector3 prb, bool isYAxis, GridCoord grid, Axis axis, Color32 areaColor, Color32 areaToColor)
{
DrawBarBackground(vh, serie, serieData, itemStyle, colorIndex, highlight, pX, pY, space, barWidth, isYAxis, grid);
DrawBarBackground(vh, serie, serieData, itemStyle, colorIndex, highlight, pX, pY, space, barWidth, isYAxis, grid, axis);
var borderWidth = itemStyle.runtimeBorderWidth;
if (isYAxis)
{
@@ -410,9 +421,9 @@ namespace XCharts
private void DrawZebraBar(VertexHelper vh, Serie serie, SerieData serieData, ItemStyle itemStyle, int colorIndex,
bool highlight, float space, float barWidth, float pX, float pY, Vector3 plb, Vector3 plt, Vector3 prt,
Vector3 prb, bool isYAxis, GridCoord grid, Color32 barColor, Color32 barToColor)
Vector3 prb, bool isYAxis, GridCoord grid, Axis axis, Color32 barColor, Color32 barToColor)
{
DrawBarBackground(vh, serie, serieData, itemStyle, colorIndex, highlight, pX, pY, space, barWidth, isYAxis, grid);
DrawBarBackground(vh, serie, serieData, itemStyle, colorIndex, highlight, pX, pY, space, barWidth, isYAxis, grid, axis);
if (isYAxis)
{
plt = (plb + plt) / 2;
@@ -431,9 +442,9 @@ namespace XCharts
private void DrawCapsuleBar(VertexHelper vh, Serie serie, SerieData serieData, ItemStyle itemStyle, int colorIndex,
bool highlight, float space, float barWidth, float pX, float pY, Vector3 plb, Vector3 plt, Vector3 prt,
Vector3 prb, bool isYAxis, GridCoord grid, Color32 areaColor, Color32 areaToColor)
Vector3 prb, bool isYAxis, GridCoord grid, Axis axis, Color32 areaColor, Color32 areaToColor)
{
DrawBarBackground(vh, serie, serieData, itemStyle, colorIndex, highlight, pX, pY, space, barWidth, isYAxis, grid);
DrawBarBackground(vh, serie, serieData, itemStyle, colorIndex, highlight, pX, pY, space, barWidth, isYAxis, grid, axis);
var borderWidth = itemStyle.runtimeBorderWidth;
var radius = barWidth / 2 - borderWidth;
var isGradient = !ChartHelper.IsValueEqualsColor(areaColor, areaToColor);
@@ -548,13 +559,13 @@ namespace XCharts
}
private void DrawBarBackground(VertexHelper vh, Serie serie, SerieData serieData, ItemStyle itemStyle,
int colorIndex, bool highlight, float pX, float pY, float space, float barWidth, bool isYAxis, GridCoord grid)
int colorIndex, bool highlight, float pX, float pY, float space, float barWidth, bool isYAxis,
GridCoord grid, Axis axis)
{
var color = SerieHelper.GetItemBackgroundColor(serie, serieData, chart.theme, colorIndex, highlight, false);
if (ChartHelper.IsClearColor(color)) return;
if (isYAxis)
{
var axis = chart.GetChartComponent<YAxis>(serie.yAxisIndex);
var axisWidth = axis.axisLine.GetWidth(chart.theme.axis.lineWidth);
Vector3 plt = new Vector3(grid.context.x + axisWidth, pY + space + barWidth);
Vector3 prt = new Vector3(grid.context.x + axisWidth + grid.context.width, pY + space + barWidth);
@@ -595,7 +606,6 @@ namespace XCharts
}
else
{
var axis = chart.GetChartComponent<XAxis>(serie.xAxisIndex);
var axisWidth = axis.axisLine.GetWidth(chart.theme.axis.lineWidth);
Vector3 plb = new Vector3(pX + space, grid.context.y + axisWidth);
Vector3 plt = new Vector3(pX + space, grid.context.y + grid.context.height + axisWidth);

View File

@@ -190,7 +190,7 @@ namespace XCharts
var pY = 0f;
UpdateXYPosition(m_SerieGrid, isY, axis, relativedAxis, i, categoryWidth, barWidth, value, ref pX, ref pY);
var barHig = AxisHelper.GetAxisValueLength(m_SerieGrid, relativedAxis, categoryWidth, relativedValue);
var barHig = AxisHelper.GetAxisValueDistance(m_SerieGrid, relativedAxis, categoryWidth, relativedValue);
var currHig = AnimationStyleHelper.CheckDataAnimation(chart, serie, i, barHig);
Vector3 plb, plt, prt, prb, top;
@@ -233,7 +233,7 @@ namespace XCharts
if (axis.context.minMaxRange <= 0) pY = grid.context.y;
else pY = grid.context.y + (float)((value - axis.context.minValue) / axis.context.minMaxRange) * (grid.context.height - barWidth);
}
pX = AxisHelper.GetAxisPosition(grid, relativedAxis, categoryWidth, 0);
pX = AxisHelper.GetAxisValuePosition(grid, relativedAxis, categoryWidth, 0);
}
else
{
@@ -246,7 +246,7 @@ namespace XCharts
if (axis.context.minMaxRange <= 0) pX = grid.context.x;
else pX = grid.context.x + (float)((value - axis.context.minValue) / axis.context.minMaxRange) * (grid.context.width - barWidth);
}
pY = AxisHelper.GetAxisPosition(grid, relativedAxis, categoryWidth, 0);
pY = AxisHelper.GetAxisValuePosition(grid, relativedAxis, categoryWidth, 0);
}
}

View File

@@ -74,7 +74,7 @@ namespace XCharts
public bool TryGetValue(ref float value, ref bool interacting, float animationDuration = 250)
{
if (!m_ValueEnable || m_PreviousValue == 0)
if (!IsValueEnable() || m_PreviousValue == 0)
return false;
if (m_UpdateFlag)
{
@@ -99,7 +99,7 @@ namespace XCharts
public bool TryGetColor(ref Color32 color, ref bool interacting, float animationDuration = 250)
{
if (!m_ValueEnable)
if (!IsValueEnable())
return false;
if (m_UpdateFlag)
{
@@ -124,7 +124,7 @@ namespace XCharts
public bool TryGetColor(ref Color32 color, ref Color32 toColor, ref bool interacting, float animationDuration = 250)
{
if (!m_ValueEnable)
if (!IsValueEnable())
return false;
if (m_UpdateFlag)
{
@@ -150,7 +150,7 @@ namespace XCharts
}
public bool TryGetValueAndColor(ref float value, ref Color32 color, ref Color32 toColor, ref bool interacting, float animationDuration = 250)
{
if (!m_ValueEnable)
if (!IsValueEnable())
return false;
if (m_UpdateFlag)
{
@@ -181,5 +181,14 @@ namespace XCharts
{
m_ValueEnable = false;
}
private bool IsValueEnable()
{
#if UNITY_EDITOR
if (!Application.isPlaying)
return false;
#endif
return m_ValueEnable;
}
}
}

View File

@@ -231,7 +231,6 @@ namespace XCharts
var symbolEmptyColor = SerieHelper.GetItemBackgroundColor(serie, serieData, theme, serie.index, highlight, false);
var symbolBorder = SerieHelper.GetSymbolBorder(serie, serieData, theme, highlight);
var cornerRadius = SerieHelper.GetSymbolCornerRadius(serie, serieData, highlight);
chart.DrawClipSymbol(vh, symbol.type, symbolSize, symbolBorder, pos,
symbolColor, symbolToColor, symbolEmptyColor, symbol.gap, clip, cornerRadius, m_SerieGrid,
i > 0 ? serie.context.dataPoints[i - 1] : m_SerieGrid.context.position);
@@ -410,14 +409,14 @@ namespace XCharts
{
float xPos, yPos;
var gridXY = isY ? grid.context.x : grid.context.y;
var valueHig = 0f;
if (isY)
{
var valueHig = AxisHelper.GetAxisValueLength(grid, relativedAxis, scaleWid, yValue);
valueHig = AxisHelper.GetAxisValueDistance(grid, relativedAxis, scaleWid, yValue);
valueHig = AnimationStyleHelper.CheckDataAnimation(chart, serie, i, valueHig);
xPos = gridXY + valueHig;
yPos = AxisHelper.GetAxisPosition(grid, axis, scaleWid, xValue);
yPos = AxisHelper.GetAxisValuePosition(grid, axis, scaleWid, xValue);
if (isStack)
{
@@ -428,11 +427,11 @@ namespace XCharts
else
{
var valueHig = AxisHelper.GetAxisValueLength(grid, relativedAxis, scaleWid, yValue);
valueHig = AxisHelper.GetAxisValueDistance(grid, relativedAxis, scaleWid, yValue);
valueHig = AnimationStyleHelper.CheckDataAnimation(chart, serie, i, valueHig);
yPos = gridXY + valueHig;
xPos = AxisHelper.GetAxisPosition(grid, axis, scaleWid, xValue);
xPos = AxisHelper.GetAxisValuePosition(grid, axis, scaleWid, xValue);
if (isStack)
{
@@ -441,7 +440,7 @@ namespace XCharts
}
}
np = new Vector3(xPos, yPos);
return yPos;
return valueHig;
}
}
}

View File

@@ -259,20 +259,20 @@ namespace XCharts
if (isY)
{
var valueHig = AxisHelper.GetAxisValueLength(grid, relativedAxis, scaleWid, yValue);
var valueHig = AxisHelper.GetAxisValueDistance(grid, relativedAxis, scaleWid, yValue);
valueHig = AnimationStyleHelper.CheckDataAnimation(chart, serie, i, valueHig);
xPos = gridXY + valueHig;
yPos = AxisHelper.GetAxisPosition(grid, axis, scaleWid, xValue);
yPos = AxisHelper.GetAxisValuePosition(grid, axis, scaleWid, xValue);
}
else
{
var valueHig = AxisHelper.GetAxisValueLength(grid, relativedAxis, scaleWid, yValue);
var valueHig = AxisHelper.GetAxisValueDistance(grid, relativedAxis, scaleWid, yValue);
valueHig = AnimationStyleHelper.CheckDataAnimation(chart, serie, i, valueHig);
yPos = gridXY + valueHig;
xPos = AxisHelper.GetAxisPosition(grid, axis, scaleWid, xValue);
xPos = AxisHelper.GetAxisValuePosition(grid, axis, scaleWid, xValue);
}
np = new Vector3(xPos, yPos);
return yPos;

View File

@@ -220,6 +220,7 @@ namespace XCharts
[SerializeField] private int m_LargeThreshold = 200;
[SerializeField] private bool m_AvoidLabelOverlap = false;
[SerializeField] private RadarType m_RadarType = RadarType.Multiple;
[SerializeField] private bool m_PlaceHolder = false;
[SerializeField] private SerieDataSortType m_DataSortType = SerieDataSortType.Descending;
[SerializeField] private Orient m_Orient = Orient.Vertical;
@@ -231,16 +232,10 @@ namespace XCharts
[SerializeField] private bool m_InsertDataToHead;
[SerializeField] private LineStyle m_LineStyle = new LineStyle();
//[SerializeField] private AreaStyle m_AreaStyle = AreaStyle.defaultAreaStyle;
[SerializeField] private SymbolStyle m_Symbol = new SymbolStyle();
//[SerializeField] private LabelStyle m_Label = new LabelStyle();
//[SerializeField] private LabelLine m_LabelLine = new LabelLine();
[SerializeField] private AnimationStyle m_Animation = new AnimationStyle();
//[SerializeField] private LineArrow m_LineArrow = new LineArrow();
[SerializeField] private ItemStyle m_ItemStyle = new ItemStyle();
//[SerializeField] private Emphasis m_Emphasis = new Emphasis();
[SerializeField] private TitleStyle m_TitleStyle = new TitleStyle();
//[SerializeField] private IconStyle m_IconStyle = new IconStyle();
[SerializeField] private List<SerieData> m_Data = new List<SerieData>();
[NonSerialized] internal int m_FilterStart;
@@ -861,6 +856,14 @@ namespace XCharts
set { if (PropertyUtil.SetStruct(ref m_Align, value)) SetVerticesDirty(); }
}
/// <summary>
/// 占位模式。占位模式时,数据有效但不参与渲染和显示。
/// </summary>
public bool placeHolder
{
get { return m_PlaceHolder; }
set { if (PropertyUtil.SetStruct(ref m_PlaceHolder, value)) SetAllDirty(); }
}
/// <summary>
/// 系列中的数据内容数组。SerieData可以设置1到n维数据。
/// </summary>
public List<SerieData> data { get { return m_Data; } }

View File

@@ -30,7 +30,9 @@ namespace XCharts
public virtual void OnScroll(PointerEventData eventData) { }
public virtual void RefreshLabelNextFrame() { }
public virtual void RefreshLabelInternal() { }
public virtual void UpdateTooltipSerieParams(int dataIndex, bool showCategory, string category, string marker, string itemFormatter, string numericFormatter, ref List<SerieParams> paramList, ref string title) { }
public virtual void UpdateTooltipSerieParams(int dataIndex, bool showCategory, string category, string marker,
string itemFormatter, string numericFormatter, ref List<SerieParams> paramList, ref string title)
{ }
public virtual void OnLegendButtonClick(int index, string legendName, bool show) { }
public virtual void OnLegendButtonEnter(int index, string legendName) { }
public virtual void OnLegendButtonExit(int index, string legendName) { }
@@ -43,6 +45,7 @@ namespace XCharts
private static readonly string s_SerieTitleObjectName = "serie";
protected GameObject m_SerieRoot;
protected bool m_InitedLabel;
protected bool m_NeedInitComponent;
protected bool m_RefreshLabel;
protected bool m_LastCheckContextFlag = false;
protected bool m_LegendEnter = false;
@@ -54,9 +57,15 @@ namespace XCharts
{
this.serie = (T)serie;
this.serie.context.param.serieType = typeof(T);
m_NeedInitComponent = true;
}
public override void Update()
{
if (m_NeedInitComponent)
{
m_NeedInitComponent = false;
InitComponent();
}
if (m_RefreshLabel)
{
m_RefreshLabel = false;
@@ -99,6 +108,7 @@ namespace XCharts
public override void InitComponent()
{
m_InitedLabel = false;
InitRoot();
InitSerieLabel();
InitSerieTitle();
@@ -138,7 +148,7 @@ namespace XCharts
private void InitRoot()
{
m_InitedLabel = false;
if (m_SerieRoot != null) return;
var objName = s_SerieTitleObjectName + "_" + serie.index;
m_SerieRoot = ChartHelper.AddObject(objName, chart.transform, chart.chartMinAnchor,
chart.chartMaxAnchor, chart.chartPivot, chart.chartSizeDelta);
@@ -151,8 +161,8 @@ namespace XCharts
{
if (m_SerieRoot == null)
InitRoot();
var serieLabelRoot = ChartHelper.AddObject(s_SerieLabelObjectName, m_SerieRoot.transform, chart.chartMinAnchor,
chart.chartMaxAnchor, chart.chartPivot, chart.chartSizeDelta);
var serieLabelRoot = ChartHelper.AddObject(s_SerieLabelObjectName, m_SerieRoot.transform,
chart.chartMinAnchor, chart.chartMaxAnchor, chart.chartPivot, chart.chartSizeDelta);
serieLabelRoot.hideFlags = chart.chartHideFlags;
SerieLabelPool.ReleaseAll(serieLabelRoot.transform);
int count = 0;
@@ -218,7 +228,9 @@ namespace XCharts
if (m_SerieRoot == null)
InitRoot();
var textStyle = serie.titleStyle.textStyle;
var titleColor = ChartHelper.IsClearColor(textStyle.color) ? chart.theme.GetColor(serie.index) : (Color32)textStyle.color;
var titleColor = ChartHelper.IsClearColor(textStyle.color)
? chart.theme.GetColor(serie.index)
: (Color32)textStyle.color;
var anchorMin = new Vector2(0.5f, 0.5f);
var anchorMax = new Vector2(0.5f, 0.5f);
var pivot = new Vector2(0.5f, 0.5f);
@@ -244,20 +256,19 @@ namespace XCharts
{
if (!m_InitedLabel)
return;
var colorIndex = chart.GetLegendRealShowNameIndex(serie.legendName);
var total = serie.yTotal;
foreach (var serieData in serie.data)
{
if (serieData.labelObject == null)
continue;
var serieLabel = SerieHelper.GetSerieLabel(serie, serieData);
var iconStyle = SerieHelper.GetIconStyle(serie, serieData);
var isIgnore = serie.IsIgnoreIndex(serieData.index);
serieData.labelObject.SetPosition(serieData.context.position);
serieData.labelObject.UpdateIcon(iconStyle);
if (serie.show && serieLabel != null && serieLabel.show && serieData.context.canShowLabel && !isIgnore)
if (serie.show && serieLabel != null
&& serieLabel.show && serieData.context.canShowLabel && !isIgnore)
{
var value = serieData.GetData(1);
var content = SerieLabelHelper.GetFormatterContent(serie, serieData, value, total,
@@ -266,9 +277,11 @@ namespace XCharts
&& serie is Line
&& SerieHelper.IsDownPoint(serie, serieData.index)
&& (serie.areaStyle == null || !serie.areaStyle.show);
var labelPosition = GetSerieDataLabelPosition(serieData, serieLabel);
SerieLabelHelper.ResetLabel(serieData.labelObject.label, serieLabel, chart.theme);
serieData.SetLabelActive(!isIgnore);
serieData.labelObject.SetPosition(serieData.context.position + (invert ? -serieLabel.offset : serieLabel.offset));
serieData.labelObject.SetPosition(labelPosition
+ (invert ? -serieLabel.offset : serieLabel.offset));
serieData.labelObject.SetText(content);
}
else
@@ -278,6 +291,11 @@ namespace XCharts
}
}
public virtual Vector3 GetSerieDataLabelPosition(SerieData serieData, LabelStyle label)
{
return serieData.context.position;
}
protected void UpdateCoordSerieParams(ref List<SerieParams> paramList, ref string title,
int dataIndex, bool showCategory, string category, string marker,
string itemFormatter, string numericFormatter)
@@ -292,6 +310,10 @@ namespace XCharts
if (serieData == null)
return;
itemFormatter = SerieHelper.GetItemFormatter(serie, serieData, itemFormatter);
if (TooltipHelper.IsIgnoreItemFormatter(itemFormatter))
return;
var param = serie.context.param;
param.serieName = serie.serieName;
param.serieIndex = serie.index;
@@ -302,7 +324,7 @@ namespace XCharts
param.total = serie.yTotal;
param.color = chart.GetLegendRealShowNameColor(serie.serieName);
param.marker = SerieHelper.GetItemMarker(serie, serieData, marker);
param.itemFormatter = SerieHelper.GetItemFormatter(serie, serieData, itemFormatter);
param.itemFormatter = itemFormatter;
param.numericFormatter = SerieHelper.GetNumericFormatter(serie, serieData, numericFormatter);
param.columns.Clear();
@@ -327,6 +349,10 @@ namespace XCharts
if (serieData == null)
return;
itemFormatter = SerieHelper.GetItemFormatter(serie, serieData, itemFormatter);
if (TooltipHelper.IsIgnoreItemFormatter(itemFormatter))
return;
var param = serie.context.param;
param.serieName = serie.serieName;
param.serieIndex = serie.index;
@@ -337,7 +363,7 @@ namespace XCharts
param.total = SerieHelper.GetMaxData(serie, dimension);
param.color = chart.theme.GetColor(dataIndex);
param.marker = SerieHelper.GetItemMarker(serie, serieData, marker);
param.itemFormatter = SerieHelper.GetItemFormatter(serie, serieData, itemFormatter);
param.itemFormatter = itemFormatter;
param.numericFormatter = SerieHelper.GetNumericFormatter(serie, serieData, numericFormatter); ;
param.columns.Clear();

View File

@@ -104,12 +104,6 @@ namespace XCharts
set
{
m_TMPFont = value;
if(value)
{
m_TMPFontName = value.name;
m_TMPFontInstanceId = value.GetInstanceID();
}
SetComponentDirty();
SyncTMPFontToSubComponent();
}
}
@@ -364,11 +358,7 @@ namespace XCharts
subTitle.tmpFont = tmpFont;
legend.tmpFont = tmpFont;
axis.tmpFont = tmpFont;
radiusAxis.tmpFont = tmpFont;
angleAxis.tmpFont = tmpFont;
polar.tmpFont = tmpFont;
gauge.tmpFont = tmpFont;
radar.tmpFont = tmpFont;
tooltip.tmpFont = tmpFont;
dataZoom.tmpFont = tmpFont;
visualMap.tmpFont = tmpFont;

View File

@@ -155,7 +155,7 @@ namespace XCharts
public void CheckWarning(StringBuilder sb)
{
#if dUI_TextMeshPro
if (m_Profile.tmpFont == null)
if (sharedTheme.tmpFont == null)
{
sb.AppendFormat("warning:theme->tmpFont is null\n");
}