Example #1
0
void FMMMLayout :: call_MULTILEVEL_step_for_subGraph(Graph& G,NodeArray<NodeAttributes>& 
						     A,EdgeArray<EdgeAttributes>& E,int 
						     comp_index)
{ 
	mathExtension M;
	Multilevel Mult;

	int max_level = 30;//sufficient for all graphs with upto pow(2,30) nodes!
	Array<Graph*> G_mult_ptr(max_level+1);
	Array<NodeArray<NodeAttributes>*> A_mult_ptr (max_level+1);
	Array<EdgeArray<EdgeAttributes>*> E_mult_ptr (max_level+1);

	Mult.create_multilevel_representations(G,A,E,randSeed(),
				galaxyChoice(),minGraphSize(),
				randomTries(),G_mult_ptr,A_mult_ptr,
				E_mult_ptr,max_level);

	for(int i = max_level;i >= 0;i--)
	{  
		if(i == max_level)
			create_initial_placement(*G_mult_ptr[i],*A_mult_ptr[i]);
		else
		{
			Mult.find_initial_placement_for_level(i,initialPlacementMult(),G_mult_ptr,
							   A_mult_ptr,E_mult_ptr);
			update_boxlength_and_cornercoordinate(*G_mult_ptr[i],*A_mult_ptr[i]);
		}
		call_FORCE_CALCULATION_step(*G_mult_ptr[i],*A_mult_ptr[i],*E_mult_ptr[i],
				 i,max_level);   
	} 
	Mult.delete_multilevel_representations(G_mult_ptr,A_mult_ptr,E_mult_ptr,max_level);
}
inline void FMMMLayout :: call_POSTPROCESSING_step(Graph& G,NodeArray<NodeAttributes>& A,
					     EdgeArray<EdgeAttributes>& E,NodeArray
					     <DPoint>& F,NodeArray<DPoint>& F_attr, 
					     NodeArray<DPoint>& F_rep,NodeArray<DPoint>
					     & last_node_movement)
{
  int i;

  for(i = 1; i<= 10; i++)
    calculate_forces(G,A,E,F,F_attr,F_rep,last_node_movement,i,1);

  if((resizeDrawing() == true))
    {
      adapt_drawing_to_ideal_average_edgelength(G,A,E);
      update_boxlength_and_cornercoordinate(G,A);
    }
  for(i = 1; i<= fineTuningIterations(); i++)
    calculate_forces(G,A,E,F,F_attr,F_rep,last_node_movement,i,2);
  if((resizeDrawing() == true))
    adapt_drawing_to_ideal_average_edgelength(G,A,E);
}