void print_edge(edge e) { printf("%u %u %u %u %s\n", edge_first(e), edge_last(e), edge_capacity(e), edge_flow(e), edge_used(e)?"True":"False"); }
void CMeshBoundary::CreateBoundary() { std::vector< int > boundary_ei; std::vector< int > boundary_ei_back_pointer( m_vecEdge.size(), -1 ); for ( int i = 0; i < ( int )m_vecEdge.size(); i++ ) { if ( m_vecEdge[ i ].twin == -1 ) { boundary_ei_back_pointer[ i ] = boundary_ei.size(); boundary_ei.push_back( i ); } } std::vector< bool > edge_used( boundary_ei.size(), false ); int used_num = 0; while ( used_num < ( int )boundary_ei.size() ) { m_vecBoundary.resize( m_vecBoundary.size() + 1 ); CAuxBoundary & bdr = m_vecBoundary.back(); int seed_edge = -1; for ( int i = 0; i < ( int )boundary_ei.size(); i++ ) { if ( edge_used[ i ] == false ) { seed_edge = boundary_ei[ i ]; break; } } // go one step bdr.ei.push_back( seed_edge ); bdr.vi.push_back( m_vecEdge[ seed_edge ].vi[ 0 ] ); bdr.height = m_pMesh->m_vecVertex[ m_vecEdge[ seed_edge ].vi[ 0 ] ].v[ 2 ]; edge_used[ boundary_ei_back_pointer[ seed_edge ] ] = true; used_num++; int ei = GetNextEdge( seed_edge ); while ( ei != seed_edge ) { bdr.ei.push_back( ei ); bdr.vi.push_back( m_vecEdge[ ei ].vi[ 0 ] ); bdr.height += m_pMesh->m_vecVertex[ m_vecEdge[ ei ].vi[ 0 ] ].v[ 2 ]; edge_used[ boundary_ei_back_pointer[ ei ] ] = true; used_num++; ei = GetNextEdge( ei ); } bdr.height /= ( double )bdr.ei.size(); } }