00001 /* 00002 * $Revision: 2299 $ 00003 * 00004 * last checkin: 00005 * $Author: gutwenger $ 00006 * $Date: 2012-05-07 15:57:08 +0200 (Mon, 07 May 2012) $ 00007 ***************************************************************/ 00008 00049 #ifdef _MSC_VER 00050 #pragma once 00051 #endif 00052 00053 #ifndef OGDF_EMBEDDER_MAX_FACE_LAYERS_H 00054 #define OGDF_EMBEDDER_MAX_FACE_LAYERS_H 00055 00056 #include <ogdf/module/EmbedderModule.h> 00057 #include <ogdf/decomposition/BCTree.h> 00058 #include <ogdf/decomposition/StaticSPQRTree.h> 00059 00060 namespace ogdf { 00061 00063 class OGDF_EXPORT EmbedderMaxFaceLayers : public EmbedderModule 00064 { 00065 public: 00066 //constructor and destructor 00067 EmbedderMaxFaceLayers() { } 00068 ~EmbedderMaxFaceLayers() { } 00069 00075 void call(PlanRep& PG, adjEntry& adjExternal); 00076 00077 private: 00084 void computeBlockGraphs(const node& bT, const node& cH); 00085 00093 int constraintMaxFace(const node& bT, const node& cH); 00094 00103 void maximumFaceRec(const node& bT, node& bT_opt, int& ell_opt); 00104 00111 void embedBlock(const node& bT); 00112 00123 void embedBlock(const node& bT, const node& cT, ListIterator<adjEntry>& after); 00124 00125 private: 00127 BCTree* pBCTree; 00128 00130 adjEntry* pAdjExternal; 00131 00133 NodeArray<Graph> blockG; 00134 00136 NodeArray< NodeArray<node> > nH_to_nBlockEmbedding; 00137 00139 NodeArray< EdgeArray<edge> > eH_to_eBlockEmbedding; 00140 00142 NodeArray< NodeArray<node> > nBlockEmbedding_to_nH; 00143 00145 NodeArray< EdgeArray<edge> > eBlockEmbedding_to_eH; 00146 00148 NodeArray< NodeArray<int> > nodeLength; 00149 00151 NodeArray< NodeArray<int> > cstrLength; 00152 00154 NodeArray< List<adjEntry> > newOrder; 00155 00158 NodeArray<bool> treeNodeTreated; 00159 00161 NodeArray<StaticSPQRTree*> spqrTrees; 00162 }; 00163 00164 } // end namespace ogdf 00165 00166 #endif