Open
Graph Drawing
Framework

 v. 2023.09 (Elderberry)
 

NodeRespecterLayout.h
Go to the documentation of this file.
1 
36 #pragma once
37 
38 #include <ogdf/basic/GraphCopy.h>
40 
41 namespace ogdf {
42 
44 
86 public:
89 
92 
94  virtual void call(GraphAttributes& attr) override;
95 
98  enum class PostProcessingMode {
99  None,
100  KeepMultiEdgeBends,
101  Complete
104  };
106 
109 
111  void setRandomInitialPlacement(bool randomInitialPlacement);
112 
114  void setPostProcessing(PostProcessingMode postProcessing);
115 
117  void setBendNormalizationAngle(double bendNormalizationAngle);
118 
120  void setNumberOfIterations(int numberOfIterations);
121 
123  void setMinimalTemperature(double minimalTemperature);
124 
127  void setInitialTemperature(double initialTemperature);
128 
131  void setTemperatureDecreaseOffset(double temperatureDecreaseOffset);
132 
134  void setGravitation(double gravitation);
135 
137  void setOscillationAngle(double oscillationAngle);
138 
140  void setDesiredMinEdgeLength(double desiredMinEdgeLength);
141 
143  void setInitDummiesPerEdge(int initDummiesPerEdge);
144 
147  void setMaxDummiesPerEdge(int maxDummiesPerEdge);
148 
150  void setDummyInsertionThreshold(double dummyInsertionThreshold);
151 
153  void setMaxDisturbance(double maxDisturbance);
154 
156  void setRepulsionDistance(double repulsionDistance);
157 
159  void setMinDistCC(double minDistCC);
160 
162  void setPageRatio(double pageRatio);
163 
167 
169  bool getRandomInitialPlacement() const { return m_randomInitialPlacement; }
170 
172  PostProcessingMode getPostProcessing() const { return m_postProcessing; }
173 
175  double getBendNormalizationAngle() const { return m_bendNormalizationAngle; }
176 
178  int getNumberOfIterations() const { return m_numberOfIterations; }
179 
181  double getMinimalTemperature() const { return m_minimalTemperature; }
182 
184  double getInitialTemperature() const { return m_initialTemperature; }
185 
187  double getTemperatureDecreaseOffset() const { return m_temperatureDecreaseOffset; }
188 
190  double getGravitation() const { return m_gravitation; }
191 
193  double getOscillationAngle() const { return m_oscillationAngle; }
194 
196  double getDesiredMinEdgeLength() const { return m_desiredMinEdgeLength; }
197 
199  int getInitDummiesPerEdge() const { return m_initDummiesPerEdge; }
200 
202  int getMaxDummiesPerEdge() const { return m_maxDummiesPerEdge; }
203 
205  double getDummyInsertionThreshold() const { return m_dummyInsertionThreshold; }
206 
208  double getMaxDisturbance() const { return m_maxDisturbance; }
209 
211  double getRepulsionDistance() const { return m_repulsionDistance; }
212 
214  double getMinDistCC() const { return m_minDistCC; }
215 
217  double getPageRatio() const { return m_pageRatio; }
218 
220 
221 private:
224 
227 
230 
234 
237 
240 
243 
248 
251 
255 
258 
261 
264 
268 
271 
275 
277  double m_minDistCC;
278 
280  double m_pageRatio;
281 
285 
288 
291 
294 
297 
300 
303 
306 
309 
313 
316 
319 
322 
325 
328 
330  double m_factor;
331 
333  double m_cos;
334 
336 
338  void initData();
339 
341  void freeData();
342 
344  void createBends(const ArrayBuffer<edge>& origEdges, GraphAttributes& attr);
345 
349  void updateNodeLoop(SListPure<node>& nodes);
350 
352  std::pair<double, double> computeImpulse(node v);
353 
356  void updateNode(node v, std::pair<double, double> newImpulse);
357 
359  void addDummies(node v, SListPure<node>& nodes);
360 
363  inline double radius(const GraphAttributes& attr, node v) const {
364  switch (attr.shape(v)) {
365  case Shape::Pentagon:
366  case Shape::Octagon:
367  case Shape::Hexagon:
368  case Shape::Rhomb:
369  case Shape::Ellipse:
370  return std::max(attr.height(v), attr.width(v)) / 2.0;
371 
372  default:
373  // For Rect, RoundedRect, Triangle, Trapeze, Parallelogram, InvTriangle,
374  // InvTrapeze, InvParallelogram, Image and unknown shapes.
375  return std::hypot(attr.height(v), attr.width(v)) / 2.0;
376  }
377  }
378 
383  inline bool haveSameOriginalEdge(node v, node w) const {
384  if (m_copy.isDummy(v) && m_copy.isDummy(w)) {
385  return m_copy.original(v->firstAdj()->theEdge())
386  == m_copy.original(w->firstAdj()->theEdge());
387  } else if (m_copy.isDummy(v)) {
388  return m_copy.original(v->firstAdj()->theEdge())->isIncident(w);
389  } else if (m_copy.isDummy(w)) {
390  return m_copy.original(w->firstAdj()->theEdge())->isIncident(v);
391  } else {
392  return false;
393  }
394  }
395 
397  inline double weight(node v) const { return v->degree() / m_degreeSum; }
398 
400 };
401 
402 }
ogdf::ArrayBuffer< edge >
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::NodeRespecterLayout::m_impulseY
NodeArray< double > m_impulseY
Y-coordinate of the last impulse of the node.
Definition: NodeRespecterLayout.h:296
ogdf::NodeRespecterLayout::m_localTemperature
NodeArray< double > m_localTemperature
Local temperature of the node.
Definition: NodeRespecterLayout.h:299
ogdf::NodeRespecterLayout::getPageRatio
double getPageRatio() const
Returns m_pageRatio.
Definition: NodeRespecterLayout.h:217
ogdf::NodeRespecterLayout::m_pageRatio
double m_pageRatio
Page ratio used for the layout of connected components.
Definition: NodeRespecterLayout.h:280
ogdf::NodeRespecterLayout::m_initDummiesPerEdge
int m_initDummiesPerEdge
How many dummy nodes should initially be created for one edge.
Definition: NodeRespecterLayout.h:260
ogdf::NodeRespecterLayout::getRepulsionDistance
double getRepulsionDistance() const
Returns m_repulsionDistance.
Definition: NodeRespecterLayout.h:211
ogdf::NodeRespecterLayout
The NodeRespecterLayout layout algorithm.
Definition: NodeRespecterLayout.h:85
ogdf::NodeRespecterLayout::getMaxDisturbance
double getMaxDisturbance() const
Returns m_maxDisturbance.
Definition: NodeRespecterLayout.h:208
ogdf::NodeRespecterLayout::m_barycenterX
double m_barycenterX
Weighted sum of x-coordinates of all nodes.
Definition: NodeRespecterLayout.h:318
ogdf::GraphCopyBase::isDummy
bool isDummy(node v) const
Returns true iff v has no corresponding node in the original graph.
Definition: GraphCopy.h:166
ogdf::NodeRespecterLayout::m_temperatureDecreaseOffset
double m_temperatureDecreaseOffset
Factor for which holds: If only m_numberOfIterations * m_temperatureDecreaseOffset iterations are lef...
Definition: NodeRespecterLayout.h:247
ogdf::NodeRespecterLayout::~NodeRespecterLayout
~NodeRespecterLayout()
Destroys an instance of the NodeRespecterLayout.
Definition: NodeRespecterLayout.h:91
ogdf::NodeRespecterLayout::m_degreeSum
int m_degreeSum
Twice the number of all edges in the original graph.
Definition: NodeRespecterLayout.h:315
ogdf::NodeRespecterLayout::m_randomInitialPlacement
bool m_randomInitialPlacement
Whether nodes should be initialized in random positions.
Definition: NodeRespecterLayout.h:226
ogdf::NodeRespecterLayout::getMinDistCC
double getMinDistCC() const
Returns m_minDistCC.
Definition: NodeRespecterLayout.h:214
ogdf::Shape::Octagon
@ Octagon
octagon
ogdf::GraphCopy
Copies of graphs supporting edge splitting.
Definition: GraphCopy.h:384
ogdf::NodeRespecterLayout::haveSameOriginalEdge
bool haveSameOriginalEdge(node v, node w) const
Returns whether v and w belong to the same original edge. If only one of the nodes is a dummy node,...
Definition: NodeRespecterLayout.h:383
ogdf::NodeRespecterLayout::m_bendNormalizationAngle
double m_bendNormalizationAngle
Lower bound for the minimum angle between two line segments such that the bend point between them is ...
Definition: NodeRespecterLayout.h:233
LayoutModule.h
Declaration of interface for layout algorithms (class LayoutModule)
ogdf::NodeRespecterLayout::m_repulsionDistance
double m_repulsionDistance
Maximum distance between a dummy and another node such that the former is repulsed by the latter.
Definition: NodeRespecterLayout.h:274
ogdf::NodeRespecterLayout::m_dummyInsertionThreshold
double m_dummyInsertionThreshold
How many times larger than the desired edge length an edge has to be in order for a new dummy node to...
Definition: NodeRespecterLayout.h:267
ogdf::Shape::Rhomb
@ Rhomb
rhomb (=diamond)
ogdf::NodeRespecterLayout::m_numberOfIterations
int m_numberOfIterations
Number of times a single node is moved for each connected component.
Definition: NodeRespecterLayout.h:236
ogdf::NodeRespecterLayout::PostProcessingMode
PostProcessingMode
Sets whether unnecessary edge bends should be filtered out in a post-processing step.
Definition: NodeRespecterLayout.h:98
ogdf::NodeRespecterLayout::m_cos
double m_cos
Precomputed cosinus of (m_oscillationAngle / 2).
Definition: NodeRespecterLayout.h:333
OGDF_NEW_DELETE
#define OGDF_NEW_DELETE
Makes the class use OGDF's memory allocator.
Definition: memory.h:84
ogdf::NodeRespecterLayout::getMaxDummiesPerEdge
int getMaxDummiesPerEdge() const
Returns m_maxDummiesPerEdge.
Definition: NodeRespecterLayout.h:202
ogdf::NodeRespecterLayout::getBendNormalizationAngle
double getBendNormalizationAngle() const
Returns m_bendNormalizationAngle.
Definition: NodeRespecterLayout.h:175
ogdf::NodeRespecterLayout::m_hasParEdges
EdgeArray< bool > m_hasParEdges
Whether the edge has parallel edges.
Definition: NodeRespecterLayout.h:305
ogdf::NodeRespecterLayout::getDesiredMinEdgeLength
double getDesiredMinEdgeLength() const
Returns m_desiredMinEdgeLength.
Definition: NodeRespecterLayout.h:196
ogdf::NodeRespecterLayout::m_desiredMinEdgeLength
double m_desiredMinEdgeLength
Desired minimal node separation/edge length.
Definition: NodeRespecterLayout.h:257
ogdf::NodeRespecterLayout::m_minimalTemperature
double m_minimalTemperature
Minimal temperature, lower bound for the global temperature.
Definition: NodeRespecterLayout.h:239
ogdf::GraphAttributes::shape
Shape shape(node v) const
Returns the shape type of node v.
Definition: GraphAttributes.h:423
ogdf::AdjElement::theEdge
edge theEdge() const
Returns the edge associated with this adjacency entry.
Definition: Graph_d.h:153
ogdf::NodeElement::degree
int degree() const
Returns the degree of the node (indegree + outdegree).
Definition: Graph_d.h:276
ogdf::NodeRespecterLayout::m_maxDisturbance
double m_maxDisturbance
Maximal disturbance, i.e. maximal random node movement.
Definition: NodeRespecterLayout.h:270
ogdf::NodeRespecterLayout::m_gravitation
double m_gravitation
Gravitational constant scaling attractive forces towards the barycenter.
Definition: NodeRespecterLayout.h:250
ogdf::NodeRespecterLayout::weight
double weight(node v) const
Returns the weight of node v according to its degree.
Definition: NodeRespecterLayout.h:397
ogdf::NodeRespecterLayout::getMinimalTemperature
double getMinimalTemperature() const
Returns m_minimalTemperature.
Definition: NodeRespecterLayout.h:181
ogdf::NodeRespecterLayout::m_copy
GraphCopy m_copy
Copy of the given graph which may contain dummy nodes.
Definition: NodeRespecterLayout.h:287
ogdf::NodeRespecterLayout::m_minDistCC
double m_minDistCC
Minimal distance between connected components.
Definition: NodeRespecterLayout.h:277
ogdf::NodeRespecterLayout::m_nodeRadius
NodeArray< double > m_nodeRadius
Radius of the smallest circle encompassing the node.
Definition: NodeRespecterLayout.h:302
ogdf::SListPure
Singly linked lists.
Definition: SList.h:39
ogdf::NodeRespecterLayout::getPostProcessing
PostProcessingMode getPostProcessing() const
Returns m_postProcessing.
Definition: NodeRespecterLayout.h:172
GraphCopy.h
Declaration of graph copy classes.
ogdf::internal::GraphRegisteredArray
RegisteredArray for nodes, edges and adjEntries of a graph.
Definition: Graph_d.h:651
ogdf::Shape::Pentagon
@ Pentagon
pentagon
ogdf::GraphAttributes::height
double height(node v) const
Returns the height of the bounding box of node v.
Definition: GraphAttributes.h:387
ogdf::NodeRespecterLayout::getGravitation
double getGravitation() const
Returns m_gravitation.
Definition: NodeRespecterLayout.h:190
ogdf::Shape::Ellipse
@ Ellipse
ellipse
ogdf::NodeRespecterLayout::m_desiredDistance
NodeArray< NodeArray< double > > m_desiredDistance
Desired distance between each pair of nodes.
Definition: NodeRespecterLayout.h:308
ogdf::NodeRespecterLayout::getTemperatureDecreaseOffset
double getTemperatureDecreaseOffset() const
Returns m_temperatureDecreaseOffset.
Definition: NodeRespecterLayout.h:187
ogdf::NodeRespecterLayout::getInitDummiesPerEdge
int getInitDummiesPerEdge() const
Returns m_initDummiesPerEdge.
Definition: NodeRespecterLayout.h:199
ogdf::NodeRespecterLayout::m_impulseX
NodeArray< double > m_impulseX
X-coordinate of the last impulse of the node.
Definition: NodeRespecterLayout.h:293
ogdf::NodeRespecterLayout::getDummyInsertionThreshold
double getDummyInsertionThreshold() const
Returns m_dummyInsertionThreshold.
Definition: NodeRespecterLayout.h:205
ogdf::NodeRespecterLayout::getOscillationAngle
double getOscillationAngle() const
Returns m_oscillationAngle.
Definition: NodeRespecterLayout.h:193
ogdf::NodeRespecterLayout::m_iterCounter
int m_iterCounter
Number of iterations for which the algorithm still has to run.
Definition: NodeRespecterLayout.h:324
OGDF_EXPORT
#define OGDF_EXPORT
Specifies that a function or class is exported by the OGDF DLL.
Definition: config.h:101
ogdf::NodeRespecterLayout::radius
double radius(const GraphAttributes &attr, node v) const
Returns the radius of the smallest circle surrounding the shape of v (while still having its center a...
Definition: NodeRespecterLayout.h:363
ogdf::NodeRespecterLayout::m_oscillationAngle
double m_oscillationAngle
Maximum angle between new and previous impulse such that the node movement is counted as an oscillati...
Definition: NodeRespecterLayout.h:254
ogdf::NodeElement::firstAdj
adjEntry firstAdj() const
Returns the first entry in the adjaceny list.
Definition: Graph_d.h:279
ogdf::NodeRespecterLayout::m_globalTemperature
double m_globalTemperature
Average of all local node temperatures.
Definition: NodeRespecterLayout.h:327
ogdf::NodeRespecterLayout::m_maxDummiesPerEdge
int m_maxDummiesPerEdge
How many dummy nodes should maximally be created for one edge.
Definition: NodeRespecterLayout.h:263
ogdf::NodeRespecterLayout::m_postProcessing
PostProcessingMode m_postProcessing
Whether unnecessary bends should be filtered out in a post processing step.
Definition: NodeRespecterLayout.h:229
ogdf::NodeRespecterLayout::getInitialTemperature
double getInitialTemperature() const
Returns m_initialTemperature.
Definition: NodeRespecterLayout.h:184
ogdf::NodeRespecterLayout::getNumberOfIterations
int getNumberOfIterations() const
Returns m_numberOfIterations.
Definition: NodeRespecterLayout.h:178
ogdf::Shape::Hexagon
@ Hexagon
hexagon
ogdf::NodeRespecterLayout::m_initialTemperature
double m_initialTemperature
Initial temperature of every node.
Definition: NodeRespecterLayout.h:242
ogdf::IntersectionType::None
@ None
Two geometric objects do not intersect.
ogdf::NodeElement
Class for the representation of nodes.
Definition: Graph_d.h:233
ogdf::NodeRespecterLayout::m_copyAttr
GraphAttributes m_copyAttr
GraphAttributes for m_copy.
Definition: NodeRespecterLayout.h:290
ogdf::NodeRespecterLayout::getRandomInitialPlacement
bool getRandomInitialPlacement() const
Returns m_randomInitialPlacement.
Definition: NodeRespecterLayout.h:169
ogdf::NodeRespecterLayout::m_barycenterY
double m_barycenterY
Weighted sum of y-coordinates of all nodes.
Definition: NodeRespecterLayout.h:321
ogdf::NodeRespecterLayout::m_factor
double m_factor
Precomputed constant used to get the max. temperature for each iteration.
Definition: NodeRespecterLayout.h:330
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::GraphAttributes::width
double width(node v) const
Returns the width of the bounding box of node v.
Definition: GraphAttributes.h:351