@@ -63,14 +63,14 @@ function dragOne(gd, trace, scene) {
6363
6464 var xa = AxisIDs . getFromId ( gd , trace . _diag [ i ] [ 0 ] ) ;
6565 if ( xa ) {
66- rng [ 0 ] = xa . range [ 0 ] ;
67- rng [ 2 ] = xa . range [ 1 ] ;
66+ rng [ 0 ] = xa . r2l ( xa . range [ 0 ] ) ;
67+ rng [ 2 ] = xa . r2l ( xa . range [ 1 ] ) ;
6868 }
6969
7070 var ya = AxisIDs . getFromId ( gd , trace . _diag [ i ] [ 1 ] ) ;
7171 if ( ya ) {
72- rng [ 1 ] = ya . range [ 0 ] ;
73- rng [ 3 ] = ya . range [ 1 ] ;
72+ rng [ 1 ] = ya . r2l ( ya . range [ 0 ] ) ;
73+ rng [ 3 ] = ya . r2l ( ya . range [ 1 ] ) ;
7474 }
7575
7676 k ++ ;
@@ -94,17 +94,16 @@ function drawGrid(gd) {
9494 if ( ! splomGrid ) {
9595 splomGrid = fullLayout . _splomGrid = createLine ( regl ) ;
9696 }
97- splomGrid . update ( makeGridData ( gd ) ) ;
97+
98+ splomGrid . _data = makeGridData ( gd ) ;
99+ splomGrid . update ( splomGrid . _data ) ;
98100 splomGrid . draw ( ) ;
99101}
100102
101- // this clocks in at ~30ms at 50x50 - we could perf this up!
102103function makeGridData ( gd ) {
103104 var fullLayout = gd . _fullLayout ;
104105 var gs = fullLayout . _size ;
105106 var fullView = [ 0 , 0 , fullLayout . width , fullLayout . height ] ;
106- var splomXa = Object . keys ( fullLayout . _splomAxes . x ) ;
107- var splomYa = Object . keys ( fullLayout . _splomAxes . y ) ;
108107 var lookup = { } ;
109108 var k ;
110109
@@ -128,45 +127,39 @@ function makeGridData(gd) {
128127 }
129128 }
130129
131- for ( var i = 0 ; i < splomXa . length ; i ++ ) {
132- var xa = AxisIDs . getFromId ( gd , splomXa [ i ] ) ;
130+ for ( k in fullLayout . _splomSubplots ) {
131+ var sp = fullLayout . _plots [ k ] ;
132+ var xa = sp . xaxis ;
133+ var ya = sp . yaxis ;
133134 var xVals = xa . _vals ;
134- var xShowZl = showZeroLine ( xa ) ;
135-
136- for ( var j = 0 ; j < splomYa . length ; j ++ ) {
137- var ya = AxisIDs . getFromId ( gd , splomYa [ j ] ) ;
138- var yVals = ya . _vals ;
139- var yShowZl = showZeroLine ( ya ) ;
140-
141- // ya.l2p assumes top-to-bottom coordinate system (a la SVG),
142- // we need to compute bottom-to-top offsets and slopes:
143- var yOffset = gs . b + ya . domain [ 0 ] * gs . h ;
144- var ym = - ya . _m ;
145- var yb = - ym * ya . r2l ( ya . range [ 0 ] , ya . calendar ) ;
146-
147- var x , y ;
148-
149- if ( xa . showgrid ) {
150- for ( k = 0 ; k < xVals . length ; k ++ ) {
151- x = xa . _offset + xa . l2p ( xVals [ k ] . x ) ;
152- push ( 'grid' , xa , x , yOffset , x , yOffset + ya . _length ) ;
153- }
154- }
155- if ( xShowZl ) {
156- x = xa . _offset + xa . l2p ( 0 ) ;
157- push ( 'zeroline' , xa , x , yOffset , x , yOffset + ya . _length ) ;
158- }
159- if ( ya . showgrid ) {
160- for ( k = 0 ; k < yVals . length ; k ++ ) {
161- y = yOffset + yb + ym * yVals [ k ] . x ;
162- push ( 'grid' , ya , xa . _offset , y , xa . _offset + xa . _length , y ) ;
163- }
135+ var yVals = ya . _vals ;
136+ // ya.l2p assumes top-to-bottom coordinate system (a la SVG),
137+ // we need to compute bottom-to-top offsets and slopes:
138+ var yOffset = gs . b + ya . domain [ 0 ] * gs . h ;
139+ var ym = - ya . _m ;
140+ var yb = - ym * ya . r2l ( ya . range [ 0 ] , ya . calendar ) ;
141+ var x , y ;
142+
143+ if ( xa . showgrid ) {
144+ for ( k = 0 ; k < xVals . length ; k ++ ) {
145+ x = xa . _offset + xa . l2p ( xVals [ k ] . x ) ;
146+ push ( 'grid' , xa , x , yOffset , x , yOffset + ya . _length ) ;
164147 }
165- if ( yShowZl ) {
166- y = yOffset + yb + 0 ;
167- push ( 'zeroline' , ya , xa . _offset , y , xa . _offset + xa . _length , y ) ;
148+ }
149+ if ( showZeroLine ( xa ) ) {
150+ x = xa . _offset + xa . l2p ( 0 ) ;
151+ push ( 'zeroline' , xa , x , yOffset , x , yOffset + ya . _length ) ;
152+ }
153+ if ( ya . showgrid ) {
154+ for ( k = 0 ; k < yVals . length ; k ++ ) {
155+ y = yOffset + yb + ym * yVals [ k ] . x ;
156+ push ( 'grid' , ya , xa . _offset , y , xa . _offset + xa . _length , y ) ;
168157 }
169158 }
159+ if ( showZeroLine ( ya ) ) {
160+ y = yOffset + yb + 0 ;
161+ push ( 'zeroline' , ya , xa . _offset , y , xa . _offset + xa . _length , y ) ;
162+ }
170163 }
171164
172165 var gridBatches = [ ] ;
@@ -178,7 +171,6 @@ function makeGridData(gd) {
178171}
179172
180173// just like in Axes.doTicks but without the loop over traces
181- // TODO dry this up
182174function showZeroLine ( ax ) {
183175 var rng = Lib . simpleMap ( ax . range , ax . r2l ) ;
184176 var p0 = ax . l2p ( 0 ) ;
0 commit comments