增加SerieSymbol的Color、Opacity配置

This commit is contained in:
monitor1394
2019-08-07 23:33:27 +08:00
parent 1ad3bc8c9f
commit 96e2255960
7 changed files with 6913 additions and 37203 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -7,6 +7,8 @@ namespace XCharts
[CustomPropertyDrawer(typeof(SerieSymbol), true)] [CustomPropertyDrawer(typeof(SerieSymbol), true)]
public class SerieSymbolDrawer : PropertyDrawer public class SerieSymbolDrawer : PropertyDrawer
{ {
private Dictionary<string, bool> m_SerieSymbolToggle = new Dictionary<string, bool>();
public override void OnGUI(Rect pos, SerializedProperty prop, GUIContent label) public override void OnGUI(Rect pos, SerializedProperty prop, GUIContent label)
{ {
Rect drawRect = pos; Rect drawRect = pos;
@@ -18,47 +20,66 @@ namespace XCharts
SerializedProperty m_DataIndex = prop.FindPropertyRelative("m_DataIndex"); SerializedProperty m_DataIndex = prop.FindPropertyRelative("m_DataIndex");
SerializedProperty m_DataScale = prop.FindPropertyRelative("m_DataScale"); SerializedProperty m_DataScale = prop.FindPropertyRelative("m_DataScale");
SerializedProperty m_SelectedDataScale = prop.FindPropertyRelative("m_SelectedDataScale"); SerializedProperty m_SelectedDataScale = prop.FindPropertyRelative("m_SelectedDataScale");
SerializedProperty m_Color = prop.FindPropertyRelative("m_Color");
SerializedProperty m_Opacity = prop.FindPropertyRelative("m_Opacity");
EditorGUI.PropertyField(drawRect, m_Type, new GUIContent("Symbol Type")); ChartEditorHelper.MakeFoldout(ref drawRect, ref m_SerieSymbolToggle, prop, null, m_Type, false);
drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
EditorGUI.PropertyField(drawRect, m_SizeType, new GUIContent("Symbol SizeType")); if (ChartEditorHelper.IsToggle(m_SerieSymbolToggle, prop))
drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
SerieSymbolSizeType sizeType = (SerieSymbolSizeType)m_SizeType.enumValueIndex;
switch (sizeType)
{ {
case SerieSymbolSizeType.Custom: ++EditorGUI.indentLevel;
EditorGUI.PropertyField(drawRect, m_Size, new GUIContent("Symbol Size"));
drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; EditorGUI.PropertyField(drawRect, m_SizeType);
EditorGUI.PropertyField(drawRect, m_SelectedSize, new GUIContent("Symbol SelectedSize")); drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; SerieSymbolSizeType sizeType = (SerieSymbolSizeType)m_SizeType.enumValueIndex;
break; switch (sizeType)
case SerieSymbolSizeType.FromData: {
EditorGUI.PropertyField(drawRect, m_DataIndex, new GUIContent("Symbol DataIndex")); case SerieSymbolSizeType.Custom:
drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; EditorGUI.PropertyField(drawRect, m_Size);
EditorGUI.PropertyField(drawRect, m_DataScale, new GUIContent("Symbol DataScale")); drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; EditorGUI.PropertyField(drawRect, m_SelectedSize);
EditorGUI.PropertyField(drawRect, m_SelectedDataScale, new GUIContent("Symbol SelectedDataScale")); drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; break;
break; case SerieSymbolSizeType.FromData:
case SerieSymbolSizeType.Callback: EditorGUI.PropertyField(drawRect, m_DataIndex);
break; drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
EditorGUI.PropertyField(drawRect, m_DataScale);
drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
EditorGUI.PropertyField(drawRect, m_SelectedDataScale);
drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
break;
case SerieSymbolSizeType.Callback:
break;
}
EditorGUI.PropertyField(drawRect, m_Color);
drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
EditorGUI.PropertyField(drawRect, m_Opacity);
drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
--EditorGUI.indentLevel;
} }
} }
public override float GetPropertyHeight(SerializedProperty prop, GUIContent label) public override float GetPropertyHeight(SerializedProperty prop, GUIContent label)
{ {
SerializedProperty m_SizeType = prop.FindPropertyRelative("m_SizeType"); if (ChartEditorHelper.IsToggle(m_SerieSymbolToggle, prop))
SerieSymbolSizeType sizeType = (SerieSymbolSizeType)m_SizeType.enumValueIndex;
switch (sizeType)
{ {
case SerieSymbolSizeType.Custom: SerializedProperty m_SizeType = prop.FindPropertyRelative("m_SizeType");
return 4 * EditorGUIUtility.singleLineHeight + 4 * EditorGUIUtility.standardVerticalSpacing; SerieSymbolSizeType sizeType = (SerieSymbolSizeType)m_SizeType.enumValueIndex;
case SerieSymbolSizeType.FromData: switch (sizeType)
return 5 * EditorGUIUtility.singleLineHeight + 5 * EditorGUIUtility.standardVerticalSpacing; {
case SerieSymbolSizeType.Callback: case SerieSymbolSizeType.Custom:
return 4 * EditorGUIUtility.singleLineHeight + 4 * EditorGUIUtility.standardVerticalSpacing; return 6 * EditorGUIUtility.singleLineHeight + 6 * EditorGUIUtility.standardVerticalSpacing;
case SerieSymbolSizeType.FromData:
return 7 * EditorGUIUtility.singleLineHeight + 7 * EditorGUIUtility.standardVerticalSpacing;
case SerieSymbolSizeType.Callback:
return 6 * EditorGUIUtility.singleLineHeight + 6 * EditorGUIUtility.standardVerticalSpacing;
}
return 6 * EditorGUIUtility.singleLineHeight + 6 * EditorGUIUtility.standardVerticalSpacing;
}
else
{
return EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
} }
return 4 * EditorGUIUtility.singleLineHeight + 4 * EditorGUIUtility.standardVerticalSpacing;
} }
} }
} }

