增加SymbolStylesize2参数支持长方形标记

This commit is contained in:
monitor1394
2024-12-28 21:03:17 +08:00
parent 21cd72b995
commit 43de03951c
9 changed files with 42 additions and 21 deletions

View File

@@ -78,6 +78,7 @@ slug: /changelog
## master ## master
* (2024.12.27) 增加`SymbolStyle``size2`参数支持长方形标记
* (2024.12.26) 优化`Text``TextMeshPro`下的居中对齐方式 * (2024.12.26) 优化`Text``TextMeshPro`下的居中对齐方式
* (2024.12.25) 增加`Tooltip``itemFormatter`设置`{f0}`支持 * (2024.12.25) 增加`Tooltip``itemFormatter`设置`{f0}`支持
* (2024.12.25) 修复`YAxis`在范围变更刷新时部分label可能不显示的问题 * (2024.12.25) 修复`YAxis`在范围变更刷新时部分label可能不显示的问题

View File

@@ -27,6 +27,7 @@ namespace XCharts.Editor
} }
PropertyField(prop, "m_Color"); PropertyField(prop, "m_Color");
PropertyField(prop, "m_Size"); PropertyField(prop, "m_Size");
PropertyField(prop, "m_Size2");
PropertyField(prop, "m_Gap"); PropertyField(prop, "m_Gap");
PropertyField(prop, "m_BorderWidth"); PropertyField(prop, "m_BorderWidth");
PropertyField(prop, "m_EmptyColor"); PropertyField(prop, "m_EmptyColor");

View File

@@ -86,12 +86,14 @@ namespace XCharts.Runtime
[SerializeField] protected Color32 m_Color; [SerializeField] protected Color32 m_Color;
[SerializeField][Since("v3.13.0")] protected float m_BorderWidth = 0f; [SerializeField][Since("v3.13.0")] protected float m_BorderWidth = 0f;
[SerializeField][Since("v3.13.0")] protected Color32 m_EmptyColor; [SerializeField][Since("v3.13.0")] protected Color32 m_EmptyColor;
[SerializeField][Since("v3.13.0")] protected float m_Size2 = 0f;
public virtual void Reset() public virtual void Reset()
{ {
m_Show = false; m_Show = false;
m_Type = SymbolType.EmptyCircle; m_Type = SymbolType.EmptyCircle;
m_Size = 0f; m_Size = 0f;
m_Size2 = 0f;
m_Gap = 0; m_Gap = 0;
m_Width = 0f; m_Width = 0f;
m_Height = 0f; m_Height = 0f;
@@ -128,6 +130,15 @@ namespace XCharts.Runtime
set { if (PropertyUtil.SetStruct(ref m_Size, value)) SetVerticesDirty(); } set { if (PropertyUtil.SetStruct(ref m_Size, value)) SetVerticesDirty(); }
} }
/// <summary> /// <summary>
/// the size of symbol.
/// ||标记的大小。当为Rect时size2表示高度。
/// </summary>
public float size2
{
get { return m_Size2; }
set { if (PropertyUtil.SetStruct(ref m_Size2, value)) SetVerticesDirty(); }
}
/// <summary>
/// the gap of symbol and line segment. /// the gap of symbol and line segment.
/// ||图形标记和线条的间隙距离。 /// ||图形标记和线条的间隙距离。
/// </summary> /// </summary>

View File

