Skip to content

Commit df9b4c4

Browse files
committed
cast x, y, z, u, v, w, values to numbers at the start of calc and store them at trace._x etc.
- rename previous trace._x, _y, _z & _intensity as well as trace._i, _j & _k to trace._meshX, etc. to avoid name conflicts
1 parent 6d06229 commit df9b4c4

File tree

5 files changed

+77
-66
lines changed

5 files changed

+77
-66
lines changed

src/traces/isosurface/calc.js

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,19 @@
1010

1111
var colorscaleCalc = require('../../components/colorscale/calc');
1212
var processGrid = require('../streamtube/calc').processGrid;
13+
var filter = require('../streamtube/calc').filter;
1314

1415
module.exports = function calc(gd, trace) {
15-
trace._len = Math.min(trace.x.length, trace.y.length, trace.z.length, trace.value.length);
16+
trace._len = Math.min(
17+
trace.x.length,
18+
trace.y.length,
19+
trace.z.length,
20+
trace.value.length
21+
);
22+
23+
['value', 'x', 'y', 'z'].forEach(function(e) {
24+
trace['_' + e] = filter(trace[e], trace._len);
25+
});
1626

1727
var grid = processGrid(trace);
1828
trace._gridFill = grid.fill;
@@ -24,7 +34,7 @@ module.exports = function calc(gd, trace) {
2434
var min = Infinity;
2535
var max = -Infinity;
2636
for(var i = 0; i < trace._len; i++) {
27-
var v = trace.value[i];
37+
var v = trace._value[i];
2838
min = Math.min(min, v);
2939
max = Math.max(max, v);
3040
}

src/traces/isosurface/convert.js

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,9 @@ proto.handlePick = function(selection) {
4646
if(selection.object === this.mesh) {
4747
var rawId = selection.data.index;
4848

49-
var x = this.data._x[rawId];
50-
var y = this.data._y[rawId];
51-
var z = this.data._z[rawId];
49+
var x = this.data._meshX[rawId];
50+
var y = this.data._meshY[rawId];
51+
var z = this.data._meshZ[rawId];
5252

5353
var height = this.data._Ys.length;
5454
var depth = this.data._Zs.length;
@@ -60,10 +60,10 @@ proto.handlePick = function(selection) {
6060
var selectIndex = selection.index = k + depth * j + depth * height * i;
6161

6262
selection.traceCoordinate = [
63-
this.data._x[selectIndex],
64-
this.data._y[selectIndex],
65-
this.data._z[selectIndex],
66-
this.data.value[selectIndex]
63+
this.data._meshX[selectIndex],
64+
this.data._meshY[selectIndex],
65+
this.data._meshZ[selectIndex],
66+
this.data._value[selectIndex]
6767
];
6868

6969
var text = this.data.hovertext || this.data.text;
@@ -91,11 +91,11 @@ proto.update = function(data) {
9191
}
9292

9393
var positions = zip3(
94-
toDataCoords(layout.xaxis, data._x, scene.dataScale[0], data.xcalendar),
95-
toDataCoords(layout.yaxis, data._y, scene.dataScale[1], data.ycalendar),
96-
toDataCoords(layout.zaxis, data._z, scene.dataScale[2], data.zcalendar));
94+
toDataCoords(layout.xaxis, data._meshX, scene.dataScale[0], data.xcalendar),
95+
toDataCoords(layout.yaxis, data._meshY, scene.dataScale[1], data.ycalendar),
96+
toDataCoords(layout.zaxis, data._meshZ, scene.dataScale[2], data.zcalendar));
9797

98-
var cells = zip3(data._i, data._j, data._k);
98+
var cells = zip3(data._meshI, data._meshJ, data._meshK);
9999

100100
var config = {
101101
positions: positions,
@@ -116,7 +116,7 @@ proto.update = function(data) {
116116
};
117117

118118
var cOpts = extractOpts(data);
119-
config.vertexIntensity = data._intensity;
119+
config.vertexIntensity = data._meshIntensity;
120120
config.vertexIntensityBounds = [cOpts.min, cOpts.max];
121121
config.colormap = parseColorScale(data);
122122

@@ -132,9 +132,9 @@ proto.dispose = function() {
132132
var GRID_TYPES = ['xyz', 'xzy', 'yxz', 'yzx', 'zxy', 'zyx'];
133133

134134
function generateIsoMeshes(data) {
135-
data._i = [];
136-
data._j = [];
137-
data._k = [];
135+
data._meshI = [];
136+
data._meshJ = [];
137+
data._meshK = [];
138138

139139
var showSurface = data.surface.show;
140140
var showSpaceframe = data.spaceframe.show;
@@ -228,9 +228,9 @@ function generateIsoMeshes(data) {
228228
}
229229

230230
function addFace(a, b, c) {
231-
data._i.push(a);
232-
data._j.push(b);
233-
data._k.push(c);
231+
data._meshI.push(a);
232+
data._meshJ.push(b);
233+
data._meshK.push(c);
234234
numFaces++;
235235

236236
return numFaces - 1;
@@ -389,10 +389,10 @@ function generateIsoMeshes(data) {
389389
var index = indecies[q];
390390
xyzv.push(
391391
[
392-
data.x[index],
393-
data.y[index],
394-
data.z[index],
395-
data.value[index]
392+
data._x[index],
393+
data._y[index],
394+
data._z[index],
395+
data._value[index]
396396
]
397397
);
398398
}
@@ -880,10 +880,10 @@ function generateIsoMeshes(data) {
880880
for(var k = 0; k < depth; k++) {
881881
var index = getIndex(i, j, k);
882882
addVertex(
883-
data.x[index],
884-
data.y[index],
885-
data.z[index],
886-
data.value[index]
883+
data._x[index],
884+
data._y[index],
885+
data._z[index],
886+
data._value[index]
887887
);
888888
}
889889
}
@@ -1021,10 +1021,10 @@ function generateIsoMeshes(data) {
10211021
emptyVertices();
10221022
}
10231023

1024-
data._x = allXs;
1025-
data._y = allYs;
1026-
data._z = allZs;
1027-
data._intensity = allVs;
1024+
data._meshX = allXs;
1025+
data._meshY = allYs;
1026+
data._meshZ = allZs;
1027+
data._meshIntensity = allVs;
10281028

10291029
data._Xs = Xs;
10301030
data._Ys = Ys;

src/traces/streamtube/calc.js

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@ function calc(gd, trace) {
2121
trace.w.length
2222
);
2323

24+
['u', 'v', 'w', 'x', 'y', 'z'].forEach(function(e) {
25+
trace['_' + e] = filter(trace[e], trace._len);
26+
});
27+
2428
var grid = processGrid(trace);
2529
trace._gridFill = grid.fill;
2630
trace._Xs = grid.Xs;
@@ -44,9 +48,9 @@ function calc(gd, trace) {
4448
var normMin = Infinity;
4549
var i;
4650
for(i = 0; i < trace._len; i++) {
47-
var u = trace.u[i];
48-
var v = trace.v[i];
49-
var w = trace.w[i];
51+
var u = trace._u[i];
52+
var v = trace._v[i];
53+
var w = trace._w[i];
5054
var norm = Math.sqrt(u * u + v * v + w * w);
5155

5256
normMax = Math.max(normMax, norm);
@@ -81,9 +85,9 @@ function calc(gd, trace) {
8185
}
8286

8387
function processGrid(trace) {
84-
var x = trace.x;
85-
var y = trace.y;
86-
var z = trace.z;
88+
var x = trace._x;
89+
var y = trace._y;
90+
var z = trace._z;
8791
var len = trace._len;
8892

8993
var i, j, k;
@@ -141,9 +145,9 @@ function processGrid(trace) {
141145
if(!filledY) gridFill += 'y';
142146
if(!filledZ) gridFill += 'z';
143147

144-
var Xs = distinctVals(trace.x, len);
145-
var Ys = distinctVals(trace.y, len);
146-
var Zs = distinctVals(trace.z, len);
148+
var Xs = distinctVals(trace._x);
149+
var Ys = distinctVals(trace._y);
150+
var Zs = distinctVals(trace._z);
147151

148152
gridFill = gridFill.replace('x', (firstX > lastX ? '-' : '+') + 'x');
149153
gridFill = gridFill.replace('y', (firstY > lastY ? '-' : '+') + 'y');
@@ -161,7 +165,7 @@ function processGrid(trace) {
161165

162166
var getArray = function(c) { return c === 'x' ? x : c === 'y' ? y : z; };
163167
var getVals = function(c) { return c === 'x' ? Xs : c === 'y' ? Ys : Zs; };
164-
var getDir = function(c) { return lessThan(c[len - 1], c[0]) ? -1 : 1; };
168+
var getDir = function(c) { return c[len - 1] < c[0] ? -1 : 1; };
165169

166170
var arrK = getArray(gridFill[1]);
167171
var arrJ = getArray(gridFill[3]);
@@ -189,9 +193,9 @@ function processGrid(trace) {
189193
var q100 = getIndex(i + 1, j, k);
190194

191195
if(
192-
!lessThan(arrK[q000] * dirK, arrK[q001] * dirK) ||
193-
!lessThan(arrJ[q000] * dirJ, arrJ[q010] * dirJ) ||
194-
!lessThan(arrI[q000] * dirI, arrI[q100] * dirI)
196+
!(arrK[q000] * dirK < arrK[q001] * dirK) ||
197+
!(arrJ[q000] * dirJ < arrJ[q010] * dirJ) ||
198+
!(arrI[q000] * dirI < arrI[q100] * dirI)
195199
) {
196200
arbitrary = true;
197201
}
@@ -223,8 +227,8 @@ function processGrid(trace) {
223227
};
224228
}
225229

226-
function distinctVals(col, len) {
227-
return Lib.distinctVals(filter(col, len)).vals;
230+
function distinctVals(col) {
231+
return Lib.distinctVals(col).vals;
228232
}
229233

230234
function filter(arr, len) {
@@ -240,11 +244,8 @@ function filter(arr, len) {
240244
return values;
241245
}
242246

243-
function lessThan(a, b) {
244-
return +a < +b;
245-
}
246-
247247
module.exports = {
248248
calc: calc,
249+
filter: filter,
249250
processGrid: processGrid
250251
};

src/traces/streamtube/convert.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -98,9 +98,9 @@ function convert(scene, trace) {
9898
}
9999

100100
tubeOpts.vectors = zip3(
101-
toDataCoords(trace.u, 'xaxis'),
102-
toDataCoords(trace.v, 'yaxis'),
103-
toDataCoords(trace.w, 'zaxis'),
101+
toDataCoords(trace._u, 'xaxis'),
102+
toDataCoords(trace._v, 'yaxis'),
103+
toDataCoords(trace._w, 'zaxis'),
104104
len
105105
);
106106

src/traces/volume/convert.js

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,9 @@ proto.handlePick = function(selection) {
3333
if(selection.object === this.mesh) {
3434
var rawId = selection.data.index;
3535

36-
var x = this.data._x[rawId];
37-
var y = this.data._y[rawId];
38-
var z = this.data._z[rawId];
36+
var x = this.data._meshX[rawId];
37+
var y = this.data._meshY[rawId];
38+
var z = this.data._meshZ[rawId];
3939

4040
var height = this.data._Ys.length;
4141
var depth = this.data._Zs.length;
@@ -47,10 +47,10 @@ proto.handlePick = function(selection) {
4747
var selectIndex = selection.index = k + depth * j + depth * height * i;
4848

4949
selection.traceCoordinate = [
50-
this.data._x[selectIndex],
51-
this.data._y[selectIndex],
52-
this.data._z[selectIndex],
53-
this.data.value[selectIndex]
50+
this.data._meshX[selectIndex],
51+
this.data._meshY[selectIndex],
52+
this.data._meshZ[selectIndex],
53+
this.data._value[selectIndex]
5454
];
5555

5656
var text = this.data.hovertext || this.data.text;
@@ -78,11 +78,11 @@ proto.update = function(data) {
7878
}
7979

8080
var positions = zip3(
81-
toDataCoords(layout.xaxis, data._x, scene.dataScale[0], data.xcalendar),
82-
toDataCoords(layout.yaxis, data._y, scene.dataScale[1], data.ycalendar),
83-
toDataCoords(layout.zaxis, data._z, scene.dataScale[2], data.zcalendar));
81+
toDataCoords(layout.xaxis, data._meshX, scene.dataScale[0], data.xcalendar),
82+
toDataCoords(layout.yaxis, data._meshY, scene.dataScale[1], data.ycalendar),
83+
toDataCoords(layout.zaxis, data._meshZ, scene.dataScale[2], data.zcalendar));
8484

85-
var cells = zip3(data._i, data._j, data._k);
85+
var cells = zip3(data._meshI, data._meshJ, data._meshK);
8686

8787
var config = {
8888
positions: positions,
@@ -104,7 +104,7 @@ proto.update = function(data) {
104104
};
105105

106106
var cOpts = extractOpts(data);
107-
config.vertexIntensity = data._intensity;
107+
config.vertexIntensity = data._meshIntensity;
108108
config.vertexIntensityBounds = [cOpts.min, cOpts.max];
109109
config.colormap = parseColorScale(data);
110110

0 commit comments

Comments
 (0)