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
52 lines (51 loc) • 1.66 kB
JavaScript
import Coordinate from '../geom/Coordinate'
export default class SplitSegment {
constructor() {
SplitSegment.constructor_.apply(this, arguments)
}
static constructor_() {
this._seg = null
this._segLen = null
this._splitPt = null
this._minimumLen = 0.0
const seg = arguments[0]
this._seg = seg
this._segLen = seg.getLength()
}
static pointAlongReverse(seg, segmentLengthFraction) {
const coord = new Coordinate()
coord.x = seg.p1.x - segmentLengthFraction * (seg.p1.x - seg.p0.x)
coord.y = seg.p1.y - segmentLengthFraction * (seg.p1.y - seg.p0.y)
return coord
}
splitAt() {
if (arguments.length === 1) {
const pt = arguments[0]
const minFrac = this._minimumLen / this._segLen
if (pt.distance(this._seg.p0) < this._minimumLen) {
this._splitPt = this._seg.pointAlong(minFrac)
return null
}
if (pt.distance(this._seg.p1) < this._minimumLen) {
this._splitPt = SplitSegment.pointAlongReverse(this._seg, minFrac)
return null
}
this._splitPt = pt
} else if (arguments.length === 2) {
const length = arguments[0], endPt = arguments[1]
const actualLen = this.getConstrainedLength(length)
const frac = actualLen / this._segLen
if (endPt.equals2D(this._seg.p0)) this._splitPt = this._seg.pointAlong(frac); else this._splitPt = SplitSegment.pointAlongReverse(this._seg, frac)
}
}
setMinimumLength(minLen) {
this._minimumLen = minLen
}
getConstrainedLength(len) {
if (len < this._minimumLen) return this._minimumLen
return len
}
getSplitPoint() {
return this._splitPt
}
}