mirror of
https://github.com/XCharts-Team/XCharts.git
synced 2026-05-14 20:00:09 +00:00
[add][VisualMap] add workOnLine and workOnArea (#191)
This commit is contained in:
@@ -50,6 +50,8 @@
|
||||
|
||||
## master
|
||||
|
||||
* (2022.04.13) 增加`VisualMap`的`workOnLine`和`workOnArea`以支持是对折线还是区域映射的功能 #191
|
||||
* (2022.04.12) 优化`Radar`支持`Area`区域触发`Tooltip`
|
||||
* (2022.04.09) 优化`VisualMap`
|
||||
* (2022.04.09) 优化`Tooltip`
|
||||
|
||||
|
||||
@@ -20,6 +20,8 @@ namespace XCharts.Editor
|
||||
PropertyField("m_Max");
|
||||
PropertyField("m_SplitNumber");
|
||||
PropertyField("m_Dimension");
|
||||
PropertyField("m_WorkOnLine");
|
||||
PropertyField("m_WorkOnArea");
|
||||
PropertyField("m_ShowUI");
|
||||
if (baseProperty.FindPropertyRelative("m_ShowUI").boolValue)
|
||||
{
|
||||
|
||||
@@ -98,6 +98,9 @@ namespace XCharts.Runtime
|
||||
[SerializeField] private bool m_AutoMinMax = true;
|
||||
[SerializeField] private Orient m_Orient = Orient.Horizonal;
|
||||
[SerializeField] private Location m_Location = Location.defaultLeft;
|
||||
[SerializeField] private bool m_WorkOnLine = true;
|
||||
[SerializeField] private bool m_WorkOnArea = false;
|
||||
|
||||
[SerializeField] private List<Color32> m_InRange = new List<Color32>();
|
||||
[SerializeField] private List<Color32> m_OutOfRange = new List<Color32>() { Color.gray };
|
||||
[SerializeField] private List<VisualMapPieces> m_Pieces = new List<VisualMapPieces>();
|
||||
@@ -310,6 +313,24 @@ namespace XCharts.Runtime
|
||||
set { if (PropertyUtil.SetClass(ref m_Location, value)) SetVerticesDirty(); }
|
||||
}
|
||||
/// <summary>
|
||||
/// Whether the visualmap is work on linestyle of linechart.
|
||||
/// |组件是否对LineChart的LineStyle有效。
|
||||
/// </summary>
|
||||
public bool workOnLine
|
||||
{
|
||||
get { return m_WorkOnLine; }
|
||||
set { if (PropertyUtil.SetStruct(ref m_WorkOnLine, value)) SetVerticesDirty(); }
|
||||
}
|
||||
/// <summary>
|
||||
/// Whether the visualmap is work on areaStyle of linechart.
|
||||
/// |组件是否对LineChart的AreaStyle有效。
|
||||
/// </summary>
|
||||
public bool workOnArea
|
||||
{
|
||||
get { return m_WorkOnArea; }
|
||||
set { if (PropertyUtil.SetStruct(ref m_WorkOnArea, value)) SetVerticesDirty(); }
|
||||
}
|
||||
/// <summary>
|
||||
/// Defines the visual color in the selected range.
|
||||
/// |定义 在选中范围中 的视觉颜色。
|
||||
/// </summary>
|
||||
|
||||
@@ -147,12 +147,30 @@ namespace XCharts.Runtime
|
||||
{
|
||||
if (visualMap == null)
|
||||
return false;
|
||||
if (!visualMap.show)
|
||||
if (!visualMap.show || (!visualMap.workOnLine && !visualMap.workOnArea))
|
||||
return false;
|
||||
if (visualMap.inRange.Count <= 0 && visualMap.pieces.Count <= 0)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
public static bool IsNeedLineGradient(VisualMap visualMap)
|
||||
{
|
||||
if (visualMap == null)
|
||||
return false;
|
||||
if (!visualMap.show || !visualMap.workOnLine)
|
||||
return false;
|
||||
if (visualMap.inRange.Count <= 0 && visualMap.pieces.Count <= 0)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
public static bool IsNeedAreaGradient(VisualMap visualMap)
|
||||
{
|
||||
if (visualMap == null)
|
||||
return false;
|
||||
if (!visualMap.show || !visualMap.workOnArea)
|
||||
return false;
|
||||
|
||||
if (visualMap.inRange.Count <= 0 && visualMap.pieces.Count <= 0)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -349,7 +349,7 @@ namespace XCharts.Runtime
|
||||
|
||||
VisualMapHelper.AutoSetLineMinMax(visualMap, serie, isY, axis, relativedAxis);
|
||||
LineHelper.UpdateSerieDrawPoints(serie, chart.settings, chart.theme, visualMap, lineWidth, isY);
|
||||
LineHelper.DrawSerieLineArea(vh, serie, lastSerie, chart.theme, isY, axis, relativedAxis, m_SerieGrid);
|
||||
LineHelper.DrawSerieLineArea(vh, serie, lastSerie, chart.theme, visualMap, isY, axis, relativedAxis, m_SerieGrid);
|
||||
LineHelper.DrawSerieLine(vh, chart.theme, serie, visualMap, m_SerieGrid, axis, relativedAxis, lineWidth);
|
||||
|
||||
serie.context.vertCount = vh.currentVertCount;
|
||||
|
||||
@@ -23,7 +23,7 @@ namespace XCharts.Runtime
|
||||
}
|
||||
|
||||
public static void DrawSerieLineArea(VertexHelper vh, Serie serie, Serie lastStackSerie,
|
||||
ThemeStyle theme, bool isY, Axis axis, Axis relativedAxis, GridCoord grid)
|
||||
ThemeStyle theme, VisualMap visualMap, bool isY, Axis axis, Axis relativedAxis, GridCoord grid)
|
||||
{
|
||||
if (serie.areaStyle == null || !serie.areaStyle.show)
|
||||
return;
|
||||
@@ -33,26 +33,32 @@ namespace XCharts.Runtime
|
||||
var gridXY = (isY ? grid.context.x : grid.context.y);
|
||||
if (lastStackSerie == null)
|
||||
{
|
||||
LineHelper.DrawSerieLineNormalArea(vh, serie, isY,
|
||||
DrawSerieLineNormalArea(vh, serie, isY,
|
||||
gridXY + relativedAxis.context.offset,
|
||||
gridXY,
|
||||
gridXY + (isY ? grid.context.width : grid.context.height),
|
||||
srcAreaColor,
|
||||
srcAreaToColor);
|
||||
srcAreaToColor,
|
||||
visualMap,
|
||||
axis,
|
||||
relativedAxis,
|
||||
grid);
|
||||
}
|
||||
else
|
||||
{
|
||||
LineHelper.DrawSerieLineStackArea(vh, serie, lastStackSerie, isY,
|
||||
DrawSerieLineStackArea(vh, serie, lastStackSerie, isY,
|
||||
gridXY + relativedAxis.context.offset,
|
||||
gridXY,
|
||||
gridXY + (isY ? grid.context.width : grid.context.height),
|
||||
srcAreaColor,
|
||||
srcAreaToColor);
|
||||
srcAreaToColor,
|
||||
visualMap);
|
||||
}
|
||||
}
|
||||
|
||||
private static void DrawSerieLineNormalArea(VertexHelper vh, Serie serie, bool isY,
|
||||
float zero, float min, float max, Color32 color, Color32 toColor)
|
||||
float zero, float min, float max, Color32 areaColor, Color32 areaToColor,
|
||||
VisualMap visualMap, Axis axis, Axis relativedAxis, GridCoord grid)
|
||||
{
|
||||
var points = serie.context.drawPoints;
|
||||
var count = points.Count;
|
||||
@@ -61,7 +67,8 @@ namespace XCharts.Runtime
|
||||
|
||||
var isBreak = false;
|
||||
var lp = Vector3.zero;
|
||||
var lerp = !ChartHelper.IsValueEqualsColor(color, toColor);
|
||||
var isVisualMapGradient = VisualMapHelper.IsNeedAreaGradient(visualMap);
|
||||
var areaLerp = !ChartHelper.IsValueEqualsColor(areaColor, areaToColor);
|
||||
var zsp = isY
|
||||
? new Vector3(zero, points[0].position.y)
|
||||
: new Vector3(points[0].position.x, zero);
|
||||
@@ -74,6 +81,9 @@ namespace XCharts.Runtime
|
||||
{
|
||||
var tp = points[i].position;
|
||||
var isIgnore = points[i].isIgnoreBreak;
|
||||
var color = areaColor;
|
||||
var toColor = areaToColor;
|
||||
var lerp = areaLerp;
|
||||
|
||||
if (serie.animation.CheckDetailBreak(tp, isY))
|
||||
{
|
||||
@@ -87,6 +97,12 @@ namespace XCharts.Runtime
|
||||
if (UGLHelper.GetIntersection(lp, tp, axisStartPos, axisEndPos, ref ip))
|
||||
tp = ip;
|
||||
}
|
||||
if (isVisualMapGradient)
|
||||
{
|
||||
color = VisualMapHelper.GetLineGradientColor(visualMap, tp, grid, axis, relativedAxis, areaColor);
|
||||
toColor = color;
|
||||
lerp = false;
|
||||
}
|
||||
|
||||
var zp = isY ? new Vector3(zero, tp.y) : new Vector3(tp.x, zero);
|
||||
|
||||
@@ -133,7 +149,7 @@ namespace XCharts.Runtime
|
||||
}
|
||||
|
||||
private static void DrawSerieLineStackArea(VertexHelper vh, Serie serie, Serie lastStackSerie, bool isY,
|
||||
float zero, float min, float max, Color32 color, Color32 toColor)
|
||||
float zero, float min, float max, Color32 color, Color32 toColor, VisualMap visualMap)
|
||||
{
|
||||
if (lastStackSerie == null)
|
||||
return;
|
||||
@@ -243,7 +259,7 @@ namespace XCharts.Runtime
|
||||
|
||||
var isBreak = false;
|
||||
var isY = axis is YAxis;
|
||||
var isVisualMapGradient = VisualMapHelper.IsNeedGradient(visualMap);
|
||||
var isVisualMapGradient = VisualMapHelper.IsNeedLineGradient(visualMap);
|
||||
var isLineStyleGradient = serie.lineStyle.IsNeedGradient();
|
||||
|
||||
//var highlight = serie.highlight || serie.context.pointerEnter;
|
||||
|
||||
@@ -239,7 +239,7 @@ namespace XCharts.Runtime
|
||||
serie.animation.InitProgress(serie.context.dataPoints, isY);
|
||||
|
||||
LineHelper.UpdateSerieDrawPoints(serie, chart.settings, chart.theme, null, lineWidth, isY);
|
||||
LineHelper.DrawSerieLineArea(vh, serie, null, chart.theme, isY, axis, relativedAxis, m_SerieGrid);
|
||||
LineHelper.DrawSerieLineArea(vh, serie, null, chart.theme, null, isY, axis, relativedAxis, m_SerieGrid);
|
||||
LineHelper.DrawSerieLine(vh, chart.theme, serie, null, m_SerieGrid, axis, relativedAxis, lineWidth);
|
||||
|
||||
serie.context.vertCount = vh.currentVertCount;
|
||||
|
||||
Reference in New Issue
Block a user