@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
JavaScript
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 };