77*/
88
99'use strict' ;
10+
1011var d3 = require ( 'd3' ) ;
1112var Lib = require ( '../../lib' ) ;
1213var xmlnsNamespaces = require ( '../../constants/xmlns_namespaces' ) ;
1314var constants = require ( './constants' ) ;
1415
15- module . exports = { } ;
16-
17- // Generate a function to scale color components according to zmin/zmax and the colormodel
18- var scaler = function ( trace ) {
19- var colormodel = trace . colormodel ;
20- var n = colormodel . length ;
21- var cr = constants . colormodel [ colormodel ] ;
22-
23- function scale ( zero , factor , min , max ) {
24- return function ( c ) {
25- c = ( c - zero ) * factor ;
26- c = Lib . constrain ( c , min , max ) ;
27- return c ;
28- } ;
29- }
30-
31- function constrain ( min , max ) {
32- return function ( c ) { return Lib . constrain ( c , min , max ) ; } ;
33- }
34-
35- var s = [ ] ;
36- // Loop over all color components
37- for ( var k = 0 ; k < n ; k ++ ) {
38- if ( cr . min [ k ] !== trace . zmin [ k ] || cr . max [ k ] !== trace . zmax [ k ] ) {
39- s . push ( scale (
40- trace . zmin [ k ] ,
41- ( cr . max [ k ] - cr . min [ k ] ) / ( trace . zmax [ k ] - trace . zmin [ k ] ) ,
42- cr . min [ k ] ,
43- cr . max [ k ]
44- ) ) ;
45- } else {
46- s . push ( constrain ( cr . min [ k ] , cr . max [ k ] ) ) ;
47- }
48- }
49-
50- return function ( pixel ) {
51- var c = pixel . slice ( 0 , n ) ;
52- for ( var k = 0 ; k < n ; k ++ ) {
53- c [ k ] = s [ k ] ( c [ k ] ) ;
54- }
55- return c ;
56- } ;
57- } ;
58- module . exports . plot = function ( gd , plotinfo , cdimage , imageLayer ) {
16+ module . exports = function plot ( gd , plotinfo , cdimage , imageLayer ) {
5917 var xa = plotinfo . xaxis ;
6018 var ya = plotinfo . yaxis ;
6119
@@ -129,10 +87,10 @@ module.exports.plot = function(gd, plotinfo, cdimage, imageLayer) {
12987 canvas . width = imageWidth ;
13088 canvas . height = imageHeight ;
13189 var context = canvas . getContext ( '2d' ) ;
90+
13291 var ipx = function ( i ) { return Lib . constrain ( Math . round ( xa . c2p ( x0 + i * dx ) - left ) , 0 , imageWidth ) ; } ;
13392 var jpx = function ( j ) { return Lib . constrain ( Math . round ( ya . c2p ( y0 + j * dy ) - top ) , 0 , imageHeight ) ; } ;
13493
135- trace . _scaler = scaler ( trace ) ;
13694 var fmt = constants . colormodel [ trace . colormodel ] . fmt ;
13795 var c ;
13896 for ( i = 0 ; i < cd0 . w ; i ++ ) {
@@ -142,7 +100,12 @@ module.exports.plot = function(gd, plotinfo, cdimage, imageLayer) {
142100 var jpx0 = jpx ( j ) ; var jpx1 = jpx ( j + 1 ) ;
143101 if ( jpx1 === jpx0 || isNaN ( jpx1 ) || isNaN ( jpx0 ) || ! z [ j ] [ i ] ) continue ;
144102 c = trace . _scaler ( z [ j ] [ i ] ) ;
145- context . fillStyle = trace . colormodel + '(' + fmt ( c ) . join ( ',' ) + ')' ;
103+ if ( c ) {
104+ context . fillStyle = trace . colormodel + '(' + fmt ( c ) . join ( ',' ) + ')' ;
105+ } else {
106+ // Return a transparent pixel
107+ context . fillStyle = 'rgba(0,0,0,0)' ;
108+ }
146109 context . fillRect ( ipx0 , jpx0 , ipx1 - ipx0 , jpx1 - jpx0 ) ;
147110 }
148111 }
0 commit comments