mirror of
https://github.com/XCharts-Team/XCharts.git
synced 2026-05-28 12:08:46 +00:00
增加SerieSymbol的gap参数控制图形标记的外留白距离
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
|
|
||||||
# 更新日志
|
# 更新日志
|
||||||
|
|
||||||
|
* (2020.02.08) 增加`SerieSymbol`的`gap`参数控制图形标记的外留白距离
|
||||||
* (2020.01.26) 增加`TextLimit`组件可以设置`AxisLabel`的文本自适应
|
* (2020.01.26) 增加`TextLimit`组件可以设置`AxisLabel`的文本自适应
|
||||||
* (2020.01.20) 优化`Tooltip`设置`itemFormatter`时显示系列颜色
|
* (2020.01.20) 优化`Tooltip`设置`itemFormatter`时显示系列颜色
|
||||||
* (2020.01.20) 增加`Radar`雷达图在`inspector`配置`areaStyle`的支持
|
* (2020.01.20) 增加`Radar`雷达图在`inspector`配置`areaStyle`的支持
|
||||||
|
|||||||
@@ -791,6 +791,7 @@
|
|||||||
* `Triangle`:三角形。
|
* `Triangle`:三角形。
|
||||||
* `Diamond`:菱形。
|
* `Diamond`:菱形。
|
||||||
* `None`:不显示标记。
|
* `None`:不显示标记。
|
||||||
|
* `gap`:图形标记的外留白距离。
|
||||||
* `sizeType`:标记图形的大小获取方式。支持以下三种类型:
|
* `sizeType`:标记图形的大小获取方式。支持以下三种类型:
|
||||||
* `Custom`:自定义大小。
|
* `Custom`:自定义大小。
|
||||||
* `FromData`:通过 `dataIndex` 从数据中获取,再乘以一个比例系数 `dataScale` 。
|
* `FromData`:通过 `dataIndex` 从数据中获取,再乘以一个比例系数 `dataScale` 。
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ namespace XCharts
|
|||||||
SerializedProperty m_StartIndex = prop.FindPropertyRelative("m_StartIndex");
|
SerializedProperty m_StartIndex = prop.FindPropertyRelative("m_StartIndex");
|
||||||
SerializedProperty m_Interval = prop.FindPropertyRelative("m_Interval");
|
SerializedProperty m_Interval = prop.FindPropertyRelative("m_Interval");
|
||||||
SerializedProperty m_ForceShowLast = prop.FindPropertyRelative("m_ForceShowLast");
|
SerializedProperty m_ForceShowLast = prop.FindPropertyRelative("m_ForceShowLast");
|
||||||
|
SerializedProperty m_Gap = prop.FindPropertyRelative("m_Gap");
|
||||||
|
|
||||||
ChartEditorHelper.MakeFoldout(ref drawRect, ref m_SerieSymbolToggle, prop, null, m_Type, false);
|
ChartEditorHelper.MakeFoldout(ref drawRect, ref m_SerieSymbolToggle, prop, null, m_Type, false);
|
||||||
drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
|
drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
|
||||||
@@ -39,6 +40,8 @@ namespace XCharts
|
|||||||
{
|
{
|
||||||
++EditorGUI.indentLevel;
|
++EditorGUI.indentLevel;
|
||||||
|
|
||||||
|
EditorGUI.PropertyField(drawRect, m_Gap);
|
||||||
|
drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
|
||||||
EditorGUI.PropertyField(drawRect, m_SizeType);
|
EditorGUI.PropertyField(drawRect, m_SizeType);
|
||||||
drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
|
drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
|
||||||
SerieSymbolSizeType sizeType = (SerieSymbolSizeType)m_SizeType.enumValueIndex;
|
SerieSymbolSizeType sizeType = (SerieSymbolSizeType)m_SizeType.enumValueIndex;
|
||||||
@@ -84,13 +87,13 @@ namespace XCharts
|
|||||||
switch (sizeType)
|
switch (sizeType)
|
||||||
{
|
{
|
||||||
case SerieSymbolSizeType.Custom:
|
case SerieSymbolSizeType.Custom:
|
||||||
return 9 * EditorGUIUtility.singleLineHeight + 9 * EditorGUIUtility.standardVerticalSpacing;
|
|
||||||
case SerieSymbolSizeType.FromData:
|
|
||||||
return 10 * EditorGUIUtility.singleLineHeight + 10 * EditorGUIUtility.standardVerticalSpacing;
|
return 10 * EditorGUIUtility.singleLineHeight + 10 * EditorGUIUtility.standardVerticalSpacing;
|
||||||
|
case SerieSymbolSizeType.FromData:
|
||||||
|
return 11 * EditorGUIUtility.singleLineHeight + 11 * EditorGUIUtility.standardVerticalSpacing;
|
||||||
case SerieSymbolSizeType.Callback:
|
case SerieSymbolSizeType.Callback:
|
||||||
return 9 * EditorGUIUtility.singleLineHeight + 9 * EditorGUIUtility.standardVerticalSpacing;
|
return 10 * EditorGUIUtility.singleLineHeight + 10 * EditorGUIUtility.standardVerticalSpacing;
|
||||||
}
|
}
|
||||||
return 9 * EditorGUIUtility.singleLineHeight + 9 * EditorGUIUtility.standardVerticalSpacing;
|
return 10 * EditorGUIUtility.singleLineHeight + 10 * EditorGUIUtility.standardVerticalSpacing;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -92,6 +92,7 @@ namespace XCharts
|
|||||||
[SerializeField] private int m_StartIndex;
|
[SerializeField] private int m_StartIndex;
|
||||||
[SerializeField] private int m_Interval;
|
[SerializeField] private int m_Interval;
|
||||||
[SerializeField] private bool m_ForceShowLast = false;
|
[SerializeField] private bool m_ForceShowLast = false;
|
||||||
|
[SerializeField] private float m_Gap = 0;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// the type of symbol.
|
/// the type of symbol.
|
||||||
@@ -163,6 +164,11 @@ namespace XCharts
|
|||||||
/// 是否强制显示最后一个图形标记。
|
/// 是否强制显示最后一个图形标记。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public bool forceShowLast { get { return m_ForceShowLast; } set { m_ForceShowLast = value; } }
|
public bool forceShowLast { get { return m_ForceShowLast; } set { m_ForceShowLast = value; } }
|
||||||
|
/// <summary>
|
||||||
|
/// the gap of symbol and line segment.
|
||||||
|
/// 图形标记和线条的间隙距离。
|
||||||
|
/// </summary>
|
||||||
|
public float gap { get { return m_Gap; } set { m_Gap = value; } }
|
||||||
private List<float> m_AnimationSize = new List<float>() { 0, 5, 10 };
|
private List<float> m_AnimationSize = new List<float>() { 0, 5, 10 };
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// the setting for effect scatter.
|
/// the setting for effect scatter.
|
||||||
|
|||||||
@@ -723,35 +723,67 @@ namespace XCharts
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected void DrawSymbol(VertexHelper vh, SerieSymbolType type, float symbolSize,
|
protected void DrawSymbol(VertexHelper vh, SerieSymbolType type, float symbolSize,
|
||||||
float tickness, Vector3 pos, Color color)
|
float tickness, Vector3 pos, Color color, float gap)
|
||||||
{
|
{
|
||||||
|
var backgroundColor = m_ThemeInfo.backgroundColor;
|
||||||
|
var smoothness = m_Settings.cicleSmoothness;
|
||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
case SerieSymbolType.None:
|
case SerieSymbolType.None:
|
||||||
break;
|
break;
|
||||||
case SerieSymbolType.Circle:
|
case SerieSymbolType.Circle:
|
||||||
ChartDrawer.DrawCricle(vh, pos, symbolSize, color, m_Settings.cicleSmoothness);
|
if (gap > 0)
|
||||||
|
{
|
||||||
|
ChartDrawer.DrawDoughnut(vh, pos, symbolSize, symbolSize + gap, backgroundColor, color, smoothness);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ChartDrawer.DrawCricle(vh, pos, symbolSize, color, smoothness);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case SerieSymbolType.EmptyCircle:
|
case SerieSymbolType.EmptyCircle:
|
||||||
ChartDrawer.DrawEmptyCricle(vh, pos, symbolSize, tickness, color, m_ThemeInfo.backgroundColor, m_Settings.cicleSmoothness);
|
if (gap > 0)
|
||||||
|
{
|
||||||
|
ChartDrawer.DrawCricle(vh, pos, symbolSize + gap, backgroundColor, smoothness);
|
||||||
|
ChartDrawer.DrawEmptyCricle(vh, pos, symbolSize, tickness, color, backgroundColor, smoothness);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ChartDrawer.DrawEmptyCricle(vh, pos, symbolSize, tickness, color, backgroundColor, smoothness);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case SerieSymbolType.Rect:
|
case SerieSymbolType.Rect:
|
||||||
|
if (gap > 0)
|
||||||
|
{
|
||||||
|
ChartDrawer.DrawPolygon(vh, pos, symbolSize + gap, backgroundColor);
|
||||||
ChartDrawer.DrawPolygon(vh, pos, symbolSize, color);
|
ChartDrawer.DrawPolygon(vh, pos, symbolSize, color);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ChartDrawer.DrawPolygon(vh, pos, symbolSize, color);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case SerieSymbolType.Triangle:
|
case SerieSymbolType.Triangle:
|
||||||
var x = symbolSize * Mathf.Cos(30 * Mathf.PI / 180);
|
if (gap > 0)
|
||||||
var y = symbolSize * Mathf.Sin(30 * Mathf.PI / 180);
|
{
|
||||||
var p1 = new Vector2(pos.x - x, pos.y - y);
|
ChartDrawer.DrawTriangle(vh, pos, symbolSize + gap, backgroundColor);
|
||||||
var p2 = new Vector2(pos.x, pos.y + symbolSize);
|
ChartDrawer.DrawTriangle(vh, pos, symbolSize, color);
|
||||||
var p3 = new Vector2(pos.x + x, pos.y - y);
|
}
|
||||||
ChartDrawer.DrawTriangle(vh, p1, p2, p3, color);
|
else
|
||||||
|
{
|
||||||
|
ChartDrawer.DrawTriangle(vh, pos, symbolSize, color);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case SerieSymbolType.Diamond:
|
case SerieSymbolType.Diamond:
|
||||||
p1 = new Vector2(pos.x - symbolSize, pos.y);
|
if (gap > 0)
|
||||||
p2 = new Vector2(pos.x, pos.y + symbolSize);
|
{
|
||||||
p3 = new Vector2(pos.x + symbolSize, pos.y);
|
ChartDrawer.DrawDiamond(vh, pos, symbolSize + gap, backgroundColor);
|
||||||
var p4 = new Vector2(pos.x, pos.y - symbolSize);
|
ChartDrawer.DrawDiamond(vh, pos, symbolSize, color);
|
||||||
ChartDrawer.DrawPolygon(vh, p1, p2, p3, p4, color);
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ChartDrawer.DrawDiamond(vh, pos, symbolSize, color);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ namespace XCharts
|
|||||||
float symbolSize = highlight ? serie.symbol.selectedSize : serie.symbol.size;
|
float symbolSize = highlight ? serie.symbol.selectedSize : serie.symbol.size;
|
||||||
var symbolColor = serie.GetSymbolColor(m_ThemeInfo, n, highlight);
|
var symbolColor = serie.GetSymbolColor(m_ThemeInfo, n, highlight);
|
||||||
symbolSize = serie.animation.GetSysmbolSize(symbolSize);
|
symbolSize = serie.animation.GetSysmbolSize(symbolSize);
|
||||||
DrawSymbol(vh, serie.symbol.type, symbolSize, serie.lineStyle.width, p, symbolColor);
|
DrawSymbol(vh, serie.symbol.type, symbolSize, serie.lineStyle.width, p, symbolColor, serie.symbol.gap);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -55,13 +55,13 @@ namespace XCharts
|
|||||||
{
|
{
|
||||||
var nowSize = serie.symbol.animationSize[count];
|
var nowSize = serie.symbol.animationSize[count];
|
||||||
color.a = (symbolSize - nowSize) / symbolSize;
|
color.a = (symbolSize - nowSize) / symbolSize;
|
||||||
DrawSymbol(vh, serie.symbol.type, nowSize, 3, pos, color);
|
DrawSymbol(vh, serie.symbol.type, nowSize, 3, pos, color, serie.symbol.gap);
|
||||||
}
|
}
|
||||||
RefreshChart();
|
RefreshChart();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
DrawSymbol(vh, serie.symbol.type, symbolSize, 3, pos, color);
|
DrawSymbol(vh, serie.symbol.type, symbolSize, 3, pos, color, serie.symbol.gap);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!serie.animation.IsFinish())
|
if (!serie.animation.IsFinish())
|
||||||
|
|||||||
@@ -297,7 +297,8 @@ namespace XCharts
|
|||||||
symbolColor.a *= serie.symbol.opacity;
|
symbolColor.a *= serie.symbol.opacity;
|
||||||
foreach (var point in pointList)
|
foreach (var point in pointList)
|
||||||
{
|
{
|
||||||
DrawSymbol(vh, serie.symbol.type, symbolSize, serie.lineStyle.width, point, symbolColor);
|
DrawSymbol(vh, serie.symbol.type, symbolSize, serie.lineStyle.width, point, symbolColor,
|
||||||
|
serie.symbol.gap);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -152,6 +152,15 @@ namespace XCharts
|
|||||||
DrawDotLine(vh, p1, p2, size, color, zebraWidth, zebraGap);
|
DrawDotLine(vh, p1, p2, size, color, zebraWidth, zebraGap);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void DrawDiamond(VertexHelper vh, Vector3 pos, float size, Color32 color)
|
||||||
|
{
|
||||||
|
var p1 = new Vector2(pos.x - size, pos.y);
|
||||||
|
var p2 = new Vector2(pos.x, pos.y + size);
|
||||||
|
var p3 = new Vector2(pos.x + size, pos.y);
|
||||||
|
var p4 = new Vector2(pos.x, pos.y - size);
|
||||||
|
ChartDrawer.DrawPolygon(vh, p1, p2, p3, p4, color);
|
||||||
|
}
|
||||||
|
|
||||||
public static void DrawPolygon(VertexHelper vh, Vector3 p, float radius, Color32 color,
|
public static void DrawPolygon(VertexHelper vh, Vector3 p, float radius, Color32 color,
|
||||||
bool vertical = true)
|
bool vertical = true)
|
||||||
{
|
{
|
||||||
@@ -266,6 +275,16 @@ namespace XCharts
|
|||||||
DrawTriangle(vh, p1, p2, p3, color, color, color);
|
DrawTriangle(vh, p1, p2, p3, color, color, color);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void DrawTriangle(VertexHelper vh, Vector3 pos, float size, Color32 color)
|
||||||
|
{
|
||||||
|
var x = size * Mathf.Cos(30 * Mathf.PI / 180);
|
||||||
|
var y = size * Mathf.Sin(30 * Mathf.PI / 180);
|
||||||
|
var p1 = new Vector2(pos.x - x, pos.y - y);
|
||||||
|
var p2 = new Vector2(pos.x, pos.y + size);
|
||||||
|
var p3 = new Vector2(pos.x + x, pos.y - y);
|
||||||
|
ChartDrawer.DrawTriangle(vh, p1, p2, p3, color);
|
||||||
|
}
|
||||||
|
|
||||||
public static void DrawTriangle(VertexHelper vh, Vector3 p1,
|
public static void DrawTriangle(VertexHelper vh, Vector3 p1,
|
||||||
Vector3 p2, Vector3 p3, Color32 color, Color32 color2, Color32 color3)
|
Vector3 p2, Vector3 p3, Color32 color, Color32 color2, Color32 color3)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user