增加SerieSymbol的Color、Opacity配置

This commit is contained in:
monitor1394
2019-08-07 23:33:27 +08:00
parent 4684affac6
commit 6c680d0d98
6 changed files with 6912 additions and 37203 deletions

View File

@@ -7,6 +7,8 @@ namespace XCharts
[CustomPropertyDrawer(typeof(SerieSymbol), true)]
public class SerieSymbolDrawer : PropertyDrawer
{
private Dictionary<string, bool> m_SerieSymbolToggle = new Dictionary<string, bool>();
public override void OnGUI(Rect pos, SerializedProperty prop, GUIContent label)
{
Rect drawRect = pos;
@@ -18,47 +20,66 @@ namespace XCharts
SerializedProperty m_DataIndex = prop.FindPropertyRelative("m_DataIndex");
SerializedProperty m_DataScale = prop.FindPropertyRelative("m_DataScale");
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;
EditorGUI.PropertyField(drawRect, m_SizeType, new GUIContent("Symbol SizeType"));
drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
SerieSymbolSizeType sizeType = (SerieSymbolSizeType)m_SizeType.enumValueIndex;
switch (sizeType)
if (ChartEditorHelper.IsToggle(m_SerieSymbolToggle, prop))
{
case SerieSymbolSizeType.Custom:
EditorGUI.PropertyField(drawRect, m_Size, new GUIContent("Symbol Size"));
drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
EditorGUI.PropertyField(drawRect, m_SelectedSize, new GUIContent("Symbol SelectedSize"));
drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
break;
case SerieSymbolSizeType.FromData:
EditorGUI.PropertyField(drawRect, m_DataIndex, new GUIContent("Symbol DataIndex"));
drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
EditorGUI.PropertyField(drawRect, m_DataScale, new GUIContent("Symbol DataScale"));
drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
EditorGUI.PropertyField(drawRect, m_SelectedDataScale, new GUIContent("Symbol SelectedDataScale"));
drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
break;
case SerieSymbolSizeType.Callback:
break;
++EditorGUI.indentLevel;
EditorGUI.PropertyField(drawRect, m_SizeType);
drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
SerieSymbolSizeType sizeType = (SerieSymbolSizeType)m_SizeType.enumValueIndex;
switch (sizeType)
{
case SerieSymbolSizeType.Custom:
EditorGUI.PropertyField(drawRect, m_Size);
drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
EditorGUI.PropertyField(drawRect, m_SelectedSize);
drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
break;
case SerieSymbolSizeType.FromData:
EditorGUI.PropertyField(drawRect, m_DataIndex);
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)
{
SerializedProperty m_SizeType = prop.FindPropertyRelative("m_SizeType");
SerieSymbolSizeType sizeType = (SerieSymbolSizeType)m_SizeType.enumValueIndex;
switch (sizeType)
if (ChartEditorHelper.IsToggle(m_SerieSymbolToggle, prop))
{
case SerieSymbolSizeType.Custom:
return 4 * EditorGUIUtility.singleLineHeight + 4 * EditorGUIUtility.standardVerticalSpacing;
case SerieSymbolSizeType.FromData:
return 5 * EditorGUIUtility.singleLineHeight + 5 * EditorGUIUtility.standardVerticalSpacing;
case SerieSymbolSizeType.Callback:
return 4 * EditorGUIUtility.singleLineHeight + 4 * EditorGUIUtility.standardVerticalSpacing;
SerializedProperty m_SizeType = prop.FindPropertyRelative("m_SizeType");
SerieSymbolSizeType sizeType = (SerieSymbolSizeType)m_SizeType.enumValueIndex;
switch (sizeType)
{
case SerieSymbolSizeType.Custom:
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 SymbolSizeCallback m_SizeCallback;
[SerializeField] private SymbolSizeCallback m_SelectedSizeCallback;
[SerializeField] private Color m_Color;
[SerializeField] [Range(0, 1)] private float m_Opacity = 1;
/// <summary>
/// the type of symbol.
@@ -135,7 +137,18 @@ namespace XCharts
/// </summary>
/// <value></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 };
/// <summary>
/// the setting for effect scatter.

View File

@@ -96,11 +96,12 @@ namespace XCharts
for (int n = 0; n < m_Series.Count; n++)
{
var serie = m_Series.GetSerie(n);
if (!serie.show) continue;
var color = m_ThemeInfo.GetColor(serie.index);
float symbolSize = serie.symbol.size;
if (!serie.show || serie.symbol.type == SerieSymbolType.None) continue;
var color = serie.symbol.color != Color.clear ? serie.symbol.color : (Color)m_ThemeInfo.GetColor(serie.index);
color.a *= serie.symbol.opacity;
for (int i = 0; i < serie.dataPoints.Count; i++)
{
float symbolSize = serie.symbol.size;
Vector3 p = serie.dataPoints[i];
if ((m_Tooltip.show && m_Tooltip.IsSelected(i))
|| serie.data[i].highlighted
@@ -115,18 +116,16 @@ namespace XCharts
}
else
{
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>();
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);
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)
{
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 (m_Tooltip.IsActive())

View File

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