Open
Graph Drawing
Framework

 v.2012.05
 

SolarMerger.h
Go to the documentation of this file.
00001 /*
00002  * $Revision: 2306 $
00003  *
00004  * last checkin:
00005  *   $Author: gutwenger $
00006  *   $Date: 2012-05-08 11:32:55 +0200 (Tue, 08 May 2012) $
00007  ***************************************************************/
00008 
00042 #include <ogdf/energybased/multilevelmixer/MultilevelBuilder.h>
00043 
00044 #ifdef _MSC_VER
00045 #pragma once
00046 #endif
00047 
00048 #ifndef OGDF_SOLAR_MERGER_H
00049 #define OGDF_SOLAR_MERGER_H
00050 
00051 namespace ogdf {
00052 
00053 struct PathData {
00054     PathData(int targetSun = 0, double length = 0.0f, int number = 0)
00055         :targetSun(targetSun), length(length), number(number)
00056     {};
00057     int targetSun;
00058     double length;
00059     int number;
00060 };
00061 
00062 class OGDF_EXPORT SolarMerger : public MultilevelBuilder
00063 {
00064 private:
00065     bool m_sunSelectionSimple;
00066     bool m_massAsNodeRadius;
00067     NodeArray<unsigned int> m_mass;
00068     NodeArray<double> m_radius;
00069     NodeArray<int> m_celestial; // 0 = unknown, 1 = sun, 2 = planet, 3 = moon
00070     NodeArray<node> m_orbitalCenter;
00071     NodeArray<double> m_distanceToOrbit;
00072     NodeArray< std::vector<PathData> > m_pathDistances;
00073     std::map< int, std::map<int, PathData> > m_interSystemPaths;
00074 
00075     node sunOf(node object);
00076     double distanceToSun(node object, MultilevelGraph &MLG);
00077     void addPath(node sourceSun, node targetSun, double distance);
00078     void findInterSystemPaths(Graph &G, MultilevelGraph &MLG);
00079     int calcSystemMass(node v);
00080     bool collapsSolarSystem(MultilevelGraph &MLG, node sun, int level);
00081     bool buildOneLevel(MultilevelGraph &MLG);
00082     std::vector<node> selectSuns(MultilevelGraph &MLG);
00083 
00084 public:
00085     SolarMerger(bool simple = false, bool massAsNodeRadius = false);
00086 
00087     void buildAllLevels(MultilevelGraph &MLG);
00088 };
00089 
00090 } // namespace ogdf
00091 
00092 #endif