diff --git a/package-lock.json b/package-lock.json index 2c85b97f6f0..84ad4e03017 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4745,9 +4745,9 @@ } }, "gl-cone3d": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gl-cone3d/-/gl-cone3d-1.0.0.tgz", - "integrity": "sha512-MwYeZZIbuSo92kSvXuY7aPVqtVznCsEEhMh29GHWfwJEMi4cDX5dsgutYy7KArj99bVwTspn/d8l+ffJ1WSWMw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gl-cone3d/-/gl-cone3d-1.0.1.tgz", + "integrity": "sha512-go1kuysMgZaZwZH4XVT6YyIrrnd3PRAAXaFP6hqVcGy4zZlxzg7QOqcdjB5LQcgkTfe8iG/REd6WWRDxdfuTXA==", "requires": { "gl-shader": "4.2.1", "gl-vec3": "1.0.3", diff --git a/package.json b/package.json index e1758e8d6e7..13a3da5c9dc 100644 --- a/package.json +++ b/package.json @@ -70,7 +70,7 @@ "es6-promise": "^3.0.2", "fast-isnumeric": "^1.1.1", "font-atlas-sdf": "^1.3.3", - "gl-cone3d": "^v1.0.0", + "gl-cone3d": "^v1.0.1", "gl-contour2d": "^1.1.4", "gl-error3d": "^1.0.7", "gl-heatmap2d": "^1.0.4", diff --git a/src/traces/cone/attributes.js b/src/traces/cone/attributes.js index 37ebff91e35..4768947a669 100644 --- a/src/traces/cone/attributes.js +++ b/src/traces/cone/attributes.js @@ -170,7 +170,7 @@ fromMesh3d.forEach(function(k) { attrs.hoverinfo = extendFlat({}, baseAttrs.hoverinfo, { editType: 'calc', flags: ['x', 'y', 'z', 'u', 'v', 'w', 'norm', 'text', 'name'], - dflt: 'x+y+z+norm+text' + dflt: 'x+y+z+norm+text+name' }); module.exports = attrs; diff --git a/src/traces/cone/calc.js b/src/traces/cone/calc.js index 5200129943b..7a0f1e20982 100644 --- a/src/traces/cone/calc.js +++ b/src/traces/cone/calc.js @@ -17,20 +17,15 @@ module.exports = function calc(gd, trace) { var len = Math.min(u.length, v.length, w.length); var normMax = -Infinity; var normMin = Infinity; - var compMax = -Infinity; for(var i = 0; i < len; i++) { var uu = u[i]; - var u2 = uu * uu; var vv = v[i]; - var v2 = vv * vv; var ww = w[i]; - var w2 = ww * ww; - var norm = Math.sqrt(u2 + v2 + w2); + var norm = Math.sqrt(uu * uu + vv * vv + ww * ww); normMax = Math.max(normMax, norm); normMin = Math.min(normMin, norm); - compMax = Math.max(compMax, u2, v2, w2); } trace._normMax = normMax; diff --git a/test/image/baselines/gl3d_cone-single.png b/test/image/baselines/gl3d_cone-single.png new file mode 100644 index 00000000000..54005d3de3c Binary files /dev/null and b/test/image/baselines/gl3d_cone-single.png differ diff --git a/test/image/mocks/gl3d_cone-single.json b/test/image/mocks/gl3d_cone-single.json new file mode 100644 index 00000000000..8f83e825d0d --- /dev/null +++ b/test/image/mocks/gl3d_cone-single.json @@ -0,0 +1,16 @@ +{ + "data": [ + { + "type": "cone", + "x": [1], "y": [1], "z": [1], + "u": [1], "v": [1], "w": [0] + } + ], + "layout": { + "scene": { + "camera": { + "eye": {"x": -0.76, "y": 1.8, "z": 0.92} + } + } + } +} diff --git a/test/jasmine/tests/cone_test.js b/test/jasmine/tests/cone_test.js index 2ea4f770c5b..8ec096eaa22 100644 --- a/test/jasmine/tests/cone_test.js +++ b/test/jasmine/tests/cone_test.js @@ -265,4 +265,46 @@ describe('@gl Test cone interactions', function() { .catch(failTest) .then(done); }); + + it('should display hover labels (multi-trace case)', function(done) { + function _hover() { + mouseEvent('mouseover', 245, 230); + return delay(20)(); + } + + Plotly.plot(gd, [{ + type: 'cone', + name: 'blue cone', + x: [1], y: [1], z: [1], + u: [1], v: [1], w: [0], + colorscale: 'Blues', + showscale: false + }, { + type: 'cone', + name: 'green cone', + x: [3], y: [3], z: [3], + u: [0], v: [0], w: [2], + colorscale: 'Greens', + showscale: false + }], { + scene: { + camera: { + eye: {x: -0.76, y: 1.8, z: 0.92} + } + }, + margin: {l: 0, t: 0, r: 0, b: 0}, + width: 400, + height: 400 + }) + .then(delay(20)) + .then(_hover) + .then(function() { + assertHoverLabelContent({ + nums: ['x: 1', 'y: 1', 'z: 1', 'norm: 1.41'].join('\n'), + name: 'blue cone' + }); + }) + .catch(failTest) + .then(done); + }); });