From 3130d1c7caaafbd619edca55fea5830158ed16ed Mon Sep 17 00:00:00 2001 From: alexcjohnson Date: Tue, 3 Oct 2017 12:19:31 -0400 Subject: [PATCH 1/6] Algorithm to clip huge line points to a merely large box --- src/traces/scatter/line_points.js | 187 +++++++++++++++++++-- test/image/baselines/axes_range_manual.png | Bin 31096 -> 31175 bytes test/image/mocks/axes_range_manual.json | 11 +- test/jasmine/assets/custom_matchers.js | 2 +- test/jasmine/tests/scatter_test.js | 69 ++++++++ 5 files changed, 257 insertions(+), 12 deletions(-) diff --git a/src/traces/scatter/line_points.js b/src/traces/scatter/line_points.js index 03b77be8dfa..c02a9997e73 100644 --- a/src/traces/scatter/line_points.js +++ b/src/traces/scatter/line_points.js @@ -10,6 +10,7 @@ 'use strict'; var BADNUM = require('../../constants/numerical').BADNUM; +var segmentsIntersect = require('../../lib/geometry2d').segmentsIntersect; module.exports = function linePoints(d, opts) { @@ -62,8 +63,8 @@ module.exports = function linePoints(d, opts) { // if we're off-screen, increase tolerance over baseTolerance function getTolerance(pt) { - var xFrac = pt[0] / xa._length, - yFrac = pt[1] / ya._length; + var xFrac = pt[0] / xa._length; + var yFrac = pt[1] / ya._length; return (1 + 10 * Math.max(0, -xFrac, xFrac - 1, -yFrac, yFrac - 1)) * baseTolerance; } @@ -73,13 +74,176 @@ module.exports = function linePoints(d, opts) { return Math.sqrt(dx * dx + dy * dy); } + // last bit of filtering: clip paths that are VERY far off-screen + // so we don't get near the browser's hard limit (+/- 2^29 px in Chrome and FF) + + // maximum multiple of the screen size to use + var maxScreensAway = 20; + + // find the intersections between the segment from pt1 to pt2 + // and the large rectangle maxScreensAway around the viewport + // if one of pt1 and pt2 is inside and the other outside, there + // will be only one intersection. + // if both are outside there will be 0 or 2 intersections + // (or 1 if it's right at a corner - we'll treat that like 0) + // returns an array of intersection pts + var xEdge0 = -xa._length * maxScreensAway; + var xEdge1 = xa._length * (1 + maxScreensAway); + var yEdge0 = -ya._length * maxScreensAway; + var yEdge1 = ya._length * (1 + maxScreensAway); + var edges = [ + [xEdge0, yEdge0, xEdge1, yEdge0], + [xEdge1, yEdge0, xEdge1, yEdge1], + [xEdge1, yEdge1, xEdge0, yEdge1], + [xEdge0, yEdge1, xEdge0, yEdge0] + ]; + var xEdge, yEdge, lastXEdge, lastYEdge, lastFarPt, edgePt; + + function getEdgeIntersections(pt1, pt2) { + var out = []; + var ptCount = 0; + for(var i = 0; i < 4; i++) { + var edge = edges[i]; + var ptInt = segmentsIntersect(pt1[0], pt1[1], pt2[0], pt2[1], + edge[0], edge[1], edge[2], edge[3]); + if(ptInt && (!ptCount || + Math.abs(ptInt.x - out[0][0]) > 1 || + Math.abs(ptInt.y - out[0][1]) > 1 + )) { + ptInt = [ptInt.x, ptInt.y]; + // if we have 2 intersections, make sure the closest one to pt1 comes first + if(ptCount && ptDist(ptInt, pt1) < ptDist(out[0], pt1)) out.unshift(ptInt); + else out.push(ptInt); + ptCount++; + } + } + return out; + } + + // a segment pt1->pt2 entirely outside the nearby region: + // find the corner it gets closest to touching + function getClosestCorner(pt1, pt2) { + var dx = pt2[0] - pt1[0]; + var m = (pt2[1] - pt1[1]) / dx; + var b = (pt1[1] * pt2[0] - pt2[1] * pt1[0]) / dx; + + if(b > 0) return [m > 0 ? xEdge0 : xEdge1, yEdge1]; + else return [m > 0 ? xEdge1 : xEdge0, yEdge0]; + } + + function updateEdge(pt) { + var x = pt[0]; + var y = pt[1]; + var xSame = x === pts[pti - 1][0]; + var ySame = y === pts[pti - 1][1]; + // duplicate point? + if(xSame && ySame) return; + if(pti > 1) { + // backtracking along an edge? + var xSame2 = x === pts[pti - 2][0]; + var ySame2 = y === pts[pti - 2][1]; + if(xSame && (x === xEdge0 || x === xEdge1) && xSame2) { + if(ySame2) pti--; // backtracking exactly - drop prev pt and don't add + else pts[pti - 1] = pt; // not exact: replace the prev pt + } + else if(ySame && (y === yEdge0 || y === yEdge1) && ySame2) { + if(xSame2) pti--; + else pts[pti - 1] = pt; + } + else pts[pti++] = pt; + } + else pts[pti++] = pt; + } + + function updateEdgesForReentry(pt) { + // if we're outside the nearby region and going back in, + // we may need to loop around a corner point + if(pts[pti - 1][0] !== pt[0] && pts[pti - 1][1] !== pt[1]) { + updateEdge([lastXEdge, lastYEdge]); + } + updateEdge(pt); + lastFarPt = null; + lastXEdge = lastYEdge = 0; + } + + function addPt(pt) { + // Are we more than maxScreensAway off-screen any direction? + // if so, clip to this box, but in such a way that on-screen + // drawing is unchanged + xEdge = (pt[0] < xEdge0) ? xEdge0 : (pt[0] > xEdge1) ? xEdge1 : 0; + yEdge = (pt[1] < yEdge0) ? yEdge0 : (pt[1] > yEdge1) ? yEdge1 : 0; + if(xEdge || yEdge) { + // to get fills right - if first point is far, push it toward the + // screen in whichever direction(s) are far + if(!pti) { + pts[pti++] = [xEdge || pt[0], yEdge || pt[1]]; + } + else if(lastFarPt) { + // both this point and the last are outside the nearby region + // check if we're crossing the nearby region + var intersections = getEdgeIntersections(lastFarPt, pt); + if(intersections.length > 1) { + updateEdgesForReentry(intersections[0]); + pts[pti++] = intersections[1]; + } + } + // we're leaving the nearby region - add the point where we left it + else { + edgePt = getEdgeIntersections(pts[pti - 1], pt)[0]; + pts[pti++] = edgePt; + } + + var lastPt = pts[pti - 1]; + if(xEdge && yEdge && (lastPt[0] !== xEdge || lastPt[1] !== yEdge)) { + // we've gone out beyond a new corner: add the corner too + // so that the next point will take the right winding + if(lastFarPt) { + if(lastXEdge !== xEdge && lastYEdge !== yEdge) { + if(lastXEdge && lastYEdge) { + // we've gone around to an opposite corner - we + // need to add the correct extra corner + // in order to get the right winding + updateEdge(getClosestCorner(lastFarPt, pt)); + } + else { + // we're coming from a far edge - the extra corner + // we need is determined uniquely by the sectors + updateEdge([lastXEdge || xEdge, lastYEdge || yEdge]); + } + } + else if(lastXEdge && lastYEdge) { + updateEdge([lastXEdge, lastYEdge]); + } + } + updateEdge([xEdge, yEdge]); + } + else if((lastXEdge - xEdge) && (lastYEdge - yEdge)) { + // we're coming from an edge or far corner to an edge - again the + // extra corner we need is uniquely determined by the sectors + updateEdge([xEdge || lastXEdge, yEdge || lastYEdge]); + } + lastFarPt = pt; + lastXEdge = xEdge; + lastYEdge = yEdge; + } + else { + if(lastFarPt) { + // this point is in range but the previous wasn't: add its entry pt first + updateEdgesForReentry(getEdgeIntersections(lastFarPt, pt)[0]); + } + + pts[pti++] = pt; + } + } + // loop over ALL points in this trace for(i = 0; i < d.length; i++) { clusterStartPt = getPt(i); if(!clusterStartPt) continue; pti = 0; - pts[pti++] = clusterStartPt; + lastFarPt = null; + addPt(clusterStartPt); // loop over one segment of the trace for(i++; i < d.length; i++) { @@ -93,7 +257,7 @@ module.exports = function linePoints(d, opts) { // TODO: we *could* decimate [hv]{2,3} shapes if we restricted clusters to horz or vert again // but spline would be verrry awkward to decimate if(!linear) { - pts[pti++] = clusterHighPt; + addPt(clusterHighPt); continue; } @@ -147,23 +311,26 @@ module.exports = function linePoints(d, opts) { // insert this cluster into pts // we've already inserted the start pt, now check if we have high and low pts if(clusterHighFirst) { - pts[pti++] = clusterHighPt; - if(clusterEndPt !== clusterLowPt) pts[pti++] = clusterLowPt; + addPt(clusterHighPt); + if(clusterEndPt !== clusterLowPt) addPt(clusterLowPt); } else { - if(clusterLowPt !== clusterStartPt) pts[pti++] = clusterLowPt; - if(clusterEndPt !== clusterHighPt) pts[pti++] = clusterHighPt; + if(clusterLowPt !== clusterStartPt) addPt(clusterLowPt); + if(clusterEndPt !== clusterHighPt) addPt(clusterHighPt); } // and finally insert the end pt - pts[pti++] = clusterEndPt; + addPt(clusterEndPt); // have we reached the end of this segment? if(i >= d.length || !thisPt) break; // otherwise we have an out-of-cluster point to insert as next clusterStartPt - pts[pti++] = thisPt; + addPt(thisPt); clusterStartPt = thisPt; } + // to get fills right - repeat what we did at the start + if(lastFarPt) updateEdge([lastXEdge || lastFarPt[0], lastYEdge || lastFarPt[1]]); + segments.push(pts.slice(0, pti)); } diff --git a/test/image/baselines/axes_range_manual.png b/test/image/baselines/axes_range_manual.png index 0419301721b40f3972c7363b90c39adc0e5cffc9..9ebce9e1f7cae136628af6bbced954daeb5e99d1 100644 GIT binary patch literal 31175 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 X3UY=%2>(@>hguMW_SMwdYLzX diff --git a/test/image/mocks/axes_range_manual.json b/test/image/mocks/axes_range_manual.json index 19d8aff3912..3d4e663126d 100644 --- a/test/image/mocks/axes_range_manual.json +++ b/test/image/mocks/axes_range_manual.json @@ -31,6 +31,10 @@ 1, 2, 3, + 1000005, + -1e100, + 3, + 4, 4, 5, 6, @@ -42,13 +46,18 @@ 1, 2, 3, + -3000000, + 3e100, + 1e12, + -1e11, 4, 5, 6, 7, 8 ], - "type": "scatter" + "type": "scatter", + "mode": "lines" } ], "layout": { diff --git a/test/jasmine/assets/custom_matchers.js b/test/jasmine/assets/custom_matchers.js index c8aaf5c6602..b29f7be4f88 100644 --- a/test/jasmine/assets/custom_matchers.js +++ b/test/jasmine/assets/custom_matchers.js @@ -127,7 +127,7 @@ var matchers = { 'to be close to', arrayToStr(expected.map(arrayToStr)), msgExtra - ].join(' '); + ].join('\n'); return { pass: passed, diff --git a/test/jasmine/tests/scatter_test.js b/test/jasmine/tests/scatter_test.js index 3b588f496d0..44c054431f2 100644 --- a/test/jasmine/tests/scatter_test.js +++ b/test/jasmine/tests/scatter_test.js @@ -333,6 +333,75 @@ describe('Test scatter', function() { }); // TODO: test coarser decimation outside plot, and removing very near duplicates from the four of a cluster + + it('should clip extreme points without changing on-screen paths', function() { + // TODO + var ptsIn = [ + // first bunch: rays going in/out in many directions + // and a few random moves within faraway sectors, that should get dropped + // for simplicity of calculation all are 45 degree multiples, but not exactly on corners + [[40, 70], [40, 1000000], [-100, 2000000], [200, 2000000], [60, 3000000], [60, 70]], + // back and forth across the diagonal + [[60, 70], [1000060, 1000070], [-2000070, -2000060], [-3000060, -3000070], [10000070, 10000060], [70, 60]], + [[70, 60], [1000000, 60], [100000, 50], [60, 50]], + [[60, 50], [1000110, -1000000], [10000100, -10000010], [50, 40]], + // back and forth across the vertical + [[50, 40], [50, -3000000], [49, -3000000], [49, 4000000], [48, 3000000], [48, -4000000], [40, -1000000], [40, 30]], + [[40, 30], [-1000000, -1000010], [-2000010, -2000000], [30, 40]], + // back and forth across the horizontal + [[30, 40], [-5000000, 40], [-900000, -500], [-1000000, 50], [1000000, 50], [-2000000, 50], [40, 50]], + [[40, 50], [-1000010, 1000100], [-2000000, 2000100], [50, 60]], + + // some paths crossing the nearby region in various ways + [[0, 3100], [-20000, -36900], [20000, -36900], [0, 3100]], + [[0, -3000], [-20000, 37000], [20000, 37000], [0, -3000]], + + // loops around the outside + [[55, 1000000], [2000000, 23], [444, -3000000], [-4000000, 432], [-22, 5000000]], + [[12, 1000000], [2000000, 1000000], [3000000, -4000000], [-5000000, -6000000], [-7000000, 8000000], [-13, 9000000]], + + // wound-unwound loop + [[55, -100000], [100000, 0], [0, 100000], [-100000, 0], [0, -100000], [-1000000, 100000], [1000000, 100000], [66, -100000]], + + // outside kitty-corner + [[1e5, 1e6], [-1e6, -1e5], [-1e6, 1e5], [1e5, -1e6], [-1e5, -1e6], [1e6, 1e5]] + ]; + + var ptsExpected = [ + [[40, 70], [40, 2100], [60, 2100], [60, 70]], + [[60, 70], [2090, 2100], [-2000, -1990], [-2000, -2000], [-1990, -2000], [2100, 2090], [70, 60]], + [[70, 60], [2100, 60], [2100, 50], [60, 50]], + [[60, 50], [2100, -1990], [2100, -2000], [2090, -2000], [50, 40]], + [[50, 40], [50, -2000], [49, -2000], [49, 2100], [48, 2100], [48, -2000], [40, -2000], [40, 30]], + [[40, 30], [-1990, -2000], [-2000, -2000], [-2000, -1990], [30, 40]], + [[30, 40], [-2000, 40], [-2000, 50], [2100, 50], [-2000, 50], [40, 50]], + [[40, 50], [-2000, 2090], [-2000, 2100], [-1990, 2100], [50, 60]], + + [[0, 2100], [-500, 2100], [-2000, -900], [-2000, -2000], [2100, -2000], [2100, -1100], [500, 2100], [0, 2100]], + [[0, -2000], [-500, -2000], [-2000, 1000], [-2000, 2100], [2100, 2100], [2100, 1200], [500, -2000], [0, -2000]], + + [[55, 2100], [2100, 2100], [2100, -2000], [-2000, -2000], [-2000, 2100], [-22, 2100]], + [[12, 2100], [2100, 2100], [2100, -2000], [-2000, -2000], [-2000, 2100], [-13, 2100]], + + [[55, -2000], [66, -2000]], + + [[2100, 2100], [-2000, 2100], [-2000, -2000], [2100, -2000], [2100, 2100]] + ]; + + function reverseXY(v) { return [v[1], v[0]]; } + + ptsIn.forEach(function(ptsIni, i) { + // baseTolerance: disable clustering for this test + var ptsOut = callLinePoints(ptsIni, {baseTolerance: 0}); + expect(ptsOut.length).toBe(1, i); + expect(ptsOut[0]).toBeCloseTo2DArray(ptsExpected[i], 1, i); + + // swap X and Y and all should work identically + var ptsOut2 = callLinePoints(ptsIni.map(reverseXY), {baseTolerance: 0}); + expect(ptsOut2.length).toBe(1, i); + expect(ptsOut2[0]).toBeCloseTo2DArray(ptsExpected[i].map(reverseXY), 1, i); + }); + }); }); }); From 231883f20cf194e59f87554ad80abad7cd45bed6 Mon Sep 17 00:00:00 2001 From: alexcjohnson Date: Tue, 3 Oct 2017 23:31:24 -0400 Subject: [PATCH 2/6] lint and factor out constants --- src/traces/scatter/constants.js | 13 ++++- src/traces/scatter/line_points.js | 83 +++++++++++++++--------------- test/jasmine/tests/scatter_test.js | 6 +-- 3 files changed, 57 insertions(+), 45 deletions(-) diff --git a/src/traces/scatter/constants.js b/src/traces/scatter/constants.js index 66eb332f109..159fca23b0c 100644 --- a/src/traces/scatter/constants.js +++ b/src/traces/scatter/constants.js @@ -10,5 +10,16 @@ 'use strict'; module.exports = { - PTS_LINESONLY: 20 + PTS_LINESONLY: 20, + + // fixed parameters of clustering and clipping algorithms + + // fraction of clustering tolerance "so close we don't even consider it a new point" + minTolerance: 0.2, + // how fast does clustering tolerance increase as you get away from the visible region + toleranceGrowth: 10, + + // number of viewport sizes away from the visible region + // at which we clip all lines to the perimeter + maxScreensAway: 20 }; diff --git a/src/traces/scatter/line_points.js b/src/traces/scatter/line_points.js index c02a9997e73..d813e9ba378 100644 --- a/src/traces/scatter/line_points.js +++ b/src/traces/scatter/line_points.js @@ -11,43 +11,45 @@ var BADNUM = require('../../constants/numerical').BADNUM; var segmentsIntersect = require('../../lib/geometry2d').segmentsIntersect; +var constants = require('./constants'); module.exports = function linePoints(d, opts) { - var xa = opts.xaxis, - ya = opts.yaxis, - simplify = opts.simplify, - connectGaps = opts.connectGaps, - baseTolerance = opts.baseTolerance, - linear = opts.linear, - segments = [], - minTolerance = 0.2, // fraction of tolerance "so close we don't even consider it a new point" - pts = new Array(d.length), - pti = 0, - i, - - // pt variables are pixel coordinates [x,y] of one point - clusterStartPt, // these four are the outputs of clustering on a line - clusterEndPt, - clusterHighPt, - clusterLowPt, - thisPt, // "this" is the next point we're considering adding to the cluster - - clusterRefDist, - clusterHighFirst, // did we encounter the high point first, then a low point, or vice versa? - clusterUnitVector, // the first two points in the cluster determine its unit vector - // so the second is always in the "High" direction - thisVector, // the pixel delta from clusterStartPt - - // val variables are (signed) pixel distances along the cluster vector - clusterHighVal, - clusterLowVal, - thisVal, - - // deviation variables are (signed) pixel distances normal to the cluster vector - clusterMinDeviation, - clusterMaxDeviation, - thisDeviation; + var xa = opts.xaxis; + var ya = opts.yaxis; + var simplify = opts.simplify; + var connectGaps = opts.connectGaps; + var baseTolerance = opts.baseTolerance; + var linear = opts.linear; + var segments = []; + var minTolerance = constants.minTolerance; + var pts = new Array(d.length); + var pti = 0; + + var i; + + // pt variables are pixel coordinates [x,y] of one point + // these four are the outputs of clustering on a line + var clusterStartPt, clusterEndPt, clusterHighPt, clusterLowPt; + + // "this" is the next point we're considering adding to the cluster + var thisPt; + + // did we encounter the high point first, then a low point, or vice versa? + var clusterHighFirst; + + // the first two points in the cluster determine its unit vector + // so the second is always in the "High" direction + var clusterUnitVector; + + // the pixel delta from clusterStartPt + var thisVector; + + // val variables are (signed) pixel distances along the cluster vector + var clusterRefDist, clusterHighVal, clusterLowVal, thisVal; + + // deviation variables are (signed) pixel distances normal to the cluster vector + var clusterMinDeviation, clusterMaxDeviation, thisDeviation; if(!simplify) { baseTolerance = minTolerance = -1; @@ -55,8 +57,8 @@ module.exports = function linePoints(d, opts) { // turn one calcdata point into pixel coordinates function getPt(index) { - var x = xa.c2p(d[index].x), - y = ya.c2p(d[index].y); + var x = xa.c2p(d[index].x); + var y = ya.c2p(d[index].y); if(x === BADNUM || y === BADNUM) return false; return [x, y]; } @@ -65,20 +67,19 @@ module.exports = function linePoints(d, opts) { function getTolerance(pt) { var xFrac = pt[0] / xa._length; var yFrac = pt[1] / ya._length; - return (1 + 10 * Math.max(0, -xFrac, xFrac - 1, -yFrac, yFrac - 1)) * baseTolerance; + return (1 + constants.toleranceGrowth * Math.max(0, -xFrac, xFrac - 1, -yFrac, yFrac - 1)) * baseTolerance; } function ptDist(pt1, pt2) { - var dx = pt1[0] - pt2[0], - dy = pt1[1] - pt2[1]; + var dx = pt1[0] - pt2[0]; + var dy = pt1[1] - pt2[1]; return Math.sqrt(dx * dx + dy * dy); } // last bit of filtering: clip paths that are VERY far off-screen // so we don't get near the browser's hard limit (+/- 2^29 px in Chrome and FF) - // maximum multiple of the screen size to use - var maxScreensAway = 20; + var maxScreensAway = constants.maxScreensAway; // find the intersections between the segment from pt1 to pt2 // and the large rectangle maxScreensAway around the viewport diff --git a/test/jasmine/tests/scatter_test.js b/test/jasmine/tests/scatter_test.js index 44c054431f2..b6adfa3da24 100644 --- a/test/jasmine/tests/scatter_test.js +++ b/test/jasmine/tests/scatter_test.js @@ -391,13 +391,13 @@ describe('Test scatter', function() { function reverseXY(v) { return [v[1], v[0]]; } ptsIn.forEach(function(ptsIni, i) { - // baseTolerance: disable clustering for this test - var ptsOut = callLinePoints(ptsIni, {baseTolerance: 0}); + // disable clustering for these tests + var ptsOut = callLinePoints(ptsIni, {simplify: false}); expect(ptsOut.length).toBe(1, i); expect(ptsOut[0]).toBeCloseTo2DArray(ptsExpected[i], 1, i); // swap X and Y and all should work identically - var ptsOut2 = callLinePoints(ptsIni.map(reverseXY), {baseTolerance: 0}); + var ptsOut2 = callLinePoints(ptsIni.map(reverseXY), {simplify: false}); expect(ptsOut2.length).toBe(1, i); expect(ptsOut2[0]).toBeCloseTo2DArray(ptsExpected[i].map(reverseXY), 1, i); }); From 4b0b5d36fc9238278374077ddadbe9d9dc93c041 Mon Sep 17 00:00:00 2001 From: alexcjohnson Date: Wed, 4 Oct 2017 00:05:06 -0400 Subject: [PATCH 3/6] updated baselines for extreme-point fix --- test/image/baselines/range_selector_style.png | Bin 35720 -> 35699 bytes test/image/baselines/ultra_zoom.png | Bin 19377 -> 18158 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/test/image/baselines/range_selector_style.png b/test/image/baselines/range_selector_style.png index c5be54fd04c97080bd9840294b8d023b17f2a759..7bc630a406e5165194120266357e059bc1e4f0d4 100644 GIT binary patch literal 35699 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 literal 35720 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

@1jEV?BH=$?OJ{DwM3c(jWZVhgjU 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 literal 19377 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 From 5ec5dbf3a400e5b9d17101f06517e9c4cb19bb94 Mon Sep 17 00:00:00 2001 From: alexcjohnson Date: Thu, 5 Oct 2017 10:27:48 -0400 Subject: [PATCH 4/6] :hocho: old comment --- test/jasmine/tests/scatter_test.js | 1 - 1 file changed, 1 deletion(-) diff --git a/test/jasmine/tests/scatter_test.js b/test/jasmine/tests/scatter_test.js index b6adfa3da24..c8fec324a39 100644 --- a/test/jasmine/tests/scatter_test.js +++ b/test/jasmine/tests/scatter_test.js @@ -335,7 +335,6 @@ describe('Test scatter', function() { // TODO: test coarser decimation outside plot, and removing very near duplicates from the four of a cluster it('should clip extreme points without changing on-screen paths', function() { - // TODO var ptsIn = [ // first bunch: rays going in/out in many directions // and a few random moves within faraway sectors, that should get dropped From 8d3ef29dd9792aebc32763471805961daca670b0 Mon Sep 17 00:00:00 2001 From: alexcjohnson Date: Thu, 5 Oct 2017 15:29:34 -0400 Subject: [PATCH 5/6] tweak purge related to @etpinard's extra fix in #2055 --- src/plot_api/plot_api.js | 6 +----- src/plots/plots.js | 15 +++++++++++++-- test/jasmine/tests/plots_test.js | 22 ++++++++++++++++++---- 3 files changed, 32 insertions(+), 11 deletions(-) diff --git a/src/plot_api/plot_api.js b/src/plot_api/plot_api.js index b12611ccbc7..75f6b092529 100644 --- a/src/plot_api/plot_api.js +++ b/src/plot_api/plot_api.js @@ -2734,12 +2734,8 @@ Plotly.purge = function purge(gd) { // remove plot container if(fullLayout._container) fullLayout._container.remove(); + // in contrast to Plotly.Plots.purge which does NOT clear _context! delete gd._context; - delete gd._replotPending; - delete gd._mouseDownTime; - delete gd._legendMouseDownTime; - delete gd._hmpixcount; - delete gd._hmlumcount; return gd; }; diff --git a/src/plots/plots.js b/src/plots/plots.js index b73a8bbe487..9bd83886d96 100644 --- a/src/plots/plots.js +++ b/src/plots/plots.js @@ -1341,14 +1341,25 @@ plots.purge = function(gd) { delete gd._promises; delete gd._redrawTimer; delete gd.firstscatter; - delete gd.hmlumcount; - delete gd.hmpixcount; + delete gd._hmlumcount; + delete gd._hmpixcount; delete gd.numboxes; delete gd._transitionData; delete gd._transitioning; delete gd._initialAutoSize; delete gd._transitioningWithDuration; + // created during certain events, that *should* clean them up + // themselves, but may not if there was an error + delete gd._dragging; + delete gd._dragged; + delete gd._hoverdata; + delete gd._snapshotInProgress; + delete gd._editing; + delete gd._replotPending; + delete gd._mouseDownTime; + delete gd._legendMouseDownTime; + // remove all event listeners if(gd.removeAllListeners) gd.removeAllListeners(); }; diff --git a/test/jasmine/tests/plots_test.js b/test/jasmine/tests/plots_test.js index efe5a92bf14..d529b7363ed 100644 --- a/test/jasmine/tests/plots_test.js +++ b/test/jasmine/tests/plots_test.js @@ -408,6 +408,19 @@ describe('Test Plots', function() { beforeEach(function(done) { gd = createGraphDiv(); Plotly.plot(gd, [{ x: [1, 2, 3], y: [2, 3, 4] }], {}).then(done); + + // hacky: simulate getting stuck with these flags due to an error + // see #2055 and commit 6a44a9a - before fixing that error, we would + // end up in an inconsistent state that prevented future Plotly.newPlot + // because _dragging and _dragged were not cleared by purge. + gd._dragging = true; + gd._dragged = true; + gd._hoverdata = true; + gd._snapshotInProgress = true; + gd._editing = true; + gd._replotPending = true; + gd._mouseDownTime = true; + gd._legendMouseDownTime = true; }); afterEach(destroyGraphDiv); @@ -416,15 +429,16 @@ describe('Test Plots', function() { var expectedKeys = [ '_ev', '_internalEv', 'on', 'once', 'removeListener', 'removeAllListeners', '_internalOn', '_internalOnce', '_removeInternalListener', - '_removeAllInternalListeners', 'emit', '_context', '_replotPending', - '_hmpixcount', '_hmlumcount', '_mouseDownTime', '_legendMouseDownTime', + '_removeAllInternalListeners', 'emit', '_context' ]; var expectedUndefined = [ 'data', 'layout', '_fullData', '_fullLayout', 'calcdata', 'framework', 'empty', 'fid', 'undoqueue', 'undonum', 'autoplay', 'changed', - '_promises', '_redrawTimer', 'firstscatter', 'hmlumcount', 'hmpixcount', - 'numboxes', '_transitionData', '_transitioning' + '_promises', '_redrawTimer', 'firstscatter', 'numboxes', + '_transitionData', '_transitioning', '_hmpixcount', '_hmlumcount', + '_dragging', '_dragged', '_hoverdata', '_snapshotInProgress', '_editing', + '_replotPending', '_mouseDownTime', '_legendMouseDownTime' ]; Plots.purge(gd); From 37b5cdc559788192ea9cfcdabcf5ee51605f7f18 Mon Sep 17 00:00:00 2001 From: alexcjohnson Date: Thu, 5 Oct 2017 15:31:40 -0400 Subject: [PATCH 6/6] handle hv/vh/hvh/vhv line shapes in extreme point clipping spline is left working like linear, which works surprisingly well! --- src/traces/scatter/line_points.js | 76 ++++++++++++++++++++++++++-- src/traces/scatter/plot.js | 2 +- test/image/baselines/ultra_zoom.png | Bin 18158 -> 27994 bytes test/image/mocks/ultra_zoom.json | 39 ++++---------- test/jasmine/tests/scatter_test.js | 2 +- 5 files changed, 85 insertions(+), 34 deletions(-) diff --git a/src/traces/scatter/line_points.js b/src/traces/scatter/line_points.js index d813e9ba378..993e3c8982c 100644 --- a/src/traces/scatter/line_points.js +++ b/src/traces/scatter/line_points.js @@ -10,7 +10,9 @@ 'use strict'; var BADNUM = require('../../constants/numerical').BADNUM; -var segmentsIntersect = require('../../lib/geometry2d').segmentsIntersect; +var Lib = require('../../lib'); +var segmentsIntersect = Lib.segmentsIntersect; +var constrain = Lib.constrain; var constants = require('./constants'); @@ -20,7 +22,8 @@ module.exports = function linePoints(d, opts) { var simplify = opts.simplify; var connectGaps = opts.connectGaps; var baseTolerance = opts.baseTolerance; - var linear = opts.linear; + var shape = opts.shape; + var linear = shape === 'linear'; var segments = []; var minTolerance = constants.minTolerance; var pts = new Array(d.length); @@ -100,7 +103,10 @@ module.exports = function linePoints(d, opts) { ]; var xEdge, yEdge, lastXEdge, lastYEdge, lastFarPt, edgePt; - function getEdgeIntersections(pt1, pt2) { + // for linear line shape, edge intersections should be linearly interpolated + // spline uses this too, which isn't precisely correct but is actually pretty + // good, because Catmull-Rom weights far-away points less in creating the curvature + function getLinearEdgeIntersections(pt1, pt2) { var out = []; var ptCount = 0; for(var i = 0; i < 4; i++) { @@ -121,6 +127,70 @@ module.exports = function linePoints(d, opts) { return out; } + function onlyConstrainedPoint(pt) { + if(pt[0] < xEdge0 || pt[0] > xEdge1 || pt[1] < yEdge0 || pt[1] > yEdge1) { + return [constrain(pt[0], xEdge0, xEdge1), constrain(pt[1], yEdge0, yEdge1)]; + } + } + + function sameEdge(pt1, pt2) { + if(pt1[0] === pt2[0] && (pt1[0] === xEdge0 || pt1[0] === xEdge1)) return true; + if(pt1[1] === pt2[1] && (pt1[1] === yEdge0 || pt1[1] === yEdge1)) return true; + } + + // for line shapes hv and vh, movement in the two dimensions is decoupled, + // so all we need to do is constrain each dimension independently + function getHVEdgeIntersections(pt1, pt2) { + var out = []; + var ptInt1 = onlyConstrainedPoint(pt1); + var ptInt2 = onlyConstrainedPoint(pt2); + if(ptInt1 && ptInt2 && sameEdge(ptInt1, ptInt2)) return out; + + if(ptInt1) out.push(ptInt1); + if(ptInt2) out.push(ptInt2); + return out; + } + + // hvh and vhv we sometimes have to move one of the intersection points + // out BEYOND the clipping rect, by a maximum of a factor of 2, so that + // the midpoint line is drawn in the right place + function getABAEdgeIntersections(dim, limit0, limit1) { + return function(pt1, pt2) { + var ptInt1 = onlyConstrainedPoint(pt1); + var ptInt2 = onlyConstrainedPoint(pt2); + + var out = []; + if(ptInt1 && ptInt2 && sameEdge(ptInt1, ptInt2)) return out; + + if(ptInt1) out.push(ptInt1); + if(ptInt2) out.push(ptInt2); + + var midShift = 2 * Lib.constrain((pt1[dim] + pt2[dim]) / 2, limit0, limit1) - + ((ptInt1 || pt1)[dim] + (ptInt2 || pt2)[dim]); + if(midShift) { + var ptToAlter; + if(ptInt1 && ptInt2) { + ptToAlter = (midShift > 0 === ptInt1[dim] > ptInt2[dim]) ? ptInt1 : ptInt2; + } + else ptToAlter = ptInt1 || ptInt2; + + ptToAlter[dim] += midShift; + } + + return out; + }; + } + + var getEdgeIntersections; + if(shape === 'linear' || shape === 'spline') { + getEdgeIntersections = getLinearEdgeIntersections; + } + else if(shape === 'hv' || shape === 'vh') { + getEdgeIntersections = getHVEdgeIntersections; + } + else if(shape === 'hvh') getEdgeIntersections = getABAEdgeIntersections(0, xEdge0, xEdge1); + else if(shape === 'vhv') getEdgeIntersections = getABAEdgeIntersections(1, yEdge0, yEdge1); + // a segment pt1->pt2 entirely outside the nearby region: // find the corner it gets closest to touching function getClosestCorner(pt1, pt2) { diff --git a/src/traces/scatter/plot.js b/src/traces/scatter/plot.js index e4b454857dd..7c34555aeb0 100644 --- a/src/traces/scatter/plot.js +++ b/src/traces/scatter/plot.js @@ -250,7 +250,7 @@ function plotOne(gd, idx, plotinfo, cdscatter, cdscatterAll, element, transition yaxis: ya, connectGaps: trace.connectgaps, baseTolerance: Math.max(line.width || 1, 3) / 4, - linear: line.shape === 'linear', + shape: line.shape, simplify: line.simplify }); diff --git a/test/image/baselines/ultra_zoom.png b/test/image/baselines/ultra_zoom.png index 0fe862959bd57da63a3f185b26533e5ea7f085a0..bdeab353df40c02873bc873131994fdf12f10981 100644 GIT binary patch literal 27994 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 rQLuIY=Xd|9v<+WX?TkAN^%9VM!x?ANg(36 literal 18158 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

@1jEV?BH=$?OJ{DwM3c(jWZVhgjU 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 diff --git a/test/image/mocks/ultra_zoom.json b/test/image/mocks/ultra_zoom.json index e71b81683c0..e907bd41a63 100644 --- a/test/image/mocks/ultra_zoom.json +++ b/test/image/mocks/ultra_zoom.json @@ -1,33 +1,15 @@ { "data": [ - { - "x": [ - 10000, - 0.0001 - ], - "y": [ - 0.0001, - 10000 - ] - } + {"x": [10000, 0.0001], "y": [0.0001, 10000], "fill": "tozeroy", "fillcolor": "blue"}, + {"x": [10000, 0.0001], "y": [0.0001, 10000], "fill": "tozeroy", "line": {"shape": "hvh"}}, + {"x": [10000, 0.0001], "y": [0.0001, 10000], "fill": "tozeroy", "line": {"shape": "vhv"}}, + {"x": [0, 5001], "y": [5002, 0], "line": {"shape": "hv"}}, + {"x": [5002, 0], "y": [0, 5003], "line": {"shape": "vh"}}, + {"x": [0, 5000, 5001, 5002, 5003], "y": [-5000, 5000, 5000, 5000, 15000], "line": {"shape": "spline"}} ], "layout": { - "xaxis": { - "range": [ - 4990.012238820174, - 5009.888574816098 - ], - "type": "linear", - "autorange": false - }, - "yaxis": { - "range": [ - 4907.413431128477, - 5132.099078595185 - ], - "type": "linear", - "autorange": false - }, + "xaxis": {"range": [4999, 5003]}, + "yaxis": {"range": [4998, 5004]}, "shapes": [ { "type": "line", @@ -37,8 +19,7 @@ "y1": 0.0001 } ], - "height": 450, - "width": 1000, - "autosize": true + "height": 400, + "width": 600 } } diff --git a/test/jasmine/tests/scatter_test.js b/test/jasmine/tests/scatter_test.js index c8fec324a39..d61a2e6ce62 100644 --- a/test/jasmine/tests/scatter_test.js +++ b/test/jasmine/tests/scatter_test.js @@ -239,7 +239,7 @@ describe('Test scatter', function() { yaxis: ax, connectGaps: false, baseTolerance: 1, - linear: true, + shape: 'linear', simplify: true };