Open
Graph Drawing
Framework

 v. 2023.09 (Elderberry)
 

Loading...
Searching...
No Matches
Multilevel.h
Go to the documentation of this file.
1
32#pragma once
33
34#include <ogdf/basic/Array.h>
35#include <ogdf/basic/Graph.h>
36#include <ogdf/basic/geometry.h>
38
40class EdgeAttributes;
41class NodeAttributes;
42} // namespace ogdf::energybased::fmmm
43
44namespace ogdf {
45template<class E>
46class List;
47
48namespace energybased {
49namespace fmmm {
50
52public:
56 EdgeArray<EdgeAttributes>& E, int rand_seed, FMMMOptions::GalaxyChoice galaxy_choice,
57 int min_Graph_size, int rand_tries, Array<Graph*>& G_mult_ptr,
58 Array<NodeArray<NodeAttributes>*>& A_mult_ptr,
59 Array<EdgeArray<EdgeAttributes>*>& E_mult_ptr, int& max_level);
60
66 FMMMOptions::InitialPlacementMult init_placement_way, Array<Graph*>& G_mult_ptr,
67 Array<NodeArray<NodeAttributes>*>& A_mult_ptr,
68 Array<EdgeArray<EdgeAttributes>*>& E_mult_ptr);
69
72 Array<NodeArray<NodeAttributes>*>& A_mult_ptr,
73 Array<EdgeArray<EdgeAttributes>*>& E_mult_ptr, int max_level);
74
75private:
82 int& bad_edgenr_counter);
83
87
96 Array<NodeArray<NodeAttributes>*>& A_mult_ptr,
97 Array<EdgeArray<EdgeAttributes>*>& E_mult_ptr, int rand_seed,
98 FMMMOptions::GalaxyChoice galaxy_choice, int random_tries, int act_level);
99
103 Array<NodeArray<NodeAttributes>*>& A_mult_ptr,
104 Array<EdgeArray<EdgeAttributes>*>& E_mult_ptr, int rand_seed,
105 FMMMOptions::GalaxyChoice galaxy_choice, int random_tries, int act_level);
106
112
118 Array<NodeArray<NodeAttributes>*>& A_mult_ptr,
119 Array<EdgeArray<EdgeAttributes>*>& E_mult_ptr, int act_level);
120
124 Array<NodeArray<NodeAttributes>*>& A_mult_ptr, int act_level);
125
129 Array<NodeArray<NodeAttributes>*>& A_mult_ptr,
130 Array<EdgeArray<EdgeAttributes>*>& E_mult_ptr, EdgeArray<double>& new_edgelength,
131 int act_level);
132
136 Array<EdgeArray<EdgeAttributes>*>& E_mult_ptr, EdgeArray<double>& new_edgelength,
137 int act_level);
138
141 Array<NodeArray<NodeAttributes>*>& A_mult_ptr);
142
146 FMMMOptions::InitialPlacementMult init_placement_way, Array<Graph*>& G_mult_ptr,
147 Array<NodeArray<NodeAttributes>*>& A_mult_ptr,
148 Array<EdgeArray<EdgeAttributes>*>& E_mult_ptr, List<node>& pm_nodes);
149
154 Array<NodeArray<NodeAttributes>*>& A_mult_ptr,
155 Array<EdgeArray<EdgeAttributes>*>& E_mult_ptr, int level);
156
160 FMMMOptions::InitialPlacementMult init_placement_way,
161 Array<NodeArray<NodeAttributes>*>& A_mult_ptr,
162 Array<EdgeArray<EdgeAttributes>*>& E_mult_ptr, List<node>& pm_nodes);
163
165 DPoint create_random_pos(DPoint center, double radius, double angle_1, double angle_2);
166
169
173
176 DPoint calculate_position(DPoint P, DPoint Q, double dist_P, double dist_Q);
177};
178
179}
180}
181}
Declaration and implementation of Array class and Array algorithms.
Declaration of Fast Multipole Multilevel Method (FM^3) options.
Includes declaration of graph class.
Declaration of classes GenericPoint, GenericPolyline, GenericLine, GenericSegment,...
The parameterized class Array implements dynamic arrays of type E.
Definition Array.h:219
InitialPlacementMult
Specifies how the initial placement is generated.
GalaxyChoice
Specifies how sun nodes of galaxies are selected.
Definition FMMMOptions.h:87
Data type for general directed graphs (adjacency list representation).
Definition Graph_d.h:866
Doubly linked lists (maintaining the length of the list).
Definition List.h:1451
DPoint get_waggled_inbetween_position(DPoint s, DPoint t, double lambda)
Returns roughtly the position s +lambda*(t-s) + some random waggling.
void calculate_mass_of_collapsed_nodes(Array< Graph * > &G_mult_ptr, Array< NodeArray< NodeAttributes > * > &A_mult_ptr, int act_level)
The mass of all nodes at level act_level+1 is set to the mass of its dedicated solar_system at level ...
void create_multilevel_representations(Graph &G, NodeArray< NodeAttributes > &A, EdgeArray< EdgeAttributes > &E, int rand_seed, FMMMOptions::GalaxyChoice galaxy_choice, int min_Graph_size, int rand_tries, Array< Graph * > &G_mult_ptr, Array< NodeArray< NodeAttributes > * > &A_mult_ptr, Array< EdgeArray< EdgeAttributes > * > &E_mult_ptr, int &max_level)
The multilevel representations *G_mult_ptr/*A_mult_ptr/*E_mult_ptr for G/A/E are created....
void partition_galaxy_into_solar_systems(Array< Graph * > &G_mult_ptr, Array< NodeArray< NodeAttributes > * > &A_mult_ptr, Array< EdgeArray< EdgeAttributes > * > &E_mult_ptr, int rand_seed, FMMMOptions::GalaxyChoice galaxy_choice, int random_tries, int act_level)
The nodeset(galaxy) of *G_mult_ptr[act_level] is partitioned in s,p,pm,m nodes. The dedicated s,...
void delete_multilevel_representations(Array< Graph * > &G_mult_ptr, Array< NodeArray< NodeAttributes > * > &A_mult_ptr, Array< EdgeArray< EdgeAttributes > * > &E_mult_ptr, int max_level)
Free dynamically allocated memory.
DPoint calculate_position(DPoint P, DPoint Q, double dist_P, double dist_Q)
Creates a waggled position on the line PQ, depending on dist_P and dist_Q needed in case init_placeme...
void collaps_solar_systems(Array< Graph * > &G_mult_ptr, Array< NodeArray< NodeAttributes > * > &A_mult_ptr, Array< EdgeArray< EdgeAttributes > * > &E_mult_ptr, int act_level)
Using information generated in partition_galaxy_into_solar_systems we create the edge set of *G_mult_...
void create_suns_and_planets(Array< Graph * > &G_mult_ptr, Array< NodeArray< NodeAttributes > * > &A_mult_ptr, Array< EdgeArray< EdgeAttributes > * > &E_mult_ptr, int rand_seed, FMMMOptions::GalaxyChoice galaxy_choice, int random_tries, int act_level)
The sun and planet nodes are created by choosing the sun nodes randomly with uniform or weighted prob...
void create_all_placement_sectors(Array< Graph * > &G_mult_ptr, Array< NodeArray< NodeAttributes > * > &A_mult_ptr, Array< EdgeArray< EdgeAttributes > * > &E_mult_ptr, int level)
The values of angle_1 and angle_2 that restrict the area of the placement for all nodes that are not ...
void create_edges_edgedistances_and_lambda_Lists(Array< Graph * > &G_mult_ptr, Array< NodeArray< NodeAttributes > * > &A_mult_ptr, Array< EdgeArray< EdgeAttributes > * > &E_mult_ptr, EdgeArray< double > &new_edgelength, int act_level)
The edges , new_edgelength and the lambda lists at level act_level+1 are created (the graph may conta...
DPoint create_random_pos(DPoint center, double radius, double angle_1, double angle_2)
Returns a random point with radius radius between angle_1 and angle_2.
void set_initial_positions_of_pm_nodes(int level, FMMMOptions::InitialPlacementMult init_placement_way, Array< NodeArray< NodeAttributes > * > &A_mult_ptr, Array< EdgeArray< EdgeAttributes > * > &E_mult_ptr, List< node > &pm_nodes)
The initial positions of the pm nodes are calculated by the position of the dedicated sun and moon_no...
void find_initial_placement_for_level(int level, FMMMOptions::InitialPlacementMult init_placement_way, Array< Graph * > &G_mult_ptr, Array< NodeArray< NodeAttributes > * > &A_mult_ptr, Array< EdgeArray< EdgeAttributes > * > &E_mult_ptr)
The initial placement of the nodes at multilevel level are created by the placements of the nodes of ...
DPoint get_barycenter_position(List< DPoint > &L)
Returns the barycenter position of all points in L (the mass of all point is regarded as equal).
void init_multilevel_values(const Graph &G_mult, NodeArray< NodeAttributes > &A_mult, EdgeArray< EdgeAttributes > &E_mult)
Sets the default multilevel values for all nodes and edges in G_mult.
void set_initial_positions_of_planet_and_moon_nodes(int level, FMMMOptions::InitialPlacementMult init_placement_way, Array< Graph * > &G_mult_ptr, Array< NodeArray< NodeAttributes > * > &A_mult_ptr, Array< EdgeArray< EdgeAttributes > * > &E_mult_ptr, List< node > &pm_nodes)
The initial positions of the planet/moon_nodes at level level are calculated here and a list of all p...
bool edgenumbersum_of_all_levels_is_linear(Array< Graph * > &G_mult_ptr, int act_level, int &bad_edgenr_counter)
This function returns true if act_level = 0 or if act_level >0 and the number of edges at the actual ...
void set_initial_positions_of_sun_nodes(int level, Array< Graph * > &G_mult_ptr, Array< NodeArray< NodeAttributes > * > &A_mult_ptr)
The initial positions of all sun_nodes at level level are set.
void create_moon_nodes_and_pm_nodes(const Graph &G_mult, NodeArray< NodeAttributes > &A_mult, EdgeArray< EdgeAttributes > &E_mult)
Partitions the nodes of G_mult that have not been assigned yet, to moon nodes of a nearest planet or ...
void delete_parallel_edges_and_update_edgelength(Array< Graph * > &G_mult_ptr, Array< EdgeArray< EdgeAttributes > * > &E_mult_ptr, EdgeArray< double > &new_edgelength, int act_level)
Parallel edges at level act_level+1 are deleted and the edgelength of the remaining edge is set to th...
RegisteredArray for edges of a graph, specialized for EdgeArray<edge>.
Definition Graph_d.h:717
RegisteredArray for nodes, edges and adjEntries of a graph.
Definition Graph_d.h:659
The namespace for all OGDF objects.