|
9 | 9 | 'use strict';
|
10 | 10 |
|
11 | 11 | var subtypes = require('../scatter/subtypes');
|
| 12 | +var arrayRange = require('array-range'); |
12 | 13 |
|
13 |
| -module.exports = function selectPoints(searchInfo, polygon) { |
| 14 | +exports.getPointsIn = function(searchInfo, polygon) { |
| 15 | + var pointsIn = []; |
14 | 16 | var cd = searchInfo.cd;
|
| 17 | + var trace = cd[0].trace; |
| 18 | + var hasOnlyLines = (!subtypes.hasMarkers(trace) && !subtypes.hasText(trace)); |
15 | 19 | var xa = searchInfo.xaxis;
|
16 | 20 | var ya = searchInfo.yaxis;
|
17 |
| - var selection = []; |
18 |
| - var trace = cd[0].trace; |
19 |
| - |
20 |
| - var di, lonlat, x, y, i; |
| 21 | + var di; |
| 22 | + var lonlat; |
| 23 | + var x; |
| 24 | + var y; |
| 25 | + var i; |
21 | 26 |
|
22 |
| - var hasOnlyLines = (!subtypes.hasMarkers(trace) && !subtypes.hasText(trace)); |
23 | 27 | if(hasOnlyLines) return [];
|
24 | 28 |
|
25 |
| - if(polygon === false) { |
26 |
| - for(i = 0; i < cd.length; i++) { |
27 |
| - cd[i].selected = 0; |
| 29 | + for(i = 0; i < cd.length; i++) { |
| 30 | + di = cd[i]; |
| 31 | + lonlat = di.lonlat; |
| 32 | + x = xa.c2p(lonlat); |
| 33 | + y = ya.c2p(lonlat); |
| 34 | + |
| 35 | + if(polygon.contains([x, y])) { |
| 36 | + pointsIn.push(i); |
28 | 37 | }
|
29 |
| - } else { |
30 |
| - for(i = 0; i < cd.length; i++) { |
31 |
| - di = cd[i]; |
| 38 | + } |
| 39 | + |
| 40 | + return pointsIn; |
| 41 | +}; |
| 42 | + |
| 43 | +exports.toggleSelected = function(searchInfo, selected, pointIds) { |
| 44 | + var selection = []; |
| 45 | + var cd = searchInfo.cd; |
| 46 | + var modifyAll = !Array.isArray(pointIds); |
| 47 | + var di; |
| 48 | + var pointId; |
| 49 | + var lonlat; |
| 50 | + var i; |
| 51 | + |
| 52 | + if(modifyAll) { |
| 53 | + pointIds = arrayRange(cd.length); |
| 54 | + } |
| 55 | + |
| 56 | + // Mutate state |
| 57 | + for(i = 0; i < pointIds.length; i++) { |
| 58 | + pointId = pointIds[i]; |
| 59 | + cd[pointId].selected = selected ? 1 : 0; |
| 60 | + } |
| 61 | + |
| 62 | + // Compute selection array from internal state |
| 63 | + for(i = 0; i < cd.length; i++) { |
| 64 | + di = cd[i]; |
| 65 | + if(di.selected === 1) { |
32 | 66 | lonlat = di.lonlat;
|
33 |
| - x = xa.c2p(lonlat); |
34 |
| - y = ya.c2p(lonlat); |
35 |
| - |
36 |
| - if(polygon.contains([x, y])) { |
37 |
| - selection.push({ |
38 |
| - pointNumber: i, |
39 |
| - lon: lonlat[0], |
40 |
| - lat: lonlat[1] |
41 |
| - }); |
42 |
| - di.selected = 1; |
43 |
| - } else { |
44 |
| - di.selected = 0; |
45 |
| - } |
| 67 | + selection.push({ |
| 68 | + pointNumber: i, |
| 69 | + lon: lonlat[0], |
| 70 | + lat: lonlat[1] |
| 71 | + }); |
46 | 72 | }
|
47 | 73 | }
|
48 | 74 |
|
|
0 commit comments