增加LabelStyleautoRotate可设置有角度的竖版文本的自动旋转

This commit is contained in:
monitor1394
2023-03-12 22:56:36 +08:00
parent adbd88c411
commit dbb867e0ab
8 changed files with 45 additions and 16 deletions

View File

@@ -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`可自定义图例的位置

View File

@@ -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");

View File

@@ -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()

View File

@@ -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;
}
}
}

View File

@@ -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(); }
}
/// <summary>
/// auto rotate of label.
/// |是否自动旋转。
/// </summary>
public bool autoRotate
{
get { return m_AutoRotate; }
set { if (PropertyUtil.SetStruct(ref m_AutoRotate, value)) SetComponentDirty(); }
}
/// <summary>
/// 距离轴线的距离。
/// </summary>
public float distance

View File

@@ -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;

View File

@@ -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)

View File

@@ -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)