@numericelements/knot-sequence
Version:
A library for generating and manipulating knot sequences for b-spline curves and surfaces
29 lines (25 loc) • 1.67 kB
JavaScript
;
var KnotSequences = require('../ErrorMessages/KnotSequences.cjs');
var ErrorLoging = require('../errorProcessing/ErrorLoging.cjs');
var IncreasingPeriodicKnotSequenceClosedCurve = require('../IncreasingPeriodicKnotSequenceClosedCurve.cjs');
var KnotSequenceConstructorInterface = require('../KnotSequenceConstructorInterface.cjs');
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 ErrorLoging.ErrorLog("function", "fromIncreasingOpentoIncreasingPeriodicKnotSequence");
error.addMessage(KnotSequences.EM_KNOT_MULTIPLICITY_TOO_LARGE_FOR_CONVERSION);
console.log(error.generateMessageString());
throw new RangeError(error.generateMessageString());
}
}
}
return new IncreasingPeriodicKnotSequenceClosedCurve.IncreasingPeriodicKnotSequenceClosedCurve(maxMultOrder - 1, { type: KnotSequenceConstructorInterface.INCREASINGPERIODICKNOTSEQUENCE, periodicKnots: knotAbscissae });
}
exports.fromIncreasingOpentoIncreasingPeriodicKnotSequence = fromIncreasingOpentoIncreasingPeriodicKnotSequence;