UNPKG

@numericelements/knot-sequence

Version:

A library for generating and manipulating knot sequences for b-spline curves and surfaces

27 lines (24 loc) 1.53 kB
import { EM_KNOT_MULTIPLICITY_TOO_LARGE_FOR_CONVERSION } from '../ErrorMessages/KnotSequences.js'; import { ErrorLog } from '../errorProcessing/ErrorLoging.js'; import { IncreasingPeriodicKnotSequenceClosedCurve } from '../IncreasingPeriodicKnotSequenceClosedCurve.js'; import { INCREASINGPERIODICKNOTSEQUENCE } from '../KnotSequenceConstructorInterface.js'; function fromIncreasingOpentoIncreasingPeriodicKnotSequence(increasingSeq) { const maxMultOrder = increasingSeq.maxMultiplicityOrder; const indexOrigin = increasingSeq.indexKnotOrigin.knotIndex; const knotAbscissae = increasingSeq.allAbscissae; knotAbscissae.splice(knotAbscissae.length - 1 - (indexOrigin - 1), indexOrigin); knotAbscissae.splice(0, indexOrigin); if (increasingSeq.isSequenceUpToC0Discontinuity) { const multiplicities = increasingSeq.multiplicities(); for (const multiplicity of multiplicities) { if (multiplicity === maxMultOrder) { const error = new ErrorLog("function", "fromIncreasingOpentoIncreasingPeriodicKnotSequence"); error.addMessage(EM_KNOT_MULTIPLICITY_TOO_LARGE_FOR_CONVERSION); console.log(error.generateMessageString()); throw new RangeError(error.generateMessageString()); } } } return new IncreasingPeriodicKnotSequenceClosedCurve(maxMultOrder - 1, { type: INCREASINGPERIODICKNOTSEQUENCE, periodicKnots: knotAbscissae }); } export { fromIncreasingOpentoIncreasingPeriodicKnotSequence };