mirror of
https://github.com/XCharts-Team/XCharts.git
synced 2026-05-20 15:30:09 +00:00
增加Treemap扩展支持
This commit is contained in:
@@ -1188,6 +1188,7 @@ namespace XCharts
|
||||
public float runtimeY { get; internal set; }
|
||||
public float runtimeWidth { get; internal set; }
|
||||
public float runtimeHeight { get; internal set; }
|
||||
public Rect runtimeRect { get; internal set; }
|
||||
public List<SerieData> runtimeSortedData { get { return m_SortedData; } }
|
||||
public bool nameDirty { get { return m_NameDirty; } }
|
||||
|
||||
@@ -1645,6 +1646,31 @@ namespace XCharts
|
||||
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>
|
||||
/// 获得指定索引的维度X和维度Y的数据
|
||||
/// </summary>
|
||||
|
||||
@@ -19,6 +19,7 @@ namespace XCharts
|
||||
public class SerieData : SubComponent
|
||||
{
|
||||
[SerializeField] private string m_Name;
|
||||
[SerializeField] private string m_Uuid;
|
||||
[SerializeField] private bool m_Selected;
|
||||
[SerializeField] private bool m_Ignore = false;
|
||||
[SerializeField] private float m_Radius;
|
||||
@@ -33,6 +34,7 @@ namespace XCharts
|
||||
[SerializeField] private bool m_EnableSymbol = false;
|
||||
[SerializeField] private SerieSymbol m_Symbol = new SerieSymbol();
|
||||
[SerializeField] private List<double> m_Data = new List<double>();
|
||||
[SerializeField] private List<SerieData> m_Children = new List<SerieData>();
|
||||
|
||||
public ChartLabel labelObject { get; set; }
|
||||
|
||||
@@ -46,6 +48,10 @@ namespace XCharts
|
||||
/// </summary>
|
||||
public string name { get { return m_Name; } set { m_Name = value; } }
|
||||
/// <summary>
|
||||
/// 数据项的唯一id。唯一id不是必须设置的。
|
||||
/// </summary>
|
||||
public string uuid { get { return m_Uuid; } set { m_Uuid = value; } }
|
||||
/// <summary>
|
||||
/// 数据项图例名称。当数据项名称不为空时,图例名称即为系列名称;反之则为索引index。
|
||||
/// </summary>
|
||||
/// <value></value>
|
||||
@@ -113,6 +119,7 @@ namespace XCharts
|
||||
/// 可指定任意维数的数值列表。
|
||||
/// </summary>
|
||||
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>
|
||||
/// [default:true] Whether the data item is showed.
|
||||
/// 该数据项是否要显示。
|
||||
@@ -174,6 +181,11 @@ namespace XCharts
|
||||
/// 绘制区域。
|
||||
/// </summary>
|
||||
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 Vector3 runtiemPieOffsetCenter { get; set; }
|
||||
public float runtimeStackHig { get; set; }
|
||||
@@ -208,6 +220,25 @@ namespace XCharts
|
||||
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)
|
||||
{
|
||||
if (index >= 0 && index < m_Data.Count)
|
||||
@@ -350,6 +381,16 @@ namespace XCharts
|
||||
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()
|
||||
{
|
||||
if (m_PreviousData.Count != m_Data.Count)
|
||||
|
||||
@@ -227,6 +227,19 @@ namespace XCharts
|
||||
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)
|
||||
{
|
||||
#if dUI_TextMeshPro
|
||||
|
||||
@@ -235,6 +235,7 @@ namespace XCharts
|
||||
serie.runtimeHeight = chartHeight - runtimeTop - runtimeBottom;
|
||||
serie.runtimeCenterPos = new Vector3(serie.runtimeX + serie.runtimeWidth / 2,
|
||||
serie.runtimeY + serie.runtimeHeight / 2);
|
||||
serie.runtimeRect = new Rect(serie.runtimeX, serie.runtimeY, serie.runtimeWidth, serie.runtimeHeight);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -243,6 +244,7 @@ namespace XCharts
|
||||
serie.runtimeWidth = chartWidth;
|
||||
serie.runtimeHeight = chartHeight;
|
||||
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 bgColor = LegendHelper.GetIconColor(this, readIndex, datas[i], active);
|
||||
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);
|
||||
ChartHelper.ClearEventListener(item.button.gameObject);
|
||||
ChartHelper.AddEventListener(item.button.gameObject, EventTriggerType.PointerDown, (data) =>
|
||||
@@ -529,16 +529,17 @@ namespace XCharts
|
||||
for (int j = 0; j < serie.data.Count; j++)
|
||||
{
|
||||
var serieData = serie.data[j];
|
||||
serieData.index = j;
|
||||
serieData.index = count;
|
||||
serieData.labelObject = null;
|
||||
AddSerieLabel(serie, serieData, count);
|
||||
AddSerieLabel(serie, serieData, ref count);
|
||||
count++;
|
||||
}
|
||||
}
|
||||
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 (count == -1) count = serie.dataCount;
|
||||
@@ -546,7 +547,7 @@ namespace XCharts
|
||||
var iconStyle = SerieHelper.GetIconStyle(serie, serieData);
|
||||
if (serie.IsPerformanceMode()) 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 color = Color.grey;
|
||||
if (serie.type == SerieType.Pie)
|
||||
@@ -568,6 +569,12 @@ namespace XCharts
|
||||
item.SetIcon(iconImage);
|
||||
item.SetIconActive(iconStyle.show);
|
||||
serieData.labelObject = item;
|
||||
|
||||
foreach (var data in serieData.children)
|
||||
{
|
||||
AddSerieLabel(serie, data, ref count);
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
||||
private void InitSerieTitle()
|
||||
|
||||
@@ -246,7 +246,12 @@ namespace XCharts
|
||||
#if dUI_TextMeshPro
|
||||
if (m_TMPText != null) return 0; // TODO:
|
||||
#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
|
||||
return 0;
|
||||
}
|
||||
@@ -270,6 +275,30 @@ namespace XCharts
|
||||
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
|
||||
|
||||
public void SetFont(TMP_FontAsset font)
|
||||
|
||||
@@ -456,6 +456,20 @@ namespace XUGL
|
||||
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>
|
||||
/// Draw a quadrilateral. 画任意的四边形
|
||||
/// </summary>
|
||||
@@ -859,6 +873,26 @@ namespace XUGL
|
||||
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>
|
||||
|
||||
Reference in New Issue
Block a user