mirror of
https://github.com/XCharts-Team/XCharts.git
synced 2026-05-30 13:28:47 +00:00
增加Treemap扩展支持
This commit is contained in:
@@ -1188,6 +1188,7 @@ namespace XCharts
|
|||||||
public float runtimeY { get; internal set; }
|
public float runtimeY { get; internal set; }
|
||||||
public float runtimeWidth { get; internal set; }
|
public float runtimeWidth { get; internal set; }
|
||||||
public float runtimeHeight { get; internal set; }
|
public float runtimeHeight { get; internal set; }
|
||||||
|
public Rect runtimeRect { get; internal set; }
|
||||||
public List<SerieData> runtimeSortedData { get { return m_SortedData; } }
|
public List<SerieData> runtimeSortedData { get { return m_SortedData; } }
|
||||||
public bool nameDirty { get { return m_NameDirty; } }
|
public bool nameDirty { get { return m_NameDirty; } }
|
||||||
|
|
||||||
@@ -1645,6 +1646,31 @@ namespace XCharts
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public SerieData GetSerieData(string uuid, DataZoom dataZoom = null)
|
||||||
|
{
|
||||||
|
var data = GetDataList(dataZoom);
|
||||||
|
foreach (var serieData in data)
|
||||||
|
{
|
||||||
|
var target = GetSerieData(serieData, uuid);
|
||||||
|
if (target != null) return target;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SerieData GetSerieData(SerieData parent, string uuid)
|
||||||
|
{
|
||||||
|
if (uuid.Equals(parent.uuid)) return parent;
|
||||||
|
foreach (var child in parent.children)
|
||||||
|
{
|
||||||
|
var data = GetSerieData(child, uuid);
|
||||||
|
if (data != null)
|
||||||
|
{
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获得指定索引的维度X和维度Y的数据
|
/// 获得指定索引的维度X和维度Y的数据
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ namespace XCharts
|
|||||||
public class SerieData : SubComponent
|
public class SerieData : SubComponent
|
||||||
{
|
{
|
||||||
[SerializeField] private string m_Name;
|
[SerializeField] private string m_Name;
|
||||||
|
[SerializeField] private string m_Uuid;
|
||||||
[SerializeField] private bool m_Selected;
|
[SerializeField] private bool m_Selected;
|
||||||
[SerializeField] private bool m_Ignore = false;
|
[SerializeField] private bool m_Ignore = false;
|
||||||
[SerializeField] private float m_Radius;
|
[SerializeField] private float m_Radius;
|
||||||
@@ -33,6 +34,7 @@ namespace XCharts
|
|||||||
[SerializeField] private bool m_EnableSymbol = false;
|
[SerializeField] private bool m_EnableSymbol = false;
|
||||||
[SerializeField] private SerieSymbol m_Symbol = new SerieSymbol();
|
[SerializeField] private SerieSymbol m_Symbol = new SerieSymbol();
|
||||||
[SerializeField] private List<double> m_Data = new List<double>();
|
[SerializeField] private List<double> m_Data = new List<double>();
|
||||||
|
[SerializeField] private List<SerieData> m_Children = new List<SerieData>();
|
||||||
|
|
||||||
public ChartLabel labelObject { get; set; }
|
public ChartLabel labelObject { get; set; }
|
||||||
|
|
||||||
@@ -46,6 +48,10 @@ namespace XCharts
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public string name { get { return m_Name; } set { m_Name = value; } }
|
public string name { get { return m_Name; } set { m_Name = value; } }
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
/// 数据项的唯一id。唯一id不是必须设置的。
|
||||||
|
/// </summary>
|
||||||
|
public string uuid { get { return m_Uuid; } set { m_Uuid = value; } }
|
||||||
|
/// <summary>
|
||||||
/// 数据项图例名称。当数据项名称不为空时,图例名称即为系列名称;反之则为索引index。
|
/// 数据项图例名称。当数据项名称不为空时,图例名称即为系列名称;反之则为索引index。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value></value>
|
/// <value></value>
|
||||||
@@ -113,6 +119,7 @@ namespace XCharts
|
|||||||
/// 可指定任意维数的数值列表。
|
/// 可指定任意维数的数值列表。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public List<double> data { get { return m_Data; } set { m_Data = value; } }
|
public List<double> data { get { return m_Data; } set { m_Data = value; } }
|
||||||
|
public List<SerieData> children { get { return m_Children; } set { m_Children = value; } }
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// [default:true] Whether the data item is showed.
|
/// [default:true] Whether the data item is showed.
|
||||||
/// 该数据项是否要显示。
|
/// 该数据项是否要显示。
|
||||||
@@ -174,6 +181,11 @@ namespace XCharts
|
|||||||
/// 绘制区域。
|
/// 绘制区域。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public Rect runtimeRect { get; set; }
|
public Rect runtimeRect { get; set; }
|
||||||
|
public Rect runtimeSubRect { get; set; }
|
||||||
|
public int runtimeLevel { get; set; }
|
||||||
|
public SerieData runtimeParent { get; set; }
|
||||||
|
public Color32 runtimeColor { get; set; }
|
||||||
|
public double runtimeArea { get; set; }
|
||||||
public float runtimeAngle { get; set; }
|
public float runtimeAngle { get; set; }
|
||||||
public Vector3 runtiemPieOffsetCenter { get; set; }
|
public Vector3 runtiemPieOffsetCenter { get; set; }
|
||||||
public float runtimeStackHig { get; set; }
|
public float runtimeStackHig { get; set; }
|
||||||
@@ -208,6 +220,25 @@ namespace XCharts
|
|||||||
m_Emphasis.Reset();
|
m_Emphasis.Reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public SerieData AddChildData(double value, string name = null)
|
||||||
|
{
|
||||||
|
var serieData = new SerieData();
|
||||||
|
serieData.name = name;
|
||||||
|
serieData.data = new List<double>() { children.Count, value };
|
||||||
|
serieData.runtimeParent = this;
|
||||||
|
children.Add(serieData);
|
||||||
|
return serieData;
|
||||||
|
}
|
||||||
|
public SerieData AddChildData(List<double> value, string name = null)
|
||||||
|
{
|
||||||
|
var serieData = new SerieData();
|
||||||
|
serieData.name = name;
|
||||||
|
serieData.data = new List<double>(value);
|
||||||
|
serieData.runtimeParent = this;
|
||||||
|
children.Add(serieData);
|
||||||
|
return serieData;
|
||||||
|
}
|
||||||
|
|
||||||
public double GetData(int index, bool inverse = false)
|
public double GetData(int index, bool inverse = false)
|
||||||
{
|
{
|
||||||
if (index >= 0 && index < m_Data.Count)
|
if (index >= 0 && index < m_Data.Count)
|
||||||
@@ -350,6 +381,16 @@ namespace XCharts
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool UpdateData(int dimension, double value)
|
||||||
|
{
|
||||||
|
if (dimension >= 0 && dimension < data.Count)
|
||||||
|
{
|
||||||
|
data[dimension] = value;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
private void CheckLastData()
|
private void CheckLastData()
|
||||||
{
|
{
|
||||||
if (m_PreviousData.Count != m_Data.Count)
|
if (m_PreviousData.Count != m_Data.Count)
|
||||||
|
|||||||
@@ -227,6 +227,19 @@ namespace XCharts
|
|||||||
else return Color.clear;
|
else return Color.clear;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SetColorPalette(List<Color32> colorList)
|
||||||
|
{
|
||||||
|
m_ColorPalette = colorList;
|
||||||
|
SetVerticesDirty();
|
||||||
|
}
|
||||||
|
public void SetColorPalette(List<string> hexColorStringList)
|
||||||
|
{
|
||||||
|
m_ColorPalette.Clear();
|
||||||
|
foreach (var hexColor in hexColorStringList)
|
||||||
|
m_ColorPalette.Add(ColorUtil.GetColor(hexColor));
|
||||||
|
SetVerticesDirty();
|
||||||
|
}
|
||||||
|
|
||||||
public void CheckWarning(StringBuilder sb)
|
public void CheckWarning(StringBuilder sb)
|
||||||
{
|
{
|
||||||
#if dUI_TextMeshPro
|
#if dUI_TextMeshPro
|
||||||
|
|||||||
@@ -235,6 +235,7 @@ namespace XCharts
|
|||||||
serie.runtimeHeight = chartHeight - runtimeTop - runtimeBottom;
|
serie.runtimeHeight = chartHeight - runtimeTop - runtimeBottom;
|
||||||
serie.runtimeCenterPos = new Vector3(serie.runtimeX + serie.runtimeWidth / 2,
|
serie.runtimeCenterPos = new Vector3(serie.runtimeX + serie.runtimeWidth / 2,
|
||||||
serie.runtimeY + serie.runtimeHeight / 2);
|
serie.runtimeY + serie.runtimeHeight / 2);
|
||||||
|
serie.runtimeRect = new Rect(serie.runtimeX, serie.runtimeY, serie.runtimeWidth, serie.runtimeHeight);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -243,6 +244,7 @@ namespace XCharts
|
|||||||
serie.runtimeWidth = chartWidth;
|
serie.runtimeWidth = chartWidth;
|
||||||
serie.runtimeHeight = chartHeight;
|
serie.runtimeHeight = chartHeight;
|
||||||
serie.runtimeCenterPos = chartPosition + new Vector3(chartWidth / 2, chartHeight / 2);
|
serie.runtimeCenterPos = chartPosition + new Vector3(chartWidth / 2, chartHeight / 2);
|
||||||
|
serie.runtimeRect = new Rect(serie.runtimeX, serie.runtimeY, serie.runtimeWidth, serie.runtimeHeight);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -453,7 +453,7 @@ namespace XCharts
|
|||||||
var active = IsActiveByLegend(datas[i]);
|
var active = IsActiveByLegend(datas[i]);
|
||||||
var bgColor = LegendHelper.GetIconColor(this, readIndex, datas[i], active);
|
var bgColor = LegendHelper.GetIconColor(this, readIndex, datas[i], active);
|
||||||
var item = LegendHelper.AddLegendItem(legend, i, datas[i], legendObject.transform, m_Theme,
|
var item = LegendHelper.AddLegendItem(legend, i, datas[i], legendObject.transform, m_Theme,
|
||||||
legendName, bgColor, active,readIndex);
|
legendName, bgColor, active, readIndex);
|
||||||
legend.SetButton(legendName, item, totalLegend);
|
legend.SetButton(legendName, item, totalLegend);
|
||||||
ChartHelper.ClearEventListener(item.button.gameObject);
|
ChartHelper.ClearEventListener(item.button.gameObject);
|
||||||
ChartHelper.AddEventListener(item.button.gameObject, EventTriggerType.PointerDown, (data) =>
|
ChartHelper.AddEventListener(item.button.gameObject, EventTriggerType.PointerDown, (data) =>
|
||||||
@@ -529,16 +529,17 @@ namespace XCharts
|
|||||||
for (int j = 0; j < serie.data.Count; j++)
|
for (int j = 0; j < serie.data.Count; j++)
|
||||||
{
|
{
|
||||||
var serieData = serie.data[j];
|
var serieData = serie.data[j];
|
||||||
serieData.index = j;
|
serieData.index = count;
|
||||||
serieData.labelObject = null;
|
serieData.labelObject = null;
|
||||||
AddSerieLabel(serie, serieData, count);
|
AddSerieLabel(serie, serieData, ref count);
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
SerieLabelHelper.UpdateLabelText(m_Series, m_Theme, m_LegendRealShowName);
|
SerieLabelHelper.UpdateLabelText(m_Series, m_Theme, m_LegendRealShowName);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void AddSerieLabel(Serie serie, SerieData serieData, int count = -1)
|
|
||||||
|
protected void AddSerieLabel(Serie serie, SerieData serieData, ref int count)
|
||||||
{
|
{
|
||||||
if (m_SerieLabelRoot == null) return;
|
if (m_SerieLabelRoot == null) return;
|
||||||
if (count == -1) count = serie.dataCount;
|
if (count == -1) count = serie.dataCount;
|
||||||
@@ -546,7 +547,7 @@ namespace XCharts
|
|||||||
var iconStyle = SerieHelper.GetIconStyle(serie, serieData);
|
var iconStyle = SerieHelper.GetIconStyle(serie, serieData);
|
||||||
if (serie.IsPerformanceMode()) return;
|
if (serie.IsPerformanceMode()) return;
|
||||||
if (!serieLabel.show && !iconStyle.show) return;
|
if (!serieLabel.show && !iconStyle.show) return;
|
||||||
if(serie.animation.enable && serie.animation.HasFadeOut()) return;
|
if (serie.animation.enable && serie.animation.HasFadeOut()) return;
|
||||||
var textName = ChartCached.GetSerieLabelName(s_SerieLabelObjectName, serie.index, serieData.index);
|
var textName = ChartCached.GetSerieLabelName(s_SerieLabelObjectName, serie.index, serieData.index);
|
||||||
var color = Color.grey;
|
var color = Color.grey;
|
||||||
if (serie.type == SerieType.Pie)
|
if (serie.type == SerieType.Pie)
|
||||||
@@ -568,6 +569,12 @@ namespace XCharts
|
|||||||
item.SetIcon(iconImage);
|
item.SetIcon(iconImage);
|
||||||
item.SetIconActive(iconStyle.show);
|
item.SetIconActive(iconStyle.show);
|
||||||
serieData.labelObject = item;
|
serieData.labelObject = item;
|
||||||
|
|
||||||
|
foreach (var data in serieData.children)
|
||||||
|
{
|
||||||
|
AddSerieLabel(serie, data, ref count);
|
||||||
|
count++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void InitSerieTitle()
|
private void InitSerieTitle()
|
||||||
|
|||||||
@@ -246,7 +246,12 @@ namespace XCharts
|
|||||||
#if dUI_TextMeshPro
|
#if dUI_TextMeshPro
|
||||||
if (m_TMPText != null) return 0; // TODO:
|
if (m_TMPText != null) return 0; // TODO:
|
||||||
#else
|
#else
|
||||||
if (m_Text != null) return m_Text.cachedTextGenerator.GetPreferredWidth(content, m_RelatedTextSettings);
|
if (m_Text != null)
|
||||||
|
{
|
||||||
|
var tg = m_Text.cachedTextGeneratorForLayout;
|
||||||
|
var setting = m_Text.GetGenerationSettings(Vector2.zero);
|
||||||
|
return tg.GetPreferredWidth(content, setting) / m_Text.pixelsPerUnit;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -270,6 +275,30 @@ namespace XCharts
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public string GetPreferredText(string content, string suffix, float maxWidth)
|
||||||
|
{
|
||||||
|
#if dUI_TextMeshPro
|
||||||
|
if (m_TMPText != null) return content; // TODO:
|
||||||
|
#else
|
||||||
|
if (m_Text != null)
|
||||||
|
{
|
||||||
|
var sourWid = GetPreferredWidth(content);
|
||||||
|
if (sourWid < maxWidth) return content;
|
||||||
|
var suffixWid = GetPreferredWidth(suffix);
|
||||||
|
var textWid = maxWidth - 1.3f * suffixWid;
|
||||||
|
for (int i = content.Length; i > 0; i--)
|
||||||
|
{
|
||||||
|
var temp = content.Substring(0, i);
|
||||||
|
if (GetPreferredWidth(temp) < textWid)
|
||||||
|
{
|
||||||
|
return temp + suffix;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return string.Empty;
|
||||||
|
}
|
||||||
|
|
||||||
#if dUI_TextMeshPro
|
#if dUI_TextMeshPro
|
||||||
|
|
||||||
public void SetFont(TMP_FontAsset font)
|
public void SetFont(TMP_FontAsset font)
|
||||||
|
|||||||
@@ -456,6 +456,20 @@ namespace XUGL
|
|||||||
DrawQuadrilateral(vh, p1, p2, p3, p4, color, toColor);
|
DrawQuadrilateral(vh, p1, p2, p3, p4, color, toColor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void DrawRectangle(VertexHelper vh, Rect rect, Color32 color)
|
||||||
|
{
|
||||||
|
DrawRectangle(vh, rect, 0, color);
|
||||||
|
}
|
||||||
|
public static void DrawRectangle(VertexHelper vh, Rect rect, float border, Color32 color)
|
||||||
|
{
|
||||||
|
DrawRectangle(vh, rect, border, color, color);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void DrawRectangle(VertexHelper vh, Rect rect, float border, Color32 color, Color32 toColor)
|
||||||
|
{
|
||||||
|
DrawRectangle(vh, rect.center, rect.width / 2 - border, rect.height / 2 - border, color, toColor, true);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Draw a quadrilateral. 画任意的四边形
|
/// Draw a quadrilateral. 画任意的四边形
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -859,6 +873,26 @@ namespace XUGL
|
|||||||
cornerRadius, horizontal, smoothness, invertCorner);
|
cornerRadius, horizontal, smoothness, invertCorner);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 绘制(圆角)边框
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="vh"></param>
|
||||||
|
/// <param name="rect"></param>
|
||||||
|
/// <param name="borderWidth"></param>
|
||||||
|
/// <param name="color"></param>
|
||||||
|
/// <param name="rotate"></param>
|
||||||
|
/// <param name="cornerRadius"></param>
|
||||||
|
/// <param name="horizontal"></param>
|
||||||
|
/// <param name="smoothness"></param>
|
||||||
|
/// <param name="invertCorner"></param>
|
||||||
|
public static void DrawBorder(VertexHelper vh, Rect rect,
|
||||||
|
float borderWidth, Color32 color, float rotate = 0, float[] cornerRadius = null,
|
||||||
|
bool horizontal = false, float smoothness = 1f, bool invertCorner = false)
|
||||||
|
{
|
||||||
|
DrawBorder(vh, rect.center, rect.width, rect.height, borderWidth, color, s_ClearColor32, rotate,
|
||||||
|
cornerRadius, horizontal, smoothness, invertCorner);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 绘制(圆角)边框
|
/// 绘制(圆角)边框
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
Reference in New Issue
Block a user