@@ -83,12 +83,12 @@ namespace XCharts.Runtime
public void DrawClipSymbol(VertexHelper vh, SymbolType type, float symbolSize, float tickness, public void DrawClipSymbol(VertexHelper vh, SymbolType type, float symbolSize, float tickness,
Vector3 pos, Color32 color, Color32 toColor, Color32 emptyColor, Color32 borderColor, float gap, Vector3 pos, Color32 color, Color32 toColor, Color32 emptyColor, Color32 borderColor, float gap,
bool clip, float[] cornerRadius, GridCoord grid, Vector3 startPos) bool clip, float[] cornerRadius, GridCoord grid, Vector3 startPos, float symbolSize2 = 0)
{ {
if (!IsInChart(pos)) return; if (!IsInChart(pos)) return;
if (!clip || (clip && (grid.Contains(pos)))) if (!clip || (clip && (grid.Contains(pos))))
DrawSymbol(vh, type, symbolSize, tickness, pos, color, toColor, emptyColor, borderColor, DrawSymbol(vh, type, symbolSize, tickness, pos, color, toColor, emptyColor, borderColor,
gap, cornerRadius, startPos); gap, cornerRadius, startPos, symbolSize2);
} }
public void DrawClipZebraLine(VertexHelper vh, Vector3 p1, Vector3 p2, float size, float zebraWidth, public void DrawClipZebraLine(VertexHelper vh, Vector3 p1, Vector3 p2, float size, float zebraWidth,
@@ -101,22 +101,22 @@ namespace XCharts.Runtime
public void DrawSymbol(VertexHelper vh, SymbolType type, float symbolSize, float tickness, public void DrawSymbol(VertexHelper vh, SymbolType type, float symbolSize, float tickness,
Vector3 pos, Color32 color, Color32 toColor, Color32 emptyColor, Color32 borderColor, Vector3 pos, Color32 color, Color32 toColor, Color32 emptyColor, Color32 borderColor,
float gap, float[] cornerRadius) float gap, float[] cornerRadius, float symbolSize2 = 0)
{ {
DrawSymbol(vh, type, symbolSize, tickness, pos, color, toColor, emptyColor, borderColor, DrawSymbol(vh, type, symbolSize, tickness, pos, color, toColor, emptyColor, borderColor,
gap, cornerRadius, Vector3.zero); gap, cornerRadius, Vector3.zero, symbolSize2);
} }
public void DrawSymbol(VertexHelper vh, SymbolType type, float symbolSize, float tickness, public void DrawSymbol(VertexHelper vh, SymbolType type, float symbolSize, float tickness,
Vector3 pos, Color32 color, Color32 toColor, Color32 emptyColor, Color32 borderColor, Vector3 pos, Color32 color, Color32 toColor, Color32 emptyColor, Color32 borderColor,
float gap, float[] cornerRadius, Vector3 startPos) float gap, float[] cornerRadius, Vector3 startPos, float symbolSize2 = 0)
{ {
var backgroundColor = GetChartBackgroundColor(); var backgroundColor = GetChartBackgroundColor();
if (ChartHelper.IsClearColor(emptyColor)) if (ChartHelper.IsClearColor(emptyColor))
emptyColor = backgroundColor; emptyColor = backgroundColor;
var smoothness = settings.cicleSmoothness; var smoothness = settings.cicleSmoothness;
ChartDrawer.DrawSymbol(vh, type, symbolSize, tickness, pos, color, toColor, gap, ChartDrawer.DrawSymbol(vh, type, symbolSize, tickness, pos, color, toColor, gap,
cornerRadius, emptyColor, backgroundColor, borderColor, smoothness, startPos); cornerRadius, emptyColor, backgroundColor, borderColor, smoothness, startPos, symbolSize2);
} }
public Color32 GetXLerpColor(Color32 areaColor, Color32 areaToColor, Vector3 pos, GridCoord grid) public Color32 GetXLerpColor(Color32 areaColor, Color32 areaToColor, Vector3 pos, GridCoord grid)

View File

@@ -9,7 +9,8 @@ namespace XCharts.Runtime
{ {
public static void DrawSymbol(VertexHelper vh, SymbolType type, float symbolSize, float tickness, public static void DrawSymbol(VertexHelper vh, SymbolType type, float symbolSize, float tickness,
Vector3 pos, Color32 color, Color32 toColor, float gap, float[] cornerRadius, Vector3 pos, Color32 color, Color32 toColor, float gap, float[] cornerRadius,
Color32 emptyColor, Color32 backgroundColor, Color32 borderColor, float smoothness, Vector3 startPos) Color32 emptyColor, Color32 backgroundColor, Color32 borderColor, float smoothness,
Vector3 startPos, float symbolSize2 = 0f)
{ {
switch (type) switch (type)
{ {
@@ -41,6 +42,12 @@ namespace XCharts.Runtime
} }
break; break;
case SymbolType.Rect: case SymbolType.Rect:
if (symbolSize2 > 0 && symbolSize2 != symbolSize)
{
UGL.DrawRectangle(vh, pos, symbolSize, symbolSize2, color, toColor);
}
else
{
if (gap > 0) if (gap > 0)
{ {
UGL.DrawSquare(vh, pos, symbolSize + gap, backgroundColor); UGL.DrawSquare(vh, pos, symbolSize + gap, backgroundColor);
@@ -56,6 +63,7 @@ namespace XCharts.Runtime
else else
UGL.DrawRoundRectangle(vh, pos, symbolSize * 2, symbolSize * 2, color, color, 0, cornerRadius, true); UGL.DrawRoundRectangle(vh, pos, symbolSize * 2, symbolSize * 2, color, color, 0, cornerRadius, true);
} }
}
break; break;
case SymbolType.EmptyRect: case SymbolType.EmptyRect:
if (tickness == 0) tickness = 4f; if (tickness == 0) tickness = 4f;

View File

@@ -303,7 +303,7 @@ namespace XCharts.Runtime
var emptyColor = SerieHelper.GetItemBackgroundColor(serie, serieData, chart.theme, serie.context.colorIndex, state); var emptyColor = SerieHelper.GetItemBackgroundColor(serie, serieData, chart.theme, serie.context.colorIndex, state);
serieData.context.rect = new Rect(pos.x - symbolSize / 2, pos.y - symbolSize / 2, symbolSize, symbolSize); serieData.context.rect = new Rect(pos.x - symbolSize / 2, pos.y - symbolSize / 2, symbolSize, symbolSize);
chart.DrawSymbol(vh, symbol.type, symbolSize, symbolBorder, pos, chart.DrawSymbol(vh, symbol.type, symbolSize, symbolBorder, pos,
color, color, emptyColor, borderColor, symbol.gap, cornerRadius); color, color, emptyColor, borderColor, symbol.gap, cornerRadius, symbol.size2);
} }
if (visualMap.hoverLink && highlight && emphasisStyle != null && if (visualMap.hoverLink && highlight && emphasisStyle != null &&
@@ -461,7 +461,7 @@ namespace XCharts.Runtime
else else
{ {
chart.DrawSymbol(vh, symbol.type, symbolSize, symbolBorder, pos, chart.DrawSymbol(vh, symbol.type, symbolSize, symbolBorder, pos,
color, color, emptyColor, borderColor, symbol.gap, cornerRadius); color, color, emptyColor, borderColor, symbol.gap, cornerRadius, symbol.size2);
} }
if (visualMap.hoverLink && highlight && emphasisStyle != null && if (visualMap.hoverLink && highlight && emphasisStyle != null &&

View File

@@ -275,7 +275,7 @@ namespace XCharts.Runtime
symbolSize = serie.animation.GetSysmbolSize(symbolSize); symbolSize = serie.animation.GetSysmbolSize(symbolSize);
chart.DrawSymbol(vh, symbol.type, symbolSize, symbolBorder, serieData.context.position, chart.DrawSymbol(vh, symbol.type, symbolSize, symbolBorder, serieData.context.position,
symbolColor, symbolToColor, symbolEmptyColor, borderColor, symbol.gap, cornerRadius); symbolColor, symbolToColor, symbolEmptyColor, borderColor, symbol.gap, cornerRadius, symbol.size2);
} }
} }
} }

View File

@@ -345,7 +345,7 @@ namespace XCharts.Runtime
SerieHelper.GetItemColor(out symbolColor, out symbolToColor, out symbolEmptyColor, serie, serieData, chart.theme, colorIndex, serieState); SerieHelper.GetItemColor(out symbolColor, out symbolToColor, out symbolEmptyColor, serie, serieData, chart.theme, colorIndex, serieState);
SerieHelper.GetSymbolInfo(out borderColor, out symbolBorder, out cornerRadius, serie, serieData, chart.theme, serieState); SerieHelper.GetSymbolInfo(out borderColor, out symbolBorder, out cornerRadius, serie, serieData, chart.theme, serieState);
chart.DrawSymbol(vh, symbol.type, symbolSize, symbolBorder, point, symbolColor, chart.DrawSymbol(vh, symbol.type, symbolSize, symbolBorder, point, symbolColor,
symbolToColor, symbolEmptyColor, borderColor, symbol.gap, cornerRadius); symbolToColor, symbolEmptyColor, borderColor, symbol.gap, cornerRadius, symbol.size2);
} }
} }
} }
@@ -495,7 +495,7 @@ namespace XCharts.Runtime
symbolToColor = m_RadarCoord.outRangeColor; symbolToColor = m_RadarCoord.outRangeColor;
} }
chart.DrawSymbol(vh, serie.symbol.type, symbolSize, symbolBorder, serieData.context.labelPosition, symbolColor, chart.DrawSymbol(vh, serie.symbol.type, symbolSize, symbolBorder, serieData.context.labelPosition, symbolColor,
symbolToColor, symbolEmptyColor, borderColor, serie.symbol.gap, cornerRadius); symbolToColor, symbolEmptyColor, borderColor, serie.symbol.gap, cornerRadius, serie.symbol.size2);
} }
} }
if (!serie.animation.IsFinish()) if (!serie.animation.IsFinish())

View File

@@ -762,7 +762,7 @@ namespace XCharts.Runtime
{ {
var color = symbol.GetColor(defaultColor); var color = symbol.GetColor(defaultColor);
chart.DrawSymbol(vh, symbol.type, symbol.size, 1, pos, chart.DrawSymbol(vh, symbol.type, symbol.size, 1, pos,
color, color, ColorUtil.clearColor32, color, symbol.gap, null); color, color, ColorUtil.clearColor32, color, symbol.gap, null, symbol.size2);
} }
public override void OnPointerDown(PointerEventData eventData) public override void OnPointerDown(PointerEventData eventData)