Index: nurbs.cpp
===================================================================
--- nurbs.cpp (revision 930)
+++ nurbs.cpp (working copy)
@@ -421,23 +421,14 @@
if ( r <= 0 )
return ( 0 );
+ std::vector<TqFloat> 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<TqFloat> 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<TqFloat> 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<TqInt>( m_auKnots.size() ); i++ )
- m_auKnots[ i + r ] = auHold[ i ];
-
-
// Now process all the 'vertex' class variables.
std::vector<CqParameter*>::iterator iUP;
std::vector<CqParameter*>::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<TqFloat> avHold( m_avKnots );
+ std::vector<TqFloat> 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<TqFloat> 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<TqInt>( 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<CqParameter*>::iterator iUP;
std::vector<CqParameter*>::iterator end = m_aUserParams.end();