node-red-contrib-tak-registration
Version:
A Node-RED node to register to TAK and to help wrap files as datapackages to send to TAK
96 lines (95 loc) • 3.76 kB
JavaScript
"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;