增加Treemap扩展支持

This commit is contained in:
monitor1394
2021-10-24 19:23:17 +08:00
parent 903d6b1a17
commit 2c4f341098
7 changed files with 158 additions and 6 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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