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
89 lines (86 loc) • 2.59 kB
JavaScript
import SegmentIntersector from './SegmentIntersector'
export default class IntersectionAdder {
constructor() {
IntersectionAdder.constructor_.apply(this, arguments)
}
static constructor_() {
this._hasIntersection = false
this._hasProper = false
this._hasProperInterior = false
this._hasInterior = false
this._properIntersectionPoint = null
this._li = null
this._isSelfIntersection = null
this.numIntersections = 0
this.numInteriorIntersections = 0
this.numProperIntersections = 0
this.numTests = 0
const li = arguments[0]
this._li = li
}
static isAdjacentSegments(i1, i2) {
return Math.abs(i1 - i2) === 1
}
isTrivialIntersection(e0, segIndex0, e1, segIndex1) {
if (e0 === e1)
if (this._li.getIntersectionNum() === 1) {
if (IntersectionAdder.isAdjacentSegments(segIndex0, segIndex1)) return true
if (e0.isClosed()) {
const maxSegIndex = e0.size() - 1
if (segIndex0 === 0 && segIndex1 === maxSegIndex || segIndex1 === 0 && segIndex0 === maxSegIndex)
return true
}
}
return false
}
getProperIntersectionPoint() {
return this._properIntersectionPoint
}
hasProperInteriorIntersection() {
return this._hasProperInterior
}
getLineIntersector() {
return this._li
}
hasProperIntersection() {
return this._hasProper
}
processIntersections(e0, segIndex0, e1, segIndex1) {
if (e0 === e1 && segIndex0 === segIndex1) return null
this.numTests++
const p00 = e0.getCoordinates()[segIndex0]
const p01 = e0.getCoordinates()[segIndex0 + 1]
const p10 = e1.getCoordinates()[segIndex1]
const p11 = e1.getCoordinates()[segIndex1 + 1]
this._li.computeIntersection(p00, p01, p10, p11)
if (this._li.hasIntersection()) {
this.numIntersections++
if (this._li.isInteriorIntersection()) {
this.numInteriorIntersections++
this._hasInterior = true
}
if (!this.isTrivialIntersection(e0, segIndex0, e1, segIndex1)) {
this._hasIntersection = true
e0.addIntersections(this._li, segIndex0, 0)
e1.addIntersections(this._li, segIndex1, 1)
if (this._li.isProper()) {
this.numProperIntersections++
this._hasProper = true
this._hasProperInterior = true
}
}
}
}
hasIntersection() {
return this._hasIntersection
}
isDone() {
return false
}
hasInteriorIntersection() {
return this._hasInterior
}
get interfaces_() {
return [SegmentIntersector]
}
}