Index: nurbs.cpp =================================================================== --- nurbs.cpp (revision 930) +++ nurbs.cpp (working copy) @@ -421,23 +421,14 @@ if ( r <= 0 ) return ( 0 ); + std::vector auHold(m_auKnots); + // Reserve more space for new knots. + m_cuVerts += r; + m_auKnots.reserve( m_cuVerts + m_uOrder ); + // Insert r new knots. + std::vector newKnots(r, u); + m_auKnots.insert(m_auKnots.begin()+(k+1), newKnots.begin(), newKnots.end()); - m_cuVerts = m_cuVerts + r; - m_auKnots.resize( m_cuVerts + m_uOrder ); - - std::vector auHold( m_auKnots ); - // Load new knot vector - // Copy up to the insertion point. - for ( i = 0;i <= k;i++ ) - m_auKnots[ i ] = auHold[ i ]; - // Add the specified value 'r' times at the insertion point. - for ( i = 1;i <= r;i++ ) - m_auKnots[ k + i ] = u; - // Copy after the insertion point up to the end. - for ( i = k + 1; i < static_cast( m_auKnots.size() ); i++ ) - m_auKnots[ i + r ] = auHold[ i ]; - - // Now process all the 'vertex' class variables. std::vector::iterator iUP; std::vector::iterator end = m_aUserParams.end(); @@ -610,20 +601,14 @@ if ( r <= 0 ) return ( 0 ); - // Work on a copy. - m_cvVerts = m_cvVerts + r; - m_avKnots.resize( m_cvVerts + m_vOrder ); - std::vector avHold( m_avKnots ); + std::vector avHold(m_avKnots); + // Reserve more space for new knots. + m_cvVerts += r; + m_avKnots.reserve( m_cvVerts + m_vOrder ); + // Insert r new knots + std::vector newKnots(r, v); + m_avKnots.insert(m_avKnots.begin()+(k+1), newKnots.begin(), newKnots.end()); - // Load new knot vector - for ( i = 0;i <= k;i++ ) - m_avKnots[ i ] = avHold[ i ]; - for ( i = 1;i <= r;i++ ) - m_avKnots[ k + i ] = v; - size = static_cast( m_avKnots.size() ); - for ( i = k + 1;i < size; i++ ) - m_avKnots[ i + r ] = avHold[ i ]; - // Now process all the 'vertex' class variables. std::vector::iterator iUP; std::vector::iterator end = m_aUserParams.end();