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); }