- par2 = APnt.Parameter();
- eltSize = segmentSize/nbseg;
- GCPnts_UniformAbscissa Discret( theC3d, eltSize, par1, par2 );
- if ( theReverse )
- Discret.Initialize( theC3d, eltSize, par2, par1 );
- else
- Discret.Initialize( theC3d, eltSize, par1, par2 );
- if ( !Discret.IsDone() )
- return error( "GCPnts_UniformAbscissa failed");
- int NbPoints = Discret.NbPoints();
- list<double> tmpParams;
- for ( int i = 2; i < NbPoints; i++ ) {
- double param = Discret.Parameter(i);
- tmpParams.push_back( param );
- }
- if ( theReverse ) {
- compensateError( eltSize, eltSize, par2, par1, segmentSize, theC3d, tmpParams );
- tmpParams.reverse();
+ uVec[ i ] = APnt.Parameter();
+ }
+ uVec.back() = theLastU;
+
+ // divide segments
+ Params.InsertBefore( 1, 0.0 );
+ Params.Append( 1.0 );
+ double eltSize, segmentSize, par1, par2;
+ for ( size_t i = 0; i < uVec.size()-1; i++ )
+ {
+ par1 = uVec[ i ];
+ par2 = uVec[ i+1 ];
+ int nbseg = ( i < nbsegs.size() ) ? nbsegs[i] : nbsegs[0];
+ if ( nbseg == 1 )
+ {
+ theParams.push_back( par2 );