#include "StdAfx.h"
#include "Q_ROUTING_DrawNetwork.h"

void DrawNetwork( Network & network , CClientDC & dc , CRect & rect )
{
	ConnectionListIterator connection_iterator;
	network.InitConnectionListIterator( connection_iterator );

	for( connection_iterator.Begin() ; !connection_iterator.IsEnd() ; connection_iterator++ )
	{	
		Connection & connection = *connection_iterator.GetConnection();
		Router & a = connection.GetA();
		Router & b = connection.GetB();
		CPoint a_position , b_position;
		CoorToDevice( rect , a.GetPosition() , a_position );
		CoorToDevice( rect , b.GetPosition() , b_position );
		
		double capacity_factor = (double)connection.GetLoad() / (double)connection.GetCapacity();
		if( capacity_factor > 0.0 )
			capacity_factor = 0.5 + ( capacity_factor / 2 );
		const int base = 96;
		CPen * pen = new CPen( 1 , 5 , RGB( base + capacity_factor * (255 - base) , base , base ) );
		CPen * old_pen = dc.SelectObject( pen );
		
		dc.MoveTo( a_position );
		dc.LineTo( b_position );

		dc.SelectObject( old_pen );
		delete pen;
	}
}

const double edge_size = 10;
void CoorToDevice( CRect & rect , const RouterPosition & position , CPoint & answer )
{
	answer.x = rect.left + (int)(position.X() * rect.Width() / edge_size );
	answer.y = rect.top + (int)(position.Y() * rect.Height() / edge_size );	
}

void DeviceToCoord( CRect & rect , const CPoint & point , RouterPosition & answer )
{
	answer.Set( (int)(edge_size * (point.x - rect.left) / rect.Width()) , 
				(int)(edge_size * (point.y - rect.top) / rect.Height()) ); 
}
