7
7
*/
8
8
9
9
'use strict' ;
10
+
10
11
var d3 = require ( 'd3' ) ;
11
12
var Lib = require ( '../../lib' ) ;
12
13
var xmlnsNamespaces = require ( '../../constants/xmlns_namespaces' ) ;
13
14
var constants = require ( './constants' ) ;
14
15
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 ) {
59
17
var xa = plotinfo . xaxis ;
60
18
var ya = plotinfo . yaxis ;
61
19
@@ -129,10 +87,10 @@ module.exports.plot = function(gd, plotinfo, cdimage, imageLayer) {
129
87
canvas . width = imageWidth ;
130
88
canvas . height = imageHeight ;
131
89
var context = canvas . getContext ( '2d' ) ;
90
+
132
91
var ipx = function ( i ) { return Lib . constrain ( Math . round ( xa . c2p ( x0 + i * dx ) - left ) , 0 , imageWidth ) ; } ;
133
92
var jpx = function ( j ) { return Lib . constrain ( Math . round ( ya . c2p ( y0 + j * dy ) - top ) , 0 , imageHeight ) ; } ;
134
93
135
- trace . _scaler = scaler ( trace ) ;
136
94
var fmt = constants . colormodel [ trace . colormodel ] . fmt ;
137
95
var c ;
138
96
for ( i = 0 ; i < cd0 . w ; i ++ ) {
@@ -142,7 +100,12 @@ module.exports.plot = function(gd, plotinfo, cdimage, imageLayer) {
142
100
var jpx0 = jpx ( j ) ; var jpx1 = jpx ( j + 1 ) ;
143
101
if ( jpx1 === jpx0 || isNaN ( jpx1 ) || isNaN ( jpx0 ) || ! z [ j ] [ i ] ) continue ;
144
102
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
+ }
146
109
context . fillRect ( ipx0 , jpx0 , ipx1 - ipx0 , jpx1 - jpx0 ) ;
147
110
}
148
111
}
0 commit comments