UNPKG

@numericelements/knot-sequence

Version:

A library for generating and manipulating knot sequences for b-spline curves and surfaces

24 lines (21 loc) 2 kB
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 };