@@ -19,6 +19,7 @@ var clean2dArray = require('./clean_2d_array');
19
19
var interp2d = require ( './interp2d' ) ;
20
20
var findEmpties = require ( './find_empties' ) ;
21
21
var makeBoundArray = require ( './make_bound_array' ) ;
22
+ var BADNUM = require ( '../../constants/numerical' ) . BADNUM ;
22
23
23
24
module . exports = function calc ( gd , trace ) {
24
25
// prepare the raw data
@@ -71,6 +72,12 @@ module.exports = function calc(gd, trace) {
71
72
72
73
z = clean2dArray ( zIn , trace , xa , ya ) ;
73
74
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
+
74
81
if ( isContour || trace . connectgaps ) {
75
82
trace . _emptypoints = findEmpties ( z ) ;
76
83
interp2d ( z , trace . _emptypoints ) ;
@@ -156,3 +163,29 @@ module.exports = function calc(gd, trace) {
156
163
157
164
return [ cd0 ] ;
158
165
} ;
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