增加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

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