mirror of
https://github.com/XCharts-Team/XCharts.git
synced 2026-05-14 11:40:07 +00:00
增加Animation的Interaction交互动画配置支持
This commit is contained in:
@@ -62,6 +62,7 @@ namespace XCharts.Editor
|
||||
PropertyField(prop, "m_Duration");
|
||||
PropertyField(prop, "m_WidthRate");
|
||||
PropertyField(prop, "m_RadiusRate");
|
||||
PropertyField(prop, "m_Offset");
|
||||
--EditorGUI.indentLevel;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -148,9 +148,6 @@ namespace XCharts.Editor
|
||||
PropertyField(prop, "m_LineWidth");
|
||||
PropertyField(prop, "m_LineSymbolSize");
|
||||
PropertyField(prop, "m_ScatterSymbolSize");
|
||||
PropertyField(prop, "m_SelectedRate");
|
||||
PropertyField(prop, "m_PieTooltipExtraRadius");
|
||||
PropertyField(prop, "m_PieSelectedOffset");
|
||||
PropertyField(prop, "m_CandlestickColor");
|
||||
PropertyField(prop, "m_CandlestickColor0");
|
||||
PropertyField(prop, "m_CandlestickBorderColor");
|
||||
|
||||
@@ -45,8 +45,6 @@ MonoBehaviour:
|
||||
m_LineSegmentDistance: 3
|
||||
m_CicleSmoothness: 2
|
||||
m_VisualMapTriangeLen: 20
|
||||
m_PieTooltipExtraRadius: 8
|
||||
m_PieSelectedOffset: 8
|
||||
m_CustomThemes:
|
||||
- {fileID: 11400000, guid: 289d2fc7f4ce24f73b9ed8ec52639f72, type: 2}
|
||||
- {fileID: 11400000, guid: e1dc23a10de1e4c5dbfbaf74c4dfd218, type: 2}
|
||||
|
||||
@@ -188,9 +188,6 @@ MonoBehaviour:
|
||||
m_LineWidth: 1.8
|
||||
m_LineSymbolSize: 5
|
||||
m_ScatterSymbolSize: 20
|
||||
m_PieTooltipExtraRadius: 8
|
||||
m_SelectedRate: 1.3
|
||||
m_PieSelectedOffset: 8
|
||||
m_CandlestickColor:
|
||||
serializedVersion: 2
|
||||
rgba: 4283846390
|
||||
|
||||
@@ -145,9 +145,6 @@ MonoBehaviour:
|
||||
m_LineWidth: 1.8
|
||||
m_LineSymbolSize: 5
|
||||
m_ScatterSymbolSize: 20
|
||||
m_PieTooltipExtraRadius: 8
|
||||
m_SelectedRate: 1.3
|
||||
m_PieSelectedOffset: 8
|
||||
m_CandlestickColor:
|
||||
serializedVersion: 2
|
||||
rgba: 4283716843
|
||||
|
||||
@@ -413,7 +413,8 @@ namespace XCharts.Runtime
|
||||
public class AnimationInteraction : AnimationInfo
|
||||
{
|
||||
[SerializeField][Since("v3.8.0")] private float m_WidthRate = 1.3f;
|
||||
[SerializeField][Since("v3.8.0")] private float m_RadiusRate = 1.3f;
|
||||
[SerializeField][Since("v3.8.0")] private float m_RadiusRate = 1.1f;
|
||||
[SerializeField][Since("v3.8.0")] private float m_Offset = 8f;
|
||||
|
||||
/// <summary>
|
||||
/// the size rate of the width.
|
||||
@@ -425,5 +426,16 @@ namespace XCharts.Runtime
|
||||
/// |半径的放大倍率。
|
||||
/// </summary>
|
||||
public float radiusRate { get { return m_RadiusRate; } set { m_RadiusRate = value; } }
|
||||
/// <summary>
|
||||
/// the offset when interaction. Such as the offset of the pie chart when the sector is selected.
|
||||
/// |交互时的偏移。如饼图的扇形选中时的偏移。
|
||||
/// </summary>
|
||||
public float offset { get { return m_Offset; } set { m_Offset = value; } }
|
||||
|
||||
|
||||
public float GetRadius(float radius)
|
||||
{
|
||||
return radius * radiusRate;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -538,6 +538,14 @@ namespace XCharts.Runtime
|
||||
return 0;
|
||||
}
|
||||
|
||||
public float GetInteractionRadius(float radius){
|
||||
|
||||
if (m_Enable && m_Interaction.enable)
|
||||
return m_Interaction.GetRadius(radius);
|
||||
else
|
||||
return radius;
|
||||
}
|
||||
|
||||
public bool HasFadeOut()
|
||||
{
|
||||
return enable && m_FadeOut.context.end;
|
||||
|
||||
@@ -15,6 +15,15 @@ namespace XCharts.Runtime
|
||||
private bool m_ValueEnable = false;
|
||||
|
||||
internal float targetVaue { get { return m_TargetValue; } }
|
||||
internal float previousValue { get { return m_PreviousValue; } }
|
||||
internal bool valueEnable { get { return m_ValueEnable; } }
|
||||
internal bool updateFlag { get { return m_UpdateFlag; } }
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return string.Format("m_PreviousValue:{0},m_TargetValue:{1},m_UpdateTime:{2},m_UpdateFlag:{3},m_ValueEnable:{4}",
|
||||
m_PreviousValue, m_TargetValue, m_UpdateTime, m_UpdateFlag, m_ValueEnable);
|
||||
}
|
||||
|
||||
public void SetValue(ref bool needInteract, float size, bool highlight, float rate = 1.3f)
|
||||
{
|
||||
@@ -33,6 +42,10 @@ namespace XCharts.Runtime
|
||||
m_PreviousValue = m_TargetValue;
|
||||
m_TargetValue = size;
|
||||
}
|
||||
else if (m_UpdateFlag)
|
||||
{
|
||||
needInteract = true;
|
||||
}
|
||||
}
|
||||
|
||||
public void SetColor(ref bool needInteract, Color32 color)
|
||||
@@ -49,6 +62,10 @@ namespace XCharts.Runtime
|
||||
}
|
||||
m_TargetColor = color;
|
||||
}
|
||||
else if (m_UpdateFlag)
|
||||
{
|
||||
needInteract = true;
|
||||
}
|
||||
}
|
||||
public void SetColor(ref bool needInteract, Color32 color, Color32 toColor)
|
||||
{
|
||||
@@ -186,6 +203,7 @@ namespace XCharts.Runtime
|
||||
|
||||
public void Reset()
|
||||
{
|
||||
Debug.LogError("Reset:"+this);
|
||||
m_UpdateFlag = false;
|
||||
m_ValueEnable = false;
|
||||
m_PreviousValue = float.NaN;
|
||||
|
||||
@@ -161,6 +161,7 @@ namespace XCharts.Runtime
|
||||
}
|
||||
if (!serieData.show) return;
|
||||
var serieLabel = SerieHelper.GetSerieLabel(serie, serieData);
|
||||
if (serieLabel == null) return;
|
||||
var isOutside = serieLabel.position == LabelStyle.Position.Outside ||
|
||||
serieLabel.position == LabelStyle.Position.Default;
|
||||
if (!serieLabel.show) return;
|
||||
@@ -187,11 +188,11 @@ namespace XCharts.Runtime
|
||||
var angle = ChartHelper.GetAngle360(Vector2.up, newPos - serie.context.center);
|
||||
if (angle >= 180 && angle <= 270)
|
||||
{
|
||||
serieData.context.labelPosition = new Vector3(isLeft?(++lastX): (--lastX), y1);
|
||||
serieData.context.labelPosition = new Vector3(isLeft ? (++lastX) : (--lastX), y1);
|
||||
}
|
||||
else if (angle < 180 && angle >= 90)
|
||||
{
|
||||
serieData.context.labelPosition = new Vector3(isLeft?(++lastX): (--lastX), y1);
|
||||
serieData.context.labelPosition = new Vector3(isLeft ? (++lastX) : (--lastX), y1);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -60,8 +60,6 @@ namespace XCharts.Runtime
|
||||
[SerializeField][Range(1f, 20)] protected float m_LineSegmentDistance = 3f;
|
||||
[SerializeField][Range(1, 10)] protected float m_CicleSmoothness = 2f;
|
||||
[SerializeField][Range(10, 50)] protected float m_VisualMapTriangeLen = 20f;
|
||||
[SerializeField][Range(1, 20)] protected float m_PieTooltipExtraRadius = 8f;
|
||||
[SerializeField][Range(1, 20)] protected float m_PieSelectedOffset = 8f;
|
||||
[SerializeField] protected List<Theme> m_CustomThemes = new List<Theme>();
|
||||
|
||||
public static Lang lang { get { return Instance.m_Lang; } }
|
||||
@@ -112,8 +110,6 @@ namespace XCharts.Runtime
|
||||
public static float lineSegmentDistance { get { return Instance.m_LineSegmentDistance; } }
|
||||
public static float cicleSmoothness { get { return Instance.m_CicleSmoothness; } }
|
||||
public static float visualMapTriangeLen { get { return Instance.m_VisualMapTriangeLen; } }
|
||||
public static float pieTooltipExtraRadius { get { return Instance.m_PieTooltipExtraRadius; } }
|
||||
public static float pieSelectedOffset { get { return Instance.m_PieSelectedOffset; } }
|
||||
#endregion
|
||||
|
||||
public static List<Theme> customThemes { get { return Instance.m_CustomThemes; } }
|
||||
|
||||
@@ -57,7 +57,7 @@ namespace XCharts.Runtime
|
||||
for (int i = 0; i < serie.dataCount; i++)
|
||||
{
|
||||
var serieData = serie.data[i];
|
||||
var size = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, themeSymbolSize, SerieState.Emphasis);
|
||||
var size = SerieHelper.GetSysmbolSize(serie, serieData, themeSymbolSize, SerieState.Emphasis);
|
||||
serieData.context.highlight = true;
|
||||
serieData.interact.SetValue(ref needInteract, size);
|
||||
}
|
||||
|
||||
@@ -57,7 +57,7 @@ namespace XCharts.Runtime
|
||||
for (int i = 0; i < serie.dataCount; i++)
|
||||
{
|
||||
var serieData = serie.data[i];
|
||||
var size = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, themeSymbolSize, SerieState.Emphasis);
|
||||
var size = SerieHelper.GetSysmbolSize(serie, serieData, themeSymbolSize, SerieState.Emphasis);
|
||||
serieData.context.highlight = true;
|
||||
serieData.interact.SetValue(ref needInteract, size);
|
||||
}
|
||||
|
||||
@@ -284,7 +284,7 @@ namespace XCharts.Runtime
|
||||
}
|
||||
else
|
||||
{
|
||||
var symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, defaultSymbolSize, state);
|
||||
var symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, defaultSymbolSize, state);
|
||||
rectWid = symbolSize;
|
||||
rectHig = symbolSize;
|
||||
}
|
||||
@@ -298,7 +298,7 @@ namespace XCharts.Runtime
|
||||
}
|
||||
else
|
||||
{
|
||||
var symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, defaultSymbolSize, state);
|
||||
var symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, defaultSymbolSize, state);
|
||||
var emptyColor = SerieHelper.GetItemBackgroundColor(serie, serieData, chart.theme, serie.context.colorIndex, state);
|
||||
serieData.context.rect = new Rect(pos.x - symbolSize / 2, pos.y - symbolSize / 2, symbolSize, symbolSize);
|
||||
chart.DrawSymbol(vh, symbol.type, symbolSize, symbolBorder, pos,
|
||||
@@ -398,7 +398,7 @@ namespace XCharts.Runtime
|
||||
}
|
||||
var state = SerieHelper.GetSerieState(serie, null, true);
|
||||
var symbol = SerieHelper.GetSerieSymbol(serie, null, state);
|
||||
var symbolSize = SerieHelper.GetSysmbolSize(serie, null, chart.theme, defaultSymbolSize, state);
|
||||
var symbolSize = SerieHelper.GetSysmbolSize(serie, null, defaultSymbolSize, state);
|
||||
var isRectSymbol = symbol.type == SymbolType.Rect;
|
||||
float symbolBorder = 0f;
|
||||
float[] cornerRadius = null;
|
||||
|
||||
@@ -65,7 +65,7 @@ namespace XCharts.Runtime
|
||||
for (int i = 0; i < serie.dataCount; i++)
|
||||
{
|
||||
var serieData = serie.data[i];
|
||||
var size = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, themeSymbolSize, SerieState.Emphasis);
|
||||
var size = SerieHelper.GetSysmbolSize(serie, serieData, themeSymbolSize, SerieState.Emphasis);
|
||||
serieData.context.highlight = true;
|
||||
serieData.interact.SetValue(ref needInteract, size);
|
||||
}
|
||||
@@ -80,7 +80,7 @@ namespace XCharts.Runtime
|
||||
var highlight = i == serie.context.pointerItemDataIndex;
|
||||
serieData.context.highlight = highlight;
|
||||
var state = SerieHelper.GetSerieState(serie, serieData, true);
|
||||
var size = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, themeSymbolSize, state);
|
||||
var size = SerieHelper.GetSysmbolSize(serie, serieData, themeSymbolSize, state);
|
||||
serieData.interact.SetValue(ref needInteract, size);
|
||||
if (highlight)
|
||||
{
|
||||
@@ -99,11 +99,11 @@ namespace XCharts.Runtime
|
||||
{
|
||||
var serieData = serie.data[i];
|
||||
var dist = Vector3.Distance(chart.pointerPos, serieData.context.position);
|
||||
var size = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, themeSymbolSize);
|
||||
var size = SerieHelper.GetSysmbolSize(serie, serieData, themeSymbolSize);
|
||||
var highlight = dist <= size;
|
||||
serieData.context.highlight = highlight;
|
||||
var state = SerieHelper.GetSerieState(serie, serieData, true);
|
||||
size = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, themeSymbolSize, state);
|
||||
size = SerieHelper.GetSysmbolSize(serie, serieData, themeSymbolSize, state);
|
||||
serieData.interact.SetValue(ref needInteract, size);
|
||||
if (highlight)
|
||||
{
|
||||
@@ -179,7 +179,7 @@ namespace XCharts.Runtime
|
||||
var symbolSize = 0f;
|
||||
if (!serieData.interact.TryGetValue(ref symbolSize, ref interacting, interactDuration))
|
||||
{
|
||||
symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, chart.theme.serie.lineSymbolSize, state);
|
||||
symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme.serie.lineSymbolSize, state);
|
||||
serieData.interact.SetValue(ref interacting, symbolSize);
|
||||
symbolSize = serie.animation.GetSysmbolSize(symbolSize);
|
||||
}
|
||||
|
||||
@@ -57,7 +57,7 @@ namespace XCharts.Runtime
|
||||
for (int i = 0; i < serie.dataCount; i++)
|
||||
{
|
||||
var serieData = serie.data[i];
|
||||
var size = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, themeSymbolSize, SerieState.Emphasis);
|
||||
var size = SerieHelper.GetSysmbolSize(serie, serieData, themeSymbolSize, SerieState.Emphasis);
|
||||
serieData.context.highlight = true;
|
||||
serieData.interact.SetValue(ref needInteract, size);
|
||||
}
|
||||
@@ -269,7 +269,7 @@ namespace XCharts.Runtime
|
||||
if (!symbol.show || !symbol.ShowSymbol(i, count))
|
||||
continue;
|
||||
|
||||
var symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, chart.theme.serie.lineSymbolSize, state);
|
||||
var symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme.serie.lineSymbolSize, state);
|
||||
SerieHelper.GetItemColor(out symbolColor, out symbolToColor, out symbolEmptyColor, serie, serieData, chart.theme, n);
|
||||
SerieHelper.GetSymbolInfo(out borderColor, out symbolBorder, out cornerRadius, serie, null, chart.theme, state);
|
||||
|
||||
|
||||
@@ -100,7 +100,7 @@ namespace XCharts.Runtime
|
||||
|
||||
public override int GetPointerItemDataIndex()
|
||||
{
|
||||
var symbolSize = SerieHelper.GetSysmbolSize(serie, null, chart.theme, chart.theme.serie.lineSymbolSize) * 1.5f;
|
||||
var symbolSize = SerieHelper.GetSysmbolSize(serie, null, chart.theme.serie.lineSymbolSize) * 1.5f;
|
||||
var count = serie.context.dataPoints.Count;
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
|
||||
@@ -76,7 +76,7 @@ namespace XCharts.Runtime
|
||||
for (int i = 0; i < serie.dataCount; i++)
|
||||
{
|
||||
var serieData = serie.data[i];
|
||||
var size = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, themeSymbolSize, SerieState.Emphasis);
|
||||
var size = SerieHelper.GetSysmbolSize(serie, serieData, themeSymbolSize, SerieState.Emphasis);
|
||||
serieData.context.highlight = true;
|
||||
serieData.interact.SetValue(ref needInteract, size);
|
||||
}
|
||||
@@ -91,7 +91,7 @@ namespace XCharts.Runtime
|
||||
var highlight = i == serie.context.pointerItemDataIndex;
|
||||
serieData.context.highlight = highlight;
|
||||
var state = SerieHelper.GetSerieState(serie, serieData, true);
|
||||
var size = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, themeSymbolSize, state);
|
||||
var size = SerieHelper.GetSysmbolSize(serie, serieData, themeSymbolSize, state);
|
||||
serieData.interact.SetValue(ref needInteract, size);
|
||||
if (highlight)
|
||||
{
|
||||
@@ -109,11 +109,11 @@ namespace XCharts.Runtime
|
||||
{
|
||||
var serieData = serie.data[i];
|
||||
var dist = Vector3.Distance(chart.pointerPos, serieData.context.position);
|
||||
var size = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, themeSymbolSize);
|
||||
var size = SerieHelper.GetSysmbolSize(serie, serieData, themeSymbolSize);
|
||||
var highlight = dist <= size;
|
||||
serieData.context.highlight = highlight;
|
||||
var state = SerieHelper.GetSerieState(serie, serieData, true);
|
||||
size = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, themeSymbolSize, state);
|
||||
size = SerieHelper.GetSysmbolSize(serie, serieData, themeSymbolSize, state);
|
||||
serieData.interact.SetValue(ref needInteract, size);
|
||||
if (highlight)
|
||||
{
|
||||
|
||||
@@ -108,19 +108,27 @@ namespace XCharts.Runtime
|
||||
{
|
||||
if (m_LastCheckContextFlag != needCheck)
|
||||
{
|
||||
m_LastCheckContextFlag = needCheck;
|
||||
serie.context.pointerItemDataIndex = -1;
|
||||
serie.context.pointerEnter = false;
|
||||
|
||||
foreach (var serieData in serie.data)
|
||||
{
|
||||
var colorIndex = chart.GetLegendRealShowNameIndex(serieData.legendName);
|
||||
SerieHelper.GetItemColor(out color, out toColor, serie, serieData, chart.theme, colorIndex, SerieState.Normal);
|
||||
Debug.LogError("end:"+serieData.interact);
|
||||
serieData.context.highlight = false;
|
||||
serieData.interact.SetValueAndColor(ref needInteract, serieData.context.outsideRadius, color, toColor);
|
||||
}
|
||||
if (needInteract)
|
||||
if (needInteract){
|
||||
chart.RefreshPainter(serie);
|
||||
Debug.LogError("PieHandler update:" + needInteract + "," + m_LastCheckContextFlag + "," + needCheck);
|
||||
}else{
|
||||
m_LastCheckContextFlag = needCheck;
|
||||
serie.ResetInteract();
|
||||
Debug.LogError("PieHandler end:" + needInteract + "," + m_LastCheckContextFlag + "," + needCheck);
|
||||
}
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
m_LastCheckContextFlag = needCheck;
|
||||
@@ -128,32 +136,36 @@ namespace XCharts.Runtime
|
||||
var dataIndex = GetPiePosIndex(serie, chart.pointerPos);
|
||||
serie.context.pointerItemDataIndex = -1;
|
||||
serie.context.pointerEnter = dataIndex >= 0;
|
||||
|
||||
bool isAllZeroValue = SerieHelper.IsAllZeroValue(serie, 1);
|
||||
var zeroReplaceValue = isAllZeroValue ? 360 / serie.dataCount : 0;
|
||||
|
||||
for (int i = 0; i < serie.dataCount; i++)
|
||||
{
|
||||
var serieData = serie.data[i];
|
||||
var value = isAllZeroValue ? zeroReplaceValue : serieData.GetCurrData(1, serie.animation);
|
||||
var state = SerieState.Normal;
|
||||
if (dataIndex == i || (m_LegendEnter && m_LegendEnterIndex == i))
|
||||
{
|
||||
serie.context.pointerItemDataIndex = i;
|
||||
serieData.context.highlight = true;
|
||||
|
||||
var colorIndex = chart.GetLegendRealShowNameIndex(serieData.legendName);
|
||||
SerieHelper.GetItemColor(out color, out toColor, serie, serieData, chart.theme, colorIndex, SerieState.Emphasis);
|
||||
var value = serieData.context.outsideRadius + chart.theme.serie.pieTooltipExtraRadius;
|
||||
serieData.interact.SetValueAndColor(ref needInteract, value, color, toColor);
|
||||
state = SerieState.Emphasis;
|
||||
}
|
||||
else
|
||||
{
|
||||
serieData.context.highlight = false;
|
||||
var colorIndex = chart.GetLegendRealShowNameIndex(serieData.legendName);
|
||||
SerieHelper.GetItemColor(out color, out toColor, serie, serieData, chart.theme, colorIndex, SerieState.Normal);
|
||||
serieData.interact.SetValueAndColor(ref needInteract, serieData.context.outsideRadius, color, toColor);
|
||||
}
|
||||
UpdateSerieDataRadius(serieData, value);
|
||||
var colorIndex = chart.GetLegendRealShowNameIndex(serieData.legendName);
|
||||
SerieHelper.GetItemColor(out color, out toColor, serie, serieData, chart.theme, colorIndex, state);
|
||||
serieData.interact.SetValueAndColor(ref needInteract, serieData.context.outsideRadius, color, toColor);
|
||||
|
||||
}
|
||||
if (lastPointerItemDataIndex != serie.context.pointerItemDataIndex)
|
||||
{
|
||||
needInteract = true;
|
||||
}
|
||||
if (needInteract)
|
||||
//if (needInteract)
|
||||
{
|
||||
chart.RefreshPainter(serie);
|
||||
}
|
||||
@@ -207,20 +219,11 @@ namespace XCharts.Runtime
|
||||
(float)(totalDegree * value / dataTotalFilterMinAngle);
|
||||
if (serie.minAngle > 0 && degree < serie.minAngle) degree = serie.minAngle;
|
||||
serieData.context.toAngle = startDegree + degree;
|
||||
if (serieData.radius > 0)
|
||||
serieData.context.outsideRadius = ChartHelper.GetActualValue(serieData.radius, Mathf.Min(chart.chartWidth, chart.chartHeight));
|
||||
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.context.highlight)
|
||||
{
|
||||
serieData.context.outsideRadius += chart.theme.serie.pieTooltipExtraRadius;
|
||||
}
|
||||
UpdateSerieDataRadius(serieData, value);
|
||||
var offset = 0f;
|
||||
if (serie.pieClickOffset && (serieData.selected || serieData.context.selected))
|
||||
{
|
||||
offset += chart.theme.serie.pieSelectedOffset;
|
||||
offset += serie.animation.interaction.offset;
|
||||
}
|
||||
if (serie.animation.CheckDetailBreak(serieData.context.toAngle))
|
||||
{
|
||||
@@ -247,12 +250,12 @@ namespace XCharts.Runtime
|
||||
serieData.context.outsideRadius -= serieData.context.offsetRadius;
|
||||
if (serie.pieClickOffset && (serieData.selected || serieData.context.selected))
|
||||
{
|
||||
serieData.context.offsetRadius += chart.theme.serie.pieSelectedOffset;
|
||||
serieData.context.offsetRadius += serie.animation.interaction.offset;
|
||||
if (serieData.context.insideRadius > 0)
|
||||
{
|
||||
serieData.context.insideRadius += chart.theme.serie.pieSelectedOffset;
|
||||
serieData.context.insideRadius += serie.animation.interaction.offset;
|
||||
}
|
||||
serieData.context.outsideRadius += chart.theme.serie.pieSelectedOffset;
|
||||
serieData.context.outsideRadius += serie.animation.interaction.offset;
|
||||
}
|
||||
serieData.context.offsetCenter = new Vector3(
|
||||
serie.context.center.x + serieData.context.offsetRadius * currSin,
|
||||
@@ -265,6 +268,20 @@ namespace XCharts.Runtime
|
||||
SerieLabelHelper.AvoidLabelOverlap(serie, chart.theme.common);
|
||||
}
|
||||
|
||||
private void UpdateSerieDataRadius(SerieData serieData, double value)
|
||||
{
|
||||
if (serieData.radius > 0)
|
||||
serieData.context.outsideRadius = ChartHelper.GetActualValue(serieData.radius, Mathf.Min(chart.chartWidth, chart.chartHeight));
|
||||
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.context.highlight)
|
||||
{
|
||||
serieData.context.outsideRadius = serie.animation.GetInteractionRadius(serieData.context.outsideRadius);
|
||||
}
|
||||
}
|
||||
|
||||
private double GetTotalAngle(Serie serie, double dataTotal, ref float totalAngle)
|
||||
{
|
||||
totalAngle = serie.context.startAngle + 360f;
|
||||
@@ -308,6 +325,7 @@ namespace XCharts.Runtime
|
||||
var interacting = false;
|
||||
var color = ColorUtil.clearColor32;
|
||||
var toColor = ColorUtil.clearColor32;
|
||||
var interactDuration = serie.animation.GetInteractionDuration();
|
||||
var data = serie.data;
|
||||
serie.animation.InitProgress(0, 360);
|
||||
for (int n = 0; n < data.Count; n++)
|
||||
@@ -330,13 +348,12 @@ namespace XCharts.Runtime
|
||||
var progress = AnimationStyleHelper.CheckDataAnimation(chart, serie, n, 1);
|
||||
var insideRadius = serieData.context.insideRadius * progress;
|
||||
|
||||
//if (!serieData.interact.TryGetValueAndColor(ref outsideRadius, ref color, ref toColor, ref interacting))
|
||||
if (!serieData.interact.TryGetValueAndColor(ref outsideRadius, ref color, ref toColor, ref interacting, interactDuration))
|
||||
{
|
||||
SerieHelper.GetItemColor(out color, out toColor, serie, serieData, chart.theme, colorIndex);
|
||||
outsideRadius = serieData.context.outsideRadius * progress;
|
||||
serieData.interact.SetValueAndColor(ref interacting, outsideRadius, color, toColor);
|
||||
}
|
||||
|
||||
if (serie.pieClickOffset && (serieData.selected || serieData.context.selected))
|
||||
{
|
||||
var drawEndDegree = serieData.context.currentAngle;
|
||||
@@ -514,7 +531,7 @@ namespace XCharts.Runtime
|
||||
return -1;
|
||||
|
||||
var dist = Vector2.Distance(local, serie.context.center);
|
||||
var maxRadius = serie.context.outsideRadius + 3 * chart.theme.serie.pieSelectedOffset;
|
||||
var maxRadius = serie.context.outsideRadius + 3 * serie.animation.interaction.offset;
|
||||
if (dist < serie.context.insideRadius || dist > maxRadius)
|
||||
return -1;
|
||||
|
||||
|
||||
@@ -173,7 +173,7 @@ namespace XCharts.Runtime
|
||||
for (int i = 0; i < serie.data.Count; i++)
|
||||
{
|
||||
var serieData = serie.data[i];
|
||||
var size = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, themeSymbolSize);
|
||||
var size = SerieHelper.GetSysmbolSize(serie, serieData, themeSymbolSize);
|
||||
if (Vector3.Distance(chart.pointerPos, serieData.context.position) < size * 2)
|
||||
{
|
||||
serie.context.pointerEnter = true;
|
||||
@@ -334,7 +334,7 @@ namespace XCharts.Runtime
|
||||
var symbolSize = 0f;
|
||||
if (!serieData.interact.TryGetValue(ref symbolSize, ref interacting, interactDuration))
|
||||
{
|
||||
symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, chart.theme.serie.lineSymbolSize, serieState);
|
||||
symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme.serie.lineSymbolSize, serieState);
|
||||
serieData.interact.SetValue(ref interacting, symbolSize);
|
||||
symbolSize = serie.animation.GetSysmbolSize(symbolSize);
|
||||
}
|
||||
@@ -481,7 +481,7 @@ namespace XCharts.Runtime
|
||||
var serieData = serie.data[j];
|
||||
if (!serieData.show) continue;
|
||||
var state = SerieHelper.GetSerieState(serie, serieData);
|
||||
var symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, chart.theme.serie.lineSymbolSize, state);
|
||||
var symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme.serie.lineSymbolSize, state);
|
||||
var colorIndex = serie.colorByData ? serieData.index : serie.context.colorIndex;
|
||||
SerieHelper.GetItemColor(out symbolColor, out symbolToColor, out symbolEmptyColor, serie, serieData, chart.theme, colorIndex, state);
|
||||
SerieHelper.GetSymbolInfo(out borderColor, out symbolBorder, out cornerRadius, serie, serieData, chart.theme, state);
|
||||
|
||||
@@ -81,7 +81,7 @@ namespace XCharts.Runtime
|
||||
for (int i = serie.dataCount - 1; i >= 0; i--)
|
||||
{
|
||||
var serieData = serie.data[i];
|
||||
var symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, themeSymbolSize);
|
||||
var symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, themeSymbolSize);
|
||||
if (m_LegendEnter ||
|
||||
(!needHideAll && Vector3.Distance(serieData.context.position, chart.pointerPos) <= symbolSize))
|
||||
{
|
||||
@@ -94,7 +94,7 @@ namespace XCharts.Runtime
|
||||
serieData.context.highlight = false;
|
||||
}
|
||||
var state = SerieHelper.GetSerieState(serie, serieData, true);
|
||||
symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, themeSymbolSize, state);
|
||||
symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, themeSymbolSize, state);
|
||||
serieData.interact.SetValue(ref needInteract, symbolSize);
|
||||
}
|
||||
if (needInteract)
|
||||
@@ -179,7 +179,7 @@ namespace XCharts.Runtime
|
||||
var symbolSize = 0f;
|
||||
if (!serieData.interact.TryGetValue(ref symbolSize, ref interacting, interactDuration))
|
||||
{
|
||||
symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, chart.theme.serie.scatterSymbolSize, state);
|
||||
symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme.serie.scatterSymbolSize, state);
|
||||
serieData.interact.SetValue(ref interacting, symbolSize);
|
||||
}
|
||||
|
||||
@@ -283,7 +283,7 @@ namespace XCharts.Runtime
|
||||
serieData.context.position = pos;
|
||||
|
||||
var datas = serieData.data;
|
||||
var symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, chart.theme.serie.scatterSymbolSize, state);
|
||||
var symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme.serie.scatterSymbolSize, state);
|
||||
symbolSize *= rate;
|
||||
|
||||
if (isEffectScatter)
|
||||
|
||||
@@ -673,7 +673,7 @@ namespace XCharts.Runtime
|
||||
}
|
||||
}
|
||||
|
||||
public static float GetSysmbolSize(Serie serie, SerieData serieData, ThemeStyle theme, float defaultSize, SerieState state = SerieState.Auto)
|
||||
public static float GetSysmbolSize(Serie serie, SerieData serieData, float defaultSize, SerieState state = SerieState.Auto)
|
||||
{
|
||||
if (serie == null) return defaultSize;
|
||||
if (state == SerieState.Auto)
|
||||
|
||||
@@ -9,8 +9,6 @@ namespace XCharts.Runtime
|
||||
[SerializeField] protected float m_LineWidth;
|
||||
[SerializeField] protected float m_LineSymbolSize;
|
||||
[SerializeField] protected float m_ScatterSymbolSize;
|
||||
[SerializeField] protected float m_PieTooltipExtraRadius;
|
||||
[SerializeField] protected float m_PieSelectedOffset;
|
||||
[SerializeField] protected Color32 m_CandlestickColor = new Color32(235, 84, 84, 255);
|
||||
[SerializeField] protected Color32 m_CandlestickColor0 = new Color32(71, 178, 98, 255);
|
||||
[SerializeField] protected float m_CandlestickBorderWidth = 1;
|
||||
@@ -45,24 +43,6 @@ namespace XCharts.Runtime
|
||||
set { if (PropertyUtil.SetStruct(ref m_ScatterSymbolSize, value)) SetVerticesDirty(); }
|
||||
}
|
||||
/// <summary>
|
||||
/// the extra radius of pie when actived by tooltip.
|
||||
/// |饼图鼠标移到高亮时的额外半径
|
||||
/// </summary>
|
||||
public float pieTooltipExtraRadius
|
||||
{
|
||||
get { return m_PieTooltipExtraRadius; }
|
||||
set { if (PropertyUtil.SetStruct(ref m_PieTooltipExtraRadius, value < 0 ? 0f : value)) SetVerticesDirty(); }
|
||||
}
|
||||
/// <summary>
|
||||
/// the center offset of pie if selected.
|
||||
/// |饼图选中时的中心点偏移。
|
||||
/// </summary>
|
||||
public float pieSelectedOffset
|
||||
{
|
||||
get { return m_PieSelectedOffset; }
|
||||
set { if (PropertyUtil.SetStruct(ref m_PieSelectedOffset, value < 0 ? 0f : value)) SetVerticesDirty(); }
|
||||
}
|
||||
/// <summary>
|
||||
/// K线图阳线(涨)填充色
|
||||
/// </summary>
|
||||
public Color32 candlestickColor
|
||||
@@ -109,8 +89,6 @@ namespace XCharts.Runtime
|
||||
m_LineWidth = theme.lineWidth;
|
||||
m_LineSymbolSize = theme.lineSymbolSize;
|
||||
m_ScatterSymbolSize = theme.scatterSymbolSize;
|
||||
m_PieTooltipExtraRadius = theme.pieTooltipExtraRadius;
|
||||
m_PieSelectedOffset = theme.pieSelectedOffset;
|
||||
m_CandlestickColor = theme.candlestickColor;
|
||||
m_CandlestickColor0 = theme.candlestickColor0;
|
||||
m_CandlestickBorderColor = theme.candlestickBorderColor;
|
||||
@@ -123,8 +101,6 @@ namespace XCharts.Runtime
|
||||
m_LineWidth = XCSettings.serieLineWidth;
|
||||
m_LineSymbolSize = XCSettings.serieLineSymbolSize;
|
||||
m_ScatterSymbolSize = XCSettings.serieScatterSymbolSize;
|
||||
m_PieTooltipExtraRadius = XCSettings.pieTooltipExtraRadius;
|
||||
m_PieSelectedOffset = XCSettings.pieSelectedOffset;
|
||||
m_CandlestickBorderWidth = XCSettings.serieCandlestickBorderWidth;
|
||||
switch (theme)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user