diff --git a/src/scales/scale.radialLinear.js b/src/scales/scale.radialLinear.js index 2c3763bc1eb..a453b59814f 100644 --- a/src/scales/scale.radialLinear.js +++ b/src/scales/scale.radialLinear.js @@ -371,8 +371,9 @@ export default class RadialLinearScale extends LinearScaleBase { } getIndexAngle(index) { - const angleMultiplier = TAU / this._pointLabels.length; + const angleMultiplier = TAU / (this._pointLabels.length || 1); const startAngle = this.options.startAngle || 0; + return _normalizeAngle(index * angleMultiplier + toRadians(startAngle)); } diff --git a/test/fixtures/controller.polarArea/last-slice-animate.js b/test/fixtures/controller.polarArea/last-slice-animate.js new file mode 100644 index 00000000000..43e3e866591 --- /dev/null +++ b/test/fixtures/controller.polarArea/last-slice-animate.js @@ -0,0 +1,70 @@ +const canvas = document.createElement('canvas'); +canvas.width = 512; +canvas.height = 512; +const ctx = canvas.getContext('2d'); + +module.exports = { + config: { + type: 'polarArea', + data: { + labels: ['A'], + datasets: [{ + data: [20], + backgroundColor: 'red', + }] + }, + options: { + animation: { + duration: 0, + easing: 'linear' + }, + responsive: false, + plugins: { + legend: false, + title: false, + tooltip: false, + filler: false + }, + scales: { + r: { + ticks: { + display: false, + } + } + } + }, + }, + options: { + canvas: { + height: 512, + width: 512 + }, + run: function(chart) { + chart.options.animation.duration = 8000; + chart.toggleDataVisibility(0); + chart.update(); + const animator = Chart.animator; + // disable animator + const backup = animator._refresh; + animator._refresh = function() { }; + + return new Promise((resolve) => { + window.requestAnimationFrame(() => { + const anims = animator._getAnims(chart); + const start = anims.items[0]._start; + for (let i = 0; i < 16; i++) { + animator._update(start + i * 500); + let x = i % 4 * 128; + let y = Math.floor(i / 4) * 128; + ctx.drawImage(chart.canvas, x, y, 128, 128); + } + Chart.helpers.clearCanvas(chart.canvas); + chart.ctx.drawImage(canvas, 0, 0); + + animator._refresh = backup; + resolve(); + }); + }); + } + } +}; diff --git a/test/fixtures/controller.polarArea/last-slice-animate.png b/test/fixtures/controller.polarArea/last-slice-animate.png new file mode 100644 index 00000000000..f6557037fb6 Binary files /dev/null and b/test/fixtures/controller.polarArea/last-slice-animate.png differ