@@ -19,6 +19,7 @@ var clean2dArray = require('./clean_2d_array');
1919var interp2d = require ( './interp2d' ) ;
2020var findEmpties = require ( './find_empties' ) ;
2121var makeBoundArray = require ( './make_bound_array' ) ;
22+ var BADNUM = require ( '../../constants/numerical' ) . BADNUM ;
2223
2324module . exports = function calc ( gd , trace ) {
2425 // prepare the raw data
@@ -71,6 +72,12 @@ module.exports = function calc(gd, trace) {
7172
7273 z = clean2dArray ( zIn , trace , xa , ya ) ;
7374
75+ if ( xa . rangebreaks || ya . rangebreaks ) {
76+ z = dropZonBreaks ( z , trace ) ;
77+ x = trace . _x = skipBreaks ( trace . _x ) ;
78+ y = trace . _y = skipBreaks ( trace . _y ) ;
79+ }
80+
7481 if ( isContour || trace . connectgaps ) {
7582 trace . _emptypoints = findEmpties ( z ) ;
7683 interp2d ( z , trace . _emptypoints ) ;
@@ -156,3 +163,29 @@ module.exports = function calc(gd, trace) {
156163
157164 return [ cd0 ] ;
158165} ;
166+
167+ function skipBreaks ( a ) {
168+ var b = [ ] ;
169+ var len = a . length ;
170+ for ( var i = 0 ; i < len ; i ++ ) {
171+ var v = a [ i ] ;
172+ if ( v !== BADNUM ) b . push ( v ) ;
173+ }
174+ return b ;
175+ }
176+
177+ function dropZonBreaks ( z , trace ) {
178+ var newZ = [ ] ;
179+ var k = - 1 ;
180+ for ( var i = 0 ; i < z . length ; i ++ ) {
181+ if ( trace . _y [ i ] === BADNUM ) continue ;
182+ k ++ ;
183+ newZ [ k ] = [ ] ;
184+ for ( var j = 0 ; j < z [ i ] . length ; j ++ ) {
185+ if ( trace . _x [ j ] === BADNUM ) continue ;
186+
187+ newZ [ k ] . push ( z [ i ] [ j ] ) ;
188+ }
189+ }
190+ return newZ ;
191+ }
0 commit comments