1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var util_1 = require("./util");
- /**
- * Node
- */
- var Node = /** @class */ (function () {
- function Node(coordinates) {
- this.id = Node.buildId(coordinates);
- this.coordinates = coordinates; //< {Number[]}
- this.innerEdges = []; //< {Edge[]}
- // We wil store to (out) edges in an CCW order as geos::planargraph::DirectedEdgeStar does
- this.outerEdges = []; //< {Edge[]}
- this.outerEdgesSorted = false; //< {Boolean} flag that stores if the outer Edges had been sorted
- }
- Node.buildId = function (coordinates) {
- return coordinates.join(",");
- };
- Node.prototype.removeInnerEdge = function (edge) {
- this.innerEdges = this.innerEdges.filter(function (e) { return e.from.id !== edge.from.id; });
- };
- Node.prototype.removeOuterEdge = function (edge) {
- this.outerEdges = this.outerEdges.filter(function (e) { return e.to.id !== edge.to.id; });
- };
- /**
- * Outer edges are stored CCW order.
- *
- * @memberof Node
- * @param {Edge} edge - Edge to add as an outerEdge.
- */
- Node.prototype.addOuterEdge = function (edge) {
- this.outerEdges.push(edge);
- this.outerEdgesSorted = false;
- };
- /**
- * Sorts outer edges in CCW way.
- *
- * @memberof Node
- * @private
- */
- Node.prototype.sortOuterEdges = function () {
- var _this = this;
- if (!this.outerEdgesSorted) {
- //this.outerEdges.sort((a, b) => a.compareTo(b));
- // Using this comparator in order to be deterministic
- this.outerEdges.sort(function (a, b) {
- var aNode = a.to, bNode = b.to;
- if (aNode.coordinates[0] - _this.coordinates[0] >= 0 &&
- bNode.coordinates[0] - _this.coordinates[0] < 0)
- return 1;
- if (aNode.coordinates[0] - _this.coordinates[0] < 0 &&
- bNode.coordinates[0] - _this.coordinates[0] >= 0)
- return -1;
- if (aNode.coordinates[0] - _this.coordinates[0] === 0 &&
- bNode.coordinates[0] - _this.coordinates[0] === 0) {
- if (aNode.coordinates[1] - _this.coordinates[1] >= 0 ||
- bNode.coordinates[1] - _this.coordinates[1] >= 0)
- return aNode.coordinates[1] - bNode.coordinates[1];
- return bNode.coordinates[1] - aNode.coordinates[1];
- }
- var det = util_1.orientationIndex(_this.coordinates, aNode.coordinates, bNode.coordinates);
- if (det < 0)
- return 1;
- if (det > 0)
- return -1;
- var d1 = Math.pow(aNode.coordinates[0] - _this.coordinates[0], 2) +
- Math.pow(aNode.coordinates[1] - _this.coordinates[1], 2), d2 = Math.pow(bNode.coordinates[0] - _this.coordinates[0], 2) +
- Math.pow(bNode.coordinates[1] - _this.coordinates[1], 2);
- return d1 - d2;
- });
- this.outerEdgesSorted = true;
- }
- };
- /**
- * Retrieves outer edges.
- *
- * They are sorted if they aren't in the CCW order.
- *
- * @memberof Node
- * @returns {Edge[]} - List of outer edges sorted in a CCW order.
- */
- Node.prototype.getOuterEdges = function () {
- this.sortOuterEdges();
- return this.outerEdges;
- };
- Node.prototype.getOuterEdge = function (i) {
- this.sortOuterEdges();
- return this.outerEdges[i];
- };
- Node.prototype.addInnerEdge = function (edge) {
- this.innerEdges.push(edge);
- };
- return Node;
- }());
- exports.default = Node;
|