| 57 | |
| 58 | // Generate a function to scale color components according to zmin/zmax and the colormodel |
| 59 | function makeScaler(trace) { |
| 60 | var cr = constants.colormodel[trace.colormodel]; |
| 61 | var colormodel = (cr.colormodel || trace.colormodel); |
| 62 | var n = colormodel.length; |
| 63 | |
| 64 | trace._sArray = []; |
| 65 | // Loop over all color components |
| 66 | for(var k = 0; k < n; k++) { |
| 67 | if(cr.min[k] !== trace.zmin[k] || cr.max[k] !== trace.zmax[k]) { |
| 68 | trace._sArray.push(scale( |
| 69 | trace.zmin[k], |
| 70 | (cr.max[k] - cr.min[k]) / (trace.zmax[k] - trace.zmin[k]), |
| 71 | cr.min[k], |
| 72 | cr.max[k] |
| 73 | )); |
| 74 | } else { |
| 75 | trace._sArray.push(constrain(cr.min[k], cr.max[k])); |
| 76 | } |
| 77 | } |
| 78 | |
| 79 | return function(pixel) { |
| 80 | var c = pixel.slice(0, n); |
| 81 | for(var k = 0; k < n; k++) { |
| 82 | var ck = c[k]; |
| 83 | if(!isNumeric(ck)) return false; |
| 84 | c[k] = trace._sArray[k](ck); |
| 85 | } |
| 86 | return c; |
| 87 | }; |
| 88 | } |