-
-
Notifications
You must be signed in to change notification settings - Fork 1.9k
/
Copy pathcalc.js
122 lines (103 loc) · 2.86 KB
/
calc.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
/**
* Copyright 2012-2019, Plotly, Inc.
* All rights reserved.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
'use strict';
var colorscaleCalc = require('../../components/colorscale/calc');
module.exports = function calc(gd, trace) {
var i;
var u = trace.u;
var v = trace.v;
var w = trace.w;
var x = trace.x;
var y = trace.y;
var z = trace.z;
var len = Math.min(x.length, y.length, z.length, u.length, v.length, w.length);
var slen = 0;
var startx, starty, startz;
if(trace.starts) {
startx = trace.starts.x || [];
starty = trace.starts.y || [];
startz = trace.starts.z || [];
slen = Math.min(startx.length, starty.length, startz.length);
}
var normMax = 0;
var normMin = Infinity;
for(i = 0; i < len; i++) {
var uu = u[i];
var vv = v[i];
var ww = w[i];
var norm = Math.sqrt(uu * uu + vv * vv + ww * ww);
normMax = Math.max(normMax, norm);
normMin = Math.min(normMin, norm);
}
colorscaleCalc(gd, trace, {
vals: [normMin, normMax],
containerStr: '',
cLetter: 'c'
});
var xMax = -Infinity;
var xMin = Infinity;
var yMax = -Infinity;
var yMin = Infinity;
var zMax = -Infinity;
var zMin = Infinity;
var gridFill = '';
var filledX;
var filledY;
var filledZ;
var prevX;
var prevY;
var prevZ;
if(len) {
prevX = x[0];
prevY = y[0];
prevZ = z[0];
}
for(i = 0; i < len; i++) {
var xx = x[i];
xMax = Math.max(xMax, xx);
xMin = Math.min(xMin, xx);
var yy = y[i];
yMax = Math.max(yMax, yy);
yMin = Math.min(yMin, yy);
var zz = z[i];
zMax = Math.max(zMax, zz);
zMin = Math.min(zMin, zz);
if(!filledX && xx !== prevX) {
filledX = true;
gridFill += 'x';
} else if(!filledY && yy !== prevY) {
filledY = true;
gridFill += 'y';
} else if(!filledZ && zz !== prevZ) {
filledZ = true;
gridFill += 'z';
}
}
// fill if not filled - case of having 1 dimension
if(!filledX) gridFill += 'x';
if(!filledY) gridFill += 'y';
if(!filledZ) gridFill += 'z';
for(i = 0; i < slen; i++) {
var sx = startx[i];
xMax = Math.max(xMax, sx);
xMin = Math.min(xMin, sx);
var sy = starty[i];
yMax = Math.max(yMax, sy);
yMin = Math.min(yMin, sy);
var sz = startz[i];
zMax = Math.max(zMax, sz);
zMin = Math.min(zMin, sz);
}
trace._len = len;
trace._slen = slen;
trace._normMax = normMax;
trace._xbnds = [xMin, xMax];
trace._ybnds = [yMin, yMax];
trace._zbnds = [zMin, zMax];
trace._gridFill = gridFill;
};