Go to the documentation of this file.00001
00002
00003
00004
00005
00006
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;
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 }
00091
00092 #endif