Skip to content

Commit df7ccaa

Browse files
committed
emit custom event data for streamtube
- 'x', 'y' and 'z' in the event data is not appropriate as they not correspond to input x/y/z values
1 parent bf12d10 commit df7ccaa

File tree

3 files changed

+77
-0
lines changed

3 files changed

+77
-0
lines changed

src/plots/gl3d/scene.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,10 @@ function render(scene) {
144144
pointNumber: ptNumber
145145
};
146146

147+
if(trace._module.eventData) {
148+
pointData = trace._module.eventData(pointData, selection, trace, {}, ptNumber);
149+
}
150+
147151
Fx.appendArrayPointValue(pointData, trace, ptNumber);
148152

149153
var eventData = {points: [pointData]};

src/traces/streamtube/index.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,25 @@ module.exports = {
1919
colorbar: require('../cone/colorbar'),
2020
calc: require('./calc'),
2121
plot: require('./convert'),
22+
eventData: function(out, pt) {
23+
out.tubex = out.x;
24+
out.tubey = out.y;
25+
out.tubez = out.z;
26+
27+
out.tubeu = pt.traceCoordinate[3];
28+
out.tubev = pt.traceCoordinate[4];
29+
out.tubew = pt.traceCoordinate[5];
30+
31+
out.norm = pt.traceCoordinate[6];
32+
out.divergence = pt.traceCoordinate[7];
33+
34+
// Does not correspond to input x/y/z, so delete them
35+
delete out.x;
36+
delete out.y;
37+
delete out.z;
38+
39+
return out;
40+
},
2241

2342
meta: {
2443
description: [

test/jasmine/tests/streamtube_test.js

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -305,6 +305,7 @@ describe('@gl Test streamtube hover', function() {
305305
mouseEvent('mouseover', 193, 177);
306306
return delay(20)();
307307
}
308+
308309
Plotly.plot(gd, fig)
309310
.then(delay(20))
310311
.then(_hover)
@@ -322,4 +323,57 @@ describe('@gl Test streamtube hover', function() {
322323
.catch(failTest)
323324
.then(done);
324325
});
326+
327+
it('should emit correct event data', function(done) {
328+
var fig = Lib.extendDeep({}, require('@mocks/gl3d_streamtube-simple.json'));
329+
fig.data[0].showscale = false;
330+
fig.layout.margin = {l: 0, t: 0, r: 0, b: 0};
331+
fig.layout.width = 400;
332+
fig.layout.height = 400;
333+
334+
var TOL = 2;
335+
var ptData;
336+
337+
function _hover() {
338+
mouseEvent('mouseover', 188, 199);
339+
return delay(20)();
340+
}
341+
342+
Plotly.plot(gd, fig)
343+
.then(delay(20))
344+
.then(function() {
345+
gd.on('plotly_hover', function(d) { ptData = d.points[0]; });
346+
})
347+
.then(_hover)
348+
.then(function() {
349+
if(ptData) {
350+
expect(Object.keys(ptData).length).toBe(12, 'key cnt');
351+
352+
expect(ptData.tubex).toBeCloseTo(2.25, TOL, 'tubex');
353+
expect(ptData.tubey).toBeCloseTo(0.59, TOL, 'tubey');
354+
expect(ptData.tubez).toBeCloseTo(1.09, TOL, 'tubez');
355+
356+
expect(ptData.tubeu).toBeCloseTo(1.85, TOL, 'tubeu');
357+
expect(ptData.tubev).toBeCloseTo(0.73, TOL, 'tubev');
358+
expect(ptData.tubew).toBeCloseTo(0.17, TOL, 'tubew');
359+
360+
expect(ptData.norm).toBeCloseTo(2.06, TOL, 'norm');
361+
expect(ptData.divergence).toBeCloseTo(0.47, TOL, 'divergence');
362+
363+
expect(ptData.curveNumber).toBe(0, 'curve number');
364+
expect(ptData.pointNumber).toBe(undefined, 'point number');
365+
366+
expect(ptData.x).toBe(undefined, 'x');
367+
expect(ptData.y).toBe(undefined, 'y');
368+
expect(ptData.z).toBe(undefined, 'z');
369+
370+
expect(ptData.data).not.toBe(undefined, 'trace data');
371+
expect(ptData.fullData).not.toBe(undefined, 'full trace data');
372+
} else {
373+
fail('did not trigger plotly_hover');
374+
}
375+
})
376+
.catch(failTest)
377+
.then(done);
378+
});
325379
});

0 commit comments

Comments
 (0)