private void FillOutIncidences()
{
Dictionary<Vector3D, List<Tile>> Edges = new Dictionary<Vector3D, List<Tile>>();
Dictionary<Vector3D, List<Tile>> Vertices = new Dictionary<Vector3D, List<Tile>>();
foreach( Tile t in m_tiles )
{
foreach( Vector3D edge in t.Boundary.EdgeMidpoints )
{
List<Tile> list;
if( !Edges.TryGetValue( edge, out list ) )
{
list = new List<Tile>();
Edges[edge] = list;
}
list.Add( t );
}
foreach( Vector3D vertex in t.Boundary.Vertices )
{
List<Tile> list;
if( !Vertices.TryGetValue( vertex, out list ) )
{
list = new List<Tile>();
Vertices[vertex] = list;
}
list.Add( t );
}
}
foreach( List<Tile> list in Edges.Values )
foreach( Tile t in list )
t.EdgeIncidences.AddRange( list );
foreach( List<Tile> list in Vertices.Values )
foreach( Tile t in list )
t.VertexIndicences.AddRange( list );
foreach( Tile t in m_tiles )
{
// Remove duplicates and ourselves from lists.
t.EdgeIncidences = t.EdgeIncidences.Distinct().Except( new Tile[] { t } ).ToList();
t.VertexIndicences = t.VertexIndicences.Distinct().Except( new Tile[] { t } ).ToList();
// Also, make sure we only track vertex incidences that do not have edge incidences too.
t.VertexIndicences = t.VertexIndicences.Except( t.EdgeIncidences ).ToList();
}
}