views:

82

answers:

1

I'm trying to lay out vertices using the Boost Graph Library. However, I'm running into some compilation issues which I'm unsure about. Am I using the BGL in an improper manner? My code is:

PositionVec position_vec(2);
PositionMap position(position_vec.begin(), get(vertex_index, g));
int iterations = 100;
double width = 100.0;
double height = 100.0;
minstd_rand gen;
rectangle_topology<> topology(gen, 0, 0, 100, 100); 
fruchterman_reingold_force_directed_layout(g, position, topology); //Compile fails on this line

The diagnostics produced by clang++(I've also tried GCC) are:

In file included from test.cpp:2:
/Volumes/Data/mike/Downloads/boost_1_43_0/boost/graph/fruchterman_reingold.hpp:95:3: error: no member named 'dimensions' in
      'boost::simple_point<double>'
  BOOST_STATIC_ASSERT (Point::dimensions == 2);
  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from test.cpp:2:
In file included from /Volumes/Data/mike/Downloads/boost_1_43_0/boost/graph/fruchterman_reingold.hpp:13:
In file included from /Volumes/Data/mike/Downloads/boost_1_43_0/boost/graph/graph_traits.hpp:15:
In file included from /Volumes/Data/mike/Downloads/boost_1_43_0/boost/tuple/tuple.hpp:24:
/Volumes/Data/mike/Downloads/boost_1_43_0/boost/static_assert.hpp:118:49: note: instantiated from:
      sizeof(::boost::STATIC_ASSERTION_FAILURE< BOOST_STATIC_ASSERT_BOOL_CAST( B ) >)>\
                                                ^
In file included from test.cpp:2:
/Volumes/Data/mike/Downloads/boost_1_43_0/boost/graph/fruchterman_reingold.hpp:95:3: note: instantiated from:
  BOOST_STATIC_ASSERT (Point::dimensions == 2);
  ^                    ~~~~~~~
/Volumes/Data/mike/Downloads/boost_1_43_0/boost/graph/fruchterman_reingold.hpp:95:31: note: instantiated from:
  BOOST_STATIC_ASSERT (Point::dimensions == 2);
                       ~~~~~~~^
/Volumes/Data/mike/Downloads/boost_1_43_0/boost/graph/fruchterman_reingold.hpp:417:19: note: in instantiation of template class
      'boost::grid_force_pairs<boost::rectangle_topology<boost::random::linear_congruential<int, 48271, 0, 2147483647, 399268537> >,
      boost::iterator_property_map<__gnu_cxx::__normal_iterator<boost::simple_point<double> *,
      std::vector<boost::simple_point<double>, std::allocator<boost::simple_point<double> > > >,
      boost::vec_adj_list_vertex_id_map<boost::property<boost::vertex_name_t, std::basic_string<char>, boost::no_property>, unsigned
      long>, boost::simple_point<double>, boost::simple_point<double> &> >' requested here
                  make_grid_force_pairs(topology, position, g)),
                  ^
/Volumes/Data/mike/Downloads/boost_1_43_0/boost/graph/fruchterman_reingold.hpp:431:3: note: in instantiation of function template
      specialization
      'boost::fruchterman_reingold_force_directed_layout<boost::rectangle_topology<boost::random::linear_congruential<int, 48271, 0,
      2147483647, 399268537> >, boost::adjacency_list<boost::listS, boost::vecS, boost::undirectedS,
      boost::property<boost::vertex_name_t, std::basic_string<char>, boost::no_property>, boost::no_property, boost::no_property,
      boost::listS>, boost::iterator_property_map<__gnu_cxx::__normal_iterator<boost::simple_point<double> *,
      std::vector<boost::simple_point<double>, std::allocator<boost::simple_point<double> > > >,
      boost::vec_adj_list_vertex_id_map<boost::property<boost::vertex_name_t, std::basic_string<char>, boost::no_property>, unsigned
      long>, boost::simple_point<double>, boost::simple_point<double> &>, boost::square_distance_attractive_force,
      boost::attractive_force_t, boost::no_property>' requested here
  fruchterman_reingold_force_directed_layout
  ^
test.cpp:48:3: note: in instantiation of function template specialization
      'boost::fruchterman_reingold_force_directed_layout<boost::rectangle_topology<boost::random::linear_congruential<int, 48271, 0,
      2147483647, 399268537> >, boost::adjacency_list<boost::listS, boost::vecS, boost::undirectedS,
      boost::property<boost::vertex_name_t, std::basic_string<char>, boost::no_property>, boost::no_property, boost::no_property,
      boost::listS>, boost::iterator_property_map<__gnu_cxx::__normal_iterator<boost::simple_point<double> *,
      std::vector<boost::simple_point<double>, std::allocator<boost::simple_point<double> > > >,
      boost::vec_adj_list_vertex_id_map<boost::property<boost::vertex_name_t, std::basic_string<char>, boost::no_property>, unsigned
      long>, boost::simple_point<double>, boost::simple_point<double> &> >' requested here
  fruchterman_reingold_force_directed_layout(g, position, topology);
  ^
1 error generated.
A: 

I can never make heads or tails of BGL code either :p When I do need to use it for something I usually check out the included unit-test/example file for the function I want to use. Many times there is an example in there that can be easily modified.

Chad Brewbaker