Represents a constraint graph used for compaction. More...
#include <ogdf/orthogonal/CompactionConstraintGraph.h>
Classes | |
struct | Interval |
Represents an interval on the sweep line. More... | |
class | SegmentComparer |
Comparer class used for sorting segments by increasing position (given by segPos) such that two overlapping segments come in the order imposed by the embedding (given by secSort: segment which comes first has secSort = 0, the other has 1) More... | |
Public Member Functions | |
CompactionConstraintGraph (const OrthoRep &OR, const PlanRep &PG, OrthoDir arcDir, ATYPE sep, int costGen=1, int costAssoc=1, bool align=false) | |
Construction. | |
bool | areMulti (edge e1, edge e2) const |
Return PG result for flowcompaction. | |
bool | centerPriority () |
Gets centerPriority (center single edges?) | |
void | centerPriority (bool b) |
Sets centerPriority (center single edges?) | |
ATYPE | computeTotalCosts (const NodeArray< ATYPE > &pos) const |
Computes the total costs for coordintes given by pos, i.e., the sum of the weighted lengths of edges in the constraint graph. | |
ATYPE | extraOfs (node v) const |
Returns extraNode position, change to save mem, only need some entries. | |
void | insertVertexSizeArcs (const PlanRep &PG, const NodeArray< ATYPE > &sizeOrig, const MinimumEdgeDistances< ATYPE > &minDist) |
Inserts arcs for respecting sizes of vertices and achieving desired placement of generalizations if vertices are represented by tight cages. Also corrects length of arcs belonging to cages which are adjacent to a corner; takes special distances between edge segments attached at a vertex (delta's and epsilon's) into account. | |
void | insertVertexSizeArcs (const PlanRep &PG, const NodeArray< ATYPE > &sizeOrig, const RoutingChannel< ATYPE > &rc) |
Inserts arcs for respecting sizes of vertices and achieving desired placement of generalizations if vertices are represented by variable cages; also corrects length of arcs belonging to cages which are adjacent to a corner; takes routing channels into account. | |
void | insertVisibilityArcs (const PlanRep &PG, const NodeArray< ATYPE > &posDir, const NodeArray< ATYPE > &posOppDir) |
Inserts arcs connecting segments which can see each other in a drawing of the associated planarized representation PG which is given by posDir and posOppDir. | |
void | insertVisibilityArcs (const PlanRep &PG, const NodeArray< ATYPE > &posDir, const NodeArray< ATYPE > &posOrthDir, const MinimumEdgeDistances< ATYPE > &minDist) |
bool | isFeasible (const NodeArray< ATYPE > &pos) |
Performs feasibility test for position assignment pos, i.e., checks if the segment positions given by pos fulfill the constraints in the compaction constraint graph (for debuging only) | |
ATYPE | length (edge e) const |
Returns length of edge e . | |
ATYPE | separation () const |
Returns the separation value. | |
void | setMinimumSeparation (const PlanRep &PG, const NodeArray< int > &coord, const MinimumEdgeDistances< ATYPE > &minDist) |
Sets min separation for multi edge original. | |
![]() | |
void | align (bool b) |
Triggers alignment (=>some special edge handling to support al.) | |
bool | alignmentArc (edge e) const |
Returns if arc is important for alignment. These are the arcs representing node to gen. merger edges. | |
edge | pathToOriginal (node v) |
bool | verticalGen (edge e) const |
Returns true if e is vertical edge in PlanRepUML hierarchy. | |
bool | verticalArc (edge e) const |
Returns true if e is basic arc of vertical edge in PlanRepUML hierarchy. | |
![]() | |
edge | basicArc (edge e) const |
Returns constraint arc representing input edge e in constraint graph. | |
void | computeTopologicalSegmentNum (NodeArray< int > &topNum) |
Computes topological numbering on the segments of the constraint graph. | |
void | embed () |
Embeds constraint graph such that all sources and sinks lie in a common face. | |
bool | extraNode (node v) const |
Returns node status. | |
void | removeRedundantVisibArcs (SListPure< Tuple2< node, node > > &visibArcs) |
Removes "arcs" from visibArcs which we already have in the constraint graph (as basic arcs) | |
ConstraintEdgeType | typeOf (edge e) const |
Returns type of edge e . | |
const Graph & | getGraph () const |
Returns underlying graph. | |
Graph & | getGraph () |
const OrthoRep & | getOrthoRep () const |
Returns underlying OrthoRep. | |
const PlanRep & | getPlanRep () const |
const SListPure< node > & | nodesIn (node v) const |
Returns list of nodes contained in segment v . | |
node | pathNodeOf (node v) const |
Returns the segment (path node in constraint graph) containing v . | |
int | cost (edge e) const |
Returns cost of edge e . | |
node | extraRep (node v) const |
Returns extraNode existing anchor representant. | |
bool | onBorder (edge e) const |
Returns true if edge lies on cage border. | |
bool | fixOnBorder (edge e) const |
Returns true if edge is subject to length fixation if length < sep. | |
Protected Member Functions | |
void | initializeCosts () |
void | setExtra (node v, node rep, ATYPE ofs) |
Node v has no representation in drawing, only internal representation. | |
![]() | |
CompactionConstraintGraphBase (const OrthoRep &OR, const PlanRep &PG, OrthoDir arcDir, int costGen=1, int costAssoc=1, bool align=false) | |
Construction. | |
![]() | |
CommonCompactionConstraintGraphBase (const OrthoRep &OR, const PlanRep &PG, OrthoDir arcDir, int costAssoc) | |
Build constraint graph with basic arcs. | |
![]() | |
void | assign (const Graph &G, NodeArray< node > &mapNode, EdgeArray< edge > &mapEdge) |
void | construct (const Graph &G, NodeArray< node > &mapNode, EdgeArray< edge > &mapEdge) |
void | constructInitByActiveNodes (const List< node > &nodeList, const NodeArray< bool > &activeNodes, NodeArray< node > &mapNode, EdgeArray< edge > &mapEdge) |
void | constructInitByCC (const CCsInfo &info, int cc, NodeArray< node > &mapNode, EdgeArray< edge > &mapEdge) |
Constructs a copy of connected component cc in info . | |
void | constructInitByNodes (const Graph &G, const List< node > &nodeList, NodeArray< node > &mapNode, EdgeArray< edge > &mapEdge) |
Constructs a copy of the subgraph of G induced by nodeList . | |
Graph () | |
Constructs an empty graph. | |
Graph (const Graph &G) | |
Constructs a graph that is a copy of G . | |
virtual | ~Graph () |
Destructor. | |
bool | empty () const |
Returns true iff the graph is empty, i.e., contains no nodes. | |
int | numberOfNodes () const |
Returns the number of nodes in the graph. | |
int | numberOfEdges () const |
Returns the number of edges in the graph. | |
int | maxNodeIndex () const |
Returns the largest used node index. | |
int | maxEdgeIndex () const |
Returns the largest used edge index. | |
int | maxAdjEntryIndex () const |
Returns the largest used adjEntry index. | |
int | nodeArrayTableSize () const |
Returns the table size of node arrays associated with this graph. | |
int | edgeArrayTableSize () const |
Returns the table size of edge arrays associated with this graph. | |
int | adjEntryArrayTableSize () const |
Returns the table size of adjEntry arrays associated with this graph. | |
node | firstNode () const |
Returns the first node in the list of all nodes. | |
node | lastNode () const |
Returns the last node in the list of all nodes. | |
edge | firstEdge () const |
Returns the first edge in the list of all edges. | |
edge | lastEdge () const |
Returns the last edge in the list of all edges. | |
node | chooseNode (std::function< bool(node)> includeNode=[](node) { return true;}, bool isFastTest=true) const |
Returns a random node. | |
edge | chooseEdge (std::function< bool(edge)> includeEdge=[](edge) { return true;}, bool isFastTest=true) const |
Returns a random edge. | |
template<class CONTAINER > | |
void | allNodes (CONTAINER &nodeContainer) const |
Returns a container with all nodes of the graph. | |
template<class CONTAINER > | |
void | allEdges (CONTAINER &edgeContainer) const |
Returns a container with all edges of the graph. | |
node | newNode () |
Creates a new node and returns it. | |
node | newNode (int index) |
Creates a new node with predefined index and returns it. | |
edge | newEdge (node v, node w) |
Creates a new edge (v ,w ) and returns it. | |
edge | newEdge (node v, node w, int index) |
Creates a new edge (v ,w ) with predefined index and returns it. | |
edge | newEdge (adjEntry adjSrc, adjEntry adjTgt, Direction dir=Direction::after) |
Creates a new edge at predefined positions in the adjacency lists. | |
edge | newEdge (node v, adjEntry adjTgt) |
Creates a new edge at predefined positions in the adjacency lists. | |
edge | newEdge (adjEntry adjSrc, node w) |
Creates a new edge at predefined positions in the adjacency lists. | |
virtual void | delNode (node v) |
Removes node v and all incident edges from the graph. | |
virtual void | delEdge (edge e) |
Removes edge e from the graph. | |
virtual void | clear () |
Removes all nodes and all edges from the graph. | |
void | insert (const Graph &G, NodeArray< node > &nodeMap) |
Inserts Graph G as a subgraph into this Graph. | |
void | insert (const Graph &G) |
Inserts Graph G as a subgraph into this Graph. | |
virtual edge | split (edge e) |
Splits edge e into two edges introducing a new node. | |
void | unsplit (node u) |
Undoes a split operation. | |
virtual void | unsplit (edge eIn, edge eOut) |
Undoes a split operation. | |
node | splitNode (adjEntry adjStartLeft, adjEntry adjStartRight) |
Splits a node while preserving the order of adjacency entries. | |
node | contract (edge e, bool keepSelfLoops=false) |
Contracts edge e while preserving the order of adjacency entries. | |
void | move (edge e, adjEntry adjSrc, Direction dirSrc, adjEntry adjTgt, Direction dirTgt) |
Moves edge e to a different adjacency list. | |
void | moveTarget (edge e, node w) |
Moves the target node of edge e to node w . | |
void | moveTarget (edge e, adjEntry adjTgt, Direction dir) |
Moves the target node of edge e to a specific position in an adjacency list. | |
void | moveSource (edge e, node w) |
Moves the source node of edge e to node w . | |
void | moveSource (edge e, adjEntry adjSrc, Direction dir) |
Moves the source node of edge e to a specific position in an adjacency list. | |
edge | searchEdge (node v, node w, bool directed=false) const |
Searches and returns an edge connecting nodes v and w in time O( min(deg(v ), deg(w ))). | |
void | reverseEdge (edge e) |
Reverses the edge e , i.e., exchanges source and target node. | |
void | reverseAllEdges () |
Reverses all edges in the graph. | |
template<class NODELIST > | |
void | collapse (NODELIST &nodesToCollapse) |
Collapses all nodes in the list nodesToCollapse to the first node in the list. | |
template<class ADJ_ENTRY_LIST > | |
void | sort (node v, const ADJ_ENTRY_LIST &newOrder) |
Sorts the adjacency list of node v according to newOrder . | |
void | reverseAdjEdges (node v) |
Reverses the adjacency list of v . | |
void | moveAdj (adjEntry adjMove, Direction dir, adjEntry adjPos) |
Moves adjacency entry adjMove before or after adjPos . | |
void | moveAdjAfter (adjEntry adjMove, adjEntry adjAfter) |
Moves adjacency entry adjMove after adjAfter . | |
void | moveAdjBefore (adjEntry adjMove, adjEntry adjBefore) |
Moves adjacency entry adjMove before adjBefore . | |
void | reverseAdjEdges () |
Reverses all adjacency lists. | |
void | swapAdjEdges (adjEntry adj1, adjEntry adj2) |
Exchanges two entries in an adjacency list. | |
int | genus () const |
Returns the genus of the graph's embedding. | |
bool | representsCombEmbedding () const |
Returns true iff the graph represents a combinatorial embedding. | |
ListIterator< NodeArrayBase * > | registerArray (NodeArrayBase *pNodeArray) const |
Registers a node array. | |
ListIterator< EdgeArrayBase * > | registerArray (EdgeArrayBase *pEdgeArray) const |
Registers an edge array. | |
ListIterator< AdjEntryArrayBase * > | registerArray (AdjEntryArrayBase *pAdjArray) const |
Registers an adjEntry array. | |
ListIterator< GraphObserver * > | registerStructure (GraphObserver *pStructure) const |
Registers a graph observer (e.g. a ClusterGraph). | |
void | unregisterArray (ListIterator< NodeArrayBase * > it) const |
Unregisters a node array. | |
void | unregisterArray (ListIterator< EdgeArrayBase * > it) const |
Unregisters an edge array. | |
void | unregisterArray (ListIterator< AdjEntryArrayBase * > it) const |
Unregisters an adjEntry array. | |
void | unregisterStructure (ListIterator< GraphObserver * > it) const |
Unregisters a graph observer. | |
template<class ArrayBase > | |
void | moveRegisterArray (ListIterator< ArrayBase * > it, ArrayBase *pArray) const |
Move the registration it of an graph element array to pArray (used with move semantics for graph element arrays). | |
void | resetEdgeIdCount (int maxId) |
Resets the edge id count to maxId . | |
Graph & | operator= (const Graph &G) |
Assignment operator. | |
Private Member Functions | |
bool | checkSweepLine (const List< Interval > &sweepLine) const |
virtual string | getLengthString (edge e) const override |
void | resetGenMergerLengths (const PlanRep &PG, adjEntry adjFirst) |
void | setBasicArcsZeroLength (const PlanRep &PG) |
void | setBoundaryCosts (adjEntry cornerDir, adjEntry cornerOppDir) |
Private Attributes | |
NodeArray< ATYPE > | m_extraOfs |
offset of extra node to its rep, should change this | |
EdgeArray< ATYPE > | m_length |
length of an edge | |
ATYPE | m_sep |
Cost settings | |
int | m_vertexArcCost |
get small cages | |
int | m_bungeeCost |
middle position distance penalty | |
int | m_MedianArcCost |
draw merger gen at median of incoming generalizations | |
int | m_doubleBendCost |
try to minimize double bends | |
bool | m_genToMedian |
draw outgoing generalization from merger above ingoing gen. | |
bool | m_centerPriority |
should centering be more expensive than generalizations | |
static const int | c_vertexArcFactor = 20 |
static const int | c_bungeeFactor = 20 |
static const int | c_doubleBendFactor |
double bends cost factor*vertexArcCost | |
static const int | c_MedianFactor = 10 * c_doubleBendFactor |
median arcs cost factor*vertexArcCost | |
Additional Inherited Members | |
![]() | |
enum class | EdgeType { association = 0 , generalization = 1 , dependency = 2 } |
The type of edges (only used in derived classes). More... | |
enum class | NodeType { vertex = 0 , dummy = 1 , generalizationMerger = 2 , generalizationExpander = 3 , highDegreeExpander = 4 , lowDegreeExpander = 5 , associationClass = 6 } |
The type of nodes. More... | |
using | node_iterator = internal::GraphIterator< node > |
Provides a bidirectional iterator to a node in a graph. | |
using | edge_iterator = internal::GraphIterator< edge > |
Provides a bidirectional iterator to an edge in a graph. | |
using | adjEntry_iterator = internal::GraphIterator< adjEntry > |
Provides a bidirectional iterator to an entry in an adjacency list. | |
![]() | |
EdgeArray< bool > | m_alignmentArc |
Basic arcs that have to be short for alignment (node to gen expander) | |
int | m_edgeCost [2] |
NodeArray< edge > | m_pathToEdge |
save the (single!) edge (segment) for a pathNode | |
EdgeArray< bool > | m_verticalArc |
arc corresponding to such an edge | |
EdgeArray< bool > | m_verticalGen |
generalization that runs vertical relative to hierarchy | |
![]() | |
OrthoDir | m_arcDir |
EdgeArray< int > | m_border |
only used for cage precompaction in flowcompaction computecoords | |
EdgeArray< int > | m_cost |
cost of an edge | |
EdgeArray< edge > | m_edgeToBasicArc |
basic arc representing an edge in PG | |
NodeArray< bool > | m_extraNode |
Node does not represent drawing node as we dont have positions we save a drawing representant and an offset. | |
NodeArray< node > | m_extraRep |
existing representant of extranodes position anchor | |
OrthoDir | m_oppArcDir |
NodeArray< edge > | m_originalEdge |
save edge for the basic arcs | |
NodeArray< SListPure< node > > | m_path |
list of nodes contained in a segment | |
NodeArray< node > | m_pathNode |
segment containing a node in PG | |
const OrthoRep * | m_pOR |
const PlanRep * | m_pPR |
SList< node > | m_sinks |
SList< node > | m_sources |
EdgeArray< ConstraintEdgeType > | m_type |
constraint type for each edge | |
![]() | |
internal::GraphObjectContainer< NodeElement > | nodes |
The container containing all node objects. | |
internal::GraphObjectContainer< EdgeElement > | edges |
The container containing all edge objects. | |
Represents a constraint graph used for compaction.
Each edge has a (minimum) length and cost.
Definition at line 106 of file CompactionConstraintGraph.h.
|
inline |
Construction.
Definition at line 109 of file CompactionConstraintGraph.h.
bool ogdf::CompactionConstraintGraph< ATYPE >::areMulti | ( | edge | e1, |
edge | e2 | ||
) | const |
Return PG result for flowcompaction.
|
inline |
Gets centerPriority (center single edges?)
Definition at line 134 of file CompactionConstraintGraph.h.
|
inline |
Sets centerPriority (center single edges?)
Definition at line 137 of file CompactionConstraintGraph.h.
|
private |
Definition at line 848 of file CompactionConstraintGraph.h.
ATYPE ogdf::CompactionConstraintGraph< ATYPE >::computeTotalCosts | ( | const NodeArray< ATYPE > & | pos | ) | const |
Computes the total costs for coordintes given by pos, i.e., the sum of the weighted lengths of edges in the constraint graph.
Definition at line 834 of file CompactionConstraintGraph.h.
|
inline |
Returns extraNode position, change to save mem, only need some entries.
Definition at line 131 of file CompactionConstraintGraph.h.
|
inlineoverrideprivatevirtual |
Implements ogdf::CommonCompactionConstraintGraphBase.
Definition at line 233 of file CompactionConstraintGraph.h.
|
inlineprotected |
Definition at line 278 of file CompactionConstraintGraph.h.
void ogdf::CompactionConstraintGraph< ATYPE >::insertVertexSizeArcs | ( | const PlanRep & | PG, |
const NodeArray< ATYPE > & | sizeOrig, | ||
const MinimumEdgeDistances< ATYPE > & | minDist | ||
) |
Inserts arcs for respecting sizes of vertices and achieving desired placement of generalizations if vertices are represented by tight cages. Also corrects length of arcs belonging to cages which are adjacent to a corner; takes special distances between edge segments attached at a vertex (delta's and epsilon's) into account.
Definition at line 547 of file CompactionConstraintGraph.h.
void ogdf::CompactionConstraintGraph< ATYPE >::insertVertexSizeArcs | ( | const PlanRep & | PG, |
const NodeArray< ATYPE > & | sizeOrig, | ||
const RoutingChannel< ATYPE > & | rc | ||
) |
Inserts arcs for respecting sizes of vertices and achieving desired placement of generalizations if vertices are represented by variable cages; also corrects length of arcs belonging to cages which are adjacent to a corner; takes routing channels into account.
Definition at line 414 of file CompactionConstraintGraph.h.
void ogdf::CompactionConstraintGraph< ATYPE >::insertVisibilityArcs | ( | const PlanRep & | PG, |
const NodeArray< ATYPE > & | posDir, | ||
const NodeArray< ATYPE > & | posOppDir | ||
) |
Inserts arcs connecting segments which can see each other in a drawing of the associated planarized representation PG which is given by posDir and posOppDir.
PG | associated planarized representation |
posDir | position of segment containing vertex in PG |
posOppDir | position of orthogonal segment containing vertex in PG |
Definition at line 875 of file CompactionConstraintGraph.h.
void ogdf::CompactionConstraintGraph< ATYPE >::insertVisibilityArcs | ( | const PlanRep & | PG, |
const NodeArray< ATYPE > & | posDir, | ||
const NodeArray< ATYPE > & | posOrthDir, | ||
const MinimumEdgeDistances< ATYPE > & | minDist | ||
) |
Definition at line 899 of file CompactionConstraintGraph.h.
Performs feasibility test for position assignment pos, i.e., checks if the segment positions given by pos fulfill the constraints in the compaction constraint graph (for debuging only)
Definition at line 1342 of file CompactionConstraintGraph.h.
|
inline |
Returns length of edge e
.
e
is an edge in the constraint graph Definition at line 128 of file CompactionConstraintGraph.h.
|
private |
Definition at line 312 of file CompactionConstraintGraph.h.
|
inline |
Returns the separation value.
Definition at line 180 of file CompactionConstraintGraph.h.
|
private |
Definition at line 521 of file CompactionConstraintGraph.h.
|
private |
Definition at line 380 of file CompactionConstraintGraph.h.
|
inlineprotected |
Node v
has no representation in drawing, only internal representation.
Definition at line 272 of file CompactionConstraintGraph.h.
void ogdf::CompactionConstraintGraph< ATYPE >::setMinimumSeparation | ( | const PlanRep & | PG, |
const NodeArray< int > & | coord, | ||
const MinimumEdgeDistances< ATYPE > & | minDist | ||
) |
Sets min separation for multi edge original.
|
staticprivate |
Definition at line 264 of file CompactionConstraintGraph.h.
|
staticprivate |
double bends cost factor*vertexArcCost
Definition at line 265 of file CompactionConstraintGraph.h.
|
staticprivate |
median arcs cost factor*vertexArcCost
Definition at line 266 of file CompactionConstraintGraph.h.
|
staticprivate |
Definition at line 263 of file CompactionConstraintGraph.h.
|
private |
middle position distance penalty
Definition at line 254 of file CompactionConstraintGraph.h.
|
private |
should centering be more expensive than generalizations
Definition at line 260 of file CompactionConstraintGraph.h.
|
private |
try to minimize double bends
Definition at line 256 of file CompactionConstraintGraph.h.
|
private |
offset of extra node to its rep, should change this
Definition at line 245 of file CompactionConstraintGraph.h.
|
private |
draw outgoing generalization from merger above ingoing gen.
Definition at line 257 of file CompactionConstraintGraph.h.
length of an edge
Definition at line 243 of file CompactionConstraintGraph.h.
|
private |
draw merger gen at median of incoming generalizations
Definition at line 255 of file CompactionConstraintGraph.h.
|
private |
Definition at line 241 of file CompactionConstraintGraph.h.
|
private |
get small cages
Definition at line 253 of file CompactionConstraintGraph.h.