UNPKG

@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
'use strict'; 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;