@@ -25,40 +25,52 @@ var TOO_MANY_POINTS = require('../scattergl/constants').TOO_MANY_POINTS;
25
25
function calc ( gd , trace ) {
26
26
var stash = { } ;
27
27
var opts = { } ;
28
- var i , xa , ya ;
28
+ var i , xa , ya , dim ;
29
29
30
- var dimLength = trace . dimensions . length ;
31
- var hasTooManyPoints = ( dimLength * trace . _commonLength ) > TOO_MANY_POINTS ;
32
- var matrix = opts . data = new Array ( dimLength ) ;
30
+ var commonLength = trace . _commonLength ;
31
+ var activeLength = trace . _activeLength ;
32
+ var matrix = opts . data = [ ] ;
33
33
34
- for ( i = 0 ; i < dimLength ; i ++ ) {
35
- // using xa or ya should make no difference here
36
- xa = AxisIDs . getFromId ( gd , trace . xaxes [ i ] ) ;
37
- matrix [ i ] = makeCalcdata ( xa , trace , trace . dimensions [ i ] ) ;
34
+ for ( i = 0 ; i < activeLength ; i ++ ) {
35
+ dim = trace . dimensions [ i ] ;
36
+
37
+ if ( dim . visible ) {
38
+ // using xa or ya should make no difference here
39
+ xa = AxisIDs . getFromId ( gd , trace . xaxes [ i ] ) ;
40
+ matrix . push ( makeCalcdata ( xa , trace , dim ) ) ;
41
+ }
38
42
}
39
43
40
44
calcColorscales ( trace ) ;
41
45
Lib . extendFlat ( opts , convertMarkerStyle ( trace ) ) ;
42
46
43
- for ( i = 0 ; i < dimLength ; i ++ ) {
44
- xa = AxisIDs . getFromId ( gd , trace . xaxes [ i ] ) ;
45
- ya = AxisIDs . getFromId ( gd , trace . yaxes [ i ] ) ;
46
-
47
- // Re-use SVG scatter axis expansion routine except
48
- // for graph with very large number of points where it
49
- // performs poorly.
50
- // In big data case, fake Axes.expand outputs with data bounds,
51
- // and an average size for array marker.size inputs.
52
- var ppad ;
53
- if ( hasTooManyPoints ) {
54
- ppad = 2 * ( opts . sizeAvg || Math . max ( opts . size , 3 ) ) ;
55
- } else {
56
- ppad = calcMarkerSize ( trace , trace . _commonLength ) ;
47
+ var visibleLength = matrix . length ;
48
+ var hasTooManyPoints = ( visibleLength * commonLength ) > TOO_MANY_POINTS ;
49
+ var k = 0 ;
50
+
51
+ for ( i = 0 ; i < activeLength ; i ++ ) {
52
+ dim = trace . dimensions [ i ] ;
53
+
54
+ if ( dim . visible ) {
55
+ xa = AxisIDs . getFromId ( gd , trace . xaxes [ i ] ) ;
56
+ ya = AxisIDs . getFromId ( gd , trace . yaxes [ i ] ) ;
57
+
58
+ // Re-use SVG scatter axis expansion routine except
59
+ // for graph with very large number of points where it
60
+ // performs poorly.
61
+ // In big data case, fake Axes.expand outputs with data bounds,
62
+ // and an average size for array marker.size inputs.
63
+ var ppad ;
64
+ if ( hasTooManyPoints ) {
65
+ ppad = 2 * ( opts . sizeAvg || Math . max ( opts . size , 3 ) ) ;
66
+ } else {
67
+ ppad = calcMarkerSize ( trace , commonLength ) ;
68
+ }
69
+ calcAxisExpansion ( gd , trace , xa , ya , matrix [ k ] , matrix [ k ] , ppad ) ;
70
+ k ++ ;
57
71
}
58
- calcAxisExpansion ( gd , trace , xa , ya , matrix [ i ] , matrix [ i ] , ppad ) ;
59
72
}
60
73
61
-
62
74
var scene = stash . _scene = sceneUpdate ( gd , stash ) ;
63
75
if ( ! scene . matrix ) scene . matrix = true ;
64
76
scene . matrixOptions = opts ;
@@ -167,21 +179,30 @@ function plot(gd, _, cdata) {
167
179
function plotOne ( gd , cd0 ) {
168
180
var fullLayout = gd . _fullLayout ;
169
181
var gs = fullLayout . _size ;
170
- var scene = cd0 . t . _scene ;
171
182
var trace = cd0 . trace ;
183
+ var scene = cd0 . t . _scene ;
184
+ var opts = scene . matrixOptions ;
185
+ var matrix = opts . data ;
172
186
var regl = fullLayout . _glcanvas . data ( ) [ 0 ] . regl ;
173
187
174
- var dimLength = trace . dimensions . length ;
188
+ if ( matrix . length === 0 ) return ;
189
+
190
+ var k = 0 ;
191
+ var activeLength = trace . _activeLength ;
192
+ var visibleLength = matrix . length ;
175
193
var viewOpts = {
176
- ranges : new Array ( dimLength ) ,
177
- domains : new Array ( dimLength )
194
+ ranges : new Array ( visibleLength ) ,
195
+ domains : new Array ( visibleLength )
178
196
} ;
179
197
180
- for ( var i = 0 ; i < dimLength ; i ++ ) {
181
- var xa = AxisIDs . getFromId ( gd , trace . xaxes [ i ] ) ;
182
- var ya = AxisIDs . getFromId ( gd , trace . yaxes [ i ] ) ;
183
- viewOpts . ranges [ i ] = [ xa . range [ 0 ] , ya . range [ 0 ] , xa . range [ 1 ] , ya . range [ 1 ] ] ;
184
- viewOpts . domains [ i ] = [ xa . domain [ 0 ] , ya . domain [ 0 ] , xa . domain [ 1 ] , ya . domain [ 1 ] ] ;
198
+ for ( var i = 0 ; i < activeLength ; i ++ ) {
199
+ if ( trace . dimensions [ i ] . visible ) {
200
+ var xa = AxisIDs . getFromId ( gd , trace . xaxes [ i ] ) ;
201
+ var ya = AxisIDs . getFromId ( gd , trace . yaxes [ i ] ) ;
202
+ viewOpts . ranges [ k ] = [ xa . range [ 0 ] , ya . range [ 0 ] , xa . range [ 1 ] , ya . range [ 1 ] ] ;
203
+ viewOpts . domains [ k ] = [ xa . domain [ 0 ] , ya . domain [ 0 ] , xa . domain [ 1 ] , ya . domain [ 1 ] ] ;
204
+ k ++ ;
205
+ }
185
206
}
186
207
187
208
viewOpts . viewport = [ gs . l , gs . b , gs . w + gs . l , gs . h + gs . b ] ;
@@ -191,7 +212,7 @@ function plotOne(gd, cd0) {
191
212
}
192
213
193
214
// FIXME: generate multiple options for single update
194
- scene . matrix . update ( scene . matrixOptions ) ;
215
+ scene . matrix . update ( opts ) ;
195
216
scene . matrix . update ( viewOpts ) ;
196
217
scene . matrix . draw ( ) ;
197
218
}
@@ -214,8 +235,8 @@ function hoverPoints(pointData, xval, yval) {
214
235
if ( trace . yaxes [ i ] === ya . _id ) yi = i ;
215
236
}
216
237
217
- var x = dimensions [ xi ] . values ;
218
- var y = dimensions [ yi ] . values ;
238
+ var x = dimensions [ xi ] . values || [ ] ;
239
+ var y = dimensions [ yi ] . values || [ ] ;
219
240
220
241
var id , ptx , pty , dx , dy , dist , dxy ;
221
242
var minDist = maxDistance ;
0 commit comments