UNPKG

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

203 lines (200 loc) 5.53 kB
import NumberUtil from '../util/NumberUtil' import IllegalArgumentException from '../../../../java/lang/IllegalArgumentException' import Double from '../../../../java/lang/Double' import Comparable from '../../../../java/lang/Comparable' import Cloneable from '../../../../java/lang/Cloneable' import Comparator from '../../../../java/util/Comparator' import Serializable from '../../../../java/io/Serializable' // import Assert from '../util/Assert' export default class Coordinate { constructor () { this.x = null this.y = null this.z = null if (arguments.length === 0) { this.x = 0.0 this.y = 0.0 this.z = Coordinate.NULL_ORDINATE } else if (arguments.length === 1) { const c = arguments[0] this.x = c.x this.y = c.y this.z = c.z } else if (arguments.length === 2) { this.x = arguments[0] this.y = arguments[1] this.z = Coordinate.NULL_ORDINATE } else if (arguments.length === 3) { this.x = arguments[0] this.y = arguments[1] this.z = arguments[2] } } setOrdinate (ordinateIndex, value) { switch (ordinateIndex) { case Coordinate.X: this.x = value break case Coordinate.Y: this.y = value break case Coordinate.Z: this.z = value break default: throw new IllegalArgumentException('Invalid ordinate index: ' + ordinateIndex) } } equals2D () { if (arguments.length === 1) { let other = arguments[0] if (this.x !== other.x) { return false } if (this.y !== other.y) { return false } return true } else if (arguments.length === 2) { const c = arguments[0] const tolerance = arguments[1] if (!NumberUtil.equalsWithTolerance(this.x, c.x, tolerance)) { return false } if (!NumberUtil.equalsWithTolerance(this.y, c.y, tolerance)) { return false } return true } } getOrdinate (ordinateIndex) { switch (ordinateIndex) { case Coordinate.X: return this.x case Coordinate.Y: return this.y case Coordinate.Z: return this.z default: } throw new IllegalArgumentException('Invalid ordinate index: ' + ordinateIndex) } equals3D (other) { return this.x === other.x && this.y === other.y && ((this.z === other.z || Double.isNaN(this.z)) && Double.isNaN(other.z)) } equals (other) { if (!(other instanceof Coordinate)) { return false } return this.equals2D(other) } equalInZ (c, tolerance) { return NumberUtil.equalsWithTolerance(this.z, c.z, tolerance) } compareTo (o) { var other = o if (this.x < other.x) return -1 if (this.x > other.x) return 1 if (this.y < other.y) return -1 if (this.y > other.y) return 1 return 0 } clone () { // try { // var coord = null // return coord // } catch (e) { // if (e instanceof CloneNotSupportedException) { // Assert.shouldNeverReachHere("this shouldn't happen because this class is Cloneable") // return null // } else throw e // } finally {} } copy () { return new Coordinate(this) } toString () { return '(' + this.x + ', ' + this.y + ', ' + this.z + ')' } distance3D (c) { var dx = this.x - c.x var dy = this.y - c.y var dz = this.z - c.z return Math.sqrt(dx * dx + dy * dy + dz * dz) } distance (c) { var dx = this.x - c.x var dy = this.y - c.y return Math.sqrt(dx * dx + dy * dy) } hashCode () { var result = 17 result = 37 * result + Coordinate.hashCode(this.x) result = 37 * result + Coordinate.hashCode(this.y) return result } setCoordinate (other) { this.x = other.x this.y = other.y this.z = other.z } interfaces_ () { return [Comparable, Cloneable, Serializable] } getClass () { return Coordinate } static hashCode () { if (arguments.length === 1) { const x = arguments[0] const f = Double.doubleToLongBits(x) return Math.trunc((f ^ f) >>> 32) } } static get DimensionalComparator () { return DimensionalComparator } static get serialVersionUID () { return 6683108902428366910 } static get NULL_ORDINATE () { return Double.NaN } static get X () { return 0 } static get Y () { return 1 } static get Z () { return 2 } } class DimensionalComparator { constructor (dimensionsToTest) { this._dimensionsToTest = 2 if (arguments.length === 0) {} else if (arguments.length === 1) { let dimensionsToTest = arguments[0] if (dimensionsToTest !== 2 && dimensionsToTest !== 3) throw new IllegalArgumentException('only 2 or 3 dimensions may be specified') this._dimensionsToTest = dimensionsToTest } } compare (o1, o2) { var c1 = o1 var c2 = o2 var compX = DimensionalComparator.compare(c1.x, c2.x) if (compX !== 0) return compX var compY = DimensionalComparator.compare(c1.y, c2.y) if (compY !== 0) return compY if (this._dimensionsToTest <= 2) return 0 var compZ = DimensionalComparator.compare(c1.z, c2.z) return compZ } interfaces_ () { return [Comparator] } getClass () { return DimensionalComparator } static compare (a, b) { if (a < b) return -1 if (a > b) return 1 if (Double.isNaN(a)) { if (Double.isNaN(b)) return 0 return -1 } if (Double.isNaN(b)) return 1 return 0 } }