View File

@@ -80,6 +80,8 @@ namespace XCharts
[SerializeField] private float m_SelectedDataScale = 1.5f; [SerializeField] private float m_SelectedDataScale = 1.5f;
[SerializeField] private SymbolSizeCallback m_SizeCallback; [SerializeField] private SymbolSizeCallback m_SizeCallback;
[SerializeField] private SymbolSizeCallback m_SelectedSizeCallback; [SerializeField] private SymbolSizeCallback m_SelectedSizeCallback;
[SerializeField] private Color m_Color;
[SerializeField] [Range(0, 1)] private float m_Opacity = 1;
/// <summary> /// <summary>
/// the type of symbol. /// the type of symbol.
@@ -135,7 +137,18 @@ namespace XCharts
/// </summary> /// </summary>
/// <value></value> /// <value></value>
public SymbolSizeCallback selectedSizeCallback { get { return m_SelectedSizeCallback; } set { m_SelectedSizeCallback = value; } } public SymbolSizeCallback selectedSizeCallback { get { return m_SelectedSizeCallback; } set { m_SelectedSizeCallback = value; } }
/// <summary>
/// the color of symbol,default from serie.
/// 标记图形的颜色,默认和系列一致。
/// </summary>
/// <value></value>
public Color color { get { return m_Color; } set { m_Color = value; } }
/// <summary>
/// the opacity of color.
/// 图形标记的透明度。
/// </summary>
/// <value></value>
public float opacity { get { return m_Opacity; } set { m_Opacity = 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

@@ -96,11 +96,12 @@ namespace XCharts
for (int n = 0; n < m_Series.Count; n++) for (int n = 0; n < m_Series.Count; n++)
{ {
var serie = m_Series.GetSerie(n); var serie = m_Series.GetSerie(n);
if (!serie.show) continue; if (!serie.show || serie.symbol.type == SerieSymbolType.None) continue;
var color = m_ThemeInfo.GetColor(serie.index); var color = serie.symbol.color != Color.clear ? serie.symbol.color : (Color)m_ThemeInfo.GetColor(serie.index);
float symbolSize = serie.symbol.size; color.a *= serie.symbol.opacity;
for (int i = 0; i < serie.dataPoints.Count; i++) for (int i = 0; i < serie.dataPoints.Count; i++)
{ {
float symbolSize = serie.symbol.size;
Vector3 p = serie.dataPoints[i]; Vector3 p = serie.dataPoints[i];
if ((m_Tooltip.show && m_Tooltip.IsSelected(i)) if ((m_Tooltip.show && m_Tooltip.IsSelected(i))
|| serie.data[i].highlighted || serie.data[i].highlighted
@@ -115,18 +116,16 @@ namespace XCharts
} }
else else
{ {
symbolSize = serie.symbol.selectedSize; symbolSize = serie.symbol.selectedSize;
} }
} }
DrawSymbol(vh, serie.symbol.type, symbolSize, m_Line.tickness, p, color); DrawSymbol(vh, serie.symbol.type, symbolSize, serie.lineStyle.width, p, color);
} }
} }
} }
// List<Vector3> lastPoints = new List<Vector3>();
// List<Vector3> lastSmoothPoints = new List<Vector3>();
// List<Vector3> smoothPoints = new List<Vector3>();
List<Vector3> smoothSegmentPoints = new List<Vector3>(); List<Vector3> smoothSegmentPoints = new List<Vector3>();
private void DrawXLineSerie(VertexHelper vh, int serieIndex, Color lineColor, Serie serie, ref List<float> seriesHig) private void DrawXLineSerie(VertexHelper vh, int serieIndex, Color lineColor, Serie serie, ref List<float> seriesHig)
{ {

View File

@@ -297,9 +297,11 @@ namespace XCharts
{ {
var symbolSize = (isHighlight ? serie.symbol.selectedSize : serie.symbol.size); var symbolSize = (isHighlight ? serie.symbol.selectedSize : serie.symbol.size);
float symbolRadius = symbolSize - serie.lineStyle.width * 2; float symbolRadius = symbolSize - serie.lineStyle.width * 2;
var symbolColor = serie.symbol.color != Color.clear ? serie.symbol.color : lineColor;
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, lineColor); DrawSymbol(vh, serie.symbol.type, symbolSize, serie.lineStyle.width, point, symbolColor);
} }
} }
} }
@@ -447,7 +449,7 @@ namespace XCharts
} }
} }
} }
if (!highlight) if (!highlight)
{ {
if (m_Tooltip.IsActive()) if (m_Tooltip.IsActive())

View File

@@ -79,8 +79,8 @@ namespace XCharts
{ {
continue; continue;
} }
var color = m_ThemeInfo.GetColor(serieNameCount); var color = serie.symbol.color != Color.clear ? serie.symbol.color : (Color)m_ThemeInfo.GetColor(serieNameCount);
color.a = 200; color.a *= serie.symbol.opacity;
int maxCount = maxShowDataNumber > 0 ? int maxCount = maxShowDataNumber > 0 ?
(maxShowDataNumber > serie.dataCount ? serie.dataCount : maxShowDataNumber) (maxShowDataNumber > serie.dataCount ? serie.dataCount : maxShowDataNumber)
: serie.dataCount; : serie.dataCount;
@@ -111,7 +111,7 @@ namespace XCharts
for (int count = 0; count < serie.symbol.animationSize.Count; count++) for (int count = 0; count < serie.symbol.animationSize.Count; count++)
{ {
var nowSize = serie.symbol.animationSize[count]; var nowSize = serie.symbol.animationSize[count];
color.a = (byte)(255 * (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);
} }
RefreshChart(); RefreshChart();

View File

@@ -23,6 +23,7 @@ QQ交流群XCharts交流群202030963
## 更新日志 ## 更新日志
* 2019.08.07)增加`SerieSymbol``Color``Opacity`配置
* 2019.08.07)发布`v0.8.2`版本 * 2019.08.07)发布`v0.8.2`版本
* 2019.08.07)修复区域平滑折线图显示异常的问题 * 2019.08.07)修复区域平滑折线图显示异常的问题
* 2019.08.06修复serie系列数超过调色盘颜色数时获取的颜色异常的问题 * 2019.08.06修复serie系列数超过调色盘颜色数时获取的颜色异常的问题