All pastes #417811 Raw Edit

patch for aqsis nurbs on vc8

public text v1 · immutable
#417811 ·published 2007-03-31 05:11 UTC
rendered paste body
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();