增加PolarChartclockwise是否顺时针支持

This commit is contained in:
monitor1394
2020-07-02 07:31:32 +08:00
parent b6139514f5
commit d6859f5543
5 changed files with 32 additions and 20 deletions

View File

@@ -16,11 +16,11 @@ namespace XCharts
protected override void DrawExtended(ref Rect drawRect, SerializedProperty prop) protected override void DrawExtended(ref Rect drawRect, SerializedProperty prop)
{ {
SerializedProperty m_StartAngle = prop.FindPropertyRelative("m_StartAngle"); SerializedProperty m_StartAngle = prop.FindPropertyRelative("m_StartAngle");
//SerializedProperty m_Clockwise = prop.FindPropertyRelative("m_Clockwise"); SerializedProperty m_Clockwise = prop.FindPropertyRelative("m_Clockwise");
EditorGUI.PropertyField(drawRect, m_StartAngle); EditorGUI.PropertyField(drawRect, m_StartAngle);
drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
//EditorGUI.PropertyField(drawRect, m_Clockwise); EditorGUI.PropertyField(drawRect, m_Clockwise);
//drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
} }
protected override string GetDisplayName(string displayName) protected override string GetDisplayName(string displayName)
@@ -34,7 +34,7 @@ namespace XCharts
protected override float GetExtendedHeight() protected override float GetExtendedHeight()
{ {
return 1 * EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; return 2 * EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
} }
} }
} }

View File

@@ -78,6 +78,7 @@ namespace XCharts
[SerializeField] protected bool m_LogBaseE = false; [SerializeField] protected bool m_LogBaseE = false;
[SerializeField] protected int m_CeilRate = 0; [SerializeField] protected int m_CeilRate = 0;
[SerializeField] protected bool m_Inverse = false; [SerializeField] protected bool m_Inverse = false;
[SerializeField] private bool m_Clockwise = true;
[SerializeField] protected List<string> m_Data = new List<string>(); [SerializeField] protected List<string> m_Data = new List<string>();
[SerializeField] protected AxisLine m_AxisLine = AxisLine.defaultAxisLine; [SerializeField] protected AxisLine m_AxisLine = AxisLine.defaultAxisLine;
[SerializeField] protected AxisName m_AxisName = AxisName.defaultAxisName; [SerializeField] protected AxisName m_AxisName = AxisName.defaultAxisName;
@@ -206,6 +207,15 @@ namespace XCharts
set { if (m_Type == AxisType.Value && PropertyUtility.SetStruct(ref m_Inverse, value)) SetAllDirty(); } set { if (m_Type == AxisType.Value && PropertyUtility.SetStruct(ref m_Inverse, value)) SetAllDirty(); }
} }
/// <summary> /// <summary>
/// Whether the positive position of axis is in clockwise. True for clockwise by default.
/// 刻度增长是否按顺时针,默认顺时针。
/// </summary>
public bool clockwise
{
get { return m_Clockwise; }
set { if (PropertyUtility.SetStruct(ref m_Clockwise, value)) SetAllDirty(); }
}
/// <summary>
/// Category data, available in type: 'Category' axis. /// Category data, available in type: 'Category' axis.
/// 类目数据在类目轴type: 'category')中有效。 /// 类目数据在类目轴type: 'category')中有效。
/// </summary> /// </summary>
@@ -843,7 +853,7 @@ namespace XCharts
public class AngleAxis : Axis public class AngleAxis : Axis
{ {
[SerializeField] private float m_StartAngle = 90; [SerializeField] private float m_StartAngle = 90;
[SerializeField] private bool m_Clockwise = true;
/// <summary> /// <summary>
/// Starting angle of axis. 90 degrees by default, standing for top position of center. 0 degree stands for right position of center. /// Starting angle of axis. 90 degrees by default, standing for top position of center. 0 degree stands for right position of center.
/// 起始刻度的角度,默认为 90 度即圆心的正上方。0 度为圆心的正右方。 /// 起始刻度的角度,默认为 90 度即圆心的正上方。0 度为圆心的正右方。
@@ -853,15 +863,6 @@ namespace XCharts
get { return m_StartAngle; } get { return m_StartAngle; }
set { if (PropertyUtility.SetStruct(ref m_StartAngle, value)) SetAllDirty(); } set { if (PropertyUtility.SetStruct(ref m_StartAngle, value)) SetAllDirty(); }
} }
/// <summary>
/// Whether the positive position of axis is in clockwise. True for clockwise by default.
/// 刻度增长是否按顺时针,默认顺时针。
/// </summary>
public bool clockWise
{
get { return m_Clockwise; }
set { if (PropertyUtility.SetStruct(ref m_Clockwise, value)) SetAllDirty(); }
}
public float runtimeStartAngle { get; set; } public float runtimeStartAngle { get; set; }

