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

75 lines (73 loc) 2.63 kB
import Position from '../../geomgraph/Position' import TopologyException from '../../geom/TopologyException' import ArrayList from '../../../../../java/util/ArrayList' import OverlayOp from './OverlayOp' export default class ConsistentPolygonRingChecker { constructor () { this._graph = null this._SCANNING_FOR_INCOMING = 1 this._LINKING_TO_OUTGOING = 2 const graph = arguments[0] this._graph = graph } testLinkResultDirectedEdges (deStar, opCode) { const ringEdges = this.getPotentialResultAreaEdges(deStar, opCode) let firstOut = null // let incoming = null let state = this._SCANNING_FOR_INCOMING for (let i = 0; i < ringEdges.size(); i++) { const nextOut = ringEdges.get(i) const nextIn = nextOut.getSym() if (!nextOut.getLabel().isArea()) continue if (firstOut === null && this.isPotentialResultAreaEdge(nextOut, opCode)) firstOut = nextOut switch (state) { case this._SCANNING_FOR_INCOMING: if (!this.isPotentialResultAreaEdge(nextIn, opCode)) continue // incoming = nextIn state = this._LINKING_TO_OUTGOING break case this._LINKING_TO_OUTGOING: if (!this.isPotentialResultAreaEdge(nextOut, opCode)) continue state = this._SCANNING_FOR_INCOMING break default: } } if (state === this._LINKING_TO_OUTGOING) { if (firstOut === null) throw new TopologyException('no outgoing dirEdge found', deStar.getCoordinate()) } } getPotentialResultAreaEdges (deStar, opCode) { const resultAreaEdgeList = new ArrayList() for (const it = deStar.iterator(); it.hasNext();) { const de = it.next() if (this.isPotentialResultAreaEdge(de, opCode) || this.isPotentialResultAreaEdge(de.getSym(), opCode)) resultAreaEdgeList.add(de) } return resultAreaEdgeList } checkAll () { this.check(OverlayOp.INTERSECTION) this.check(OverlayOp.DIFFERENCE) this.check(OverlayOp.UNION) this.check(OverlayOp.SYMDIFFERENCE) } check (opCode) { for (const nodeit = this._graph.getNodeIterator(); nodeit.hasNext();) { const node = nodeit.next() this.testLinkResultDirectedEdges(node.getEdges(), opCode) } } isPotentialResultAreaEdge (de, opCode) { const label = de.getLabel() if (label.isArea() && !de.isInteriorAreaEdge() && OverlayOp.isResultOfOp(label.getLocation(0, Position.RIGHT), label.getLocation(1, Position.RIGHT), opCode)) { return true } return false } interfaces_ () { return [] } getClass () { return ConsistentPolygonRingChecker } }