@numericelements/knot-sequence
Version:
A library for generating and manipulating knot sequences for b-spline curves and surfaces
26 lines (22 loc) • 2.31 kB
JavaScript
;
var KnotSequenceConstructorInterface = require('../KnotSequenceConstructorInterface.cjs');
var StrictlyIncreasingPeriodicKnotSequenceClosedCurve = require('../StrictlyIncreasingPeriodicKnotSequenceClosedCurve.cjs');
var KnotIndexStrictlyIncreasingSequence = require('../KnotIndexStrictlyIncreasingSequence.cjs');
var prepareStrictlyIncreasingOpenKnotSeqCCfromStrictlyIncreasingPeriodicKnotSeq = require('./prepareStrictlyIncreasingOpenKnotSeqCCfromStrictlyIncreasingPeriodicKnotSeq.cjs');
var KnotSequences = require('../namedConstants/KnotSequences.cjs');
function prepareStrictlyIncreasingOpenKnotSequenceCC(maxMultiplicityOrder, knotParameters) {
if (knotParameters.multiplicities[0] < maxMultiplicityOrder) {
const strictIncPeriodicSeq = new StrictlyIncreasingPeriodicKnotSequenceClosedCurve.StrictlyIncreasingPeriodicKnotSequenceClosedCurve((maxMultiplicityOrder - 1), { type: KnotSequenceConstructorInterface.STRICTLYINCREASINGPERIODICKNOTSEQUENCE, periodicKnots: knotParameters.periodicKnots, multiplicities: knotParameters.multiplicities });
const openSequence = prepareStrictlyIncreasingOpenKnotSeqCCfromStrictlyIncreasingPeriodicKnotSeq.prepareStrictlyIncreasingOpenKnotSeqCCfromStrictlyIncreasingPeriodicKnotSeq(strictIncPeriodicSeq);
let indexOrigin = Infinity;
for (let index = 0; index < openSequence.knots.length; index++) {
if (openSequence.knots[index] > (KnotSequences.KNOT_SEQUENCE_ORIGIN - KnotSequences.KNOT_COINCIDENCE_TOLERANCE) && openSequence.knots[index] < (KnotSequences.KNOT_SEQUENCE_ORIGIN + KnotSequences.KNOT_COINCIDENCE_TOLERANCE))
indexOrigin = index;
}
return { knots: openSequence.knots, multiplicities: openSequence.multiplicities, uMax: strictIncPeriodicSeq.uMax, indexKnotOrigin: new KnotIndexStrictlyIncreasingSequence.KnotIndexStrictlyIncreasingSequence(indexOrigin) };
}
else {
return { knots: knotParameters.periodicKnots, multiplicities: knotParameters.multiplicities, uMax: knotParameters.periodicKnots[knotParameters.periodicKnots.length - 1], indexKnotOrigin: new KnotIndexStrictlyIncreasingSequence.KnotIndexStrictlyIncreasingSequence(0) };
}
}
exports.prepareStrictlyIncreasingOpenKnotSequenceCC = prepareStrictlyIncreasingOpenKnotSequenceCC;