diff --git a/Documentation~/zh/changelog.md b/Documentation~/zh/changelog.md
index 872efefb..b584a2b8 100644
--- a/Documentation~/zh/changelog.md
+++ b/Documentation~/zh/changelog.md
@@ -65,6 +65,7 @@ slug: /changelog
## master
+* (2023.03.12) 增加`LabelStyle`的`autoRotate`可设置有角度的竖版文本的自动旋转
* (2023.03.09) 增加`Chart`的`onSerieClick`,`onSerieDown`,`onSerieEnter`和`onSerieExit`回调
* (2023.03.09) 修复`Pie`的点击选中偏移不生效的问题
* (2023.03.04) 增加`Legend`的`Positions`可自定义图例的位置
diff --git a/Editor/ChildComponents/LabelStyleDrawer.cs b/Editor/ChildComponents/LabelStyleDrawer.cs
index 103b345b..359da59d 100644
--- a/Editor/ChildComponents/LabelStyleDrawer.cs
+++ b/Editor/ChildComponents/LabelStyleDrawer.cs
@@ -20,6 +20,7 @@ namespace XCharts.Editor
PropertyField(prop, "m_AutoOffset");
PropertyField(prop, "m_Offset");
PropertyField(prop, "m_Distance");
+ PropertyField(prop, "m_AutoRotate");
PropertyField(prop, "m_Rotate");
PropertyField(prop, "m_Width");
PropertyField(prop, "m_Height");
diff --git a/Runtime/Component/Axis/Axis.cs b/Runtime/Component/Axis/Axis.cs
index d74301a1..2c4ca54d 100644
--- a/Runtime/Component/Axis/Axis.cs
+++ b/Runtime/Component/Axis/Axis.cs
@@ -576,13 +576,7 @@ namespace XCharts.Runtime
{
total = context.labelValueList.Count;
}
- var labelShow = axisLabel.show && (axisLabel.interval == 0 || index % (axisLabel.interval + 1) == 0);
- if (labelShow)
- {
- if (!axisLabel.showStartLabel && index == 0) labelShow = false;
- else if (!axisLabel.showEndLabel && index == total - 1) labelShow = false;
- }
- return labelShow;
+ return axisLabel.IsNeedShowLabel(index, total);
}
public void SetNeedUpdateFilterData()
diff --git a/Runtime/Component/Axis/AxisLabel.cs b/Runtime/Component/Axis/AxisLabel.cs
index 934f5e0d..0daf6836 100644
--- a/Runtime/Component/Axis/AxisLabel.cs
+++ b/Runtime/Component/Axis/AxisLabel.cs
@@ -96,10 +96,10 @@ namespace XCharts.Runtime
return new AxisLabel()
{
m_Show = true,
- m_Interval = 0,
- m_Inside = false,
- m_Distance = 8,
- m_TextStyle = new TextStyle(),
+ m_Interval = 0,
+ m_Inside = false,
+ m_Distance = 8,
+ m_TextStyle = new TextStyle(),
};
}
}
@@ -168,5 +168,16 @@ namespace XCharts.Runtime
}
return base.GetFormatterContent(labelIndex, value, minValue, maxValue, isLog);
}
+
+ public bool IsNeedShowLabel(int index, int total)
+ {
+ var labelShow = show && (interval == 0 || index % (interval + 1) == 0);
+ if (labelShow)
+ {
+ if (!showStartLabel && index == 0) labelShow = false;
+ else if (!showEndLabel && index == total - 1) labelShow = false;
+ }
+ return labelShow;
+ }
}
}
\ No newline at end of file
diff --git a/Runtime/Component/Label/LabelStyle.cs b/Runtime/Component/Label/LabelStyle.cs
index 06a8cf69..762c6c24 100644
--- a/Runtime/Component/Label/LabelStyle.cs
+++ b/Runtime/Component/Label/LabelStyle.cs
@@ -74,6 +74,7 @@ namespace XCharts.Runtime
[SerializeField] protected bool m_AutoOffset = false;
[SerializeField] protected Vector3 m_Offset;
[SerializeField] protected float m_Rotate;
+ [SerializeField][Since("v3.6.0")] protected bool m_AutoRotate = false;
[SerializeField] protected float m_Distance;
[SerializeField] protected string m_Formatter;
[SerializeField] protected string m_NumericFormatter = "";
@@ -155,6 +156,15 @@ namespace XCharts.Runtime
set { if (PropertyUtil.SetStruct(ref m_Rotate, value)) SetComponentDirty(); }
}
///
+ /// auto rotate of label.
+ /// |是否自动旋转。
+ ///
+ public bool autoRotate
+ {
+ get { return m_AutoRotate; }
+ set { if (PropertyUtil.SetStruct(ref m_AutoRotate, value)) SetComponentDirty(); }
+ }
+ ///
/// 距离轴线的距离。
///
public float distance
diff --git a/Runtime/Internal/Object/ChartLabel.cs b/Runtime/Internal/Object/ChartLabel.cs
index d36114e0..89ff9ee3 100644
--- a/Runtime/Internal/Object/ChartLabel.cs
+++ b/Runtime/Internal/Object/ChartLabel.cs
@@ -169,6 +169,11 @@ namespace XCharts.Runtime
if (m_LabelText != null) m_LabelText.SetColor(color);
}
+ public void SetRotate(float rotate)
+ {
+ transform.localEulerAngles = new Vector3(0, 0, rotate);
+ }
+
public void SetTextRotate(float rotate)
{
if (m_LabelText != null) m_LabelText.SetLocalEulerAngles(new Vector3(0, 0, rotate));
@@ -196,16 +201,15 @@ namespace XCharts.Runtime
public void SetActive(bool flag)
{
- if (m_Active != flag)
- {
- m_Active = flag;
- ChartHelper.SetActive(gameObject, flag);
- }
+ m_Active = flag;
+ ChartHelper.SetActive(gameObject, flag);
}
+
public void SetTextActive(bool flag)
{
if (m_LabelText != null) m_LabelText.SetActive(flag);
}
+
public void SetIconActive(bool flag)
{
isIconActive = flag;
diff --git a/Runtime/Serie/Pie/PieHandler.cs b/Runtime/Serie/Pie/PieHandler.cs
index f58b9aa2..45bf20cf 100644
--- a/Runtime/Serie/Pie/PieHandler.cs
+++ b/Runtime/Serie/Pie/PieHandler.cs
@@ -234,6 +234,7 @@ namespace XCharts.Runtime
}
var halfDegree = (serieData.context.toAngle - startDegree) / 2;
serieData.context.halfAngle = startDegree + halfDegree;
+ serieData.context.angle = startDegree + halfDegree;
serieData.context.offsetCenter = serie.context.center;
serieData.context.insideRadius = serie.context.insideRadius;
if (offset > 0)
diff --git a/Runtime/Serie/SerieHandler.cs b/Runtime/Serie/SerieHandler.cs
index 65762406..f7aab083 100644
--- a/Runtime/Serie/SerieHandler.cs
+++ b/Runtime/Serie/SerieHandler.cs
@@ -503,6 +503,13 @@ namespace XCharts.Runtime
var labelPosition = GetSerieDataLabelPosition(serieData, currLabel);
var offset = GetSerieDataLabelOffset(serieData, currLabel);
serieData.labelObject.SetPosition(labelPosition + offset);
+ if (currLabel.autoRotate && serieData.context.angle != 0)
+ {
+ if (serieData.context.angle > 90 && serieData.context.angle < 270)
+ serieData.labelObject.SetRotate(180 - serieData.context.angle);
+ else
+ serieData.labelObject.SetRotate(-serieData.context.angle);
+ }
}
public virtual Vector3 GetSerieDataLabelPosition(SerieData serieData, LabelStyle label)