Open
Graph Drawing
Framework

 v.2012.05
 

MultilevelBuilder.h
Go to the documentation of this file.
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