Open
Graph Drawing
Framework

 v. 2023.09 (Elderberry)
 

Loading...
Searching...
No Matches
BalloonLayout.h
Go to the documentation of this file.
1
37/*
38 * The layout is computed by first computing a spanning tree
39 * of the graph that is then used to derive the vertices' coordinates.
40 * First, the radii at each vertex are computed.
41 * Then, depending on the embedding option, the order of the
42 * edges around each vertex is optimized to maximize angular
43 * resolution and to minimize the aspect ratio.
44 *
45 * Finally, the layout is shifted into the positive quadrant
46 * of the cartesian plane
47 * */
48
49#pragma once
50
51#include <ogdf/basic/Graph.h>
53#include <ogdf/basic/basic.h>
54#include <ogdf/basic/memory.h>
55
56#include <iosfwd>
57
58namespace ogdf {
59class GraphAttributes;
60template<class E>
61class List;
62
64public:
65 //Root may be defined by center of the graph
66 //Directed cases: source/sink
67 enum class RootSelection { Center, HighestDegree };
68 //either keep the given embedding or optimize
69 //the order wrto angular resolution and minimum aspect ratio
70 enum class ChildOrder { Fixed, Optimized };
71 //compute tree by different methods
72 enum class TreeComputation { Bfs, Dfs, BfsRandom };
77
79 virtual void call(GraphAttributes& AG) override;
80
84 virtual void callFractal(GraphAttributes& AG, double ratio = 0.3) {
85 bool even = getEvenAngles();
86 setEvenAngles(true);
87 call(AG);
88 setEvenAngles(even);
89 }
90
92 void setEvenAngles(bool b) { m_evenAngles = b; }
93
95 bool getEvenAngles() { return m_evenAngles; }
96
97protected:
101 void computeTree(const Graph& G);
102
104 void computeBFSTree(const Graph& G, node v);
105
108 void selectRoot(const Graph& G);
109
115#ifdef OGDF_DEBUG
117#else
118 void computeRadii(const GraphAttributes& AG);
119#endif
120
122 void computeAngles(const Graph& G);
123
126
127private:
136
138#ifdef OGDF_DEBUG
140 void checkTree(const Graph& G, bool treeRoot = true);
142#endif
143
147
149
153
154 void check(Graph& G);
155
157};
158
159OGDF_EXPORT std::ostream& operator<<(std::ostream& os, const BalloonLayout::RootSelection& rs);
160
161}
Includes declaration of graph class.
Declaration of interface for layout algorithms (class LayoutModule)
Basic declarations, included by all source files.
void computeAngles(const Graph &G)
Computes the angle distribution: assigns m_angle each node.
NodeArray< double > m_maxChildRadius
Outer radius of largest child.
NodeArray< double > m_estimate
Rough estimate of circumference of subtrees.
NodeArray< double > m_angle
Angle assigned to nodes.
NodeArray< double > m_size
Radius of circle around node box.
NodeArray< node > m_parent
Parent in spanning tree.
EdgeArray< bool > m_treeEdge
Holds info about tree edges.
bool getEvenAngles()
returns how the angles are assigned to subtrees.
void setEvenAngles(bool b)
Subtrees may be assigned even angles or angles depending on their size.
node m_treeRoot
Root of tree after computation.
NodeArray< int > m_childCount
Number of children in spanning tree.
TreeComputation m_treeComputation
How to derive the spanning tree.
void check(Graph &G)
Use even angles independent of subtree size.
ChildOrder m_childOrder
How to arrange the children.
void checkTree(const Graph &G, bool treeRoot=true)
Consistency check for the tree.
NodeArray< double > m_oRadius
Radius at node center.
BalloonLayout()
Constructor, sets options to default values.
virtual void call(GraphAttributes &AG) override
Standard call using the stored parameter settings.
NodeArray< List< node > > m_childList
BalloonLayout & operator=(const BalloonLayout &bl)
Assignmentoperator.
virtual void callFractal(GraphAttributes &AG, double ratio=0.3)
Call using special parameter settings for fractal model takes radius ratio < 0.5 as parameter.
node m_root
Root of tree by selection method.
NodeArray< double > m_radius
void computeBFSTree(const Graph &G, node v)
Computes tree by BFS, fills m_parent and m_childCount.
void computeTree(const Graph &G)
Computes the spanning tree that is used for the layout computation, the non-tree edges are simply add...
void computeRadii(GraphAttributes &AG)
Computes a radius for each of the vertices in G. fractal model: same radius on same level,...
void computeCoordinates(GraphAttributes &AG)
Computes coordinates from angles and radii.
RootSelection m_rootSelection
Defines how the tree root is selected.
double m_estimateFactor
Weight of value (largestchild / number of children) added to estimate to compute radius.
void selectRoot(const Graph &G)
Selects the root of the spanning tree that is placed in the layout center.
Stores additional attributes of a graph (like layout information).
Data type for general directed graphs (adjacency list representation).
Definition Graph_d.h:866
Interface of general layout algorithms.
Class for the representation of nodes.
Definition Graph_d.h:241
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
#define OGDF_EXPORT
Specifies that a function or class is exported by the OGDF dynamic library (shared object / DLL),...
Definition config.h:117
#define OGDF_NEW_DELETE
Makes the class use OGDF's memory allocator.
Definition memory.h:85
Declaration of memory manager for allocating small pieces of memory.
The namespace for all OGDF objects.
std::ostream & operator<<(std::ostream &os, const ogdf::Array< E, INDEX > &a)
Prints array a to output stream os.
Definition Array.h:983