NonEncroachingSplitPointFinder.js 957 B

123456789101112131415161718192021222324252627
  1. import SplitSegment from './SplitSegment'
  2. import ConstraintSplitPointFinder from './ConstraintSplitPointFinder'
  3. export default class NonEncroachingSplitPointFinder {
  4. static projectedSplitPoint(seg, encroachPt) {
  5. const lineSeg = seg.getLineSegment()
  6. const projPt = lineSeg.project(encroachPt)
  7. return projPt
  8. }
  9. findSplitPoint(seg, encroachPt) {
  10. const lineSeg = seg.getLineSegment()
  11. const segLen = lineSeg.getLength()
  12. const midPtLen = segLen / 2
  13. const splitSeg = new SplitSegment(lineSeg)
  14. const projPt = NonEncroachingSplitPointFinder.projectedSplitPoint(seg, encroachPt)
  15. const nonEncroachDiam = projPt.distance(encroachPt) * 2 * 0.8
  16. let maxSplitLen = nonEncroachDiam
  17. if (maxSplitLen > midPtLen)
  18. maxSplitLen = midPtLen
  19. splitSeg.setMinimumLength(maxSplitLen)
  20. splitSeg.splitAt(projPt)
  21. return splitSeg.getSplitPoint()
  22. }
  23. get interfaces_() {
  24. return [ConstraintSplitPointFinder]
  25. }
  26. }