View File

@@ -120,6 +120,7 @@ namespace XCharts
else else
{ {
value = (minValue + (maxValue - minValue) * index / (split - 1)); value = (minValue + (maxValue - minValue) * index / (split - 1));
if (!axis.clockwise && value != minValue) value = maxValue - value;
} }
if (axis.inverse) if (axis.inverse)
{ {

View File

@@ -181,13 +181,14 @@ namespace XCharts
tooltip.UpdateContentPos(pos); tooltip.UpdateContentPos(pos);
} }
public static string GetPolarFormatterContent(Tooltip tooltip, Series series, ThemeInfo themeInfo) public static string GetPolarFormatterContent(Tooltip tooltip, Series series, ThemeInfo themeInfo, AngleAxis angleAxis)
{ {
if (string.IsNullOrEmpty(tooltip.formatter)) if (string.IsNullOrEmpty(tooltip.formatter))
{ {
var sb = ChartHelper.sb; var sb = ChartHelper.sb;
sb.Length = 0; sb.Length = 0;
sb.Append(tooltip.runtimeAngle).Append("\n"); var angle = angleAxis.clockwise ? tooltip.runtimeAngle : 360 - tooltip.runtimeAngle;
sb.Append(angle).Append("\n");
foreach (var serie in series.list) foreach (var serie in series.list)
{ {
if (serie.show && IsSelectedSerie(tooltip, serie.index)) if (serie.show && IsSelectedSerie(tooltip, serie.index))

View File

@@ -486,10 +486,19 @@ namespace XCharts
private Vector3 GetPolarPos(SerieData serieData, float min, float max, float polarRadius) private Vector3 GetPolarPos(SerieData serieData, float min, float max, float polarRadius)
{ {
var angle = m_AngleAxis.runtimeStartAngle + serieData.GetData(1); var angle = 0f;
if (!m_AngleAxis.clockwise)
{
angle = m_AngleAxis.runtimeStartAngle - serieData.GetData(1);
}
else
{
angle = m_AngleAxis.runtimeStartAngle + serieData.GetData(1);
}
angle = (angle + 360) % 360;
var value = serieData.GetData(0); var value = serieData.GetData(0);
var radius = (value - min) / (max - min) * polarRadius; var radius = (value - min) / (max - min) * polarRadius;
serieData.runtimeAngle = (angle + 360) % 360; serieData.runtimeAngle = angle;
serieData.runtimePosition = ChartHelper.GetPos(m_Polar.runtimeCenterPos, radius, angle, true); serieData.runtimePosition = ChartHelper.GetPos(m_Polar.runtimeCenterPos, radius, angle, true);
return serieData.runtimePosition; return serieData.runtimePosition;
} }
@@ -583,7 +592,7 @@ namespace XCharts
var showTooltip = m_Tooltip.isAnySerieDataIndex(); var showTooltip = m_Tooltip.isAnySerieDataIndex();
if (showTooltip) if (showTooltip)
{ {
var content = TooltipHelper.GetPolarFormatterContent(m_Tooltip, m_Series, m_ThemeInfo); var content = TooltipHelper.GetPolarFormatterContent(m_Tooltip, m_Series, m_ThemeInfo, m_AngleAxis);
TooltipHelper.SetContentAndPosition(tooltip, content, chartRect); TooltipHelper.SetContentAndPosition(tooltip, content, chartRect);
} }
m_Tooltip.SetActive(showTooltip); m_Tooltip.SetActive(showTooltip);