Skip to content

Commit 69f0939

Browse files
committed
correct streamtube positions, norms and colors by taking into account data fill order
1 parent 7acf9cd commit 69f0939

15 files changed

+61
-31
lines changed

package-lock.json

Lines changed: 2 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@
8686
"gl-scatter3d": "^1.2.2",
8787
"gl-select-box": "^1.0.3",
8888
"gl-spikes2d": "^1.0.2",
89-
"gl-streamtube3d": "^1.3.1",
89+
"gl-streamtube3d": "git://github.com/gl-vis/gl-streamtube3d.git#82a0dd7a8dc601f48ed4afdc5a3e40394b758deb",
9090
"gl-surface3d": "^1.4.6",
9191
"gl-text": "^1.1.8",
9292
"glslify": "^7.0.0",

src/traces/streamtube/calc.js

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,19 @@ module.exports = function calc(gd, trace) {
5656
var zMax = -Infinity;
5757
var zMin = Infinity;
5858

59+
var gridFill = '';
60+
var filledX;
61+
var filledY;
62+
var filledZ;
63+
var prevX;
64+
var prevY;
65+
var prevZ;
66+
if(len) {
67+
prevX = x[0];
68+
prevY = y[0];
69+
prevZ = z[0];
70+
}
71+
5972
for(i = 0; i < len; i++) {
6073
var xx = x[i];
6174
xMax = Math.max(xMax, xx);
@@ -68,7 +81,23 @@ module.exports = function calc(gd, trace) {
6881
var zz = z[i];
6982
zMax = Math.max(zMax, zz);
7083
zMin = Math.min(zMin, zz);
84+
85+
if(!filledX && xx !== prevX) {
86+
filledX = true;
87+
gridFill += 'x';
88+
} else if(!filledY && yy !== prevY) {
89+
filledY = true;
90+
gridFill += 'y';
91+
} else if(!filledZ && zz !== prevZ) {
92+
filledZ = true;
93+
gridFill += 'z';
94+
}
7195
}
96+
// fill if not filled - case of having 1 dimension
97+
if(!filledX) gridFill += 'x';
98+
if(!filledY) gridFill += 'y';
99+
if(!filledZ) gridFill += 'z';
100+
72101
for(i = 0; i < slen; i++) {
73102
var sx = startx[i];
74103
xMax = Math.max(xMax, sx);
@@ -89,4 +118,5 @@ module.exports = function calc(gd, trace) {
89118
trace._xbnds = [xMin, xMax];
90119
trace._ybnds = [yMin, yMax];
91120
trace._zbnds = [zMin, zMax];
121+
trace._gridFill = gridFill;
92122
};

src/traces/streamtube/convert.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@ function convert(scene, trace) {
122122
var meshz = toDataCoords(valsz, 'zaxis');
123123

124124
tubeOpts.meshgrid = [meshx, meshy, meshz];
125+
tubeOpts.gridFill = trace._gridFill;
125126

126127
var slen = trace._slen;
127128
if(slen) {
-108 Bytes
Loading
Loading
Loading
Loading
-13.2 KB
Loading
897 Bytes
Loading
-944 Bytes
Loading
-7.33 KB
Loading
-3.63 KB
Loading
Loading

test/jasmine/tests/streamtube_test.js

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -85,19 +85,19 @@ describe('Test streamtube autorange', function() {
8585

8686
Plotly.plot(gd, fig).then(function() {
8787
_assertAxisRanges('base',
88-
[-5.36, 5.525], [-3.73, 5.44], [-3.55, 3.78]
88+
[-5.36, 5.55], [-6.36, 3.90], [-3.58, 3.95]
8989
);
9090
return Plotly.restyle(gd, 'sizeref', 10);
9191
})
9292
.then(function() {
9393
_assertAxisRanges('with large sizeref',
94-
[-9.86, 10.02], [-8.23, 9.935], [-8.045, 8.28]
94+
[-9.86, 10.05], [-10.86, 8.39], [-8.08, 8.45]
9595
);
9696
return Plotly.restyle(gd, 'sizeref', 0.1);
9797
})
9898
.then(function() {
9999
_assertAxisRanges('with small sizeref',
100-
[-5.32, 5.48], [-3.69, 5.39], [-3.50, 3.73]
100+
[-5.32, 5.51], [-6.32, 3.85], [-3.54, 3.91]
101101
);
102102
})
103103
.catch(failTest)
@@ -157,8 +157,8 @@ describe('Test streamtube starting positions defaults:', function() {
157157

158158
Plotly.plot(gd, mock).then(function() {
159159
_assert({
160-
positionsLength: 6144,
161-
cellsLength: 2048
160+
positionsLength: 6288,
161+
cellsLength: 2096
162162
});
163163
})
164164
.catch(failTest)
@@ -179,8 +179,8 @@ describe('Test streamtube starting positions defaults:', function() {
179179
it('@gl should take middle pt if mesh vector has length 2', function(done) {
180180
Plotly.plot(gd, makeFigure(3, 3, 2)).then(function() {
181181
_assert({
182-
positionsLength: 1200,
183-
cellsLength: 400
182+
positionsLength: 1296,
183+
cellsLength: 432
184184
});
185185
})
186186
.catch(failTest)
@@ -343,10 +343,10 @@ describe('Test streamtube hover', function() {
343343
.then(function() {
344344
assertHoverLabelContent({
345345
nums: [
346-
'x: 2.250878',
347-
'y: 0.5866609',
348-
'z: 1.091627',
349-
'norm: 2.06'
346+
'x: 2.191782',
347+
'y: 0.5538867',
348+
'z: 1.057623',
349+
'norm: 2.11'
350350
].join('\n')
351351
});
352352

@@ -358,9 +358,9 @@ describe('Test streamtube hover', function() {
358358
.then(function() {
359359
assertHoverLabelContent({
360360
nums: [
361-
'u: 1.847686',
362-
'v: 0.7303133',
363-
'w: 0.1693927'
361+
'u: 1.909297',
362+
'v: 0.7453796',
363+
'w: 0.09330833'
364364
].join('\n')
365365
});
366366
return Plotly.restyle(gd, 'hoverinfo', 'divergence');
@@ -369,7 +369,7 @@ describe('Test streamtube hover', function() {
369369
.then(_hover)
370370
.then(delay(20))
371371
.then(function() {
372-
assertHoverLabelContent({nums: 'divergence: 0.465'});
372+
assertHoverLabelContent({nums: 'divergence: 0.467'});
373373
return Plotly.restyle(gd, {
374374
hoverinfo: 'text',
375375
text: '!SCALAR TX!'
@@ -416,10 +416,10 @@ describe('Test streamtube hover', function() {
416416
.then(function() {
417417
assertHoverLabelContent({
418418
nums: [
419-
'x: 2.059149',
420-
'y: 0.5083682',
421-
'z: 1.074042',
422-
'norm: 2.07'
419+
'x: 2.063244',
420+
'y: 0.502517',
421+
'z: 1.051367',
422+
'norm: 2.12'
423423
].join('\n'),
424424
name: 'TUBE!'
425425
});
@@ -428,7 +428,7 @@ describe('Test streamtube hover', function() {
428428
})
429429
.then(function() {
430430
assertHoverLabelContent({
431-
nums: '∇·F = 0.465',
431+
nums: '∇·F = 0.467',
432432
name: 'TUBE'
433433
});
434434
})
@@ -461,15 +461,15 @@ describe('Test streamtube hover', function() {
461461
if(ptData) {
462462
expect(Object.keys(ptData).length).toBe(12, 'key cnt');
463463

464-
expect(ptData.tubex).toBeCloseTo(2.25, TOL, 'tubex');
465-
expect(ptData.tubey).toBeCloseTo(0.59, TOL, 'tubey');
466-
expect(ptData.tubez).toBeCloseTo(1.09, TOL, 'tubez');
464+
expect(ptData.tubex).toBeCloseTo(2.19, TOL, 'tubex');
465+
expect(ptData.tubey).toBeCloseTo(0.55, TOL, 'tubey');
466+
expect(ptData.tubez).toBeCloseTo(1.06, TOL, 'tubez');
467467

468-
expect(ptData.tubeu).toBeCloseTo(1.85, TOL, 'tubeu');
469-
expect(ptData.tubev).toBeCloseTo(0.73, TOL, 'tubev');
470-
expect(ptData.tubew).toBeCloseTo(0.17, TOL, 'tubew');
468+
expect(ptData.tubeu).toBeCloseTo(1.91, TOL, 'tubeu');
469+
expect(ptData.tubev).toBeCloseTo(0.74, TOL, 'tubev');
470+
expect(ptData.tubew).toBeCloseTo(0.09, TOL, 'tubew');
471471

472-
expect(ptData.norm).toBeCloseTo(2.06, TOL, 'norm');
472+
expect(ptData.norm).toBeCloseTo(2.11, TOL, 'norm');
473473
expect(ptData.divergence).toBeCloseTo(0.47, TOL, 'divergence');
474474

475475
expect(ptData.curveNumber).toBe(0, 'curve number');

0 commit comments

Comments
 (0)