Open
Graph Drawing
Framework

 v. 2023.09 (Elderberry)
 

Loading...
Searching...
No Matches
HypergraphAttributes.h
Go to the documentation of this file.
1
33#pragma once
34
35#include <ogdf/basic/Graph.h>
37#include <ogdf/basic/basic.h>
38#include <ogdf/basic/geometry.h>
39#include <ogdf/basic/graphics.h>
42
43#include <string>
44
45namespace ogdf {
46
61protected:
64
67
70
73
76
79
82
83public:
85 HypergraphAttributes() : m_hypergraph(nullptr) { }
86
88 explicit HypergraphAttributes(const Hypergraph& H) : m_hypergraph(&H) {
89 m_x.init(H, 0.0);
90 m_y.init(H, 0.0);
91 m_width.init(H, 10.0);
92 m_height.init(H, 10.0);
93 m_label.init(H);
94 m_shape.init(H, static_cast<int>(Shape::Ellipse));
95 }
96
99
100 const Hypergraph& constHypergraph() const { return *m_hypergraph; }
101
103 const double& x(hypernode v) { return m_x[v]; }
104
106 void setX(hypernode v, double pX) { m_x[v] = pX; }
107
109 const double& y(hypernode v) { return m_y[v]; }
110
112 void setY(hypernode v, double pY) { m_y[v] = pY; }
113
115 const double& width(hypernode v) { return m_width[v]; }
116
118 void setWidth(hypernode v, int pWidth) { m_width[v] = pWidth; }
119
121 const double& height(hypernode v) { return m_height[v]; }
122
124 void setHeight(hypernode v, int pHeight) { m_height[v] = pHeight; }
125
127 int shape(hypernode v) { return m_shape[v]; }
128
130 string& label(hypernode v) { return m_label[v]; }
131};
132
146private:
149
152
155
156public:
158 HypergraphAttributesES() : m_repGA(nullptr), m_repG(nullptr) { }
159
162 EdgeStandardType pType = EdgeStandardType::star)
164 m_repG = new EdgeStandardRep(pH, pType);
165
166 m_repGA = new GraphAttributes(m_repG->constGraph(),
167 GraphAttributes::nodeGraphics | GraphAttributes::edgeGraphics);
168
169 m_repGA->directed() = true;
170 }
171
174 delete m_repGA;
175 delete m_repG;
176 }
177
178 EdgeStandardType type() const { return m_type; }
179
180 const Graph& repGraph() const { return m_repG->constGraph(); }
181
182 const GraphAttributes& repGA() const { return *m_repGA; }
183
186
189 if (m_repG->hypernodeMap(v)) {
190 return m_repG->hypernodeMap(v)->type();
191 } else {
192 return HypernodeElement::Type::dummy;
193 }
194 }
195
197 const double& x(node v) { return m_repGA->x(v); }
198
200 void setX(node v, double pX) {
201 if (m_repG->hypernodeMap(v)) {
202 setX(m_repG->hypernodeMap(v), pX);
203 } else {
204 m_repGA->x(v) = pX;
205 }
206 }
207
209 void setX(hypernode v, double pX) {
210 m_x[v] = pX;
211 m_repGA->x(m_repG->nodeMap(v)) = pX;
212 }
213
215 const double& y(node v) { return m_repGA->y(v); }
216
218 void setY(hypernode v, double pY) {
219 m_y[v] = pY;
220 m_repGA->y(m_repG->nodeMap(v)) = pY;
221 }
222
224 void setY(node v, double pY) {
225 if (m_repG->hypernodeMap(v)) {
226 setY(m_repG->hypernodeMap(v), pY);
227 } else {
228 m_repGA->y(v) = pY;
229 }
230 }
231
233 const double& width(node v) { return m_repGA->width(v); }
234
236 void setWidth(hypernode v, double pWidth) {
237 m_width[v] = pWidth;
238 m_repGA->width(m_repG->nodeMap(v)) = pWidth;
239 }
240
242 void setWidth(node v, double pWidth) {
243 if (m_repG->hypernodeMap(v)) {
244 setWidth(m_repG->hypernodeMap(v), pWidth);
245 } else {
246 m_repGA->width(v) = pWidth;
247 }
248 }
249
251 const double& height(node v) { return m_repGA->height(v); }
252
254 void setHeight(hypernode v, double pHeight) {
255 m_height[v] = pHeight;
256 m_repGA->height(m_repG->nodeMap(v)) = pHeight;
257 }
258
260 void setHeight(node v, double pHeight) {
261 if (m_repG->hypernodeMap(v)) {
262 setHeight(m_repG->hypernodeMap(v), pHeight);
263 } else {
264 m_repGA->height(v) = pHeight;
265 }
266 }
267
269 DPolyline& bends(edge e) { return m_repGA->bends(e); }
270
271#if 0
273 void writeSVG(std::ostream &os, int fontSize, const string &fontColor) const
274 {
275 m_repGA->writeSVG(os, fontSize, fontColor);
276 }
277
279 void writeSVG(const char *fileName, int fontSize, const string &fontColor) const
280 {
281 m_repGA->writeSVG(fileName, fontSize, fontColor);
282 }
283#endif
284
285 void clearAllBends() { m_repGA->clearAllBends(); }
286
289
291 const DRect boundingBox() const { return m_repGA->boundingBox(); }
292};
293
294}
A declaration of EdgeStandardRep class representing a graph representation of a hypergraph in the edg...
Includes declaration of graph class.
Declaration of class GraphAttributes which extends a Graph by additional attributes.
Declaration and a partial implementation of a Hypergraph class partly based on the original classes f...
Declaration of classes GenericPoint, GenericPolyline, GenericLine, GenericSegment,...
Basic declarations, included by all source files.
Rectangles with real coordinates.
Definition geometry.h:798
Class for the representation of edges.
Definition Graph_d.h:364
Edge standard representation of hypergraphs.
hypernode hypernodeMap(node v)
Returns the hypernode associated with the node (if any).
node nodeMap(hypernode v)
Returns the node associated with the hypernode.
const Graph & constGraph() const
Returns a reference to the representation graph.
Polylines with PointType points.
Definition geometry.h:261
Stores additional attributes of a graph (like layout information).
void removeUnnecessaryBendsHV()
Removes unnecessary bend points in orthogonal segements.
double y(node v) const
Returns the y-coordinate of node v.
double height(node v) const
Returns the height of the bounding box of node v.
bool directed() const
Returns if the graph is directed.
double x(node v) const
Returns the x-coordinate of node v.
double width(node v) const
Returns the width of the bounding box of node v.
virtual DRect boundingBox() const
Returns the bounding box of the graph.
void clearAllBends()
Removes all edge bends.
const DPolyline & bends(edge e) const
Returns the list of bend points of edge e.
Data type for general directed graphs (adjacency list representation).
Definition Graph_d.h:866
Stores additional attributes of edge standard representation of a hypergraph.
void setHeight(node v, double pHeight)
Sets the the height of a representation node v.
EdgeStandardType m_type
The type of of edge standard representation.
HypernodeElement::Type type(hypernode v)
Returns the type of representation node v.
virtual ~HypergraphAttributesES()
Destructor.
HypergraphAttributesES()
Initializes new instance of class HypergraphAttributes.
void setX(node v, double pX)
Sets the x-coordinate of a representation node v.
void setY(hypernode v, double pY)
Sets the x-coordinate of hypernode v.
const double & x(node v)
Returns the x-coordinate of representation node v.
void setWidth(node v, double pWidth)
Sets the the width of a representation node v.
const double & width(node v)
Returns the width of a representation node v.
const double & height(node v)
Returns the height of a representation node v.
EdgeStandardRep * m_repG
Edge standard representation reference.
HypernodeElement::Type type(node v)
Returns the type of representation node v.
void removeUnnecessaryBendsHV()
Removes unnecessary bend points in orthogonal segements.
void setHeight(hypernode v, double pHeight)
Sets the the height of hypernode v.
GraphAttributes * m_repGA
Wrapped graph attributes reference.
const double & y(node v)
Returns the y-coordinate of a representation node v.
void setWidth(hypernode v, double pWidth)
Sets the the width of hypernode v.
void setY(node v, double pY)
Sets the y-coordinate of a representation node v.
const GraphAttributes & repGA() const
HypergraphAttributesES(const Hypergraph &pH, EdgeStandardType pType=EdgeStandardType::star)
Initializes new instance of class HypergraphAttributes.
EdgeStandardType type() const
DPolyline & bends(edge e)
Returns the list of bend points of edge e.
const DRect boundingBox() const
Returns the bounding box of the hypergraph.
void setX(hypernode v, double pX)
Sets the x-coordinate of hypernode v.
Stores additional attributes of a hypergraph.
const Hypergraph * m_hypergraph
Only points to an existing hypergraph.
void setX(hypernode v, double pX)
Sets the x-coordinate of hypernode v.
void setHeight(hypernode v, int pHeight)
Sets the the height of hypernode v.
void setY(hypernode v, double pY)
Sets the y-coordinate of hypernode v.
HypernodeArray< double > m_x
Coordinate x of a hypernod.e.
const double & width(hypernode v)
Returns the width of the bounding box of hypernode v.
int shape(hypernode v)
Returns the shape of hypernode v.
const Hypergraph & constHypergraph() const
const double & x(hypernode v)
Returns the x-coordinate of hypernode v.
HypergraphAttributes()
Initializes new instance of class HypergraphAttributes.
HypernodeArray< double > m_height
Height of a hypernodes bounding box.
HypernodeArray< string > m_label
Label of a hypernode.
virtual ~HypergraphAttributes()
Destructor.
HypernodeArray< double > m_width
Width of a hypernode bounding box.
const double & height(hypernode v)
Returns the height of the bounding box of hypernode v.
HypernodeArray< double > m_y
Coordinate y of a hypernode.
void setWidth(hypernode v, int pWidth)
Sets the the width of hypernode v.
const double & y(hypernode v)
Returns the y-coordinate of hypernode v.
HypergraphAttributes(const Hypergraph &H)
Initializes new instance of class HypergraphAttributes.
HypernodeArray< int > m_shape
Shape of a hypernode.
string & label(hypernode v)
Returns the label of hypernode v.
RegisteredArray for nodes and edges of a hypergraph.
Definition Hypergraph.h:385
Class for the representation of hypernodes.
Definition Hypergraph.h:228
Type type() const
Returns the type of hypernode.
Definition Hypergraph.h:285
Type
The type of hypernodes.
Definition Hypergraph.h:235
Class for the representation of nodes.
Definition Graph_d.h:241
void init(const Base *base=nullptr)
Reinitializes the array. Associates the array with the matching registry of base.
#define OGDF_EXPORT
Specifies that a function or class is exported by the OGDF dynamic library (shared object / DLL),...
Definition config.h:117
Declaration of basic types for graphics.
The namespace for all OGDF objects.
EdgeStandardType
Enumeration class of possible edge standard representations.