@@ -36,6 +36,8 @@ function calc(gd, trace) {
3636 // only differ here for log axes, pass ldata to createMatrix as 'data'
3737 var cdata = opts . cdata = [ ] ;
3838 var ldata = opts . data = [ ] ;
39+ // keep track of visible dimensions
40+ var visibleDims = stash . visibleDims = [ ] ;
3941 var i , k , dim , xa , ya ;
4042
4143 function makeCalcdata ( ax , dim ) {
@@ -71,6 +73,8 @@ function calc(gd, trace) {
7173 // should not make it here, if both xa and ya undefined
7274 makeCalcdata ( ya , dim ) ;
7375 }
76+
77+ visibleDims . push ( i ) ;
7478 }
7579 }
7680
@@ -80,26 +84,24 @@ function calc(gd, trace) {
8084 var visibleLength = cdata . length ;
8185 var hasTooManyPoints = ( visibleLength * commonLength ) > TOO_MANY_POINTS ;
8286
83- for ( i = 0 , k = 0 ; i < dimensions . length ; i ++ ) {
87+ for ( k = 0 ; k < visibleDims . length ; k ++ ) {
88+ i = visibleDims [ k ] ;
8489 dim = dimensions [ i ] ;
8590
86- if ( dim . visible ) {
87- xa = AxisIDs . getFromId ( gd , trace . _diag [ i ] [ 0 ] ) || { } ;
88- ya = AxisIDs . getFromId ( gd , trace . _diag [ i ] [ 1 ] ) || { } ;
89-
90- // Reuse SVG scatter axis expansion routine.
91- // For graphs with very large number of points and array marker.size,
92- // use average marker size instead to speed things up.
93- var ppad ;
94- if ( hasTooManyPoints ) {
95- ppad = 2 * ( opts . sizeAvg || Math . max ( opts . size , 3 ) ) ;
96- } else {
97- ppad = calcMarkerSize ( trace , commonLength ) ;
98- }
99-
100- calcAxisExpansion ( gd , trace , xa , ya , cdata [ k ] , cdata [ k ] , ppad ) ;
101- k ++ ;
91+ xa = AxisIDs . getFromId ( gd , trace . _diag [ i ] [ 0 ] ) || { } ;
92+ ya = AxisIDs . getFromId ( gd , trace . _diag [ i ] [ 1 ] ) || { } ;
93+
94+ // Reuse SVG scatter axis expansion routine.
95+ // For graphs with very large number of points and array marker.size,
96+ // use average marker size instead to speed things up.
97+ var ppad ;
98+ if ( hasTooManyPoints ) {
99+ ppad = 2 * ( opts . sizeAvg || Math . max ( opts . size , 3 ) ) ;
100+ } else {
101+ ppad = calcMarkerSize ( trace , commonLength ) ;
102102 }
103+
104+ calcAxisExpansion ( gd , trace , xa , ya , cdata [ k ] , cdata [ k ] , ppad ) ;
103105 }
104106
105107 var scene = stash . _scene = sceneUpdate ( gd , stash ) ;
@@ -133,9 +135,7 @@ function sceneUpdate(gd, stash) {
133135 // draw traces in selection mode
134136 if ( scene . matrix && scene . selectBatch ) {
135137 scene . matrix . draw ( scene . unselectBatch , scene . selectBatch ) ;
136- }
137-
138- else if ( scene . matrix ) {
138+ } else if ( scene . matrix ) {
139139 scene . matrix . draw ( ) ;
140140 }
141141
@@ -191,34 +191,32 @@ function plotOne(gd, cd0) {
191191 matrixOpts . upper = trace . showlowerhalf ;
192192 matrixOpts . diagonal = trace . diagonal . visible ;
193193
194- var dimensions = trace . dimensions ;
194+ var visibleDims = stash . visibleDims ;
195195 var visibleLength = cdata . length ;
196196 var viewOpts = { } ;
197197 viewOpts . ranges = new Array ( visibleLength ) ;
198198 viewOpts . domains = new Array ( visibleLength ) ;
199199
200- for ( i = 0 , k = 0 ; i < dimensions . length ; i ++ ) {
201- if ( trace . dimensions [ i ] . visible ) {
202- var rng = viewOpts . ranges [ k ] = new Array ( 4 ) ;
203- var dmn = viewOpts . domains [ k ] = new Array ( 4 ) ;
200+ for ( k = 0 ; k < visibleDims . length ; k ++ ) {
201+ i = visibleDims [ k ] ;
204202
205- xa = AxisIDs . getFromId ( gd , trace . _diag [ i ] [ 0 ] ) ;
206- if ( xa ) {
207- rng [ 0 ] = xa . _rl [ 0 ] ;
208- rng [ 2 ] = xa . _rl [ 1 ] ;
209- dmn [ 0 ] = xa . domain [ 0 ] ;
210- dmn [ 2 ] = xa . domain [ 1 ] ;
211- }
203+ var rng = viewOpts . ranges [ k ] = new Array ( 4 ) ;
204+ var dmn = viewOpts . domains [ k ] = new Array ( 4 ) ;
212205
213- ya = AxisIDs . getFromId ( gd , trace . _diag [ i ] [ 1 ] ) ;
214- if ( ya ) {
215- rng [ 1 ] = ya . _rl [ 0 ] ;
216- rng [ 3 ] = ya . _rl [ 1 ] ;
217- dmn [ 1 ] = ya . domain [ 0 ] ;
218- dmn [ 3 ] = ya . domain [ 1 ] ;
219- }
206+ xa = AxisIDs . getFromId ( gd , trace . _diag [ i ] [ 0 ] ) ;
207+ if ( xa ) {
208+ rng [ 0 ] = xa . _rl [ 0 ] ;
209+ rng [ 2 ] = xa . _rl [ 1 ] ;
210+ dmn [ 0 ] = xa . domain [ 0 ] ;
211+ dmn [ 2 ] = xa . domain [ 1 ] ;
212+ }
220213
221- k ++ ;
214+ ya = AxisIDs . getFromId ( gd , trace . _diag [ i ] [ 1 ] ) ;
215+ if ( ya ) {
216+ rng [ 1 ] = ya . _rl [ 0 ] ;
217+ rng [ 3 ] = ya . _rl [ 1 ] ;
218+ dmn [ 1 ] = ya . domain [ 0 ] ;
219+ dmn [ 3 ] = ya . domain [ 1 ] ;
222220 }
223221 }
224222
@@ -260,25 +258,23 @@ function plotOne(gd, cd0) {
260258 var xpx = stash . xpx = new Array ( visibleLength ) ;
261259 var ypx = stash . ypx = new Array ( visibleLength ) ;
262260
263- for ( i = 0 , k = 0 ; i < dimensions . length ; i ++ ) {
264- if ( trace . dimensions [ i ] . visible ) {
265- xa = AxisIDs . getFromId ( gd , trace . _diag [ i ] [ 0 ] ) ;
266- if ( xa ) {
267- xpx [ k ] = new Array ( commonLength ) ;
268- for ( j = 0 ; j < commonLength ; j ++ ) {
269- xpx [ k ] [ j ] = xa . c2p ( cdata [ k ] [ j ] ) ;
270- }
271- }
261+ for ( k = 0 ; k < visibleDims . length ; k ++ ) {
262+ i = visibleDims [ k ] ;
272263
273- ya = AxisIDs . getFromId ( gd , trace . _diag [ i ] [ 1 ] ) ;
274- if ( ya ) {
275- ypx [ k ] = new Array ( commonLength ) ;
276- for ( j = 0 ; j < commonLength ; j ++ ) {
277- ypx [ k ] [ j ] = ya . c2p ( cdata [ k ] [ j ] ) ;
278- }
264+ xa = AxisIDs . getFromId ( gd , trace . _diag [ i ] [ 0 ] ) ;
265+ if ( xa ) {
266+ xpx [ k ] = new Array ( commonLength ) ;
267+ for ( j = 0 ; j < commonLength ; j ++ ) {
268+ xpx [ k ] [ j ] = xa . c2p ( cdata [ k ] [ j ] ) ;
279269 }
270+ }
280271
281- k ++ ;
272+ ya = AxisIDs . getFromId ( gd , trace . _diag [ i ] [ 1 ] ) ;
273+ if ( ya ) {
274+ ypx [ k ] = new Array ( commonLength ) ;
275+ for ( j = 0 ; j < commonLength ; j ++ ) {
276+ ypx [ k ] [ j ] = ya . c2p ( cdata [ k ] [ j ] ) ;
277+ }
282278 }
283279 }
284280
@@ -293,8 +289,8 @@ function plotOne(gd, cd0) {
293289 }
294290 }
295291 else {
296- scene . matrix . update ( matrixOpts ) ;
297- scene . matrix . update ( viewOpts ) ;
292+ scene . matrix . update ( matrixOpts , null ) ;
293+ scene . matrix . update ( viewOpts , null ) ;
298294 stash . xpx = stash . ypx = null ;
299295 }
300296
@@ -313,8 +309,8 @@ function hoverPoints(pointData, xval, yval) {
313309 var ypx = ya . c2p ( yval ) ;
314310 var maxDistance = pointData . distance ;
315311
316- var xi = getDimIndex ( trace , xa ) ;
317- var yi = getDimIndex ( trace , ya ) ;
312+ var xi = getDimIndex ( trace , stash , xa ) ;
313+ var yi = getDimIndex ( trace , stash , ya ) ;
318314 if ( xi === false || yi === false ) return [ pointData ] ;
319315
320316 var x = cdata [ xi ] ;
@@ -363,8 +359,8 @@ function selectPoints(searchInfo, polygon) {
363359 var hasOnlyLines = ( ! subTypes . hasMarkers ( trace ) && ! subTypes . hasText ( trace ) ) ;
364360 if ( trace . visible !== true || hasOnlyLines ) return selection ;
365361
366- var xi = getDimIndex ( trace , xa ) ;
367- var yi = getDimIndex ( trace , ya ) ;
362+ var xi = getDimIndex ( trace , stash , xa ) ;
363+ var yi = getDimIndex ( trace , stash , ya ) ;
368364 if ( xi === false || yi === false ) return selection ;
369365
370366 var xpx = stash . xpx [ xi ] ;
@@ -445,17 +441,15 @@ function style(gd, cds) {
445441 }
446442}
447443
448- function getDimIndex ( trace , ax ) {
444+ function getDimIndex ( trace , stash , ax ) {
449445 var axId = ax . _id ;
450446 var axLetter = axId . charAt ( 0 ) ;
451447 var ind = { x : 0 , y : 1 } [ axLetter ] ;
452- var dimensions = trace . dimensions ;
448+ var visibleDims = stash . visibleDims ;
453449
454- for ( var i = 0 , k = 0 ; i < dimensions . length ; i ++ ) {
455- if ( dimensions [ i ] . visible ) {
456- if ( trace . _diag [ i ] [ ind ] === axId ) return k ;
457- k ++ ;
458- }
450+ for ( var k = 0 ; k < visibleDims . length ; k ++ ) {
451+ var i = visibleDims [ k ] ;
452+ if ( trace . _diag [ i ] [ ind ] === axId ) return k ;
459453 }
460454 return false ;
461455}
0 commit comments