using UnityEngine;
namespace XCharts
{
///
/// Text label of chart, to explain some data information about graphic item like value, name and so on.
/// 图形上的文本标签,可用于说明图形的一些数据信息,比如值,名称等。
///
[System.Serializable]
public class SerieLabel
{
///
/// The position of label.
/// 标签的位置。
///
public enum Position
{
///
/// Outside of sectors of pie chart, which relates to corresponding sector through visual guide line.
/// 饼图扇区外侧,通过视觉引导线连到相应的扇区。
///
Outside,
///
/// Inside the sectors of pie chart.
/// 饼图扇区内部。
///
Inside,
///
/// In the center of pie chart.
/// 在饼图中心位置。
///
Center,
///
/// top of symbol.
/// 图形标志的顶部。
///
Top,
///
/// the left of symbol.
/// 图形标志的左边。
///
//Left,
///
/// the right of symbol.
/// 图形标志的右边。
///
//Right,
///
/// the bottom of symbol.
/// 图形标志的底部。
///
Bottom,
}
[SerializeField] private bool m_Show = false;
[SerializeField] Position m_Position;
[SerializeField] private Vector3 m_Offset;
[SerializeField] private string m_Formatter;
[SerializeField] private float m_Rotate = 0;
[SerializeField] private float m_PaddingLeftRight = 2f;
[SerializeField] private float m_PaddingTopBottom = 2f;
[SerializeField] private Color m_Color;
[SerializeField] private Color m_BackgroundColor;
[SerializeField] private float m_BackgroundWidth = 0;
[SerializeField] private float m_BackgroundHeight = 0;
[SerializeField] private int m_FontSize = 18;
[SerializeField] private FontStyle m_FontStyle = FontStyle.Normal;
[SerializeField] private bool m_Line = true;
[SerializeField] private float m_LineWidth = 1.0f;
[SerializeField] private float m_LineLength1 = 25f;
[SerializeField] private float m_LineLength2 = 15f;
[SerializeField] private bool m_Border = true;
[SerializeField] private float m_BorderWidth = 0.5f;
[SerializeField] private Color m_BorderColor = Color.grey;
///
/// Whether the label is showed.
/// 是否显示文本标签。
///
public bool show { get { return m_Show; } set { m_Show = value; } }
///
/// The position of label.
/// 标签的位置。
///
public Position position { get { return m_Position; } set { m_Position = value; } }
///
/// 标签内容字符串模版格式器。支持用 \n 换行。
/// 模板变量有:
///
/// - {a}:系列名。
/// - {b}:数据名。
/// - {c}:数据值。
/// - {d}:百分比。
///
///
///
/// 示例:“{b}:{c}”
///
public string formatter { get { return m_Formatter; } set { m_Formatter = value; } }
///
/// offset to the host graphic element.
/// 距离图形元素的偏移
///
public Vector3 offset { get { return m_Offset; } set { m_Offset = value; } }
///
/// Text color,If set as default ,the color will assigned as series color.
/// 自定义文字颜色,默认和系列的颜色一致。
///
public Color color { get { return m_Color; } set { m_Color = value; } }
///
/// the background color. If set as default, it means than don't show background.
/// 标签的背景色,默认无颜色。
///
public Color backgroundColor { get { return m_BackgroundColor; } set { m_BackgroundColor = value; } }
///
/// the width of background. If set as default value 0, it means than the background width auto set as the text width.
/// 标签的背景宽度。一般不用指定,不指定时则自动是文字的宽度。
///
///
public float backgroundWidth { get { return m_BackgroundWidth; } set { m_BackgroundWidth = value; } }
///
/// the height of background. If set as default value 0, it means than the background height auto set as the text height.
/// 标签的背景高度。一般不用指定,不指定时则自动是文字的高度。
///
///
public float backgroundHeight { get { return m_BackgroundHeight; } set { m_BackgroundHeight = value; } }
///
/// Rotate label.
/// 标签旋转。
///
public float rotate { get { return m_Rotate; } set { m_Rotate = value; } }
///
/// the text padding of left and right. defaut:2.
/// 左右边距。
///
public float paddingLeftRight { get { return m_PaddingLeftRight; } set { m_PaddingLeftRight = value; } }
///
/// the text padding of top and bottom. defaut:2.
/// 上下边距。
///
public float paddingTopBottom { get { return m_PaddingTopBottom; } set { m_PaddingTopBottom = value; } }
///
/// font size.
/// 文字的字体大小。
///
public int fontSize { get { return m_FontSize; } set { m_FontSize = value; } }
///
/// font style.
/// 文字的字体风格。
///
public FontStyle fontStyle { get { return m_FontStyle; } set { m_FontStyle = value; } }
///
/// Whether to show visual guide line.Will show when label position is set as 'outside'.
/// 是否显示视觉引导线。在 label 位置 设置为'outside'的时候会显示视觉引导线。
///
public bool line { get { return m_Line; } set { m_Line = value; } }
///
/// the width of visual guild line.
/// 视觉引导线的宽度。
///
public float lineWidth { get { return m_LineWidth; } set { m_LineWidth = value; } }
///
/// The length of the first segment of visual guide line.
/// 视觉引导线第一段的长度。
///
public float lineLength1 { get { return m_LineLength1; } set { m_LineLength1 = value; } }
///
/// The length of the second segment of visual guide line.
/// 视觉引导线第二段的长度。
///
public float lineLength2 { get { return m_LineLength2; } set { m_LineLength2 = value; } }
///
/// Whether to show border.
/// 是否显示边框。
///
public bool border { get { return m_Border; } set { m_Border = value; } }
///
/// the width of border.
/// 边框宽度。
///
public float borderWidth { get { return m_BorderWidth; } set { m_BorderWidth = value; } }
///
/// the color of border.
/// 边框颜色。
///
public Color borderColor { get { return m_BorderColor; } set { m_BorderColor = value; } }
public string GetFormatterContent(string serieName, string dataName, float dataValue, float dataTotal = 0)
{
if (string.IsNullOrEmpty(m_Formatter))
return ChartCached.FloatToStr(dataValue);
else
{
var content = m_Formatter.Replace("{a}", serieName);
content = content.Replace("{b}", dataName);
content = content.Replace("{c}", ChartCached.FloatToStr(dataValue));
if (dataTotal > 0)
{
var percent = dataValue / dataTotal * 100;
content = content.Replace("{d}", ChartCached.FloatToStr(percent, 1));
}
content = content.Replace("\\n", "\n");
content = content.Replace("
", "\n");
return content;
}
}
}
}