UNPKG

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