UNPKG

@deck.gl/experimental-layers

Version:

Experimental layers for deck.gl

168 lines (147 loc) 4.85 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = createPathMarkers; var _math = require("math.gl"); function getLineLength(vPoints) { // calculate total length var lineLength = 0; for (var i = 0; i < vPoints.length - 1; i++) { lineLength += vPoints[i].distance(vPoints[i + 1]); } return lineLength; } var DEFAULT_COLOR = [0, 0, 0, 255]; var DEFAULT_DIRECTION = { forward: true, backward: false }; function createPathMarkers(_ref) { var data = _ref.data, _ref$getPath = _ref.getPath, getPath = _ref$getPath === void 0 ? function (x) { return x.path; } : _ref$getPath, _ref$getDirection = _ref.getDirection, getDirection = _ref$getDirection === void 0 ? function (x) { return x.direction; } : _ref$getDirection, _ref$getColor = _ref.getColor, getColor = _ref$getColor === void 0 ? function (x) { return DEFAULT_COLOR; } : _ref$getColor, _ref$getMarkerPercent = _ref.getMarkerPercentages, getMarkerPercentages = _ref$getMarkerPercent === void 0 ? function (x) { return [0.5]; } : _ref$getMarkerPercent, projectFlat = _ref.projectFlat; var markers = []; var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; try { for (var _iterator = data[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var object = _step.value; var path = getPath(object); var direction = getDirection(object) || DEFAULT_DIRECTION; var color = getColor(object); var vPoints = path.map(function (p) { return new _math.Vector2(p); }); var vPointsReverse = vPoints.slice(0).reverse(); // calculate total length var lineLength = getLineLength(vPoints); // Ask for where to put markers var percentages = getMarkerPercentages(object, { lineLength: lineLength }); // Create the markers var _iteratorNormalCompletion2 = true; var _didIteratorError2 = false; var _iteratorError2 = undefined; try { for (var _iterator2 = percentages[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { var percentage = _step2.value; if (direction.forward) { var marker = createMarkerAlongPath({ path: vPoints, percentage: percentage, lineLength: lineLength, color: color, object: object, projectFlat: projectFlat }); markers.push(marker); } if (direction.backward) { var _marker = createMarkerAlongPath({ path: vPointsReverse, percentage: percentage, lineLength: lineLength, color: color, object: object, projectFlat: projectFlat }); markers.push(_marker); } } } catch (err) { _didIteratorError2 = true; _iteratorError2 = err; } finally { try { if (!_iteratorNormalCompletion2 && _iterator2.return != null) { _iterator2.return(); } } finally { if (_didIteratorError2) { throw _iteratorError2; } } } } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return != null) { _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } return markers; } function createMarkerAlongPath(_ref2) { var path = _ref2.path, percentage = _ref2.percentage, lineLength = _ref2.lineLength, color = _ref2.color, object = _ref2.object, projectFlat = _ref2.projectFlat; var distanceAlong = lineLength * percentage; var currentDistance = 0; var previousDistance = 0; var i = 0; for (i = 0; i < path.length - 1; i++) { currentDistance += path[i].distance(path[i + 1]); if (currentDistance > distanceAlong) { break; } previousDistance = currentDistance; } var vDirection = path[i + 1].clone().subtract(path[i]).normalize(); var along = distanceAlong - previousDistance; var vCenter = vDirection.clone().multiply(new _math.Vector2(along, along)).add(path[i]); var vDirection2 = new _math.Vector2(projectFlat(path[i + 1])).subtract(projectFlat(path[i])); var angle = -vDirection2.verticalAngle() * 180 / Math.PI; return { position: [vCenter.x, vCenter.y, 0], angle: angle, color: color, object: object }; } //# sourceMappingURL=create-path-markers.js.map