function intersectLasso(markname, pixelLasso, unit) {
    const {
      x,
      y,
      mark
    } = unit;
    const bb = new Bounds().set(Number.MAX_SAFE_INTEGER, Number.MAX_SAFE_INTEGER, Number.MIN_SAFE_INTEGER, Number.MIN_SAFE_INTEGER);

    // Get bounding box around lasso
    for (const [px, py] of pixelLasso) {
      if (px < bb.x1) bb.x1 = px;
      if (px > bb.x2) bb.x2 = px;
      if (py < bb.y1) bb.y1 = py;
      if (py > bb.y2) bb.y2 = py;
    }

    // Translate bb against unit coordinates
    bb.translate(x, y);
    const intersection = intersect([[bb.x1, bb.y1], [bb.x2, bb.y2]], markname, mark);

    // Check every point against the lasso
    return intersection.filter(tuple => pointInPolygon(tuple.x, tuple.y, pixelLasso));
  }
Inverts the lasso from pixel space to an array of vega scenegraph tuples

@param {*} data the dataset
@param {*} pixelLasso the lasso in pixel space, [[x,y], [x,y], ...]
@param {*} unit the unit where the lasso is defined

@returns an array of vega scenegraph tuples