增加SerieSymbolgap参数控制图形标记的外留白距离

This commit is contained in:
monitor1394
2020-02-08 14:13:45 +08:00
parent 5d74373d7a
commit 5a6ce21ba1
9 changed files with 87 additions and 24 deletions

View File

@@ -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`的支持

View File

@@ -791,6 +791,7 @@
* `Triangle`:三角形。 * `Triangle`:三角形。
* `Diamond`:菱形。 * `Diamond`:菱形。
* `None`:不显示标记。 * `None`:不显示标记。
* `gap`:图形标记的外留白距离。
* `sizeType`:标记图形的大小获取方式。支持以下三种类型: * `sizeType`:标记图形的大小获取方式。支持以下三种类型:
* `Custom`:自定义大小。 * `Custom`:自定义大小。
* `FromData`:通过 `dataIndex` 从数据中获取,再乘以一个比例系数 `dataScale` * `FromData`:通过 `dataIndex` 从数据中获取,再乘以一个比例系数 `dataScale`

View File

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

View File

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

View File

@@ -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:
ChartDrawer.DrawPolygon(vh, pos, symbolSize, color); if (gap > 0)
{
ChartDrawer.DrawPolygon(vh, pos, symbolSize + gap, backgroundColor);
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;
} }
} }

View File

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

View File

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

View File

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

View File

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