1111var Lib = require ( '../../lib' ) ;
1212var colorscaleCalc = require ( '../../components/colorscale/calc' ) ;
1313
14- module . exports = function calc ( gd , trace ) {
15- var i , j , k ;
16-
17- var u = trace . u ;
18- var v = trace . v ;
19- var w = trace . w ;
20- var x = trace . x ;
21- var y = trace . y ;
22- var z = trace . z ;
23- var len = Math . min ( x . length , y . length , z . length , u . length , v . length , w . length ) ;
14+ function calc ( gd , trace ) {
15+ trace . _len = Math . min (
16+ trace . x . length ,
17+ trace . y . length ,
18+ trace . z . length ,
19+ trace . u . length ,
20+ trace . v . length ,
21+ trace . w . length
22+ ) ;
23+
24+ var grid = processGrid ( trace ) ;
25+ trace . _gridFill = grid . fill ;
26+ trace . _Xs = grid . Xs ;
27+ trace . _Ys = grid . Ys ;
28+ trace . _Zs = grid . Zs ;
29+ trace . _len = grid . len ;
2430
2531 var slen = 0 ;
2632 var startx , starty , startz ;
@@ -36,12 +42,12 @@ module.exports = function calc(gd, trace) {
3642
3743 var normMax = 0 ;
3844 var normMin = Infinity ;
39-
40- for ( i = 0 ; i < len ; i ++ ) {
41- var uu = u [ i ] ;
42- var vv = v [ i ] ;
43- var ww = w [ i ] ;
44- var norm = Math . sqrt ( uu * uu + vv * vv + ww * ww ) ;
45+ var i ;
46+ 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 ] ;
50+ var norm = Math . sqrt ( u * u + v * v + w * w ) ;
4551
4652 normMax = Math . max ( normMax , norm ) ;
4753 normMin = Math . min ( normMin , norm ) ;
@@ -53,6 +59,35 @@ module.exports = function calc(gd, trace) {
5359 cLetter : 'c'
5460 } ) ;
5561
62+ for ( i = 0 ; i < slen ; i ++ ) {
63+ var sx = startx [ i ] ;
64+ grid . xMax = Math . max ( grid . xMax , sx ) ;
65+ grid . xMin = Math . min ( grid . xMin , sx ) ;
66+
67+ var sy = starty [ i ] ;
68+ grid . yMax = Math . max ( grid . yMax , sy ) ;
69+ grid . yMin = Math . min ( grid . yMin , sy ) ;
70+
71+ var sz = startz [ i ] ;
72+ grid . zMax = Math . max ( grid . zMax , sz ) ;
73+ grid . zMin = Math . min ( grid . zMin , sz ) ;
74+ }
75+
76+ trace . _slen = slen ;
77+ trace . _normMax = normMax ;
78+ trace . _xbnds = [ grid . xMin , grid . xMax ] ;
79+ trace . _ybnds = [ grid . yMin , grid . yMax ] ;
80+ trace . _zbnds = [ grid . zMin , grid . zMax ] ;
81+ }
82+
83+ function processGrid ( trace ) {
84+ var x = trace . x ;
85+ var y = trace . y ;
86+ var z = trace . z ;
87+ var len = trace . _len ;
88+
89+ var i , j , k ;
90+
5691 var xMax = - Infinity ;
5792 var xMin = Infinity ;
5893 var yMax = - Infinity ;
@@ -106,9 +141,9 @@ module.exports = function calc(gd, trace) {
106141 if ( ! filledY ) gridFill += 'y' ;
107142 if ( ! filledZ ) gridFill += 'z' ;
108143
109- var Xs = distinctVals ( filter ( trace . x , len ) ) ;
110- var Ys = distinctVals ( filter ( trace . y , len ) ) ;
111- var Zs = distinctVals ( filter ( trace . z , len ) ) ;
144+ var Xs = distinctVals ( trace . x , len ) ;
145+ var Ys = distinctVals ( trace . y , len ) ;
146+ var Zs = distinctVals ( trace . z , len ) ;
112147
113148 gridFill = gridFill . replace ( 'x' , ( firstX > lastX ? '-' : '+' ) + 'x' ) ;
114149 gridFill = gridFill . replace ( 'y' , ( firstY > lastY ? '-' : '+' ) + 'y' ) ;
@@ -173,41 +208,30 @@ module.exports = function calc(gd, trace) {
173208 empty ( ) ;
174209 }
175210
176- for ( i = 0 ; i < slen ; i ++ ) {
177- var sx = startx [ i ] ;
178- xMax = Math . max ( xMax , sx ) ;
179- xMin = Math . min ( xMin , sx ) ;
180-
181- var sy = starty [ i ] ;
182- yMax = Math . max ( yMax , sy ) ;
183- yMin = Math . min ( yMin , sy ) ;
184-
185- var sz = startz [ i ] ;
186- zMax = Math . max ( zMax , sz ) ;
187- zMin = Math . min ( zMin , sz ) ;
188- }
189-
190- trace . _len = len ;
191- trace . _slen = slen ;
192- trace . _normMax = normMax ;
193- trace . _xbnds = [ xMin , xMax ] ;
194- trace . _ybnds = [ yMin , yMax ] ;
195- trace . _zbnds = [ zMin , zMax ] ;
196- trace . _Xs = Xs ;
197- trace . _Ys = Ys ;
198- trace . _Zs = Zs ;
199- trace . _gridFill = gridFill ;
200- } ;
211+ return {
212+ xMin : xMin ,
213+ yMin : yMin ,
214+ zMin : zMin ,
215+ xMax : xMax ,
216+ yMax : yMax ,
217+ zMax : zMax ,
218+ Xs : Xs ,
219+ Ys : Ys ,
220+ Zs : Zs ,
221+ len : len ,
222+ fill : gridFill
223+ } ;
224+ }
201225
202226function distinctVals ( col ) {
203- return Lib . distinctVals ( col ) . vals ;
227+ return Lib . distinctVals ( filter ( col ) ) . vals ;
204228}
205229
206230function filter ( arr , len ) {
207231 if ( len === undefined ) len = arr . length ;
208232
209233 // no need for casting typed arrays to numbers
210- if ( Lib . isTypedArray ( arr ) ) return arr . slice ( 0 , len ) ;
234+ if ( Lib . isTypedArray ( arr ) ) return arr . subarray ( 0 , len ) ;
211235
212236 var values = [ ] ;
213237 for ( var i = 0 ; i < len ; i ++ ) {
@@ -219,3 +243,8 @@ function filter(arr, len) {
219243function lessThan ( a , b ) {
220244 return + a < + b ;
221245}
246+
247+ module . exports = {
248+ calc : calc ,
249+ processGrid : processGrid
250+ } ;
0 commit comments