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
139 lines (138 loc) • 4 kB
JavaScript
import Location from '../geom/Location'
import Coordinate from '../geom/Coordinate'
import Node from './Node'
import NodeMap from './NodeMap'
import Orientation from '../algorithm/Orientation'
import DirectedEdge from './DirectedEdge'
import System from '../../../../java/lang/System'
import ArrayList from '../../../../java/util/ArrayList'
import Quadrant from './Quadrant'
import NodeFactory from './NodeFactory'
export default class PlanarGraph {
constructor() {
PlanarGraph.constructor_.apply(this, arguments)
}
static constructor_() {
this._edges = new ArrayList()
this._nodes = null
this._edgeEndList = new ArrayList()
if (arguments.length === 0) {
this._nodes = new NodeMap(new NodeFactory())
} else if (arguments.length === 1) {
const nodeFact = arguments[0]
this._nodes = new NodeMap(nodeFact)
}
}
static linkResultDirectedEdges(nodes) {
for (let nodeit = nodes.iterator(); nodeit.hasNext(); ) {
const node = nodeit.next()
node.getEdges().linkResultDirectedEdges()
}
}
printEdges(out) {
out.println('Edges:')
for (let i = 0; i < this._edges.size(); i++) {
out.println('edge ' + i + ':')
const e = this._edges.get(i)
e.print(out)
e.eiList.print(out)
}
}
find(coord) {
return this._nodes.find(coord)
}
addNode() {
if (arguments[0] instanceof Node) {
const node = arguments[0]
return this._nodes.addNode(node)
} else if (arguments[0] instanceof Coordinate) {
const coord = arguments[0]
return this._nodes.addNode(coord)
}
}
getNodeIterator() {
return this._nodes.iterator()
}
linkResultDirectedEdges() {
for (let nodeit = this._nodes.iterator(); nodeit.hasNext(); ) {
const node = nodeit.next()
node.getEdges().linkResultDirectedEdges()
}
}
debugPrintln(o) {
System.out.println(o)
}
isBoundaryNode(geomIndex, coord) {
const node = this._nodes.find(coord)
if (node === null) return false
const label = node.getLabel()
if (label !== null && label.getLocation(geomIndex) === Location.BOUNDARY) return true
return false
}
linkAllDirectedEdges() {
for (let nodeit = this._nodes.iterator(); nodeit.hasNext(); ) {
const node = nodeit.next()
node.getEdges().linkAllDirectedEdges()
}
}
matchInSameDirection(p0, p1, ep0, ep1) {
if (!p0.equals(ep0)) return false
if (Orientation.index(p0, p1, ep1) === Orientation.COLLINEAR && Quadrant.quadrant(p0, p1) === Quadrant.quadrant(ep0, ep1)) return true
return false
}
getEdgeEnds() {
return this._edgeEndList
}
debugPrint(o) {
System.out.print(o)
}
getEdgeIterator() {
return this._edges.iterator()
}
findEdgeInSameDirection(p0, p1) {
for (let i = 0; i < this._edges.size(); i++) {
const e = this._edges.get(i)
const eCoord = e.getCoordinates()
if (this.matchInSameDirection(p0, p1, eCoord[0], eCoord[1])) return e
if (this.matchInSameDirection(p0, p1, eCoord[eCoord.length - 1], eCoord[eCoord.length - 2])) return e
}
return null
}
insertEdge(e) {
this._edges.add(e)
}
findEdgeEnd(e) {
for (let i = this.getEdgeEnds().iterator(); i.hasNext(); ) {
const ee = i.next()
if (ee.getEdge() === e) return ee
}
return null
}
addEdges(edgesToAdd) {
for (let it = edgesToAdd.iterator(); it.hasNext(); ) {
const e = it.next()
this._edges.add(e)
const de1 = new DirectedEdge(e, true)
const de2 = new DirectedEdge(e, false)
de1.setSym(de2)
de2.setSym(de1)
this.add(de1)
this.add(de2)
}
}
add(e) {
this._nodes.add(e)
this._edgeEndList.add(e)
}
getNodes() {
return this._nodes.values()
}
findEdge(p0, p1) {
for (let i = 0; i < this._edges.size(); i++) {
const e = this._edges.get(i)
const eCoord = e.getCoordinates()
if (p0.equals(eCoord[0]) && p1.equals(eCoord[1])) return e
}
return null
}
}