@numericelements/knot-sequence
Version:
A library for generating and manipulating knot sequences for b-spline curves and surfaces
48 lines (44 loc) • 2.8 kB
JavaScript
;
var KnotSequences$1 = require('../ErrorMessages/KnotSequences.cjs');
var ErrorLoging = require('../errorProcessing/ErrorLoging.cjs');
var IncreasingPeriodicKnotSequenceClosedCurve = require('../IncreasingPeriodicKnotSequenceClosedCurve.cjs');
var KnotIndexStrictlyIncreasingSequence = require('../KnotIndexStrictlyIncreasingSequence.cjs');
var KnotSequenceConstructorInterface = require('../KnotSequenceConstructorInterface.cjs');
var KnotSequences = require('../namedConstants/KnotSequences.cjs');
var prepareIncreasingOpenKnotSeqCCfromIncreasingPeriodicKnotSeq = require('./prepareIncreasingOpenKnotSeqCCfromIncreasingPeriodicKnotSeq.cjs');
function prepareIncreasingOpenKnotSequenceCC(maxMultiplicityOrder, knotParameters) {
let multiplicityFirstKnot = 0;
let i = 0;
while (knotParameters.periodicKnots[i] === KnotSequences.KNOT_SEQUENCE_ORIGIN) {
i++;
multiplicityFirstKnot++;
}
if (multiplicityFirstKnot < maxMultiplicityOrder) {
const periodicSeq = new IncreasingPeriodicKnotSequenceClosedCurve.IncreasingPeriodicKnotSequenceClosedCurve((maxMultiplicityOrder - 1), { type: KnotSequenceConstructorInterface.INCREASINGPERIODICKNOTSEQUENCE, periodicKnots: knotParameters.periodicKnots });
const openSequence = prepareIncreasingOpenKnotSeqCCfromIncreasingPeriodicKnotSeq.prepareIncreasingOpenKnotSeqCCfromIncreasingPeriodicKnotSeq(periodicSeq);
return { knots: openSequence.knots, multiplicities: openSequence.multiplicities, uMax: openSequence.uMax, indexKnotOrigin: openSequence.indexKnotOrigin };
}
else if (multiplicityFirstKnot === maxMultiplicityOrder) {
const knots = [];
const multiplicities = [];
knots.push(knotParameters.periodicKnots[0]);
multiplicities.push(1);
for (let i = 1; i < knotParameters.periodicKnots.length; i++) {
if (knotParameters.periodicKnots[i] === knots[knots.length - 1]) {
multiplicities[multiplicities.length - 1]++;
}
else {
knots.push(knotParameters.periodicKnots[i]);
multiplicities.push(1);
}
}
return { knots: knots, multiplicities: multiplicities, uMax: knotParameters.periodicKnots[knotParameters.periodicKnots.length - 1], indexKnotOrigin: new KnotIndexStrictlyIncreasingSequence.KnotIndexStrictlyIncreasingSequence(0) };
}
else {
const error = new ErrorLoging.ErrorLog('function', 'prepareIncreasingOpenKnotSequenceCC');
error.addMessage(KnotSequences$1.EM_MAXMULTIPLICITY_ORDER_KNOT);
console.log(error.generateMessageString());
throw new RangeError(error.generateMessageString());
}
}
exports.prepareIncreasingOpenKnotSequenceCC = prepareIncreasingOpenKnotSequenceCC;