Example #1
0
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();
	}
}