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