| 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;
 |