| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- 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
- }
- }
|