UNPKG

@numericelements/knot-sequence

Version:

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

29 lines (25 loc) 1.67 kB
'use strict'; var KnotSequences = require('../ErrorMessages/KnotSequences.cjs'); var ErrorLoging = require('../errorProcessing/ErrorLoging.cjs'); var IncreasingPeriodicKnotSequenceClosedCurve = require('../IncreasingPeriodicKnotSequenceClosedCurve.cjs'); var KnotSequenceConstructorInterface = require('../KnotSequenceConstructorInterface.cjs'); function fromIncreasingOpentoIncreasingPeriodicKnotSequence(increasingSeq) { const maxMultOrder = increasingSeq.maxMultiplicityOrder; const indexOrigin = increasingSeq.indexKnotOrigin.knotIndex; const knotAbscissae = increasingSeq.allAbscissae; knotAbscissae.splice(knotAbscissae.length - 1 - (indexOrigin - 1), indexOrigin); knotAbscissae.splice(0, indexOrigin); if (increasingSeq.isSequenceUpToC0Discontinuity) { const multiplicities = increasingSeq.multiplicities(); for (const multiplicity of multiplicities) { if (multiplicity === maxMultOrder) { const error = new ErrorLoging.ErrorLog("function", "fromIncreasingOpentoIncreasingPeriodicKnotSequence"); error.addMessage(KnotSequences.EM_KNOT_MULTIPLICITY_TOO_LARGE_FOR_CONVERSION); console.log(error.generateMessageString()); throw new RangeError(error.generateMessageString()); } } } return new IncreasingPeriodicKnotSequenceClosedCurve.IncreasingPeriodicKnotSequenceClosedCurve(maxMultOrder - 1, { type: KnotSequenceConstructorInterface.INCREASINGPERIODICKNOTSEQUENCE, periodicKnots: knotAbscissae }); } exports.fromIncreasingOpentoIncreasingPeriodicKnotSequence = fromIncreasingOpentoIncreasingPeriodicKnotSequence;