ForceBasedLayoutGenerator.cpp 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. #include "ForceBasedLayoutGenerator.h"
  2. ForceBasedLayoutGenerator::ForceBasedLayoutGenerator()
  3. {
  4. }
  5. void ForceBasedLayoutGenerator::applyForceBasedLayout(SubGraph &gSubgraph)
  6. {
  7. // default method works
  8. // try{
  9. // typedef square_topology<> Topology;
  10. // boost::minstd_rand gen;
  11. // Topology topology(gen,1000.0);
  12. // Topology::point_type origin;
  13. // origin[0] = origin[1] = 100.0;
  14. // Topology::point_difference_type extent;
  15. // extent[0] = extent[1] = 100.0;
  16. // fruchterman_reingold_force_directed_layout
  17. // (gSubgraph,
  18. // get(vertex_position, gSubgraph),
  19. // topology,
  20. // attractive_force(square_distance_attractive_force()).
  21. // cooling(linear_cooling<double>(100)));
  22. // //cout<<"Force Based Layout Applied"<<endl;
  23. // }
  24. // catch(boost::exception& eBoostException)
  25. // {
  26. // //throw *boost::get_error_info<errmsg_info>(eBoostException);
  27. // //cout<<"Exception in FBL"<<endl;
  28. // }
  29. // // for every subgraph apply force based layout
  30. // ChildrenIterator iterSubgraph, iterSubgraphEnd;
  31. // for(boost::tie(iterSubgraph,iterSubgraphEnd) = gSubgraph.children();
  32. // iterSubgraph != iterSubgraphEnd;
  33. // iterSubgraph++)
  34. // {
  35. // typedef square_topology<> Topology;
  36. // boost::minstd_rand gen;
  37. // Topology topology(gen,100.0);
  38. // Topology::point_type origin;
  39. // origin[0] = origin[1] = 100.0;
  40. // Topology::point_difference_type extent;
  41. // extent[0] = extent[1] = 100.0;
  42. // fruchterman_reingold_force_directed_layout
  43. // (*iterSubgraph,
  44. // get(vertex_position, *iterSubgraph),
  45. // topology,
  46. // attractive_force(square_distance_attractive_force()).
  47. // cooling(linear_cooling<double>(100)));
  48. // //cout<<"Force Based Layout Applied"<<endl;
  49. // }
  50. // VertexIterator itrVertex, itrVertexEnd;
  51. // for(boost::tie(itrVertex, itrVertexEnd) = vertices(*iterSubgraph);
  52. // itrVertex != itrVertexEnd;
  53. // itrVertex++)
  54. // {
  55. // int iCoordX = (int)get(vertex_position, *iterSubgraph)[*itrVertex][0];
  56. // int iCoordY = (int)get(vertex_position, *iterSubgraph)[*itrVertex][0];
  57. // //cout<<"Force Based Coordinates : "<<iCoordX<<" "<<iCoordY<<endl;
  58. // VertexDescriptor vVertex = *itrVertex;
  59. // m_boostGraphWrapper.setVertexCenterCoordX(vVertex, *iterSubgraph, iCoordX);
  60. // m_boostGraphWrapper.setVertexCenterCoordY(vVertex, *iterSubgraph, iCoordY);
  61. // }
  62. // New force algo check
  63. /* typedef square_topology<> Topology;
  64. boost::minstd_rand gen;
  65. Topology topology(gen,100.0);
  66. Topology::point_type origin;
  67. origin[0] = origin[1] = 100.0;
  68. Topology::point_difference_type extent;
  69. extent[0] = extent[1] = 100.0;
  70. std::vector<Topology::point_difference_type> displacements(num_vertices(gSubgraph));
  71. fruchterman_reingold_force_directed_layout
  72. (gSubgraph,
  73. get(vertex_position, gSubgraph),
  74. topology,
  75. attractive_force(square_distance_attractive_force()).
  76. cooling(linear_cooling<double>(100))); */
  77. // wORKS FROM HERE
  78. try{
  79. typedef square_topology<> Topology;
  80. boost::minstd_rand gen;
  81. Topology topology(gen,1000.0);
  82. Topology::point_type origin;
  83. origin[0] = origin[1] = 100.0;
  84. Topology::point_difference_type extent;
  85. extent[0] = extent[1] = 100.0;
  86. fruchterman_reingold_force_directed_layout
  87. (gSubgraph,
  88. get(vertex_position, gSubgraph),
  89. topology,
  90. attractive_force(square_distance_attractive_force()).
  91. cooling(linear_cooling<double>(200)));
  92. cout<<"Force Based Layout Applied"<<endl;
  93. }
  94. catch(boost::exception& eBoostException)
  95. {
  96. //throw *boost::get_error_info<errmsg_info>(eBoostException);
  97. cout<<"Exception in FBL"<<endl;
  98. }
  99. VertexIterator itrVertex, itrVertexEnd;
  100. for(boost::tie(itrVertex, itrVertexEnd) = vertices(gSubgraph);
  101. itrVertex != itrVertexEnd;
  102. itrVertex++)
  103. {
  104. int iCoordX = (int)get(vertex_position, gSubgraph)[*itrVertex][0];
  105. int iCoordY = (int)get(vertex_position, gSubgraph)[*itrVertex][1];
  106. cout<<"\nForce Based Coordinates : "<<iCoordX<<" "<<iCoordY<<endl;
  107. VertexDescriptor vVertex = *itrVertex;
  108. m_boostGraphWrapper.setVertexCenterCoordX(vVertex, gSubgraph, iCoordX);
  109. m_boostGraphWrapper.setVertexCenterCoordY(vVertex, gSubgraph, iCoordY);
  110. }
  111. }