+
+ const bool allCornersSame = ( nbC[0] == 3 );
+ if ( allCornersSame && nbHalfDividers > 0 )
+ {
+ // select two halfDivider's as corners
+ TGeoIndex hd1, hd2 = -1;
+ size_t iC2;
+ for ( iC2 = 0; iC2 < cornerInd.size() && hd2 < 0; ++iC2 )
+ {
+ hd1 = cornerInd[ iC2 ];
+ hd2 = halfDivider[ hd1 ];
+ if ( std::find( equVerts.begin(), equVerts.end(), hd2 ) == equVerts.end() )
+ hd2 = -1; // hd2-th vertex can't become a corner
+ else
+ break;
+ }
+ if ( hd2 >= 0 )
+ {
+ angles[ hd1 ] = 2 * M_PI; // make hd1-th vertex no more "equal"
+ angles[ hd2 ] = 2 * M_PI;
+ refinedCorners.insert( hd1 );
+ refinedCorners.insert( hd2 );
+ treatedCorners = refinedCorners;
+ // update cornerInd
+ equVerts.push_front( equVerts.back() );
+ equVerts.push_back( equVerts.front() );
+ list< TGeoIndex >::iterator hdPos =
+ std::find( equVerts.begin(), equVerts.end(), hd2 );
+ if ( hdPos == equVerts.end() ) break;
+ cornerInd[ helper.WrapIndex( iC2 + 0, cornerInd.size()) ] = hd1;
+ cornerInd[ helper.WrapIndex( iC2 + 1, cornerInd.size()) ] = *( --hdPos );
+ cornerInd[ helper.WrapIndex( iC2 + 2, cornerInd.size()) ] = hd2;
+ cornerInd[ helper.WrapIndex( iC2 + 3, cornerInd.size()) ] = *( ++hdPos, ++hdPos );
+
+ theVertices[ 0 ] = helper.IthVertex( 0, edgeVec[ cornerInd[0] ]);
+ theVertices[ 1 ] = helper.IthVertex( 0, edgeVec[ cornerInd[1] ]);
+ theVertices[ 2 ] = helper.IthVertex( 0, edgeVec[ cornerInd[2] ]);
+ theVertices[ 3 ] = helper.IthVertex( 0, edgeVec[ cornerInd[3] ]);
+ iC = -1;
+ continue;
+ }
+ }
+