123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 |
- #include "ForceBasedLayoutGenerator.h"
- ForceBasedLayoutGenerator::ForceBasedLayoutGenerator()
- {
- }
- void ForceBasedLayoutGenerator::applyForceBasedLayout(SubGraph &gSubgraph)
- {
- // default method works
- // try{
- // typedef square_topology<> Topology;
- // boost::minstd_rand gen;
- // Topology topology(gen,1000.0);
- // Topology::point_type origin;
- // origin[0] = origin[1] = 100.0;
- // Topology::point_difference_type extent;
- // extent[0] = extent[1] = 100.0;
- // fruchterman_reingold_force_directed_layout
- // (gSubgraph,
- // get(vertex_position, gSubgraph),
- // topology,
- // attractive_force(square_distance_attractive_force()).
- // cooling(linear_cooling<double>(100)));
- // //cout<<"Force Based Layout Applied"<<endl;
- // }
- // catch(boost::exception& eBoostException)
- // {
- // //throw *boost::get_error_info<errmsg_info>(eBoostException);
- // //cout<<"Exception in FBL"<<endl;
- // }
- // // for every subgraph apply force based layout
- // ChildrenIterator iterSubgraph, iterSubgraphEnd;
- // for(boost::tie(iterSubgraph,iterSubgraphEnd) = gSubgraph.children();
- // iterSubgraph != iterSubgraphEnd;
- // iterSubgraph++)
- // {
- // typedef square_topology<> Topology;
- // boost::minstd_rand gen;
- // Topology topology(gen,100.0);
- // Topology::point_type origin;
- // origin[0] = origin[1] = 100.0;
- // Topology::point_difference_type extent;
- // extent[0] = extent[1] = 100.0;
- // fruchterman_reingold_force_directed_layout
- // (*iterSubgraph,
- // get(vertex_position, *iterSubgraph),
- // topology,
- // attractive_force(square_distance_attractive_force()).
- // cooling(linear_cooling<double>(100)));
- // //cout<<"Force Based Layout Applied"<<endl;
- // }
- // VertexIterator itrVertex, itrVertexEnd;
- // for(boost::tie(itrVertex, itrVertexEnd) = vertices(*iterSubgraph);
- // itrVertex != itrVertexEnd;
- // itrVertex++)
- // {
- // int iCoordX = (int)get(vertex_position, *iterSubgraph)[*itrVertex][0];
- // int iCoordY = (int)get(vertex_position, *iterSubgraph)[*itrVertex][0];
- // //cout<<"Force Based Coordinates : "<<iCoordX<<" "<<iCoordY<<endl;
- // VertexDescriptor vVertex = *itrVertex;
- // m_boostGraphWrapper.setVertexCenterCoordX(vVertex, *iterSubgraph, iCoordX);
- // m_boostGraphWrapper.setVertexCenterCoordY(vVertex, *iterSubgraph, iCoordY);
- // }
- // New force algo check
- /* typedef square_topology<> Topology;
- boost::minstd_rand gen;
- Topology topology(gen,100.0);
- Topology::point_type origin;
- origin[0] = origin[1] = 100.0;
- Topology::point_difference_type extent;
- extent[0] = extent[1] = 100.0;
- std::vector<Topology::point_difference_type> displacements(num_vertices(gSubgraph));
- fruchterman_reingold_force_directed_layout
- (gSubgraph,
- get(vertex_position, gSubgraph),
- topology,
- attractive_force(square_distance_attractive_force()).
- cooling(linear_cooling<double>(100))); */
- // wORKS FROM HERE
- try{
- typedef square_topology<> Topology;
- boost::minstd_rand gen;
- Topology topology(gen,1000.0);
- Topology::point_type origin;
- origin[0] = origin[1] = 100.0;
- Topology::point_difference_type extent;
- extent[0] = extent[1] = 100.0;
- fruchterman_reingold_force_directed_layout
- (gSubgraph,
- get(vertex_position, gSubgraph),
- topology,
- attractive_force(square_distance_attractive_force()).
- cooling(linear_cooling<double>(200)));
- cout<<"Force Based Layout Applied"<<endl;
- }
- catch(boost::exception& eBoostException)
- {
- //throw *boost::get_error_info<errmsg_info>(eBoostException);
- cout<<"Exception in FBL"<<endl;
- }
- VertexIterator itrVertex, itrVertexEnd;
- for(boost::tie(itrVertex, itrVertexEnd) = vertices(gSubgraph);
- itrVertex != itrVertexEnd;
- itrVertex++)
- {
- int iCoordX = (int)get(vertex_position, gSubgraph)[*itrVertex][0];
- int iCoordY = (int)get(vertex_position, gSubgraph)[*itrVertex][1];
- cout<<"\nForce Based Coordinates : "<<iCoordX<<" "<<iCoordY<<endl;
- VertexDescriptor vVertex = *itrVertex;
- m_boostGraphWrapper.setVertexCenterCoordX(vVertex, gSubgraph, iCoordX);
- m_boostGraphWrapper.setVertexCenterCoordY(vVertex, gSubgraph, iCoordY);
- }
- }
|