+ if ( n[j] < n[j+1] )
+ link = TLink( n[j], n[j+1] );
+ else
+ link = TLink( n[j+1], n[j] );
+ link2len = lenOfDoneLink.insert( make_pair( link, -1. )).first;
+ isDone[j] = !((*link2len).second < 0 );
+ a[j] = isDone[j] ? (*link2len).second : (*link2len).second = p[j].Distance( p[j+1] );
+ if ( isDone[j] )
+ lenOfDoneLink.erase( link2len );
+ if ( a[j] > maxLinkLen )
+ {
+ maxLinkLen = a[j];
+ jLongest = j;
+ }
+ }
+ // compute minimal altitude of a triangle
+ if ( !isConstSize || size < 0. )
+ {
+ double s = 0.5 * ( a[0] + a[1] + a[2] );
+ double area = sqrt( s * (s - a[0]) * (s - a[1]) * (s - a[2]));
+ size = 2 * area / maxLinkLen; // minimal altitude
+ }
+ // set size to the size tree
+ if ( !isDone[ jLongest ] || !isConstSize )
+ {
+ //++nbLinks;
+ int nb = Max( 1, int( maxLinkLen / size / 2 ));
+ for ( int k = 0; k <= nb; ++k )