Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00049 #ifdef _MSC_VER
00050 #pragma once
00051 #endif
00052
00053
00054 #ifndef OGDF_SIMPLE_INC_NODE_INSERTER_H
00055 #define OGDF_SIMPLE_INC_NODE_INSERTER_H
00056
00057
00058 #include <ogdf/planarity/PlanRepInc.h>
00059 #include <ogdf/basic/UMLGraph.h>
00060 #include <ogdf/basic/GraphAttributes.h>
00061 #include <ogdf/basic/GraphObserver.h>
00062 #include <ogdf/basic/IncNodeInserter.h>
00063
00064 namespace ogdf {
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074 class OGDF_EXPORT SimpleIncNodeInserter : public IncNodeInserter
00075 {
00076 public:
00077
00078 SimpleIncNodeInserter(PlanRepInc &PG);
00079 virtual ~SimpleIncNodeInserter();
00080
00081
00082 void insertCopyNode(node v, CombinatorialEmbedding &E,
00083 Graph::NodeType vTyp);
00084
00085
00086 void insertCopyNode(node v, Graph::NodeType vTyp);
00087
00088 protected:
00089
00090
00091
00092 face getInsertionFace(node v, CombinatorialEmbedding &E);
00093
00094
00095
00096 void constructDual(const Graph &G, const CombinatorialEmbedding &E,
00097 bool forbidCrossings = true);
00098
00099 void insertFaceEdges(node v, node vCopy, face f, CombinatorialEmbedding &E,
00100 adjEntry &adExternal);
00101 void insertCrossingEdges(node v, node vCopy, CombinatorialEmbedding &E, adjEntry &adExternal);
00102 void findShortestPath(const CombinatorialEmbedding &E, node s,
00103 node t, Graph::EdgeType eType, SList<adjEntry> &crossed);
00104 void insertEdge(CombinatorialEmbedding &E, edge eOrig,
00105 const SList<adjEntry> &crossed, bool forbidCrossingGens);
00106
00107 private:
00108
00109 Graph m_dual;
00110 FaceArray<node> m_nodeOf;
00111
00112 NodeArray<bool> m_insertFaceNode;
00113 NodeArray<bool> m_vAdjNodes;
00114 NodeArray< List<edge>* > m_incidentEdges;
00115
00116 EdgeArray<adjEntry> m_primalAdj;
00117 EdgeArray<bool> m_primalIsGen;
00118
00119 bool m_forbidCrossings;
00120 node m_vS;
00121 node m_vT;
00122
00123 };
00124
00125 }
00126
00127 #endif