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 00042 #ifdef _MSC_VER 00043 #pragma once 00044 #endif 00045 00046 #ifndef OGDF_MULTILEVEL_BUILDER_H 00047 #define OGDF_MULTILEVEL_BUILDER_H 00048 00049 #include <ogdf/basic/Graph.h> 00050 #include <ogdf/internal/energybased/MultilevelGraph.h> 00051 00052 namespace ogdf { 00053 00054 class OGDF_EXPORT MultilevelBuilder 00055 { 00056 private: 00067 virtual bool buildOneLevel(MultilevelGraph &MLG) = 0; 00068 00069 protected: 00070 // if set to true the length of the edge between two merged nodes will be added to 00071 // all edges that are moved to the other node in this merge. 00072 int m_adjustEdgeLengths; 00073 int m_numLevels; 00074 00075 public: 00076 virtual ~MultilevelBuilder() {}; 00077 MultilevelBuilder():m_adjustEdgeLengths(0),m_numLevels(1) {}; 00078 00079 virtual void buildAllLevels(MultilevelGraph &MLG) 00080 { 00081 m_numLevels = 1; 00082 MLG.updateReverseIndizes(); 00083 MLG.updateMergeWeights(); 00084 while (buildOneLevel(MLG)) 00085 { 00086 m_numLevels++; 00087 } 00088 MLG.updateReverseIndizes(); 00089 }; 00090 void setEdgeLengthAdjustment(int factor) {m_adjustEdgeLengths = factor;}; 00091 int getNumLevels() {return m_numLevels;} 00092 00093 }; 00094 00095 } // namespace ogdf 00096 00097 #endif