From 102a311b44b769a58c2412438a8fd62a357fe1ac Mon Sep 17 00:00:00 2001 From: Jukka Kurkela Date: Tue, 31 Dec 2019 19:56:15 +0200 Subject: [PATCH] Rewrite filler (#6795) Filler plugin is rewritten and test coverage increased --- docs/general/performance.md | 22 +- src/controllers/controller.line.js | 3 +- src/controllers/controller.radar.js | 12 +- src/core/core.scale.js | 7 +- src/elements/element.line.js | 379 +++++++----- src/helpers/helpers.canvas.js | 12 +- src/helpers/helpers.curve.js | 58 ++ src/helpers/helpers.interpolation.js | 37 ++ src/helpers/helpers.math.js | 35 +- src/helpers/helpers.segment.js | 228 +++++++ src/plugins/plugin.filler.js | 555 ++++++++---------- src/scales/scale.radialLinear.js | 17 +- .../fill-line-dataset-interpolated.js | 69 +++ .../fill-line-dataset-interpolated.png | Bin 0 -> 48512 bytes .../fill-line-dataset-span-dual.png | Bin 14823 -> 15120 bytes .../plugin.filler/fill-line-dataset-span.png | Bin 23355 -> 17339 bytes .../fill-line-dataset-spline-span-below.png | Bin 12119 -> 16839 bytes .../fill-line-dataset-spline-span.png | Bin 27312 -> 27332 bytes .../fill-line-dataset-stepped.json | 62 ++ .../fill-line-dataset-stepped.png | Bin 0 -> 18772 bytes .../fill-radar-dataset-border.png | Bin 28779 -> 27430 bytes .../plugin.filler/fill-radar-dataset-span.png | Bin 20225 -> 20150 bytes .../fill-radar-dataset-spline.png | Bin 19590 -> 17984 bytes .../plugin.filler/fill-radar-dataset.png | Bin 18333 -> 17056 bytes test/specs/element.line.tests.js | 6 +- test/specs/helpers.math.tests.js | 32 + 26 files changed, 1039 insertions(+), 495 deletions(-) create mode 100644 src/helpers/helpers.interpolation.js create mode 100644 src/helpers/helpers.segment.js create mode 100644 test/fixtures/plugin.filler/fill-line-dataset-interpolated.js create mode 100644 test/fixtures/plugin.filler/fill-line-dataset-interpolated.png create mode 100644 test/fixtures/plugin.filler/fill-line-dataset-stepped.json create mode 100644 test/fixtures/plugin.filler/fill-line-dataset-stepped.png diff --git a/docs/general/performance.md b/docs/general/performance.md index 1d970a6f9..3e5669b12 100644 --- a/docs/general/performance.md +++ b/docs/general/performance.md @@ -89,7 +89,7 @@ new Chart(ctx, { ### Automatic data decimation during draw -Line element will automatically decimate data, when the following conditions are met: `tension` is `0`, `steppedLine` is `false` (default), `fill` is `false` and `borderDash` is `[]` (default).` +Line element will automatically decimate data, when the following conditions are met: `tension` is `0`, `steppedLine` is `false` (default) and `borderDash` is `[]` (default).` This improves rendering speed by skipping drawing of invisible line segments. ```javascript @@ -109,6 +109,26 @@ new Chart(ctx, { }); ``` +### Enable spanGaps + +If you have a lot of data points, it can be more performant to enable `spanGaps`. This disables segmentation of the line, which can be an unneeded step. + +To enable `spanGaps`: + +```javascript +new Chart(ctx, { + type: 'line', + data: { + datasets: [{ + spanGaps: true // enable for a single dataset + }] + }, + options: { + spanGaps: true // enable for all datasets + } +}); +``` + ### Disable Line Drawing If you have a lot of data points, it can be more performant to disable rendering of the line for a dataset and only draw points. Doing this means that there is less to draw on the canvas which will improve render performance. diff --git a/src/controllers/controller.line.js b/src/controllers/controller.line.js index 9713d3b5d..dd8eded5b 100644 --- a/src/controllers/controller.line.js +++ b/src/controllers/controller.line.js @@ -77,9 +77,8 @@ module.exports = DatasetController.extend({ // Update Line if (showLine && mode !== 'resize') { - const properties = { - _children: points, + points, options: me._resolveDatasetElementOptions() }; diff --git a/src/controllers/controller.radar.js b/src/controllers/controller.radar.js index 617677ce2..ab1f18c1c 100644 --- a/src/controllers/controller.radar.js +++ b/src/controllers/controller.radar.js @@ -90,10 +90,11 @@ module.exports = DatasetController.extend({ const meta = me._cachedMeta; const line = meta.dataset; const points = meta.data || []; - + const labels = meta.iScale._getLabels(); const properties = { - _children: points, + points, _loop: true, + _fullLoop: labels.length === points.length, options: me._resolveDatasetElementOptions() }; @@ -122,10 +123,11 @@ module.exports = DatasetController.extend({ const y = reset ? scale.yCenter : pointPosition.y; const properties = { - x: x, - y: y, + x, + y, + angle: pointPosition.angle, skip: isNaN(x) || isNaN(y), - options, + options }; me._updateElement(point, index, properties, mode); diff --git a/src/core/core.scale.js b/src/core/core.scale.js index 164ee564a..db7c10aed 100644 --- a/src/core/core.scale.js +++ b/src/core/core.scale.js @@ -876,12 +876,9 @@ class Scale extends Element { } getBaseValue() { - var me = this; - var min = me.min; - var max = me.max; + const {min, max} = this; - return me.beginAtZero ? 0 : - min < 0 && max < 0 ? max : + return min < 0 && max < 0 ? max : min > 0 && max > 0 ? min : 0; } diff --git a/src/elements/element.line.js b/src/elements/element.line.js index 67bd08e1e..18b730ee3 100644 --- a/src/elements/element.line.js +++ b/src/elements/element.line.js @@ -2,10 +2,12 @@ import defaults from '../core/core.defaults'; import Element from '../core/core.element'; -import helpers from '../helpers'; +import {_bezierInterpolation, _pointInLine, _steppedInterpolation} from '../helpers/helpers.interpolation'; +import {_computeSegments, _boundSegments} from '../helpers/helpers.segment'; +import {_steppedLineTo, _bezierCurveTo} from '../helpers/helpers.canvas'; +import {_updateBezierControlPoints} from '../helpers/helpers.curve'; const defaultColor = defaults.global.defaultColor; -const isPointInArea = helpers.canvas._isPointInArea; defaults._set('global', { elements: { @@ -24,134 +26,141 @@ defaults._set('global', { } }); -function startAtGap(points, spanGaps) { - let closePath = true; - let previous = points.length && points[0]; - let index, point; - - for (index = 1; index < points.length; ++index) { - // If there is a gap in the (looping) line, start drawing from that gap - point = points[index]; - if (!point.skip && previous.skip) { - points = points.slice(index).concat(points.slice(0, index)); - closePath = spanGaps; - break; - } - previous = point; - } - - points.closePath = closePath; - return points; +function setStyle(ctx, vm) { + ctx.lineCap = vm.borderCapStyle; + ctx.setLineDash(vm.borderDash); + ctx.lineDashOffset = vm.borderDashOffset; + ctx.lineJoin = vm.borderJoinStyle; + ctx.lineWidth = vm.borderWidth; + ctx.strokeStyle = vm.borderColor; } -function setStyle(ctx, options) { - ctx.lineCap = options.borderCapStyle; - ctx.setLineDash(options.borderDash); - ctx.lineDashOffset = options.borderDashOffset; - ctx.lineJoin = options.borderJoinStyle; - ctx.lineWidth = options.borderWidth; - ctx.strokeStyle = options.borderColor; -} - -function bezierCurveTo(ctx, previous, target, flip) { - ctx.bezierCurveTo( - flip ? previous.controlPointPreviousX : previous.controlPointNextX, - flip ? previous.controlPointPreviousY : previous.controlPointNextY, - flip ? target.controlPointNextX : target.controlPointPreviousX, - flip ? target.controlPointNextY : target.controlPointPreviousY, - target.x, - target.y); +function lineTo(ctx, previous, target) { + ctx.lineTo(target.x, target.y); } -function steppedLineTo(ctx, previous, target, flip, mode) { - if (mode === 'middle') { - const midpoint = (previous.x + target.x) / 2.0; - ctx.lineTo(midpoint, flip ? target.y : previous.y); - ctx.lineTo(midpoint, flip ? previous.y : target.y); - } else if ((mode === 'after' && !flip) || (mode !== 'after' && flip)) { - ctx.lineTo(previous.x, target.y); - } else { - ctx.lineTo(target.x, previous.y); +function getLineMethod(options) { + if (options.steppedLine) { + return _steppedLineTo; } - ctx.lineTo(target.x, target.y); -} -function normalPath(ctx, points, spanGaps, options) { - const steppedLine = options.steppedLine; - const lineMethod = steppedLine ? steppedLineTo : bezierCurveTo; - let move = true; - let index, currentVM, previousVM; + if (options.tension) { + return _bezierCurveTo; + } - for (index = 0; index < points.length; ++index) { - currentVM = points[index]; + return lineTo; +} - if (currentVM.skip) { - move = move || !spanGaps; +/** + * Create path from points, grouping by truncated x-coordinate + * Points need to be in order by x-coordinate for this to work efficiently + * @param {CanvasRenderingContext2D} ctx - Context + * @param {Line} line + * @param {object} segment + * @param {number} segment.start - start index of the segment, referring the points array + * @param {number} segment.end - end index of the segment, referring the points array + * @param {boolean} segment.loop - indicates that the segment is a loop + * @param {object} params + * @param {object} params.move - move to starting point (vs line to it) + * @param {object} params.reverse - path the segment from end to start + */ +function pathSegment(ctx, line, segment, params) { + const {start, end, loop} = segment; + const {points, options} = line; + const lineMethod = getLineMethod(options); + const count = points.length; + let {move = true, reverse} = params || {}; + let ilen = end < start ? count + end - start : end - start; + let i, point, prev; + + for (i = 0; i <= ilen; ++i) { + point = points[(start + (reverse ? ilen - i : i)) % count]; + + if (point.skip) { + // If there is a skipped point inside a segment, spanGaps must be true continue; - } - if (move) { - ctx.moveTo(currentVM.x, currentVM.y); + } else if (move) { + ctx.moveTo(point.x, point.y); move = false; - } else if (options.tension || steppedLine) { - lineMethod(ctx, previousVM, currentVM, false, steppedLine); } else { - ctx.lineTo(currentVM.x, currentVM.y); + lineMethod(ctx, prev, point, reverse, options.steppedLine); } - previousVM = currentVM; + + prev = point; } + + if (loop) { + point = points[(start + (reverse ? ilen : 0)) % count]; + lineMethod(ctx, prev, point, reverse, options.steppedLine); + } + + return !!loop; } /** * Create path from points, grouping by truncated x-coordinate * Points need to be in order by x-coordinate for this to work efficiently * @param {CanvasRenderingContext2D} ctx - Context - * @param {Point[]} points - Points defining the line - * @param {boolean} spanGaps - Are gaps spanned over + * @param {Line} line + * @param {object} segment + * @param {number} segment.start - start index of the segment, referring the points array + * @param {number} segment.end - end index of the segment, referring the points array + * @param {boolean} segment.loop - indicates that the segment is a loop + * @param {object} params + * @param {object} params.move - move to starting point (vs line to it) + * @param {object} params.reverse - path the segment from end to start */ -function fastPath(ctx, points, spanGaps) { - let move = true; - let count = 0; +function fastPathSegment(ctx, line, segment, params) { + const points = line.points; + const count = points.length; + const {start, end} = segment; + let {move = true, reverse} = params || {}; + let ilen = end < start ? count + end - start : end - start; let avgX = 0; - let index, vm, truncX, x, y, prevX, minY, maxY, lastY; + let countX = 0; + let i, point, prevX, minY, maxY, lastY; - for (index = 0; index < points.length; ++index) { - vm = points[index]; + if (move) { + point = points[(start + (reverse ? ilen : 0)) % count]; + ctx.moveTo(point.x, point.y); + } + + for (i = 0; i <= ilen; ++i) { + point = points[(start + (reverse ? ilen - i : i)) % count]; - // If point is skipped, we either move to next (not skipped) point - // or line to it if spanGaps is true. `move` can already be true. - if (vm.skip) { - move = move || !spanGaps; + if (point.skip) { + // If there is a skipped point inside a segment, spanGaps must be true continue; } - x = vm.x; - y = vm.y; - truncX = x | 0; // truncated x-coordinate + const x = point.x; + const y = point.y; + const truncX = x | 0; // truncated x-coordinate - if (move) { - ctx.moveTo(x, y); - move = false; - } else if (truncX === prevX) { + if (truncX === prevX) { // Determine `minY` / `maxY` and `avgX` while we stay within same x-position - minY = Math.min(y, minY); - maxY = Math.max(y, maxY); - // For first point in group, count is `0`, so average will be `x` / 1. - avgX = (count * avgX + x) / ++count; + if (y < minY) { + minY = y; + } else if (y > maxY) { + maxY = y; + } + // For first point in group, countX is `0`, so average will be `x` / 1. + avgX = (countX * avgX + x) / ++countX; } else { if (minY !== maxY) { // Draw line to maxY and minY, using the average x-coordinate ctx.lineTo(avgX, maxY); ctx.lineTo(avgX, minY); - // Move to y-value of last point in group. So the line continues - // from correct position. - ctx.moveTo(avgX, lastY); + // Line to y-value of last point in group. So the line continues + // from correct position. Not using move, to have solid path. + ctx.lineTo(avgX, lastY); } // Draw line to next x-position, using the first (or only) // y-value in that group ctx.lineTo(x, y); prevX = truncX; - count = 0; + countX = 0; minY = maxY = y; } // Keep track of the last y-value in group @@ -159,64 +168,23 @@ function fastPath(ctx, points, spanGaps) { } } -function useFastPath(options) { - return options.tension === 0 && !options.steppedLine && !options.fill && !options.borderDash.length; -} - -function capControlPoint(pt, min, max) { - return Math.max(Math.min(pt, max), min); +function _getSegmentMethod(line) { + const opts = line.options; + const borderDash = opts.borderDash && opts.borderDash.length; + const useFastPath = !line._loop && !opts.tension && !opts.steppedLine && !borderDash; + return useFastPath ? fastPathSegment : pathSegment; } -function capBezierPoints(points, area) { - var i, ilen, model; - for (i = 0, ilen = points.length; i < ilen; ++i) { - model = points[i]; - if (isPointInArea(model, area)) { - if (i > 0 && isPointInArea(points[i - 1], area)) { - model.controlPointPreviousX = capControlPoint(model.controlPointPreviousX, area.left, area.right); - model.controlPointPreviousY = capControlPoint(model.controlPointPreviousY, area.top, area.bottom); - } - if (i < points.length - 1 && isPointInArea(points[i + 1], area)) { - model.controlPointNextX = capControlPoint(model.controlPointNextX, area.left, area.right); - model.controlPointNextY = capControlPoint(model.controlPointNextY, area.top, area.bottom); - } - } +function _getInterpolationMethod(options) { + if (options.steppedLine) { + return _steppedInterpolation; } -} -function updateBezierControlPoints(points, options, area, loop) { - var i, ilen, point, controlPoints; - - // Only consider points that are drawn in case the spanGaps option is used - if (options.spanGaps) { - points = points.filter(function(pt) { - return !pt.skip; - }); + if (options.tension) { + return _bezierInterpolation; } - if (options.cubicInterpolationMode === 'monotone') { - helpers.curve.splineCurveMonotone(points); - } else { - let prev = loop ? points[points.length - 1] : points[0]; - for (i = 0, ilen = points.length; i < ilen; ++i) { - point = points[i]; - controlPoints = helpers.curve.splineCurve( - prev, - point, - points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen], - options.tension - ); - point.controlPointPreviousX = controlPoints.previous.x; - point.controlPointPreviousY = controlPoints.previous.y; - point.controlPointNextX = controlPoints.next.x; - point.controlPointNextY = controlPoints.next.y; - prev = point; - } - } - - if (options.capBezierPoints) { - capBezierPoints(points, area); - } + return _pointInLine; } class Line extends Element { @@ -232,40 +200,127 @@ class Line extends Element { } const options = me.options; if (options.tension && !options.steppedLine) { - updateBezierControlPoints(me._children, options, chartArea, me._loop); + const loop = options.spanGaps ? me._loop : me._fullLoop; + _updateBezierControlPoints(me._points, options, chartArea, loop); } } - drawPath(ctx, area) { + set points(points) { + this._points = points; + delete this._segments; + } + + get points() { + return this._points; + } + + get segments() { + return this._segments || (this._segments = _computeSegments(this)); + } + + /** + * First non-skipped point on this line + * @returns {Point|undefined} + */ + first() { + const segments = this.segments; + const points = this.points; + return segments.length && points[segments[0].start]; + } + + /** + * Last non-skipped point on this line + * @returns {Point|undefined} + */ + last() { + const segments = this.segments; + const points = this.points; + const count = segments.length; + return count && points[segments[count - 1].end]; + } + + /** + * Interpolate a point in this line at the same value on `property` as + * the reference `point` provided + * @param {Point} point - the reference point + * @param {string} property - the property to match on + * @returns {Point|undefined} + */ + interpolate(point, property) { const me = this; const options = me.options; - const spanGaps = options.spanGaps; - let closePath = me._loop; - let points = me._children; + const value = point[property]; + const points = me.points; + const segments = _boundSegments(me, {property, start: value, end: value}); - if (!points.length) { + if (!segments.length) { return; } - if (closePath) { - points = startAtGap(points, spanGaps); - closePath = points.closePath; + const result = []; + const _interpolate = _getInterpolationMethod(options); + let i, ilen; + for (i = 0, ilen = segments.length; i < ilen; ++i) { + const {start, end} = segments[i]; + const p1 = points[start]; + const p2 = points[end]; + if (p1 === p2) { + result.push(p1); + continue; + } + const t = Math.abs((value - p1[property]) / (p2[property] - p1[property])); + let interpolated = _interpolate(p1, p2, t, options.steppedLine); + interpolated[property] = point[property]; + result.push(interpolated); } + return result.lenght === 1 ? result[0] : result; + } - if (useFastPath(options)) { - fastPath(ctx, points, spanGaps); - } else { - me.updateControlPoints(area); - normalPath(ctx, points, spanGaps, options); - } + /** + * Append a segment of this line to current path. + * @param {CanvasRenderingContext2D} ctx + * @param {object} segment + * @param {number} segment.start - start index of the segment, referring the points array + * @param {number} segment.end - end index of the segment, referring the points array + * @param {boolean} segment.loop - indicates that the segment is a loop + * @param {object} params + * @param {object} params.move - move to starting point (vs line to it) + * @param {object} params.reverse - path the segment from end to start + * @returns {undefined|boolean} - true if the segment is a full loop (path should be closed) + */ + pathSegment(ctx, segment, params) { + const segmentMethod = _getSegmentMethod(this); + return segmentMethod(ctx, this, segment, params); + } - return closePath; + /** + * Append all segments of this line to current path. + * @param {CanvasRenderingContext2D} ctx + * @param {object} params + * @param {object} params.move - move to starting point (vs line to it) + * @param {object} params.reverse - path the segment from end to start + * @returns {undefined|boolean} - true if line is a full loop (path should be closed) + */ + path(ctx, params) { + const me = this; + const segments = me.segments; + const ilen = segments.length; + const segmentMethod = _getSegmentMethod(me); + let loop = me._loop; + for (let i = 0; i < ilen; ++i) { + loop &= segmentMethod(ctx, me, segments[i], params); + } + return !!loop; } - draw(ctx, area) { + /** + * Draw + * @param {CanvasRenderingContext2D} ctx + */ + draw(ctx) { const me = this; - if (!me._children.length) { + if (!me.points.length) { return; } @@ -275,7 +330,7 @@ class Line extends Element { ctx.beginPath(); - if (me.drawPath(ctx, area)) { + if (me.path(ctx)) { ctx.closePath(); } diff --git a/src/helpers/helpers.canvas.js b/src/helpers/helpers.canvas.js index 8c3b92e09..481eb6c01 100644 --- a/src/helpers/helpers.canvas.js +++ b/src/helpers/helpers.canvas.js @@ -174,11 +174,14 @@ export function unclipArea(ctx) { * @private */ export function _steppedLineTo(ctx, previous, target, flip, mode) { + if (!previous) { + return ctx.lineTo(target.x, target.y); + } if (mode === 'middle') { const midpoint = (previous.x + target.x) / 2.0; - ctx.lineTo(midpoint, flip ? target.y : previous.y); - ctx.lineTo(midpoint, flip ? previous.y : target.y); - } else if ((mode === 'after' && !flip) || (mode !== 'after' && flip)) { + ctx.lineTo(midpoint, previous.y); + ctx.lineTo(midpoint, target.y); + } else if (mode === 'after' ^ flip) { ctx.lineTo(previous.x, target.y); } else { ctx.lineTo(target.x, previous.y); @@ -190,6 +193,9 @@ export function _steppedLineTo(ctx, previous, target, flip, mode) { * @private */ export function _bezierCurveTo(ctx, previous, target, flip) { + if (!previous) { + return ctx.lineTo(target.x, target.y); + } ctx.bezierCurveTo( flip ? previous.controlPointPreviousX : previous.controlPointNextX, flip ? previous.controlPointPreviousY : previous.controlPointNextY, diff --git a/src/helpers/helpers.curve.js b/src/helpers/helpers.curve.js index d4bf75823..58e0952b9 100644 --- a/src/helpers/helpers.curve.js +++ b/src/helpers/helpers.curve.js @@ -1,4 +1,5 @@ import {almostEquals, sign} from './helpers.math'; +import {_isPointInArea} from './helpers.canvas'; const EPSILON = Number.EPSILON || 1e-14; @@ -128,3 +129,60 @@ export function splineCurveMonotone(points) { } } } + +function capControlPoint(pt, min, max) { + return Math.max(Math.min(pt, max), min); +} + +function capBezierPoints(points, area) { + var i, ilen, point; + for (i = 0, ilen = points.length; i < ilen; ++i) { + point = points[i]; + if (!_isPointInArea(point, area)) { + continue; + } + if (i > 0 && _isPointInArea(points[i - 1], area)) { + point.controlPointPreviousX = capControlPoint(point.controlPointPreviousX, area.left, area.right); + point.controlPointPreviousY = capControlPoint(point.controlPointPreviousY, area.top, area.bottom); + } + if (i < points.length - 1 && _isPointInArea(points[i + 1], area)) { + point.controlPointNextX = capControlPoint(point.controlPointNextX, area.left, area.right); + point.controlPointNextY = capControlPoint(point.controlPointNextY, area.top, area.bottom); + } + } +} + +export function _updateBezierControlPoints(points, options, area, loop) { + var i, ilen, point, controlPoints; + + // Only consider points that are drawn in case the spanGaps option is used + if (options.spanGaps) { + points = points.filter(function(pt) { + return !pt.skip; + }); + } + + if (options.cubicInterpolationMode === 'monotone') { + splineCurveMonotone(points); + } else { + let prev = loop ? points[points.length - 1] : points[0]; + for (i = 0, ilen = points.length; i < ilen; ++i) { + point = points[i]; + controlPoints = splineCurve( + prev, + point, + points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen], + options.tension + ); + point.controlPointPreviousX = controlPoints.previous.x; + point.controlPointPreviousY = controlPoints.previous.y; + point.controlPointNextX = controlPoints.next.x; + point.controlPointNextY = controlPoints.next.y; + prev = point; + } + } + + if (options.capBezierPoints) { + capBezierPoints(points, area); + } +} diff --git a/src/helpers/helpers.interpolation.js b/src/helpers/helpers.interpolation.js new file mode 100644 index 000000000..c8400b426 --- /dev/null +++ b/src/helpers/helpers.interpolation.js @@ -0,0 +1,37 @@ +'use strict'; + +/** + * @private + */ +export function _pointInLine(p1, p2, t) { + return { + x: p1.x + t * (p2.x - p1.x), + y: p1.y + t * (p2.y - p1.y) + }; +} + +/** + * @private + */ +export function _steppedInterpolation(p1, p2, t, mode) { + return { + x: p1.x + t * (p2.x - p1.x), + y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y + : mode === 'after' ? t < 1 ? p1.y : p2.y + : t > 0 ? p2.y : p1.y + }; +} + +/** + * @private + */ +export function _bezierInterpolation(p1, p2, t) { + const cp1 = {x: p1.controlPointNextX, y: p1.controlPointNextY}; + const cp2 = {x: p2.controlPointPreviousX, y: p2.controlPointPreviousY}; + const a = _pointInLine(p1, cp1, t); + const b = _pointInLine(cp1, cp2, t); + const c = _pointInLine(cp2, p2, t); + const d = _pointInLine(a, b, t); + const e = _pointInLine(b, c, t); + return _pointInLine(d, e, t); +} diff --git a/src/helpers/helpers.math.js b/src/helpers/helpers.math.js index 1ad309ccd..d5a5680b8 100644 --- a/src/helpers/helpers.math.js +++ b/src/helpers/helpers.math.js @@ -2,6 +2,10 @@ import {isFinite as isFiniteNumber} from './helpers.core'; +const PI = Math.PI; +const TAU = 2 * PI; +const PITAU = TAU + PI; + /** * @alias Chart.helpers.math * @namespace @@ -41,7 +45,6 @@ export const log10 = Math.log10 || function(x) { return isPowerOf10 ? powerOf10 : exponent; }; - export function isNumber(n) { return !isNaN(parseFloat(n)) && isFinite(n); } @@ -128,3 +131,33 @@ export function getAngleFromPoint(centrePoint, anglePoint) { export function distanceBetweenPoints(pt1, pt2) { return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2)); } + +/** + * Shortest distance between angles, in either direction. + * @private + */ +export function _angleDiff(a, b) { + return (a - b + PITAU) % TAU - PI; +} + +/** + * Normalize angle to be between 0 and 2*PI + * @private + */ +export function _normalizeAngle(a) { + return (a % TAU + TAU) % TAU; +} + +/** + * @private + */ +export function _angleBetween(angle, start, end) { + const a = _normalizeAngle(angle); + const s = _normalizeAngle(start); + const e = _normalizeAngle(end); + const angleToStart = _normalizeAngle(s - a); + const angleToEnd = _normalizeAngle(e - a); + const startToAngle = _normalizeAngle(a - s); + const endToAngle = _normalizeAngle(a - e); + return a === s || a === e || (angleToStart > angleToEnd && startToAngle < endToAngle); +} diff --git a/src/helpers/helpers.segment.js b/src/helpers/helpers.segment.js new file mode 100644 index 000000000..bd0099b2f --- /dev/null +++ b/src/helpers/helpers.segment.js @@ -0,0 +1,228 @@ +'use strict'; + +import {_angleBetween, _angleDiff, _normalizeAngle} from './helpers.math'; + +function propertyFn(property) { + if (property === 'angle') { + return { + between: _angleBetween, + compare: _angleDiff, + normalize: _normalizeAngle, + }; + } + return { + between: (n, s, e) => n >= s && n <= e, + compare: (a, b) => a - b, + normalize: x => x + }; +} + +function makeSubSegment(start, end, loop, count) { + return { + start: start % count, + end: end % count, + loop: loop && (end - start + 1) % count === 0 + }; +} + +function getSegment(segment, points, bounds) { + const {property, start: startBound, end: endBound} = bounds; + const {between, normalize} = propertyFn(property); + const count = points.length; + let {start, end, loop} = segment; + let i, ilen; + + if (loop) { + start += count; + end += count; + for (i = 0, ilen = count; i < ilen; ++i) { + if (!between(normalize(points[start % count][property]), startBound, endBound)) { + break; + } + start--; + end--; + } + start %= count; + end %= count; + } + + if (end < start) { + end += count; + } + return {start, end, loop}; +} + +/** + * Returns the sub-segment(s) of a line segment that fall in the given bounds + * @param {object} segment + * @param {number} segment.start - start index of the segment, referring the points array + * @param {number} segment.end - end index of the segment, referring the points array + * @param {boolean} segment.loop - indicates that the segment is a loop + * @param {Point[]} points - the points that this segment refers to + * @param {object} bounds + * @param {string} bounds.property - the property of a `Point` we are bounding. `x`, `y` or `angle`. + * @param {number} bounds.start - start value of the property + * @param {number} bounds.end - end value of the property + **/ +export function _boundSegment(segment, points, bounds) { + if (!bounds) { + return [segment]; + } + + const {property, start: startBound, end: endBound} = bounds; + const count = points.length; + const {compare, between, normalize} = propertyFn(property); + const {start, end, loop} = getSegment(segment, points, bounds); + const result = []; + let inside = false; + let subStart = null; + let i, value, point, prev; + + for (i = start; i <= end; ++i) { + point = points[i % count]; + + if (point.skip) { + continue; + } + + value = normalize(point[property]); + inside = between(value, startBound, endBound); + + if (subStart === null && inside) { + subStart = i > start && compare(value, startBound) > 0 ? prev : i; + } + + if (subStart !== null && (!inside || compare(value, endBound) === 0)) { + result.push(makeSubSegment(subStart, i, loop, count)); + subStart = null; + } + prev = i; + } + + if (subStart !== null) { + result.push(makeSubSegment(subStart, end, loop, count)); + } + + return result; +} + +/** + * Returns the segments of the line that are inside given bounds + * @param {Line} line + * @param {object} bounds + * @param {string} bounds.property - the property we are bounding with. `x`, `y` or `angle`. + * @param {number} bounds.start - start value of the `property` + * @param {number} bounds.end - end value of the `property` + */ +export function _boundSegments(line, bounds) { + const result = []; + + for (let segment of line.segments) { + let sub = _boundSegment(segment, line.points, bounds); + if (sub.length) { + result.push(...sub); + } + } + return result; +} + +/** + * Find start and end index of a line. + */ +function findStartAndEnd(points, count, loop, spanGaps) { + let start = 0; + let end = count - 1; + + if (loop && !spanGaps) { + // loop and not spaning gaps, first find a gap to start from + while (start < count && !points[start].skip) { + start++; + } + } + + // find first non skipped point (after the first gap possibly) + while (start < count && points[start].skip) { + start++; + } + + // if we looped to count, start needs to be 0 + start %= count; + + if (loop) { + // loop will go past count, if start > 0 + end += start; + } + + while (end > start && points[end % count].skip) { + end--; + } + + // end could be more than count, normalize + end %= count; + + return {start, end}; +} + +/** + * Compute solid segments from Points, when spanGaps === false + * @param {Point[]} points - the points + * @param {number} start - start index + * @param {number} max - max index (can go past count on a loop) + * @param {boolean} loop - boolean indicating that this would be a loop if no gaps are found + */ +function solidSegments(points, start, max, loop) { + const count = points.length; + const result = []; + let last = start; + let prev = points[start]; + let end; + + for (end = start + 1; end <= max; ++end) { + const cur = points[end % count]; + if (cur.skip) { + if (!prev.skip) { + loop = false; + result.push({start: start % count, end: (end - 1) % count, loop}); + start = last = null; + } + } else { + last = end; + if (prev.skip) { + start = end; + } + } + prev = cur; + } + + if (last !== null) { + result.push({start: start % count, end: last % count, loop}); + } + + return result; +} + +/** + * Compute the continuous segments that define the whole line + * There can be skipped points within a segment, if spanGaps is true. + * @param {Line} line + */ +export function _computeSegments(line) { + const points = line.points; + const spanGaps = line.options.spanGaps; + const count = points.length; + + if (!count) { + return []; + } + + const loop = !!line._loop; + const {start, end} = findStartAndEnd(points, count, loop, spanGaps); + + if (spanGaps) { + return [{start, end, loop}]; + } + + const max = end < start ? end + count : end; + const completeLoop = !!line._fullLoop && start === 0 && end === count - 1; + return solidSegments(points, start, max, completeLoop); +} diff --git a/src/plugins/plugin.filler.js b/src/plugins/plugin.filler.js index 2ddda44de..8735f15db 100644 --- a/src/plugins/plugin.filler.js +++ b/src/plugins/plugin.filler.js @@ -6,9 +6,12 @@ 'use strict'; -var defaults = require('../core/core.defaults'); -var elements = require('../elements/index'); -var helpers = require('../helpers/index'); +import defaults from '../core/core.defaults'; +import Line from '../elements/element.line'; +import {_boundSegment, _boundSegments} from '../helpers/helpers.segment'; +import {clipArea, unclipArea} from '../helpers/helpers.canvas'; +import {valueOrDefault, isFinite, isArray, extend} from '../helpers/helpers.core'; +import {_normalizeAngle} from '../helpers/helpers.math'; defaults._set('global', { plugins: { @@ -18,50 +21,19 @@ defaults._set('global', { } }); -var mappers = { - dataset: function(source) { - var index = source.fill; - var chart = source.chart; - var meta = chart.getDatasetMeta(index); - var visible = meta && chart.isDatasetVisible(index); - var points = (visible && meta.dataset._children) || []; - var length = points.length || 0; - - return !length ? null : function(point, i) { - return (i < length && points[i]) || null; - }; - }, - - boundary: function(source) { - var boundary = source.boundary; - var x = boundary ? boundary.x : null; - var y = boundary ? boundary.y : null; - - if (helpers.isArray(boundary)) { - return function(point, i) { - return boundary[i]; - }; - } - - return function(point) { - return { - x: x === null ? point.x : x, - y: y === null ? point.y : y, - boundary: true - }; - }; - } -}; +function getLineByIndex(chart, index) { + const meta = chart.getDatasetMeta(index); + const visible = meta && chart.isDatasetVisible(index); + return visible ? meta.dataset : null; +} -// @todo if (fill[0] === '#') -function decodeFill(el, index, count) { - var model = el.options || {}; - var fillOption = model.fill; - var fill = fillOption && typeof fillOption.target !== 'undefined' ? fillOption.target : fillOption; - var target; +function parseFillOption(line) { + const options = line.options; + const fillOption = options.fill; + let fill = valueOrDefault(fillOption && fillOption.target, fillOption); if (fill === undefined) { - fill = !!model.backgroundColor; + fill = !!options.backgroundColor; } if (fill === false || fill === null) { @@ -71,8 +43,14 @@ function decodeFill(el, index, count) { if (fill === true) { return 'origin'; } + return fill; +} + +// @todo if (fill[0] === '#') +function decodeFill(line, index, count) { + const fill = parseFillOption(line); + let target = parseFloat(fill, 10); - target = parseFloat(fill, 10); if (isFinite(target) && Math.floor(target) === target) { if (fill[0] === '-' || fill[0] === '+') { target = index + target; @@ -85,94 +63,88 @@ function decodeFill(el, index, count) { return target; } - switch (fill) { - // compatibility - case 'bottom': - return 'start'; - case 'top': - return 'end'; - case 'zero': - return 'origin'; - // supported boundaries - case 'origin': - case 'start': - case 'end': - return fill; - // invalid fill values - default: - return false; - } + return ['origin', 'start', 'end'].indexOf(fill) >= 0 ? fill : false; } function computeLinearBoundary(source) { - var model = source.el || {}; - var scale = source.scale || {}; - var fill = source.fill; + const {scale = {}, fill} = source; var target = null; var horizontal; - if (isFinite(fill)) { - return null; - } - - // Backward compatibility: until v3, we still need to support boundary values set on - // the model (scaleTop, scaleBottom and scaleZero) because some external plugins and - // controllers might still use it (e.g. the Smith chart). - if (fill === 'start') { - target = model.scaleBottom === undefined ? scale.bottom : model.scaleBottom; + target = scale.bottom; } else if (fill === 'end') { - target = model.scaleTop === undefined ? scale.top : model.scaleTop; - } else if (model.scaleZero !== undefined) { - target = model.scaleZero; + target = scale.top; } else if (scale.getBasePixel) { target = scale.getBasePixel(); } - if (target !== undefined && target !== null) { - if (target.x !== undefined && target.y !== undefined) { - return target; + if (isFinite(target)) { + horizontal = scale.isHorizontal(); + return { + x: horizontal ? target : null, + y: horizontal ? null : target + }; + } + + return null; +} + +// TODO: use elements.Arc instead +class simpleArc { + constructor(opts) { + extend(this, opts); + } + + pathSegment(ctx, bounds, opts) { + const {x, y, radius} = this; + bounds = bounds || {start: 0, end: Math.PI * 2}; + if (opts.reverse) { + ctx.arc(x, y, radius, bounds.end, bounds.start, true); + } else { + ctx.arc(x, y, radius, bounds.start, bounds.end); } + return !opts.bounds; + } - if (helpers.isFinite(target)) { - horizontal = scale.isHorizontal(); + interpolate(point, property) { + const {x, y, radius} = this; + const angle = point.angle; + if (property === 'angle') { return { - x: horizontal ? target : null, - y: horizontal ? null : target, - boundary: true + x: x + Math.cos(angle) * radius, + y: y + Math.sin(angle) * radius, + angle }; } } - - return null; } function computeCircularBoundary(source) { - var scale = source.scale; - var options = scale.options; - var length = scale.chart.data.labels.length; - var fill = source.fill; - var target = []; - var start, end, center, i, point; - - if (!length) { - return null; - } + const {scale, fill} = source; + const options = scale.options; + const length = scale._getLabels().length; + const target = []; + let start, end, value, i, center; start = options.reverse ? scale.max : scale.min; end = options.reverse ? scale.min : scale.max; - center = scale.getPointPositionForValue(0, start); + + value = fill === 'start' ? start + : fill === 'end' ? end + : scale.getBaseValue(); + + if (options.gridLines.circular) { + center = scale.getPointPositionForValue(0, start); + return new simpleArc({ + x: center.x, + y: center.y, + radius: scale.getDistanceFromCenterForValue(value) + }); + } + for (i = 0; i < length; ++i) { - point = fill === 'start' || fill === 'end' - ? scale.getPointPositionForValue(i, fill === 'start' ? start : end) - : scale.getBasePosition(i); - if (options.gridLines.circular) { - point.cx = center.x; - point.cy = center.y; - point.angle = scale.getIndexAngle(i) - Math.PI / 2; - } - point.boundary = true; - target.push(point); + target.push(scale.getPointPositionForValue(i, value)); } return target; } @@ -186,6 +158,48 @@ function computeBoundary(source) { return computeLinearBoundary(source); } +function pointsFromSegments(boundary, line) { + const {x = null, y = null} = boundary || {}; + const linePoints = line.points; + const points = []; + line.segments.forEach((segment) => { + const first = linePoints[segment.start]; + const last = linePoints[segment.end]; + if (y !== null) { + points.push({x: first.x, y}); + points.push({x: last.x, y}); + } else if (x !== null) { + points.push({x, y: first.y}); + points.push({x, y: last.y}); + } + }); + return points; +} + +function getTarget(source) { + const {chart, fill, line} = source; + + if (isFinite(fill)) { + return getLineByIndex(chart, fill); + } + + const boundary = computeBoundary(source); + let points = []; + let _loop = false; + + if (boundary instanceof simpleArc) { + return boundary; + } + + if (isArray(boundary)) { + _loop = true; + points = boundary; + } else { + points = pointsFromSegments(boundary, line); + } + return points.length ? new Line({points, options: {tension: 0}, _loop, _fullLoop: _loop}) : null; +} + function resolveTarget(sources, index, propagate) { var source = sources[index]; var fill = source.fill; @@ -217,219 +231,170 @@ function resolveTarget(sources, index, propagate) { return false; } -function createMapper(source) { - var fill = source.fill; - var type = 'dataset'; +function _clip(ctx, target, clipY) { + ctx.beginPath(); + target.path(ctx); + ctx.lineTo(target.last().x, clipY); + ctx.lineTo(target.first().x, clipY); + ctx.closePath(); + ctx.clip(); +} - if (fill === false) { - return null; +function getBounds(property, first, last, loop) { + if (loop) { + return; } + let start = first[property]; + let end = last[property]; - if (!isFinite(fill)) { - type = 'boundary'; + if (property === 'angle') { + start = _normalizeAngle(start); + end = _normalizeAngle(end); } - - return mappers[type](source); + return {property, start, end}; } -function isDrawable(point) { - return point && !point.skip; +function _getEdge(a, b, prop, fn) { + if (a && b) { + return fn(a[prop], b[prop]); + } + return a ? a[prop] : b ? b[prop] : 0; } -function fillPointsSets(ctx, curve0, curve1, len0, len1, area, pointSets) { - const fillAreaPointsSet = []; - const clipAboveAreaPointsSet = []; - const clipBelowAreaPointsSet = []; - const radialSet = []; - const jointPoint = {}; - let i, cx, cy, r; +function _segments(line, target, property) { + const points = line.points; + const tpoints = target.points; + const parts = []; + + for (let segment of line.segments) { + const bounds = getBounds(property, points[segment.start], points[segment.end], segment.loop); + + if (!target.segments) { + // Special case for boundary not supporting `segments` (simpleArc) + // Bounds are provided as `target` for partial circle, or undefined for full circle + parts.push({ + source: segment, + target: bounds, + start: points[segment.start], + end: points[segment.end] + }); + continue; + } - if (!len0 || !len1) { - return; - } - clipAboveAreaPointsSet.push({x: curve1[len1 - 1].x, y: area.top}); - clipBelowAreaPointsSet.push({x: curve0[0].x, y: area.top}); - clipBelowAreaPointsSet.push(curve0[0]); - - // building first area curve (normal) - fillAreaPointsSet.push(curve0[0]); - for (i = 1; i < len0; ++i) { - curve0[i].flip = false; - fillAreaPointsSet.push(curve0[i]); - clipBelowAreaPointsSet.push(curve0[i]); - } + // Get all segments from `target` that intersect the bounds of current segment of `line` + const subs = _boundSegments(target, bounds); + + for (let sub of subs) { + const subBounds = getBounds(property, tpoints[sub.start], tpoints[sub.end], sub.loop); + const fillSources = _boundSegment(segment, points, subBounds); + + for (let source of fillSources) { + parts.push({ + source, + target: sub, + start: { + [property]: _getEdge(bounds, subBounds, 'start', Math.max) + }, + end: { + [property]: _getEdge(bounds, subBounds, 'end', Math.min) + } - if (curve1[0].angle !== undefined) { - pointSets.fill.push(fillAreaPointsSet); - cx = curve1[0].cx; - cy = curve1[0].cy; - r = Math.sqrt(Math.pow(curve1[0].x - cx, 2) + Math.pow(curve1[0].y - cy, 2)); - for (i = len1 - 1; i > 0; --i) { - radialSet.push({cx: cx, cy: cy, radius: r, startAngle: curve1[i].angle, endAngle: curve1[i - 1].angle}); - } - if (radialSet.length) { - pointSets.fill.push(radialSet); - } - return; - } - // joining the two area curves - for (var key in curve1[len1 - 1]) { - if (Object.prototype.hasOwnProperty.call(curve1[len1 - 1], key)) { - jointPoint[key] = curve1[len1 - 1][key]; + }); + } } } - jointPoint.joint = true; - fillAreaPointsSet.push(jointPoint); - - // building opposite area curve (reverse) - for (i = len1 - 1; i > 0; --i) { - curve1[i].flip = true; - clipAboveAreaPointsSet.push(curve1[i]); - curve1[i - 1].flip = true; - fillAreaPointsSet.push(curve1[i - 1]); - } - clipAboveAreaPointsSet.push(curve1[0]); - clipAboveAreaPointsSet.push({x: curve1[0].x, y: area.top}); - clipBelowAreaPointsSet.push({x: curve0[len0 - 1].x, y: area.top}); - - pointSets.clipAbove.push(clipAboveAreaPointsSet); - pointSets.clipBelow.push(clipBelowAreaPointsSet); - pointSets.fill.push(fillAreaPointsSet); + return parts; } -function clipAndFill(ctx, clippingPointsSets, fillingPointsSets, color, stepped, tension) { - const lineTo = stepped ? helpers.canvas._steppedLineTo : helpers.canvas._bezierCurveTo; - let i, ilen, j, jlen, set, target; - if (clippingPointsSets) { - ctx.save(); +function clipBounds(ctx, scale, bounds) { + const {top, bottom} = scale.chart.chartArea; + const {property, start, end} = bounds || {}; + if (property === 'x') { ctx.beginPath(); - for (i = 0, ilen = clippingPointsSets.length; i < ilen; i++) { - set = clippingPointsSets[i]; - // Have edge lines straight - ctx.moveTo(set[0].x, set[0].y); - ctx.lineTo(set[1].x, set[1].y); - for (j = 2, jlen = set.length; j < jlen - 1; j++) { - target = set[j]; - if (!target.boundary && (tension || stepped)) { - lineTo(ctx, set[j - 1], target, target.flip, stepped); - } else { - ctx.lineTo(target.x, target.y); - } - } - ctx.lineTo(set[j].x, set[j].y); - } - ctx.closePath(); + ctx.rect(start, top, end - start, bottom - top); ctx.clip(); - ctx.beginPath(); } - for (i = 0, ilen = fillingPointsSets.length; i < ilen; i++) { - set = fillingPointsSets[i]; - if (set[0].startAngle !== undefined) { - for (j = 0, jlen = set.length; j < jlen; j++) { - ctx.arc(set[j].cx, set[j].cy, set[j].radius, set[j].startAngle, set[j].endAngle, true); - } - } else { - ctx.moveTo(set[0].x, set[0].y); - for (j = 1, jlen = set.length; j < jlen; j++) { - if (set[j].joint) { - ctx.lineTo(set[j].x, set[j].y); - } else { - target = set[j]; - if (!target.boundary && (tension || stepped)) { - lineTo(ctx, set[j - 1], target, target.flip, stepped); - } else { - ctx.lineTo(target.x, target.y); - } - } - } - } +} + +function interpolatedLineTo(ctx, target, point, property) { + const interpolatedPoint = target.interpolate(point, property); + if (interpolatedPoint) { + ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y); } - ctx.closePath(); - ctx.fillStyle = color; - ctx.fill(); - ctx.restore(); } -function doFill(ctx, points, mapper, colors, el, area) { - const count = points.length; - const options = el.options; - const loop = el._loop; - const span = options.spanGaps; - const stepped = options.steppedLine; - const tension = options.tension; - let curve0 = []; - let curve1 = []; - let len0 = 0; - let len1 = 0; - let pointSets = {clipBelow: [], clipAbove: [], fill: []}; - let i, ilen, index, p0, p1, d0, d1, loopOffset; +function _fill(ctx, cfg) { + const {line, target, property, color, scale} = cfg; + const segments = _segments(cfg.line, cfg.target, property); - ctx.save(); - ctx.beginPath(); + ctx.fillStyle = color; + for (let i = 0, ilen = segments.length; i < ilen; ++i) { + const {source: src, target: tgt, start, end} = segments[i]; + + ctx.save(); - for (i = 0, ilen = count; i < ilen; ++i) { - index = i % count; - p0 = points[index]; - p1 = mapper(p0, index); - d0 = isDrawable(p0); - d1 = isDrawable(p1); + clipBounds(ctx, scale, getBounds(property, start, end)); - if (loop && loopOffset === undefined && d0) { - loopOffset = i + 1; - ilen = count + loopOffset; + ctx.beginPath(); + + let loop = !!line.pathSegment(ctx, src); + if (loop) { + ctx.closePath(); + } else { + interpolatedLineTo(ctx, target, end, property); } - if (d0 && d1) { - len0 = curve0.push(p0); - len1 = curve1.push(p1); - } else if (len0 && len1) { - if (!span) { - fillPointsSets(ctx, curve0, curve1, len0, len1, area, pointSets); - len0 = len1 = 0; - curve0 = []; - curve1 = []; - } else { - if (d0) { - curve0.push(p0); - } - if (d1) { - curve1.push(p1); - } - } + loop &= target.pathSegment(ctx, tgt, {move: loop, reverse: true}); + if (!loop) { + interpolatedLineTo(ctx, target, start, property); } + + ctx.closePath(); + ctx.fill(loop ? 'evenodd' : 'nonzero'); + + ctx.restore(); } +} - fillPointsSets(ctx, curve0, curve1, len0, len1, area, pointSets); +function doFill(ctx, cfg) { + const {line, target, above, below, area, scale} = cfg; + const property = line._loop ? 'angle' : 'x'; - if (colors.below !== colors.above) { - clipAndFill(ctx, pointSets.clipAbove, pointSets.fill, colors.above, stepped, tension); - clipAndFill(ctx, pointSets.clipBelow, pointSets.fill, colors.below, stepped, tension); - } else { - clipAndFill(ctx, false, pointSets.fill, colors.above, stepped, tension); + ctx.save(); + + if (property === 'x' && below !== above) { + _clip(ctx, target, area.top); + _fill(ctx, {line, target, color: above, scale, property}); + ctx.restore(); + ctx.save(); + _clip(ctx, target, area.bottom); } + _fill(ctx, {line, target, color: below, scale, property}); + + ctx.restore(); } -module.exports = { +export default { id: 'filler', afterDatasetsUpdate: function(chart, options) { var count = (chart.data.datasets || []).length; var propagate = options.propagate; var sources = []; - var meta, i, el, source; + var meta, i, line, source; for (i = 0; i < count; ++i) { meta = chart.getDatasetMeta(i); - el = meta.dataset; + line = meta.dataset; source = null; - if (el && el.options && el instanceof elements.Line) { + if (line && line.options && line instanceof Line) { source = { visible: chart.isDatasetVisible(i), - fill: decodeFill(el, i, count), + fill: decodeFill(line, i, count), chart: chart, - scale: meta.yScale || meta.rScale, - el: el + scale: meta.vScale, + line }; } @@ -439,13 +404,12 @@ module.exports = { for (i = 0; i < count; ++i) { source = sources[i]; - if (!source) { + if (!source || source.fill === false) { continue; } source.fill = resolveTarget(sources, i, propagate); - source.boundary = computeBoundary(source); - source.mapper = createMapper(source); + source.target = source.fill !== false && getTarget(source); } }, @@ -453,40 +417,31 @@ module.exports = { const metasets = chart._getSortedVisibleDatasetMetas(); const area = chart.chartArea; const ctx = chart.ctx; - var meta, i, el, options, points, mapper, color, colors, fillOption; + let i, meta; for (i = metasets.length - 1; i >= 0; --i) { meta = metasets[i].$filler; - if (!meta || !meta.visible) { - continue; + if (meta) { + meta.line.updateControlPoints(area); } - meta.el.updateControlPoints(area); } for (i = metasets.length - 1; i >= 0; --i) { meta = metasets[i].$filler; - if (!meta || !meta.visible) { + if (!meta || meta.fill === false) { continue; } - - el = meta.el; - options = el.options; - points = el._children || []; - mapper = meta.mapper; - fillOption = options.fill; - color = options.backgroundColor || defaults.global.defaultColor; - - colors = {above: color, below: color}; - if (fillOption && typeof fillOption === 'object') { - colors.above = fillOption.above || color; - colors.below = fillOption.below || color; - } - if (mapper && points.length) { - helpers.canvas.clipArea(ctx, area); - doFill(ctx, points, mapper, colors, el, area); - helpers.canvas.unclipArea(ctx); + const {line, target, scale} = meta; + const lineOpts = line.options; + const fillOption = lineOpts.fill; + const color = lineOpts.backgroundColor || defaults.global.defaultColor; + const {above = color, below = color} = fillOption || {}; + if (target && line.points.length) { + clipArea(ctx, area); + doFill(ctx, {line, target, above, below, area, scale}); + unclipArea(ctx); } } } diff --git a/src/scales/scale.radialLinear.js b/src/scales/scale.radialLinear.js index 944826a70..ddf7fac13 100644 --- a/src/scales/scale.radialLinear.js +++ b/src/scales/scale.radialLinear.js @@ -407,10 +407,11 @@ class RadialLinearScale extends LinearScaleBase { getPointPosition(index, distanceFromCenter) { var me = this; - var thisAngle = me.getIndexAngle(index) - (Math.PI / 2); + var angle = me.getIndexAngle(index) - (Math.PI / 2); return { - x: Math.cos(thisAngle) * distanceFromCenter + me.xCenter, - y: Math.sin(thisAngle) * distanceFromCenter + me.yCenter + x: Math.cos(angle) * distanceFromCenter + me.xCenter, + y: Math.sin(angle) * distanceFromCenter + me.yCenter, + angle }; } @@ -419,15 +420,7 @@ class RadialLinearScale extends LinearScaleBase { } getBasePosition(index) { - var me = this; - var min = me.min; - var max = me.max; - - return me.getPointPositionForValue(index || 0, - me.beginAtZero ? 0 : - min < 0 && max < 0 ? max : - min > 0 && max > 0 ? min : - 0); + return this.getPointPositionForValue(index || 0, this.getBaseValue()); } /** diff --git a/test/fixtures/plugin.filler/fill-line-dataset-interpolated.js b/test/fixtures/plugin.filler/fill-line-dataset-interpolated.js new file mode 100644 index 000000000..ca216e37e --- /dev/null +++ b/test/fixtures/plugin.filler/fill-line-dataset-interpolated.js @@ -0,0 +1,69 @@ +const data1 = []; +const data2 = []; +const data3 = []; +for (let i = 0; i < 200; i++) { + const a = i / Math.PI / 10; + + data1.push({x: i, y: i < 86 || i > 104 && i < 178 ? Math.sin(a) : NaN}); + + if (i % 10 === 0) { + data2.push({x: i, y: Math.cos(a)}); + } + + if (i % 15 === 0) { + data3.push({x: i, y: Math.cos(a + Math.PI / 2)}); + } +} + +module.exports = { + config: { + type: 'line', + data: { + datasets: [{ + borderColor: 'rgba(255, 0, 0, 0.5)', + backgroundColor: 'rgba(255, 0, 0, 0.25)', + data: data1, + fill: false, + }, { + borderColor: 'rgba(0, 0, 255, 0.5)', + backgroundColor: 'rgba(0, 0, 255, 0.25)', + data: data2, + fill: 0, + }, { + borderColor: 'rgba(0, 255, 0, 0.5)', + backgroundColor: 'rgba(0, 255, 0, 0.25)', + data: data3, + fill: 1, + }] + }, + options: { + animation: false, + responsive: false, + legend: false, + title: false, + datasets: { + line: { + lineTension: 0.4, + borderWidth: 1, + pointRadius: 1.5, + } + }, + scales: { + x: { + type: 'linear', + display: false + }, + y: { + type: 'linear', + display: false + } + } + } + }, + options: { + canvas: { + height: 512, + width: 512 + } + } +}; diff --git a/test/fixtures/plugin.filler/fill-line-dataset-interpolated.png b/test/fixtures/plugin.filler/fill-line-dataset-interpolated.png new file mode 100644 index 0000000000000000000000000000000000000000..fab42a40710b7960d0bb457661800e42cf23b7b0 GIT binary patch literal 48512 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 literal 0 Hc-jL100001 diff --git a/test/fixtures/plugin.filler/fill-line-dataset-span-dual.png b/test/fixtures/plugin.filler/fill-line-dataset-span-dual.png index d5600b7678842678486e97fedbee23507326219c..a7b705ced47118cb460117e178f250ff045aeccd 100644 GIT binary patch literal 15120 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%0DBJlB>0 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 F{{y|5w0{5q literal 14823 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 diff --git a/test/fixtures/plugin.filler/fill-line-dataset-span.png b/test/fixtures/plugin.filler/fill-line-dataset-span.png index 7c8a856c678aece91d3b24e4aaefcfa7fdc88b70..780ce79f33a8f573b528dc894279c8f73bfb71a4 100644 GIT binary patch literal 17339 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 diff --git a/test/fixtures/plugin.filler/fill-line-dataset-spline-span-below.png b/test/fixtures/plugin.filler/fill-line-dataset-spline-span-below.png index 45e15c5d8ad198ef856fa08baf05889c8eccbb6c..68a20e2eeeae72d6ff5d2447df65eb11d70e7aab 100644 GIT binary patch literal 16839 zc-rl|hf`Bs+%0@^2qp9mBE1TTpweqZn)D)FiXzgaOD{>V0MeDBA`(HmG-*nWBA|4n z*PtN1cM?Lr_`L5ob7$_qa5I@n=IoqbU3=}d&t%7&8tc+gb5R2TKzB<|%Nzhe(pLyT zMM3)LNbPq60Dj<>){Wbtj+;5K(9Di6=i9JJj`}KcJsTEz4p!}TCsw}_`?8o{`MPGT zN~4}Bydl+_;}-s9_H0>=byK|4_X_IkgE$(jwBYQJNde?X*nOdhB}8AA){C8})48Y? z?D`*NwFgVDUt_QP2DDutxGsc=h3X;yd-FenYOUz>LS6!})c@W{5cv}MzoVLZNRa=D z@p9^||Gfet1OMOH{~P6O4&w~_Pf|j+6c#%nw6XfO=B;AC`Vb%tjS+JnhTM<((PcCj% z7&INOm1jckr_Uo}+QVppl2XDHF`=UDx@%}*smL}eE#YehNLw>VD%nUSkV(r_ygM#4 zVb9Eu3WbjFof9ypM(|7~{hx4Kh55QT_?I-?$D5$=yc)<9|A7o+nFJ5M4HREVCa1s5 zVzbn;^+{J44u->KME&o{`Q^=pS9dQ1+q0588Ep0LkD+=P2e3i^tpyotiDRTBFhUGe zs|u>XJP2v(8Y7h>k=Ya#^%wK>5Ci1P-y1a`lXoNYm2n=_FRj%E`5!z2aF<|cZx6;VX; zle!Cx!Hd|K{bG>RN0N{$L3!n4@&PE03*0Nh{`J~mC#-h%*yIv$8`4R}8Qb?pc%Bv2 zB=Rf+f(Sj-}`;PL%z z^!N_U@1^>*D5@V;yM*tO46>nxPsb!u&L0Rue3`3M=1m5Q15rhSU{Ls4)n!uaTA+V6 z@m`J)Q}PQ8&Xq6SbD#&zae5yzf$`OHH|x_(vd511o}(R}cw|8jSmGMCD-D3+ZwjD2 zFUv$;8_mZXr0hi?1#3M>NiL+1)s&o<0T16<6=waxW|cb0d>ELsiCNde`LkDbF1iFm=Up-|cj|7oJgITDOmP|8e3cK1t^(eYS9#$VBQpgdO;j@? zSL?w(-H?dGRqAGCUFTS9d{=ZDJQe0Xd8|+iq9v~K^8c`ib=kiLktQdI{7I+jO`?(& zmgveQv8jy#yr;G8E(9%cjTd7VJH!PO7DV5U5|=RmSL3_Ge=mz;`gNh_i%(mt7=#(w z!4N&#O0a+Ux?`U`;GJ{@$TVVBL>CEUia?lUbmrOPw@1PD#L?g)EB2kA1khl{Bd7cY z{47Ddn)h);@N}h&_t`>d8K5>?3algb9Z!$C@8PHGvB}zeaZcChqoHzts ze3ci|5E#pIEQ4wiPA&$FkNr60LZmoOqO_cIm#8o6fx@Y&$RScp&x~k*PBP&G7MfJ# z6)@Tfx22|hR?NU;IkoC^?UTmrcs{5p#NG9iTfasw#aluLe#UjWi_ zdcI5h#u4H!*Bgp_qV57=*3;wHGa&L%X45otGhH&GLXnf$>JPI_)3)y^HN5ObCz;>a z3#31I!ydP-CkQLXWncn3Vb!9rC)r3g{CPc$6wi~0fPjM~DpH;dYbez~t7eC6N@&=$ z#zsyE%%*PJHybd0)v8r9zq3~XAO{&?eacyb9d(bd0Du11_FD-sb++)=0jEri;~Aak+K{`Z37~? zu#Y2C7czxVRZLa;e~*-V44qfWK)#5U+zme1XYG0U`0J&ptHE`?Wq@f;E6>CM5?<{< zhIU}ykwmG8JeNQPo=qVnaXB=qd`!i)-`KrV;i*&;b=%m?v`r8$SI=k@o(B(0ecN80 zio5{cr8!IJlDIIjUyPA_VDsq;44Q<@!JjA7Am71_U{y9$vd}&=ZUz{qfM417*K!zl zp`gcBu@Kaa{YzagnMe!!$H^aoOPq<6GAbfA8kb0UIv60!Vy^K@c78>|B`^KbVWd(# z^`CzQm?ocIs9If4q@?=B{g=~_@w3^Vy-s&V)m$rZ661CZi!>G#W_$n|Z{Ss0$p`C6 zpm-7%9=KuUxX2{?<|n3-kFA(~>a!v*^PncCBnn|o4(CG$hXks^Ti7pMz6stCz+l?? z)m~FSMA*y^+}Ks2skkz_)t32T9O1?LxA+sY(?@}%p${D#BXE zHhHG2Uj8>Lf*!dgMeM~)fX*oZ{hO=C3+ZdQ_a>HtmTXgtH$S>~s%m@jr*cV8bt15j>)pj`N8Jv|YM z2#|A1km~Suigi6TMiju4YrSNn@DQ4T&P*NiwXtPnsV60Vcs!IM%FPVKK0)FN>=tVy z*nu8V7`Gp(uFFxNl)>pFfCD&J?xlpWp;{qP?@m8&%U(t71#*jtTDW^y(&6&Djm9!%vQ{!yS zOJl(OBE`BH6(^MA$kRAyAKQKUy}bDI$*ucEBi!d-`RoDN1b|H@Uki!b3s}6XiWGXK zHm%p=*!o=8tZlI6NLPcsVbjyY28flS(G@l~K(4FOOpEatP#kGU?3j0L>Fcr0E6t#! z&$T{`jA7&{=tRGL&y@s?m+)mR=Vgf4X95O)h*y%Nfj8R7DKXQpsFt?@*nh+ZDX2Jo zf`s?%wc7ccJK<&{l^6elrez>jy}{sZ1mh6xMRieFZHrWu$Q!4qO_f%o*Up@h#vo#~Qs!=@zjRgi#}A zH(4->$5VQz@560Zk(Be3^nnWX5@mI!AtnUN25ryiB1(Xk9l zMk$A@N3oepyvU=Z-@ST+KQIJ)Fg5d{v2*cRVQhfJoKbo2QP1hsIYe&CWde?(qCz zJ}DCAx%Eds(b(WdfVZ`*YJ{Zcc!*bSFiR*EJ6)B5cYwL4YeV|l%nM%=*Nv94@hpv> z(`CevOzo&^?$4?r6ko~TznR6KvnZhNbuXC4=3WR-Y%#nR{(UVCegM5;&(}#d@q9dB zL25N(?J|t*Cts;skL{0(cP64&iF`Gt=SNKaj=QTNE32+*<`-YCzgep(rN@W2F0B0Z zJ#z9-9~MVENGoL_AHQmWxvYa2Z3x6VMI92y_uaX7GU{8-Ll+ZaNGq>vTrAG(j$#Xt zv#YDF`xn;N_}PPOOjh2hh3TyanjJ(bZrCa?WwgDE>BTKI!A>4&@_V^C>R8Sh2k|0$ z#qzJzouF!`9Mls9%v|gw_(yVBB0*zJe-xs|iQqky%>s14NG$X%aXPD4OQfu#EB9#s zbgJiA*NfeHB0l^q>Vb1t2d669DP6nQ4eK|e8m#uB`{mm<-*$#eqc0G4VJRbzTaHB& z(Ye>~S=&a<$Lw9^FQt}>{(zx>N;*ti9`q+i5giYUTW|{Q*YKmh<^O2TlZ}6AJjF7Z zG+`};`=&i6vDRO0guYhVZCuhCL)I`apOt+^ifw6n`#<>HVcvD2IPdJ`n-^N%#!m|? z7p}lh^EE3Ds#j)&`JeZ-#n;YjgTXVzt6@?SS3-ZCI3iSym#hIhDFy5$#m@eP$N#g{ zTGK9yeQzR#IB5x`N+>(&seqd`R7{y%iTwNE_GRw-gq{rv=;I`}^u@waSL-o_!qK(H z`^&Ey2JoSsw!X!IkTYEILX!2>E11fygjwIRW5TF4QBE2y?pybzB^pl--`7XlQK(N< z5WaAuqs6N}o7zM;MN}1{5A!{g@~j=cxvX2I9I7>7{}i$e1+MH4vFbVuxLKI)#>W3< zhe&j6J7Z^IS!WBVD8;6L8~T=+o2Va+++~$j&uMIW6P_O2*!T1xIo-sq`SuJnvLSCu zLL~kg6u_oFiAB;@5e-m(9dn>J*0Qu@Q)ZJAtRhin1%#iHSCxf2CJJmjy3n}z3wk9% zJHMnVkw&Z=MFqKpdV0I)@p&n81KX6W(+1>V)M#y27i;6ztc1U#(LRB-@ZE|vF~Pmp zz97nS$o=sc4RR?12(m-#vm{<*b**hLojb&geF3xkCY)zapmye`Bje{lz;hFRtEpT^ z$B5^q`#Xnv74&ITKW3&C2+qC>PUqeiuwf(58}_VtCrzY77&5ITA!|GQ>gvLNMOtPe ze#w&+xz!YG*odhw88;%Ja7ps`q2Pk2B!#_kTctU=$Gok3ZLsBoca(3lcXdszMvEFY zH)Sf;N5_27gnq+3J2O2%=K7byuIQfD;HbCkoL+AtMfm?XMtux%tZu$e(omBk7{lx3 zhZVYgz00U(xgq;do`?-Lz?1V@qwmM_VjCPuS1P}iayuwfJ0Ikkb4mY`T*4`fZVRHk zYk8zS`#1!o1mB1j3liAYZDR49hp19(dhWNUn9bbW$Sy*3GP!#KN&7tzebOE@+KLdD zsrmak@MgIRVH8{c@`wicfC(+wrOTN&e5)WI_31C@Waq75cyxdNT3h4W*w_*GN6llk z8c9p7QdYA(bSb?$?OU>LZQ#L?g>P8UC#NXfSBjRj^Y|$bfXj(&%!(}IudQW};wumQ z?qWRd{?I@ObzB|$WZs2~u$fE#KKWn0+VCU!;bWBoxQ~I`Q6V~{r4sp0$|ELoPV`48 z5Ljamvh>+fIeE8uAi}9ei*Bl4zexEwAQmp$S7~qC(%7rZKq=*_0g;y`>%Kjy%WgOo zF}%od7GRc|`Fqp%i=86Xjbyvd^`>hz!q240l9j(=s2j4K2>q2nZT+Qu4yqE_8wS3& zTvU;}A+aEwPbJ?2fwO}+exYNdp;YFe{m_80>&`aXU;mg?j%jU!OiyQ)s0FxstXb<8 zGbEu^DIu5dzCj<)C^-p+=m(-zt^j-c+0yC;Clfj2xm9F5)QSzDpB}WBpE5(VxFW7@ z(QFrxM2g&m(k`>w|6=0fdJhb4)vkCWhObIU_1Qr#R#I;F!aJ}jyG2x0f_>7wS^8+4 z0_Lv4qQ&unI3W-_yXJ>>Z@vNN4HEdZ+u!uxH2LnD>nTEe%MxtW~+G4(5|Om!WVx`I|9>9LbgT-I*UZ@M4*6zHA#NlVv4j zL=AYOH)zj>e?2BVHp34l&8bOZDrDR0AKu%PZYFs9^{>_fT@S3-)v?yA1wA=zjc7Tl<`Mp@) z5MKG)#ii{0dtJGtSx&+;-K`zRH)#ERFTHY)hd+vaYJF-qr7R(G(x8)9os&X%P+0dH zv*^~##WnAvh4{xjT)ze^!5+T+aS7TvDjX+GLdih6E|wTd9riP+N_D^EOmE75=h=VS zdkbLWF5Y66IZOn*$EhyMxe5zshy%(Yk8Bl$-5j5riT@m0D0e`-F-Lx3y6y90SLY6L zYP)i?x~)H1w#{n72tFL?ylL#-M%tw2gk@|W5Ov78DaHA#HqTt%pdb4#$i(|!914T` z=&O0Eze>ctRLJ8fbcViYM$|tKf&SA@tEhbB%48@c?OYs@j-tU!)RSl81_ zoHB!Fk+tCxVFE^j{iHfKpVK|G1-S=%c6z3HRb`H{8m0pH;^$f?Zol)0kw6C&s5R4Ba%`_o9ioXu79d)fYz=fNb3JaZS3k{pRk6R+BXuqd^_r zmditK%6TDE-y=t?iS};qefB6fYrwpx(s1>?x*P`Q1x97LO(O`p@p8TbOk$@*=eGdI19_Z`^4&1CBf?~S7k`G(5A(F<6wV49Jm+ZJFK*#@rV<5^0h(arWt-E zMWEZeRqsbUsjG83M}&pbwQL%qdD=0KTq$~|;HUaEqd{Rz{pi9bUQ7YK<%`ulob>fn z>=I@0a7?D$sR!H-b@p8~J;ldN;RB`Quugd|N1wT;n!h&m4L!aZ2io$Su-DJ)jEc5wLghOF&NCODfs1 zdws?1;M!oD5NbD}ir8+E#&TSy!TyP5h@~rH|9KFC3b`~2unm=gP&%pQtGxV2J%$iJ zMUIBR^S-kwLKlPC`Oyj|K20=HnQ0YUAMt>cAl?4zcwr`CCr{%dZuTyiV{iFdz&R%J zVvN1^P%g|FDLq3o+sH z@UFY#ps7DZLN7H%2dq9KHrPp1#Aet>VQOCV3{VT*S-VwHOQjQ5P|NGc68JtgzJs!Zs@lI0R z?w*LaZhGF}azFqLuvnqGt92DWO9^C1xgReFltS@P5seonFs zVB}a>rxkKw(b0LO9hG8o!^-$+eC4^#X4qw343=b_(X@!NbQCbsMD7B2AS)+6KFTy< zH)-D2XMx8X7n9$(RXm+}`NC#Kv1JiUJx!9`p~*96e29-1&WiYoU**ZDkxEi9!yLD{ zw=9fv9OibhQt;)XcRVXi!XNTJr=%jWpfq&kyd0;^YyG!~ENLCpkw|IUB>sxC5F1n7 zX{X9ON$%zxI;hlqE_6FmM)1hL(82TN%U|6Qij9ld?&-*+bjIHQ~7h*!32?ODP)~&6}lZS{D1V8RGn@xFm#YX4S?F5U)SD9p}!-aH>(w^xUanVVgw##uVLRG#k#H-}O7T2(r(!Jou z%nJ+ONnSHe&d)zJu3sVMR6G=HBK$!UlmP?ilWumZ&Hd~Fnb5V@E53MZ#N}_iagsbflN*rU1wbzED(=Rq1ZAl`ta08>CuAXBfel}ir8Prf<}K{#k5EoJ32M+vk>Hu zLgt9ZB&_c5j+Io7a`fghKO>9zBVZ%VuX&31ot5LXKY2?6X0__Pl`6ak&le71^ynAX zOQO2{Y?lG`vG1TW5UAKZHL!$wQlZLs~Q^grRdl5qmN4-eKmc1fgiO<_Eb^40P0~| zP#iM4>hqnfHjH>v8c5&w%~&}$Ksi(xL$kPi*@5zbpaRTrVdcGGk4uejW~0QP9rkUW zMf*BX5KI-7wDbJjVHFNdYK|c}jGzxmEL_}Y;4myjgzr(_btHG!uF;1>aYwf&xjE$T z;X@BNKU2+7J$od<%ioDNfec#4csm@qS=h9bViwrmsc`K)BSSc<%{;jsjE%_ zlJkt{0rDqa7X%+He=L>Gu4zm5s;k3adbHW}EuSwe_&b?!D3PRXdOuAvKVG7GSa)yl z^sCM?2v3@C(?_}m5@a&9qGm!xada1lB1haVy%W;i=#cZ0O4^Zc6r8Uk`8p@AB;(hO z!{&p1$hpCT4CKyV-L!|T{SC!ImxdBr=VGV+>}*U(FUzPTo>}-w?&7t(RH>(pAKknb7H1KTO-r(&}bZPRwVH|D^ zZT`H?mx2fyYAifBe0sN^dL^ziBn0+j$t9{yZEAYh>72(SJBe~|msG&-?7;g;>OoO} z^~2$4-&NVe)@HqehZH)GXeP8Zt`d<2%kqEP7IF3B(e*GoK%eSNl00gh_PI2D3u*C9 z=?N>-QE2x6UOJeQkmmfZc-|~SVr6xhOe9aCqf~_0TfeY-Fo(Fjqq6{c)JkLp{2xTw z)PuD&0C{O1gfpCRV!3P|)T}wcsM{vi1S@FEq5>mZqNOYuY@FLimuc zypdWvz(_-%G=16kZ@ips5~^0ckP=mWfUO?Z`2(SCCfUyECCWS`Uts~ttCA-eKCZoA zw~jSVJt){W%vv!_$d-@|48A*2%E{0aYV>bPZkG`-mj?=uO zp-+#SBLoRfa69u{g`c0 z$ER_u@i4NsuiDuyq2bfK0#&#|-PGzRex2qp`NmT-s*lZU9gRZK*B=Y=A6=}qf^R(9 z|N8=C3XoUh=6ec=He~S}49;Ik43X-5q;r3N+(m1CI&gUQ?T%H0w=qyWr*$2A8owOKx_>kE5Ovr}pQ}lytS0cv7!&YOarSdc zcO#ej9YPT>sJI&wu8)=j;WuU+XCs$%>efAC>}k^ERxY!8J}Pf}UXtDHQ)-jYYU$YW zWz*~Z?|V{pa;A5XX}$;!rHsirr-BmRmPYZYzDpJ0cZB_je)@Boli<;=WR9}GHrNHo zhmM-3>Q~LI zTqBBQZ`gk?fsS-_z~XVscud=8vbQ#{)Av)3>p5|#v0MwlU4-1Z{yS0$%;YUE%@4DG zZYK%YHQ77@Y_PML^kOoNVPH5N?2i%Rw7tiF{h5)E%;?0@UHm!MdX)VJPE2NTpC$FU zV|Q*+-&5roT~@Q5!bS>*za)RP3kNloflHw<`d4y_@kp(hFV0}Z!$?D;O>4eVvfxSM zNBwf7mdkLjIxC<|rE~w_QAuMQQi|GI*ZQ)gX9{3CtI_~HDa!YVDNsv$u}_w0cq_S8 z_-mN#+tp3f*HW}bP{P~Q<)zp`uTf6gu=UILU&}vukIHLlxj4?wD)wG9r%iz+kYEmX zZwyyX6Nk|P%)YA`44OJw)Ux+8zP+Sm6X9|@%XMmTn14!Fu95YLK(5=lDUVI-)ulvD zi%|12UK%s&7}nlo0X!!fGC>9<_PB-xaFO9hY<^z5)pDt9t_9^5CcV$GEm3>8wawA0 z;f&cCow|=Wcszcyl+ltSApuPBTTBoW?wGr1{ATHdByigTahdFjnRUPv&XV^t zMkDBbSFKOB-ya3G2T>0Lqh|5vI=H~TnoGD7)&obCZv>i>HJazyFB<+{=Qqt3N+5r- zRW3Ps<{vJMmU<}`ibAwxBg?F*XZVgarN#5JYF<63L<58J@zWWN26@{p-xkL8J-M?8 zAUtT%DFgG?gwQa86HyldVs>n;Gp{B&exYQju z+x2q&o$6uK^wKBE$DbO8)IiNZKX-#SSVcIV-LwiMQm>&rdZ4^(j|}>rhXT~VV;16- z_~r=mJ8I-T&f`3e5O;4M1A{l{!v>g-GVIIEE&(hxZ^iVFHK$m6{c(YY&UJs$oF)8p z-)^VwP*l4NEy2%RHfeAd>!Q+s>J~**7XhNWk7=-=2`zlKN{$tK7hrzbIdWLjr>ZyOtBGP|f$BZnw?<00uBq`|_t=@XY8N3mV1hHxNt zFB0cU`sYt>c8VkU$BMOExEA`?lMB{mjY7aks)-atU7oGF?Z2mAd_s3fGIC*oI%MJb zVf3W2x$fB&rf*GdAF+D|2ex6t6m5jr6^;ULli-_;Gr4USem3EDkBg(b4WL?&$SnmM zqZAA)<7Zul%D1oCyzne;@b>B%n333N7T?7(Gx%}8VKDf0=J&@_hph>X-G=#@0GHk= zqyvF;3CP*3{3_p&O_ZjngLhO=nyCMSHgClcuad(~@9LE`67ra|1%EhdaNktN(>Ho^ zc@D4-y===h3z_{Z9l!>!49xr65J^Y7O3m3+Jxoj^P8wkjfkMCiywVUZOA+}<;?u|02y~;ng9Q$!SxCMX(3>gCUk5u0%}qN-tl#>G?3 zp^@EIF1oRF}2QOobKnR7?d`q~Wz$3(hd@-rzh@fqsr}3KjhOc`IY9z!764eMpHn#7uvInK3uc`tZw}zya9!WF zLt7DfO3obvz7c>DiNbcoSO)txw6zMv5WfZ&oW!n6^1pXscO_eJ`EKZeAQE^^#v=<6 znuem(D@uGw5CdJQw4Dvel}Cgm%`dxVi{+BvkfhCdVVYFTcEuIXNUvTydy^(vWqIEb$#sym2%=lc|I7GY zKbH9H@}rVI&8&}V#rvI~YmWpQv2C{VCEj*kuf&Vwcu679{-qBha5Ao_LD1-aY0ARV z=?Z$9imCr(H!7OFu`k-fqvfI>oqV2qCGN%1^ulx$LI^#|{HK_Ur|X zbKvF2clIKVou76dn=GcC+}l5b*b^5MQwSK7}c_equ7!LZ=h-4`8EDhdy4dz$-# zkEv0X@(sUj_dOGweSH@ZLC{98FL|K{bIqNWQLVov;3_Gd_IoCaN9|Zd(6rN<&q(3; z$qJz>3{QUEsygJpi3`j7hopp`_)S0lZEB=d*BvwJX6{+$34Z}<3fhrirMM2CQD0++ zrN96_jhRIb--mrg^~&kyLAeEU<_0Z!iT+zCWClLxkhk&BFGfMoJ6Fo4WW(=`zc0#I zRTuBQckFq6Jjjo(V!DZmP$qjN%=7xXUrEQeF3LNTKlQy?HhQ$raheB?*XS?c!+Ds= zNINzQNEJzTrKTQ)au63DcwfTVUoDKj?O2KF%y45lUkKc zQv)NF?nmqlaELS6?zAw4`lYH_is8)cgIE91b(xVKEvv&B@!{UG4k_aU<5 zla>u)aER*?RaOac6APVr?zjSBsw@z+EEoCNAlD{w1mU8p+}SV=dRU6GXlAH zb`ggx(Gj-$H*Of!r~)7U!5 zKZR_!Y-Zhd;!963>A~f1A)9VkdwxNLk6PvGoP@k3%p5nY9DmJqYW7?iDRaC8)E9uB z8h4C_&!*;KVBJivQ<2&?C%*YNTa@1~4)oh8dry^Z8uz|@l|k7o$9icjD5kh|tS;TE zhfq`=to+T%U_d!D{=ZdHAe|M@j ziyYH`=4}+#K|U2z@|GF=de&aK#B@wBYBSoT>qVUIsdE@3!X7O@7+u3`v7(h>dKvIs zWprEYW8Iw7_R3eAye-Nl*tM&C?*0jZnwVU~iAo$20#J`4@`1r?O@`^a;dW?}ldeif z^N?>QOj+Fc{AePnU>SQ-#ulDxaOMZ> z1o2kM&=glM5n}aMRo>Hb)^x1(L>wgcb$==+?V}){K6!opH2Q-56&I79AGA&g zziHq$8Mc4LI45#BN^IGO`@s$Ux5~yL*7`Lv?yP;^_-jhS#2wegBkU*!t&qj?%skk# zj>6V!UIWqBJr=W<-Ep`SS6jgsv=6zcA8wAleO+}cmdYRtvlEVXk~6IxC|QU&WV&YE z_#dHj>l)RyL~2#Jkz@WWaCIiy=PeYB&OZ;KJj5iA(5A~5<*^1LGW8)Z_L0e=6+c+{jeH9$GL)KLqsgdvZ&Tgr}V zRkrv01vKdU87Q;Oo$?Z%AjOg;g8XJG()o#!aKwnWy);YC<~HH6G#TT4eW!Ou=DBD3p&sKutBPJHWb!P&X$$V7JR?Q zPpucP_|zTn#q6)v-Sq$TL7ztTuUMPnm+dL08ESX3=${3ZaSM*8CeZ{Hr3+z z+5m@)6eFfd<5ZjQy6t4O4gBkzOZyDOi0Fp>y#q9mBP;gL9ri4NH~wFg`n_VbsUi86toyf#>Y;IvWaaT+mbqZFVXP59Gj(NDbIb}rY;!J_^7 zz!!YyV5!l(ng%OU54R|8XgSAyrxW3rkqIeqNc3n3B=zn}e`?$lTzl5Wk{ZN^8rkuZ zeT47$>wSvzNfpWv7^-s9J7z42F?3Cv%n!b zl9_MTMom17D}}(NIpvS<(eMEgo+~Onh`zv8?1Fm4!f&Dyt~r};>-VnD)UTGdX4R;} z^wqX$mjr*VQ7t40XAzB{(H6#OLGOey%`gMoTG5UnO9O&;a19}zbL#`t^mcn2oaM@R3Y5-s>B_} z@u`g@Nk7r0&)#EX83-0J6oc-4*Vs0^NeyhDfK2flaqxnd4gq#RXQ=<}E3NsT+YCP#Hs71kS; zM^mv3yq}|fo?5rr{LWB++QP>Q@Mc4d-N+Ti0rgOStJ%d116Owj=9C(&6fX;I@)&>q zh>+j^5-+B%aXt0%dDqQ`+iyd9+7k_SQ$xf7)kWITj4qL1`X~}f)6J&?HsMqFq^{Nw z<+iiU9A8pmS(Te(*yz)}kNz6ON!SgQi_RS#h+E3IQE|Qr`c%3VK{y0WlXd-R&J4Am zCQw{Jd>*8IP1;wCL{Ap(@r?6(r7elx4d=K8g+z5?SITj9i$E-wsR7YfJ!tm1$FSpH z?c4NM$ERq?kyhsPS%IFC7#IXofY22kFczp9OUs;y+l0o{vXL%L7bX0rxCGGV*EHPI z66Arun6-xl(;!7yG#+v`I5S(EZ{%E&m^X1a$_If{C=$~g#^Gkty5G7RjisLd)z%;; zM2?IlEPR(h=74Z1f_0_jipCrJ=zSvs9ZZ2J?qv6&ibI7vKE|s<&LXvoIiT z6ZXbjIr>k^C1c;(D!iDt%L8^k`);;g9W;jQ{PeO|7c+c4@D>rVJaI#y>c^a@`>Yh0 zdx!Y_`^#m=ZL9slslP^u!W|{^*C2+exAS7WUh&_+Ab6^j#MBi?)%+UAnwXl#OT<}H zlcQH(fhPKn*WJv04%ELjlZQAcCB{J7x>-{~qXODl_R__o&(hl5V=Eh20rj0Qtvoj^ zOeU3`3KX-H7nBs%ld|>Vo#O&oW9!x*UV*BqaUthr7Us~+MuC zykMW*8!Q?wY$^50UtG9LVglY^#;#uC+o(m^##2LFw(Be-U%NyY| zzUSLKUAc$D_)mAX#vFu3@&5#%~jgFWbJvw|~NjN7s+;&`8Mbd{C-M;j21xU;WZwqDs=7tYWR9 zhoJOPQq*%Jk_K?QE+ja_gZUbV6v2C0!H{)D(ZV{Biq&R04)fPPL~m?S2w+64G{XDu z=Pvg(eZo$T69VoZwK|GQ+1f|VUf2#64`1#j*Tf7NkAfElVw{~8NXhVrO{-ePYcR?w?M~?zqZtL_T72b z!L%x{lS1jEvh{YF@5h)$SMn!sEJ9_2)HUcOVB@b>S&*a_(iXClB33yWHJ9?vDW5{Z z_0cI23ebYJUHgAEolDdTJw|<@>i@e2yeyOSA(?2~bwNO=f!qPGri(nA38=nun#vpn zN!(MistiU{GZr6sE>B1=!y?reI({x7uD54Ig*fglG`E%eq=6XEyekveg}_8=WWQsy z_*Hs%GR>u!nZ+vtJ3*=R>%(?%7FE1C?Rloe_!80U?los7G3)5mX$T zH?`UH10|X?XOG-&Em1-!Q;;tO`G@d)s*PWHn8@MCNG~nu3L9YO6fOS#8i<2ZRc7D( zCx>P?faxQ3h?o{~>==u$ow%uu1o@r!o$J4&l|cJCdV?~+v_zfQx>fCMQGxKuVV^b^ zWW(ID>;7a|1bubX1D_RrrI#L z@00+Xj0c&-`-()nW@;KoW{x8Jq41woNw;$6PA2APd|oyE`f=$)A}{raU*M=G zz(;^~Kfz?-%Bm?~z;=J@^5XDvuY9C<*5q-n`i?ru%r^eVZ3ZFc$wPRG5;%SD!gCQ| zB!PH3Dt+6M4!ct@DXCVVr2z;T(FrzZyguS^#M)omJC!yX=yM3)cx4fNh<%f?Qol!N zxX&ni@8Z9(2E%*&${6(^r9iqal>HZRUmx5n0YDhqV`*>!e z&;K3L(!+qHp0mS0z&4?w_Rd8g*>vo?UU z_nFA07^gzbo^L2e7=gm`)+FE2hi?b)QX(T4{;s`4vgR^$JUo_sf?=-FvB~{+=JkO2 z-?QDszfwZ{u8+v!<iO2jD2B*&9dM36}CY`F$=tcZ3aW2HeEp+a~m z^+?HGB<0@fZyBo0g(*jR3hac1s{TlO0l-dBq)_;pS-+|4$KL>+LGQ2J!7;=MDbX@h zF+-@4{9)IfU0^?~fUI*ed1)nXW-4mZRdnbzp`4z(CsQdzPW>C-OB0#VMb=sn1Fw6ZmhUSGBkC)=ITcl5PR}*VB-ob6&^?G z{F5J((LA0#4v;k@`gU&Odo8Mu2e+IijhOjSsidw_l`IhCAByMeLd)`FTF#5TqB&qF zipr35f)Iq6N`VxUA0BI+pLOjGd+{%_ma|B4Xm|6>jiaQ0uwW(iuAj__DV155Y~}Zm zu`eq)tvaO;obYdOiUiF0Cp&Bq@gZ`IB7eAlYSz11P3NR67b&n^q^YRc5Er58^wE3vs~nj7vQTyGj6y>4k6 KYgK4E$NYbCb9dta literal 12119 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 S4I%>w_%qfw)2q;RM*kmcoJm;# diff --git a/test/fixtures/plugin.filler/fill-line-dataset-spline-span.png b/test/fixtures/plugin.filler/fill-line-dataset-spline-span.png index 5f66359f3b57decaba1c133c1cd2de1be17d08bf..97cbb6d2f508c623e15d027abbcee553a8841ac1 100644 GIT binary patch literal 27332 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