| 15 | }; |
| 16 | |
| 17 | function plotOne(gd, cd0) { |
| 18 | var fullLayout = gd._fullLayout; |
| 19 | var gs = fullLayout._size; |
| 20 | var trace = cd0.trace; |
| 21 | var stash = cd0.t; |
| 22 | var scene = fullLayout._splomScenes[trace.uid]; |
| 23 | var matrixOpts = scene.matrixOptions; |
| 24 | var cdata = matrixOpts.cdata; |
| 25 | var regl = fullLayout._glcanvas.data()[0].regl; |
| 26 | var dragmode = fullLayout.dragmode; |
| 27 | var xa, ya; |
| 28 | var i, j, k; |
| 29 | |
| 30 | if(cdata.length === 0) return; |
| 31 | |
| 32 | // augment options with proper upper/lower halves |
| 33 | // regl-splom's default grid starts from bottom-left |
| 34 | matrixOpts.lower = trace.showupperhalf; |
| 35 | matrixOpts.upper = trace.showlowerhalf; |
| 36 | matrixOpts.diagonal = trace.diagonal.visible; |
| 37 | |
| 38 | var visibleDims = trace._visibleDims; |
| 39 | var visibleLength = cdata.length; |
| 40 | var viewOpts = scene.viewOpts = {}; |
| 41 | viewOpts.ranges = new Array(visibleLength); |
| 42 | viewOpts.domains = new Array(visibleLength); |
| 43 | |
| 44 | for(k = 0; k < visibleDims.length; k++) { |
| 45 | i = visibleDims[k]; |
| 46 | |
| 47 | var rng = viewOpts.ranges[k] = new Array(4); |
| 48 | var dmn = viewOpts.domains[k] = new Array(4); |
| 49 | |
| 50 | xa = AxisIDs.getFromId(gd, trace._diag[i][0]); |
| 51 | if(xa) { |
| 52 | rng[0] = xa._rl[0]; |
| 53 | rng[2] = xa._rl[1]; |
| 54 | dmn[0] = xa.domain[0]; |
| 55 | dmn[2] = xa.domain[1]; |
| 56 | } |
| 57 | |
| 58 | ya = AxisIDs.getFromId(gd, trace._diag[i][1]); |
| 59 | if(ya) { |
| 60 | rng[1] = ya._rl[0]; |
| 61 | rng[3] = ya._rl[1]; |
| 62 | dmn[1] = ya.domain[0]; |
| 63 | dmn[3] = ya.domain[1]; |
| 64 | } |
| 65 | } |
| 66 | |
| 67 | var plotGlPixelRatio = gd._context.plotGlPixelRatio; |
| 68 | var l = gs.l * plotGlPixelRatio; |
| 69 | var b = gs.b * plotGlPixelRatio; |
| 70 | var w = gs.w * plotGlPixelRatio; |
| 71 | var h = gs.h * plotGlPixelRatio; |
| 72 | |
| 73 | viewOpts.viewport = [l, b, w + l, h + b]; |
| 74 | |