Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit bedcdfa

Browse files
committed
Fix gl_plot_interact visibility test
1 parent cb355dd commit bedcdfa

File tree

7 files changed

+75
-73
lines changed

7 files changed

+75
-73
lines changed

src/plot_api/plot_api.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -196,8 +196,8 @@ Plotly.plot = function(gd, data, layout, config) {
196196
}
197197
}
198198

199-
if(!fullLayout._glcanvas) {
200-
fullLayout._glcanvas = fullLayout._glcontainer.selectAll('.gl-canvas').data(fullLayout._has('gl') ? [{
199+
if(!fullLayout._glcanvas && fullLayout._has('gl')) {
200+
fullLayout._glcanvas = fullLayout._glcontainer.selectAll('.gl-canvas').data([{
201201
key: 'contextLayer',
202202
context: true,
203203
pick: false
@@ -209,7 +209,7 @@ Plotly.plot = function(gd, data, layout, config) {
209209
key: 'pickLayer',
210210
context: false,
211211
pick: true
212-
}] : []);
212+
}]);
213213

214214
fullLayout._glcanvas.enter().append('canvas')
215215
.each(function(d) {

src/plots/cartesian/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ exports.plot = function(gd, traces, transitionOpts, makeOnCompleteCallback) {
4949
}
5050

5151
// clear gl frame, if any, since we preserve drawing buffer
52-
if(fullLayout._glcanvas.size()) {
52+
if(fullLayout._glcanvas && fullLayout._glcanvas.size()) {
5353
fullLayout._glcanvas.each(function(d) {
5454
d.regl.clear({
5555
color: true

src/plots/cartesian/select.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -233,8 +233,8 @@ module.exports = function prepSelect(e, startX, startY, dragOptions, mode) {
233233
}
234234

235235
// update selection scene
236-
if (plotinfo._scene) {
237-
plotinfo._scene.select(selection)
236+
if(plotinfo._scene) {
237+
plotinfo._scene.select(selection);
238238
}
239239

240240
eventData = {points: selection};

src/plots/plots.js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -801,7 +801,6 @@ plots.supplyDataDefaults = function(dataIn, dataOut, layout, fullLayout) {
801801

802802
var _module = fullTrace._module;
803803
if(!_module) return;
804-
805804
Lib.pushUnique(modules, _module);
806805
Lib.pushUnique(basePlotModules, fullTrace._module.basePlotModule);
807806

@@ -847,7 +846,6 @@ plots.supplyDataDefaults = function(dataIn, dataOut, layout, fullLayout) {
847846
}
848847
}
849848
else {
850-
851849
// add identify refs for consistency with transformed traces
852850
fullTrace._fullInput = fullTrace;
853851
fullTrace._expandedInput = fullTrace;

src/traces/scattergl/index.js

Lines changed: 45 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ ScatterRegl.calc = function calc(container, trace) {
7272
}
7373
}
7474

75-
var lineOptions, scatterOptions, errorXOptions, errorYOptions, fillOptions;
75+
var lineOptions, markerOptions, errorXOptions, errorYOptions, fillOptions;
7676
var hasLines, hasErrorX, hasErrorY, hasError, hasMarkers, hasFill;
7777
var linePositions;
7878

@@ -292,8 +292,8 @@ ScatterRegl.calc = function calc(container, trace) {
292292
}
293293

294294
if(hasMarkers) {
295-
scatterOptions = {};
296-
scatterOptions.positions = positions;
295+
markerOptions = {};
296+
markerOptions.positions = positions;
297297

298298
// get basic symbol info
299299
var multiMarker = Array.isArray(markerOpts.symbol);
@@ -303,8 +303,8 @@ ScatterRegl.calc = function calc(container, trace) {
303303
}
304304
// prepare colors
305305
if(multiMarker || Array.isArray(markerOpts.color) || Array.isArray(markerOpts.line.color) || Array.isArray(markerOpts.line)) {
306-
scatterOptions.colors = new Array(count);
307-
scatterOptions.borderColors = new Array(count);
306+
markerOptions.colors = new Array(count);
307+
markerOptions.borderColors = new Array(count);
308308

309309
var colors = formatColor(markerOpts, markerOpts.opacity, count);
310310
var borderColors = formatColor(markerOpts.line, markerOpts.opacity, count);
@@ -324,8 +324,8 @@ ScatterRegl.calc = function calc(container, trace) {
324324
}
325325
}
326326

327-
scatterOptions.colors = colors;
328-
scatterOptions.borderColors = borderColors;
327+
markerOptions.colors = colors;
328+
markerOptions.borderColors = borderColors;
329329

330330
for(i = 0; i < count; i++) {
331331
if(multiMarker) {
@@ -339,29 +339,29 @@ ScatterRegl.calc = function calc(container, trace) {
339339
}
340340
}
341341

342-
scatterOptions.opacity = trace.opacity;
342+
markerOptions.opacity = trace.opacity;
343343
}
344344
else {
345-
scatterOptions.color = markerOpts.color;
346-
scatterOptions.borderColor = markerOpts.line.color;
347-
scatterOptions.opacity = trace.opacity * markerOpts.opacity;
345+
markerOptions.color = markerOpts.color;
346+
markerOptions.borderColor = markerOpts.line.color;
347+
markerOptions.opacity = trace.opacity * markerOpts.opacity;
348348

349349
if(isOpen) {
350-
scatterOptions.borderColor = scatterOptions.color.slice();
351-
scatterOptions.color = scatterOptions.color.slice();
352-
scatterOptions.color[3] = 0;
350+
markerOptions.borderColor = markerOptions.color.slice();
351+
markerOptions.color = markerOptions.color.slice();
352+
markerOptions.color[3] = 0;
353353
}
354354
}
355355

356356
// prepare markers
357357
if(Array.isArray(markerOpts.symbol)) {
358-
scatterOptions.markers = new Array(count);
358+
markerOptions.markers = new Array(count);
359359
for(i = 0; i < count; ++i) {
360-
scatterOptions.markers[i] = getSymbolSdf(markerOpts.symbol[i]);
360+
markerOptions.markers[i] = getSymbolSdf(markerOpts.symbol[i]);
361361
}
362362
}
363363
else {
364-
scatterOptions.marker = getSymbolSdf(markerOpts.symbol);
364+
markerOptions.marker = getSymbolSdf(markerOpts.symbol);
365365
}
366366

367367
// prepare sizes and expand axes
@@ -371,8 +371,8 @@ ScatterRegl.calc = function calc(container, trace) {
371371
var size, sizes;
372372

373373
if(multiSize) {
374-
sizes = scatterOptions.sizes = new Array(count);
375-
var borderSizes = scatterOptions.borderSizes = new Array(count);
374+
sizes = markerOptions.sizes = new Array(count);
375+
var borderSizes = markerOptions.borderSizes = new Array(count);
376376

377377
if(Array.isArray(markerOpts.size)) {
378378
for(i = 0; i < count; ++i) {
@@ -403,8 +403,8 @@ ScatterRegl.calc = function calc(container, trace) {
403403
Axes.expand(yaxis, stash.rawy, { padded: true, ppad: sizes });
404404
}
405405
else {
406-
size = scatterOptions.size = markerSizeFunc(markerOpts && markerOpts.size || 10);
407-
scatterOptions.borderSizes = markerOpts.line.width * 0.5;
406+
size = markerOptions.size = markerSizeFunc(markerOpts && markerOpts.size || 10);
407+
markerOptions.borderSizes = markerOpts.line.width * 0.5;
408408

409409
// axes bounds
410410
for(i = 0; i < count; i++) {
@@ -422,7 +422,7 @@ ScatterRegl.calc = function calc(container, trace) {
422422
}
423423
// update axes fast for big number of points
424424
else {
425-
var pad = scatterOptions.size;
425+
var pad = markerOptions.size;
426426
if(xaxis._min) {
427427
xaxis._min.push({ val: xbounds[0], pad: pad });
428428
}
@@ -460,7 +460,7 @@ ScatterRegl.calc = function calc(container, trace) {
460460
// last used options
461461
lineOptions: [],
462462
fillOptions: [],
463-
scatterOptions: [],
463+
markerOptions: [],
464464
errorXOptions: [],
465465
errorYOptions: [],
466466

@@ -508,12 +508,12 @@ ScatterRegl.calc = function calc(container, trace) {
508508
scene.select2d.regl.clear({color: true});
509509

510510
var batch = Array(scene.count), i, traceId;
511-
for (i = 0; i < scene.count; i++) {
512-
batch[i] = []
511+
for(i = 0; i < scene.count; i++) {
512+
batch[i] = [];
513513
}
514514

515515
for(i = 0; i < selection.length; i++) {
516-
var traceId = selection[i].curveNumber || 0;
516+
traceId = selection[i].curveNumber || 0;
517517
batch[traceId].push(selection[i].pointNumber);
518518
}
519519

@@ -536,17 +536,17 @@ ScatterRegl.calc = function calc(container, trace) {
536536
scene.count = 0;
537537
scene.lineOptions = [];
538538
scene.fillOptions = [];
539-
scene.scatterOptions = [];
539+
scene.markerOptions = [];
540540
scene.errorXOptions = [];
541541
scene.errorYOptions = [];
542542
}
543543

544544
// save initial batch
545-
scene.lineOptions.push(lineOptions);
546-
scene.errorXOptions.push(errorXOptions);
547-
scene.errorYOptions.push(errorYOptions);
548-
scene.fillOptions.push(fillOptions);
549-
scene.scatterOptions.push(scatterOptions);
545+
scene.lineOptions.push(hasLines ? lineOptions : null);
546+
scene.errorXOptions.push(hasErrorX ? errorXOptions : null);
547+
scene.errorYOptions.push(hasErrorY ? errorYOptions : null);
548+
scene.fillOptions.push(hasFill ? fillOptions : null);
549+
scene.markerOptions.push(hasMarkers ? markerOptions : null);
550550
scene.count++;
551551

552552
// stash scene ref
@@ -597,6 +597,7 @@ ScatterRegl.plot = function plot(container, subplot, cdata) {
597597
if(!scene) return;
598598

599599
var vpSize = layout._size, width = layout.width, height = layout.height;
600+
600601
var regl = layout._glcanvas.data()[0].regl;
601602

602603
// that is needed for fills
@@ -625,7 +626,7 @@ ScatterRegl.plot = function plot(container, subplot, cdata) {
625626
scene.error2d.update(errorBatch);
626627
}
627628
if(scene.scatter2d) {
628-
scene.scatter2d.update(scene.scatterOptions);
629+
scene.scatter2d.update(scene.markerOptions);
629630
}
630631
// fill requires linked traces, so we generate it's positions here
631632
if(scene.fill2d) {
@@ -681,14 +682,15 @@ ScatterRegl.plot = function plot(container, subplot, cdata) {
681682

682683
// make sure selection layer is initialized if we require selection
683684
var dragmode = layout.dragmode;
685+
684686
if(dragmode === 'lasso' || dragmode === 'select') {
685687
if(!scene.select2d && scene.scatter2d) {
686688
var selectRegl = layout._glcanvas.data()[1].regl;
687689

688690
scene.select2d = createScatter(selectRegl);
689691

690692
// TODO: modify options here according to the proposed selection options
691-
scene.select2d.update(scene.scatterOptions);
693+
scene.select2d.update(scene.markerOptions);
692694
}
693695
}
694696
else {
@@ -735,16 +737,16 @@ ScatterRegl.plot = function plot(container, subplot, cdata) {
735737

736738
// reset opacities
737739
if(scene.scatter2d) {
738-
scene.scatter2d.update(scene.scatterOptions.map(function(opt) {
740+
scene.scatter2d.update(scene.markerOptions.map(function(opt) {
739741
return {opacity: opt ? opt.opacity : 1};
740742
}));
741743
}
742744
}
743745

744-
return {
746+
return trace.visible ? {
745747
viewport: viewport,
746748
range: range
747-
};
749+
} : null;
748750
});
749751

750752
// uploat batch data to GPU
@@ -879,7 +881,7 @@ ScatterRegl.hoverPoints = function hover(pointData, xval, yval, hovermode) {
879881

880882
var hoverlabel = trace.hoverlabel;
881883

882-
if (hoverlabel) {
884+
if(hoverlabel) {
883885
di.hbg = Array.isArray(hoverlabel.bgcolor) ? hoverlabel.bgcolor[id] : hoverlabel.bgcolor;
884886
di.hbc = Array.isArray(hoverlabel.bordercolor) ? hoverlabel.bordercolor[id] : hoverlabel.bordercolor;
885887
di.hts = Array.isArray(hoverlabel.font.size) ? hoverlabel.font.size[id] : hoverlabel.font.size;
@@ -888,7 +890,7 @@ ScatterRegl.hoverPoints = function hover(pointData, xval, yval, hovermode) {
888890
di.hnl = Array.isArray(hoverlabel.namelength) ? hoverlabel.namelength[id] : hoverlabel.namelength;
889891
}
890892
var hoverinfo = trace.hoverinfo;
891-
if (hoverinfo) {
893+
if(hoverinfo) {
892894
di.hi = Array.isArray(hoverinfo) ? hoverinfo[id] : hoverinfo;
893895
}
894896

@@ -939,18 +941,18 @@ ScatterRegl.selectPoints = function select(searchInfo, polygon) {
939941
// degenerate polygon does not enable selection
940942
if(polygon === false || polygon.degenerate) {
941943
if(scene.scatter2d) {
942-
scene.scatter2d.update(scene.scatterOptions.map(function(opt) {
944+
scene.scatter2d.update(scene.markerOptions.map(function(opt) {
943945
return {opacity: opt.opacity};
944946
}));
945947
}
946948
}
947949
// filter out points by visible scatter ones
948950
else {
949-
let els = []
951+
var els = [];
950952

951953
for(var i = 0; i < stash.count; i++) {
952954
if(polygon.contains([stash.xpx[i], stash.ypx[i]])) {
953-
els.push(i)
955+
els.push(i);
954956
selection.push({
955957
pointNumber: i,
956958
x: x[i],
@@ -961,7 +963,7 @@ ScatterRegl.selectPoints = function select(searchInfo, polygon) {
961963

962964
// adjust selection transparency via canvas opacity
963965
if(scene.scatter2d) {
964-
scene.scatter2d.update(scene.scatterOptions.map(function(opt) {
966+
scene.scatter2d.update(scene.markerOptions.map(function(opt) {
965967
return {opacity: opt.opacity * DESELECTDIM};
966968
}));
967969
}

test/jasmine/assets/read_pixel.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
'use strict';
2+
3+
module.exports = function(canvas, x, y) {
4+
if(!canvas) return null;
5+
6+
var gl = canvas.getContext('webgl');
7+
8+
var pixels = new Uint8Array(4);
9+
10+
gl.readPixels(x, y, 1, 1, gl.RGBA, gl.UNSIGNED_BYTE, pixels);
11+
12+
return pixels;
13+
};

0 commit comments

Comments
 (0)