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
81 lines (78 loc) • 2.52 kB
JavaScript
import SegmentIntersector from './SegmentIntersector'
import RobustLineIntersector from '../algorithm/RobustLineIntersector'
export default class SegmentIntersectionDetector {
constructor() {
SegmentIntersectionDetector.constructor_.apply(this, arguments)
}
static constructor_() {
this._li = null
this._findProper = false
this._findAllTypes = false
this._hasIntersection = false
this._hasProperIntersection = false
this._hasNonProperIntersection = false
this._intPt = null
this._intSegments = null
if (arguments.length === 0) {
SegmentIntersectionDetector.constructor_.call(this, new RobustLineIntersector())
} else if (arguments.length === 1) {
const li = arguments[0]
this._li = li
}
}
getIntersectionSegments() {
return this._intSegments
}
setFindAllIntersectionTypes(findAllTypes) {
this._findAllTypes = findAllTypes
}
hasProperIntersection() {
return this._hasProperIntersection
}
getIntersection() {
return this._intPt
}
processIntersections(e0, segIndex0, e1, segIndex1) {
if (e0 === e1 && segIndex0 === segIndex1) return null
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._hasIntersection = true
const isProper = this._li.isProper()
if (isProper) this._hasProperIntersection = true
if (!isProper) this._hasNonProperIntersection = true
let saveLocation = true
if (this._findProper && !isProper) saveLocation = false
if (this._intPt === null || saveLocation) {
this._intPt = this._li.getIntersection(0)
this._intSegments = new Array(4).fill(null)
this._intSegments[0] = p00
this._intSegments[1] = p01
this._intSegments[2] = p10
this._intSegments[3] = p11
}
}
}
hasIntersection() {
return this._hasIntersection
}
isDone() {
if (this._findAllTypes)
return this._hasProperIntersection && this._hasNonProperIntersection
if (this._findProper)
return this._hasProperIntersection
return this._hasIntersection
}
hasNonProperIntersection() {
return this._hasNonProperIntersection
}
setFindProper(findProper) {
this._findProper = findProper
}
get interfaces_() {
return [SegmentIntersector]
}
}