From dbb867e0abbb1ce88c03b02ce0d01b181fdbc8b5 Mon Sep 17 00:00:00 2001 From: monitor1394 Date: Sun, 12 Mar 2023 22:56:36 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0`LabelStyle`=E7=9A=84`autoRot?= =?UTF-8?q?ate`=E5=8F=AF=E8=AE=BE=E7=BD=AE=E6=9C=89=E8=A7=92=E5=BA=A6?= =?UTF-8?q?=E7=9A=84=E7=AB=96=E7=89=88=E6=96=87=E6=9C=AC=E7=9A=84=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E6=97=8B=E8=BD=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Documentation~/zh/changelog.md | 1 + Editor/ChildComponents/LabelStyleDrawer.cs | 1 + Runtime/Component/Axis/Axis.cs | 8 +------- Runtime/Component/Axis/AxisLabel.cs | 19 +++++++++++++++---- Runtime/Component/Label/LabelStyle.cs | 10 ++++++++++ Runtime/Internal/Object/ChartLabel.cs | 14 +++++++++----- Runtime/Serie/Pie/PieHandler.cs | 1 + Runtime/Serie/SerieHandler.cs | 7 +++++++ 8 files changed, 45 insertions(+), 16 deletions(-) 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)