diff --git a/package-lock.json b/package-lock.json index 26d1d2416bb..91ca83f35f2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -682,8 +682,7 @@ "array-find-index": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", - "dev": true + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=" }, "array-from": { "version": "2.1.1", @@ -10292,11 +10291,12 @@ } }, "regl-line2d": { - "version": "3.0.18", - "resolved": "https://registry.npmjs.org/regl-line2d/-/regl-line2d-3.0.18.tgz", - "integrity": "sha512-yX1TlV0SHBdn8EkU+9K+K19qx7WSDOchrKx+h43rE2NCWuPlVj/MPDgrIXnzhnd42XhQtvvnkSc7aCSLjGAhZQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regl-line2d/-/regl-line2d-3.1.0.tgz", + "integrity": "sha512-8dB3SyAW5zTU759LrIJdkOe128htl1xlONHrknsFl1tAxZVqTc+WO/2k9pAJDuyiKu1v/6bosiuEDOB7G3dm4w==", "requires": { "array-bounds": "^1.0.1", + "array-find-index": "^1.0.2", "array-normalize": "^1.1.4", "color-normalize": "^1.5.0", "earcut": "^2.1.5", @@ -10307,86 +10307,6 @@ "parse-rect": "^1.2.0", "pick-by-alias": "^1.2.0", "to-float32": "^1.0.1" - }, - "dependencies": { - "glslify": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/glslify/-/glslify-7.1.1.tgz", - "integrity": "sha512-bud98CJ6kGZcP9Yxcsi7Iz647wuDz3oN+IZsjCRi5X1PI7t/xPKeL0mOwXJjo+CRZMqvq0CkSJiywCcY7kVYog==", - "requires": { - "bl": "^2.2.1", - "concat-stream": "^1.5.2", - "duplexify": "^3.4.5", - "falafel": "^2.1.0", - "from2": "^2.3.0", - "glsl-resolve": "0.0.1", - "glsl-token-whitespace-trim": "^1.0.0", - "glslify-bundle": "^5.0.0", - "glslify-deps": "^1.2.5", - "minimist": "^1.2.5", - "resolve": "^1.1.5", - "stack-trace": "0.0.9", - "static-eval": "^2.0.5", - "through2": "^2.0.1", - "xtend": "^4.0.0" - } - }, - "glslify-deps": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/glslify-deps/-/glslify-deps-1.3.2.tgz", - "integrity": "sha512-7S7IkHWygJRjcawveXQjRXLO2FTjijPDYC7QfZyAQanY+yGLCFHYnPtsGT9bdyHiwPTw/5a1m1M9hamT2aBpag==", - "requires": { - "@choojs/findup": "^0.2.0", - "events": "^3.2.0", - "glsl-resolve": "0.0.1", - "glsl-tokenizer": "^2.0.0", - "graceful-fs": "^4.1.2", - "inherits": "^2.0.1", - "map-limit": "0.0.1", - "resolve": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - } } }, "regl-scatter2d": { diff --git a/package.json b/package.json index e0421eb178c..ee641feec65 100644 --- a/package.json +++ b/package.json @@ -110,7 +110,7 @@ "polybooljs": "^1.2.0", "regl": "^1.6.1", "regl-error2d": "^2.0.11", - "regl-line2d": "^3.0.18", + "regl-line2d": "^3.1.0", "regl-scatter2d": "^3.2.1", "regl-splom": "^1.0.12", "right-now": "^1.0.0", diff --git a/src/traces/scattergl/plot.js b/src/traces/scattergl/plot.js index abc58a2314c..4ca1b35b6b5 100644 --- a/src/traces/scattergl/plot.js +++ b/src/traces/scattergl/plot.js @@ -182,10 +182,14 @@ module.exports = function plot(gd, subplot, cdata) { } else if(trace.fill === 'toself' || trace.fill === 'tonext') { pos = []; last = 0; + + fillOptions.splitNull = true; + for(j = 0; j < srcPos.length; j += 2) { if(isNaN(srcPos[j]) || isNaN(srcPos[j + 1])) { pos = pos.concat(srcPos.slice(last, j)); pos.push(srcPos[last], srcPos[last + 1]); + pos.push(null, null); // keep null to mark end of polygon last = j + 2; } } diff --git a/test/image/baselines/gl2d_scatter_fill_self_next.png b/test/image/baselines/gl2d_scatter_fill_self_next.png index 9ba9dd84185..285e4765863 100644 Binary files a/test/image/baselines/gl2d_scatter_fill_self_next.png and b/test/image/baselines/gl2d_scatter_fill_self_next.png differ diff --git a/test/image/mocks/gl2d_scatter_fill_self_next.json b/test/image/mocks/gl2d_scatter_fill_self_next.json index 718e8d397cb..a262f8a89aa 100644 --- a/test/image/mocks/gl2d_scatter_fill_self_next.json +++ b/test/image/mocks/gl2d_scatter_fill_self_next.json @@ -17,7 +17,29 @@ "y": [5, 6, 5], "fill": "toself", "type": "scattergl" - } + }, + { + "x": [1.1, 1.1, 2.1, null, + -1.9,-1.9,-0.9,null, + -4.9,-4.9,-3.9], + "y": [6.1, 7.1, 7.1, null, + 1.1, 2.1, 2.1, null, + 1.1, 2.1, 2.1], + "type": "scattergl", + "fill": "tonext" + }, + { + "x": [ 0, 0, 2, 2, 0, null, + 1,1,3,3,1,null, + -2,-2,0,0,-2,null, + -5,-5,-3,-3,-5], + "y": [9, 10, 10, 9, 9, null, + 6,8, 8, 6,6,null, + 1,3,3,1, 1,null, + 1,3,3,1,1], + "type": "scattergl", + "fill": "tonext" + } ], "layout":{ "title": {"text": "Fill toself and tonext"},