Open
Graph Drawing
Framework

 v. 2023.09 (Elderberry)
 

SpringEmbedderBase.h
Go to the documentation of this file.
1 
32 #pragma once
33 
34 #include <ogdf/basic/GraphCopy.h>
39 
40 namespace ogdf {
41 namespace spring_embedder {
42 
45 public:
47  enum class Scaling {
48  input,
52  };
53 
56  // default parameters
57  m_iterations = 400;
58  m_iterationsImprove = 200;
59  m_coolDownFactor = 0.999;
60  m_forceLimitStep = 0.25;
61 
62  m_boundingBox = DRect(0, 0, 250, 250);
63  m_noise = true;
64 
67 
70 
72  m_scaleFactor = 4.0;
73 
74  m_userBoundingBox = DRect(0, 0, 100, 100);
75 
77  m_pageRatio = 1.0;
78 
80 
81  double def_nw = LayoutStandards::defaultNodeWidth();
82  double def_nh = LayoutStandards::defaultNodeHeight();
84  LayoutStandards::defaultNodeSeparation() + sqrt(def_nw * def_nw + def_nh * def_nh);
85  }
86 
87  virtual void call(GraphAttributes& GA) override {
88  const Graph& G = GA.constGraph();
89  if (G.empty()) {
90  return;
91  }
92 
93  // all edges straight-line
94  GA.clearAllBends();
95 
96  GraphCopy GC;
97  GC.setOriginalGraph(G);
98 
99  // compute connected component of G
100  NodeArray<int> component(G);
101  int numCC = connectedComponents(G, component);
102 
103  // intialize the array of lists of nodes contained in a CC
104  Array<List<node>> nodesInCC(numCC);
105 
106  for (node v : G.nodes) {
107  nodesInCC[component[v]].pushBack(v);
108  }
109 
110  NodeArray<node> nodeCopy(G);
111  EdgeArray<edge> auxCopy(G);
112  Array<DPoint> boundingBox(numCC);
113 
114  for (int i = 0; i < numCC; ++i) {
115  nodeCopy.init(G);
116  auxCopy.init(G);
117  GC.clear();
118  GC.insert(nodesInCC[i].begin(), nodesInCC[i].end(), filter_any_edge, nodeCopy, auxCopy);
120 
121  const int n = GC.numberOfNodes();
122 
123  // special case: just one node
124  if (n == 1) {
125  node vOrig = GC.original(GC.firstNode());
126  GA.x(vOrig) = GA.y(vOrig) = 0;
127  boundingBox[i] = DPoint(0, 0);
128  continue;
129  }
130 
131  callMaster(GC, GA, boundingBox[i]);
132  //std::cout << "avg. force: " << master.avgDisplacement() << std::endl;
133  //std::cout << "max. force: " << master.maxDisplacement() << std::endl;
134  }
135 
136  Array<DPoint> offset(numCC);
137  TileToRowsCCPacker packer;
138  packer.call(boundingBox, offset, m_pageRatio);
139 
140  // The arrangement is given by offset to the origin of the coordinate
141  // system. We still have to shift each node and edge by the offset
142  // of its connected component.
143 
144  for (int i = 0; i < numCC; ++i) {
145  const List<node>& nodes = nodesInCC[i];
146 
147  const double dx = offset[i].m_x;
148  const double dy = offset[i].m_y;
149 
150  // iterate over all nodes in ith CC
152  for (node v : nodes) {
153  GA.x(v) += dx;
154  GA.y(v) += dy;
155  }
156  }
157  }
158 
161 
164 
167 
170 
172 
177  double avgConvergenceFactor() const { return m_avgConvergenceFactor; }
178 
180  void avgConvergenceFactor(double f) {
181  if (f >= 0) {
183  }
184  }
185 
187 
192  double maxConvergenceFactor() const { return m_maxConvergenceFactor; }
193 
195  void maxConvergenceFactor(double f) {
196  if (f >= 0) {
198  }
199  }
200 
202 
206  int iterations() const { return m_iterations; }
207 
209  void iterations(int i) {
210  if (i >= 0) {
211  m_iterations = i;
212  }
213  }
214 
216  int iterationsImprove() const { return m_iterationsImprove; }
217 
219  void iterationsImprove(int i) {
220  if (i >= 0) {
222  }
223  }
224 
225  double coolDownFactor() const { return m_coolDownFactor; }
226 
227  double forceLimitStep() const { return m_forceLimitStep; }
228 
230  double idealEdgeLength() const { return m_idealEdgeLength; }
231 
233 
237  void idealEdgeLength(double len) { m_idealEdgeLength = len; }
238 
240  bool noise() const { return m_noise; }
241 
243  void noise(bool on) { m_noise = on; }
244 
246  double minDistCC() const { return m_minDistCC; }
247 
249  void minDistCC(double x) { m_minDistCC = x; }
250 
252  double pageRatio() { return m_pageRatio; }
253 
255  void pageRatio(double x) { m_pageRatio = x; }
256 
258  Scaling scaling() const { return m_scaling; }
259 
261  void scaling(Scaling sc) { m_scaling = sc; }
262 
264  double scaleFunctionFactor() const { return m_scaleFactor; }
265 
267  void scaleFunctionFactor(double f) { m_scaleFactor = f; }
268 
270  void userBoundingBox(double xmin, double ymin, double xmax, double ymax) {
271  m_userBoundingBox = DRect(xmin, ymin, xmax, ymax);
272  }
273 
276 
278  unsigned int maxThreads() const { return m_maxThreads; }
279 
281  void maxThreads(unsigned int n) { m_maxThreads = n; }
282 
283 protected:
284  virtual void callMaster(const GraphCopy& copy, GraphAttributes& attr, DPoint& box) = 0;
285 
291 
293 
296  bool m_noise;
297 
299  double m_scaleFactor;
300 
302 
303  double m_minDistCC;
304  double m_pageRatio;
305 
308 
309  unsigned int m_maxThreads;
310 };
311 
312 }
313 }
ogdf::spring_embedder::SpringEmbedderBase::coolDownFactor
double coolDownFactor() const
Definition: SpringEmbedderBase.h:225
ogdf
The namespace for all OGDF objects.
Definition: AugmentationModule.h:36
ogdf::GraphAttributes
Stores additional attributes of a graph (like layout information).
Definition: GraphAttributes.h:66
ogdf::spring_embedder::SpringEmbedderBase::maxConvergenceFactor
void maxConvergenceFactor(double f)
Sets the maximum convergence factor to f.
Definition: SpringEmbedderBase.h:195
ogdf::spring_embedder::SpringEmbedderBase::m_userBoundingBox
DRect m_userBoundingBox
Definition: SpringEmbedderBase.h:301
ogdf::spring_embedder::SpringEmbedderBase::noise
bool noise() const
Returns the current setting of noise.
Definition: SpringEmbedderBase.h:240
ogdf::spring_embedder::SpringEmbedderBase::idealEdgeLength
void idealEdgeLength(double len)
Sets the ideal edge length to len.
Definition: SpringEmbedderBase.h:237
SpringForceModel.h
Declaration of SpringForceModel enumeration.
ogdf::spring_embedder::SpringEmbedderBase::Scaling::scaleFunction
@ scaleFunction
automatic scaling is used with parameter set by scaleFunctionFactor() (larger factor,...
ogdf::GenericPoint< double >
ogdf::connectedComponents
int connectedComponents(const Graph &G, NodeArray< int > &component, List< node > *isolated=nullptr, ArrayBuffer< node > *reprs=nullptr)
Computes the connected components of G and optionally generates a list of isolated nodes.
ogdf::GraphCopy::setOriginalGraph
void setOriginalGraph(const Graph *G) override
Associates the graph copy with G, but does not create any nodes or edges.
ogdf::begin
HypergraphRegistry< HypernodeElement >::iterator begin(const HypergraphRegistry< HypernodeElement > &self)
ogdf::spring_embedder::SpringEmbedderBase::maxConvergenceFactor
double maxConvergenceFactor() const
Returns the currently used maximum convergence factor.
Definition: SpringEmbedderBase.h:192
ogdf::GraphAttributes::x
double x(node v) const
Returns the x-coordinate of node v.
Definition: GraphAttributes.h:241
ogdf::spring_embedder::SpringEmbedderBase::SpringEmbedderBase
SpringEmbedderBase()
Constructor.
Definition: SpringEmbedderBase.h:55
ogdf::filter_any_edge
bool filter_any_edge(edge e)
std::function<bool(edge)> that returns true for any edge e
ogdf::spring_embedder::SpringEmbedderBase::forceModelImprove
SpringForceModel forceModelImprove() const
Returns the currently used force model for the improvement step.
Definition: SpringEmbedderBase.h:166
ogdf::GraphCopy
Copies of graphs supporting edge splitting.
Definition: GraphCopy.h:384
ogdf::spring_embedder::SpringEmbedderBase::maxThreads
unsigned int maxThreads() const
Returns the maximal number of used threads.
Definition: SpringEmbedderBase.h:278
LayoutModule.h
Declaration of interface for layout algorithms (class LayoutModule)
ogdf::LayoutStandards::defaultNodeHeight
static double defaultNodeHeight()
Returns the global default height for nodes.
Definition: LayoutStandards.h:80
ogdf::GraphCopy::clear
void clear() override
Removes all nodes and edges from this copy but does not break the link with the original graph.
ogdf::makeSimpleUndirected
void makeSimpleUndirected(Graph &G)
Removes all self-loops and all but one edge of each bundle of undirected parallel edges.
Definition: simple_graph_alg.h:425
ogdf::spring_embedder::SpringEmbedderBase::m_avgConvergenceFactor
double m_avgConvergenceFactor
convergence if avg.
Definition: SpringEmbedderBase.h:306
ogdf::spring_embedder::SpringEmbedderBase::maxThreads
void maxThreads(unsigned int n)
Sets the maximal number of used threads to n.
Definition: SpringEmbedderBase.h:281
ogdf::GraphAttributes::constGraph
const Graph & constGraph() const
Returns a reference to the associated graph.
Definition: GraphAttributes.h:217
ogdf::spring_embedder::SpringEmbedderBase::iterationsImprove
void iterationsImprove(int i)
Sets the number of iterations for the improvement phase to i.
Definition: SpringEmbedderBase.h:219
ogdf::spring_embedder::SpringEmbedderBase::m_iterationsImprove
int m_iterationsImprove
The number of iterations for the improvement phase.
Definition: SpringEmbedderBase.h:287
ogdf::spring_embedder::SpringEmbedderBase
Common base class for ogdf::SpringEmbedderBase and ogdf::SpringEmbedderGridVariant.
Definition: SpringEmbedderBase.h:44
ogdf::spring_embedder::SpringEmbedderBase::userBoundingBox
DRect userBoundingBox() const
Gets the user bounding box.
Definition: SpringEmbedderBase.h:275
ogdf::spring_embedder::SpringEmbedderBase::m_noise
bool m_noise
The used force model for the improvement phase.
Definition: SpringEmbedderBase.h:296
ogdf::spring_embedder::SpringEmbedderBase::iterations
void iterations(int i)
Sets the number of iterations to i.
Definition: SpringEmbedderBase.h:209
ogdf::spring_embedder::SpringEmbedderBase::avgConvergenceFactor
double avgConvergenceFactor() const
Returns the currently used average convergence factor.
Definition: SpringEmbedderBase.h:177
ogdf::spring_embedder::SpringEmbedderBase::scaleFunctionFactor
void scaleFunctionFactor(double f)
Sets the scale function factor to f.
Definition: SpringEmbedderBase.h:267
ogdf::spring_embedder::SpringEmbedderBase::Scaling::useIdealEdgeLength
@ useIdealEdgeLength
use the given ideal edge length to scale the layout suitably.
ogdf::GraphAttributes::y
double y(node v) const
Returns the y-coordinate of node v.
Definition: GraphAttributes.h:259
Minisat::Internal::copy
static void copy(const T &from, T &to)
Definition: Alg.h:61
ogdf::spring_embedder::SpringEmbedderBase::m_iterations
int m_iterations
The number of iterations.
Definition: SpringEmbedderBase.h:286
ogdf::Graph::numberOfNodes
int numberOfNodes() const
Returns the number of nodes in the graph.
Definition: Graph_d.h:974
ogdf::LayoutStandards::defaultCCSeparation
static double defaultCCSeparation()
Returns the global default separation between connected components.
Definition: LayoutStandards.h:193
ogdf::spring_embedder::SpringEmbedderBase::Scaling
Scaling
The scaling method used by the algorithm.
Definition: SpringEmbedderBase.h:47
ogdf::spring_embedder::SpringEmbedderBase::m_coolDownFactor
double m_coolDownFactor
Definition: SpringEmbedderBase.h:289
ogdf::Array
The parameterized class Array implements dynamic arrays of type E.
Definition: Array.h:214
ogdf::DRect
Rectangles with real coordinates.
Definition: geometry.h:791
ogdf::spring_embedder::SpringEmbedderBase::forceModel
void forceModel(SpringForceModel fm)
Sets the used force model to fm.
Definition: SpringEmbedderBase.h:163
ogdf::Graph::firstNode
node firstNode() const
Returns the first node in the list of all nodes.
Definition: Graph_d.h:989
ogdf::spring_embedder::SpringEmbedderBase::m_scaleFactor
double m_scaleFactor
The factor used if scaling type is scScaleFunction.
Definition: SpringEmbedderBase.h:299
ogdf::TileToRowsCCPacker::call
virtual void call(Array< DPoint > &box, Array< DPoint > &offset, double pageRatio=1.0) override
Arranges the rectangles given by box.
ogdf::spring_embedder::SpringEmbedderBase::call
virtual void call(GraphAttributes &GA) override
Computes a layout of graph GA.
Definition: SpringEmbedderBase.h:87
ogdf::spring_embedder::SpringEmbedderBase::m_maxThreads
unsigned int m_maxThreads
The maximal number of used threads.
Definition: SpringEmbedderBase.h:309
GraphCopy.h
Declaration of graph copy classes.
ogdf::List
Doubly linked lists (maintaining the length of the list).
Definition: List.h:42
ogdf::internal::GraphRegisteredArray
RegisteredArray for nodes, edges and adjEntries of a graph.
Definition: Graph_d.h:651
ogdf::Graph
Data type for general directed graphs (adjacency list representation).
Definition: Graph_d.h:862
ogdf::spring_embedder::SpringEmbedderBase::userBoundingBox
void userBoundingBox(double xmin, double ymin, double xmax, double ymax)
Sets the user bounding box (used if scaling method is scUserBoundingBox).
Definition: SpringEmbedderBase.h:270
ogdf::GraphAttributes::clearAllBends
void clearAllBends()
Removes all edge bends.
ogdf::spring_embedder::SpringEmbedderBase::forceModelImprove
void forceModelImprove(SpringForceModel fm)
Sets the used force model for the improvement step to fm.
Definition: SpringEmbedderBase.h:169
ogdf::spring_embedder::SpringEmbedderBase::m_minDistCC
double m_minDistCC
The minimal distance between connected components.
Definition: SpringEmbedderBase.h:303
ogdf::spring_embedder::SpringEmbedderBase::callMaster
virtual void callMaster(const GraphCopy &copy, GraphAttributes &attr, DPoint &box)=0
ogdf::spring_embedder::SpringEmbedderBase::iterationsImprove
int iterationsImprove() const
Returns the current setting of iterations for the improvement phase.
Definition: SpringEmbedderBase.h:216
ogdf::DPoint
GenericPoint< double > DPoint
Representing two-dimensional point with real coordinates.
Definition: geometry.h:237
ogdf::spring_embedder::SpringEmbedderBase::forceModel
SpringForceModel forceModel() const
Returns the currently used force model.
Definition: SpringEmbedderBase.h:160
TileToRowsCCPacker.h
Declaration of class TileToRowsCCPacker.
ogdf::spring_embedder::SpringEmbedderBase::pageRatio
void pageRatio(double x)
Sets the page ration to x.
Definition: SpringEmbedderBase.h:255
ogdf::spring_embedder::SpringEmbedderBase::minDistCC
void minDistCC(double x)
Sets the minimum distance between connected components to x.
Definition: SpringEmbedderBase.h:249
ogdf::spring_embedder::SpringEmbedderBase::m_forceLimitStep
double m_forceLimitStep
Definition: SpringEmbedderBase.h:290
ogdf::Graph::insert
std::pair< int, int > insert(const NI &nodesBegin, const NI &nodesEnd, const EI &edgesBegin, const EI &edgesEnd, NodeArray< node > &nodeMap, EdgeArray< edge > &edgeMap)
Inserts a copy of a given subgraph into this graph.
Definition: InducedSubgraph.h:93
ogdf::spring_embedder::SpringEmbedderBase::scaling
void scaling(Scaling sc)
Sets the method for scaling the inital layout to sc.
Definition: SpringEmbedderBase.h:261
ogdf::spring_embedder::SpringEmbedderBase::scaling
Scaling scaling() const
Returns the current scaling method.
Definition: SpringEmbedderBase.h:258
ogdf::spring_embedder::SpringEmbedderBase::m_boundingBox
DRect m_boundingBox
Definition: SpringEmbedderBase.h:292
ogdf::spring_embedder::SpringEmbedderBase::m_scaling
Scaling m_scaling
The scaling method.
Definition: SpringEmbedderBase.h:298
ogdf::SpringForceModel
SpringForceModel
The force model used for computing forces on nodes.
Definition: SpringForceModel.h:40
ogdf::end
HypergraphRegistry< HypernodeElement >::iterator end(const HypergraphRegistry< HypernodeElement > &self)
ogdf::spring_embedder::SpringEmbedderBase::idealEdgeLength
double idealEdgeLength() const
Returns the current setting of ideal edge length.
Definition: SpringEmbedderBase.h:230
ogdf::spring_embedder::SpringEmbedderBase::m_forceModel
SpringForceModel m_forceModel
Definition: SpringEmbedderBase.h:294
ogdf::spring_embedder::SpringEmbedderBase::Scaling::userBoundingBox
@ userBoundingBox
bounding box set by userBoundingBox() is used.
ogdf::spring_embedder::SpringEmbedderBase::pageRatio
double pageRatio()
Returns the page ratio.
Definition: SpringEmbedderBase.h:252
ogdf::spring_embedder::SpringEmbedderBase::Scaling::input
@ input
bounding box of input is used.
ogdf::spring_embedder::SpringEmbedderBase::m_maxConvergenceFactor
double m_maxConvergenceFactor
convergence if max.
Definition: SpringEmbedderBase.h:307
ogdf::SpringForceModel::FruchtermanReingoldModRep
@ FruchtermanReingoldModRep
ogdf::spring_embedder::SpringEmbedderBase::m_idealEdgeLength
double m_idealEdgeLength
The ideal edge length.
Definition: SpringEmbedderBase.h:288
ogdf::RegisteredArray< GraphRegistry< Key >, Value, WithDefault, Graph >::init
void init(const Graph *base=nullptr)
Reinitializes the array. Associates the array with the matching registry of base.
Definition: RegisteredArray.h:849
ogdf::spring_embedder::SpringEmbedderBase::forceLimitStep
double forceLimitStep() const
Definition: SpringEmbedderBase.h:227
ogdf::SpringForceModel::FruchtermanReingold
@ FruchtermanReingold
the force model proposed by Fruchterman and Reingold.
ogdf::spring_embedder::SpringEmbedderBase::noise
void noise(bool on)
Sets the parameter noise to on.
Definition: SpringEmbedderBase.h:243
ogdf::spring_embedder::SpringEmbedderBase::avgConvergenceFactor
void avgConvergenceFactor(double f)
Sets the average convergence factor to f.
Definition: SpringEmbedderBase.h:180
ogdf::ListIteratorBase
Encapsulates a pointer to a list element.
Definition: List.h:46
ogdf::TileToRowsCCPacker
The tile-to-rows algorithm for packing drawings of connected components.
Definition: TileToRowsCCPacker.h:40
ogdf::LayoutStandards::defaultNodeWidth
static double defaultNodeWidth()
Returns the global default width for nodes.
Definition: LayoutStandards.h:67
ogdf::spring_embedder::SpringEmbedderBase::iterations
int iterations() const
Returns the current setting of iterations.
Definition: SpringEmbedderBase.h:206
ogdf::NodeElement
Class for the representation of nodes.
Definition: Graph_d.h:233
ogdf::spring_embedder::SpringEmbedderBase::scaleFunctionFactor
double scaleFunctionFactor() const
Returns the current scale function factor.
Definition: SpringEmbedderBase.h:264
simple_graph_alg.h
Declaration of simple graph algorithms.
ogdf::LayoutStandards::defaultNodeSeparation
static double defaultNodeSeparation()
Returns the global default node separation.
Definition: LayoutStandards.h:180
ogdf::System::numberOfProcessors
static int numberOfProcessors()
Returns the number of processors (cores) available on the current system.
Definition: System.h:273
ogdf::spring_embedder::SpringEmbedderBase::m_pageRatio
double m_pageRatio
The page ratio.
Definition: SpringEmbedderBase.h:304
ogdf::spring_embedder::SpringEmbedderBase::m_forceModelImprove
SpringForceModel m_forceModelImprove
The used force model.
Definition: SpringEmbedderBase.h:295
ogdf::GraphCopyBase::original
const Graph & original() const
Returns a reference to the original graph.
Definition: GraphCopy.h:98
ogdf::internal::EdgeArrayBase2
RegisteredArray for edges of a graph, specialized for EdgeArray<edge>.
Definition: Graph_d.h:709
ogdf::LayoutModule
Interface of general layout algorithms.
Definition: LayoutModule.h:44
ogdf::spring_embedder::SpringEmbedderBase::minDistCC
double minDistCC() const
Returns the minimum distance between connected components.
Definition: SpringEmbedderBase.h:246