2015-05-05 2 views
0

У меня есть программа на C++, которая использует библиотеку CGAL 4.5.2_0, установленную с использованием macports. В последнее время я получаю предупреждения о компиляции, что заголовок CGAL/AABB_polyhedron_triangle_primitive.h устарел и теперь я должен начать использовать CGAL/AABB_face_graph_triangle_primitive.h, поэтому я наивно переключил имя заголовка, а также добавил заголовочный файл CGAL/boost/graph/graph_traits_Polyhedron_3.h, который теперь кажется необходимым для взаимодействия с Boost Библиотека графов. Я заметил также из примеров в документации CGAL, что один из моих typedefs необходимо обновить сОбновление программы CGAL для использования AABB_face_graph_triangle_primitive

typedef CGAL::AABB_polyhedron_triangle_primitive<K,Polyhedron> Primitive; 

в

typedef CGAL::AABB_face_graph_triangle_primitive<Polyhedron> Primitive; 

И до сих пор, то есть степень того, что я сделал. Но теперь я получаю две новые ошибки во время компиляции:

In file included from ./Particle.h:44: 
/opt/local/include/CGAL/AABB_tree.h:810:27: error: no matching conversion for functional-style cast from 'CGAL::internal::In_place_list_iterator<CGAL::HalfedgeDS_in_place_list_face<CGAL::I_Polyhedron_facet<My_facet<CGAL::HalfedgeDS_list_types<CGAL::Epick, CGAL::I_Polyhedron_derived_items_3<My_items>, std::__1::allocator<int> >, CGAL::Boolean_tag<true>, CGAL::Vector_3<CGAL::Epick> > > >, std::__1::allocator<CGAL::HalfedgeDS_in_place_list_face<CGAL::I_Polyhedron_facet<My_facet<CGAL::HalfedgeDS_list_types<CGAL::Epick, CGAL::I_Polyhedron_derived_items_3<My_items>, std::__1::allocator<int> >, CGAL::Boolean_tag<true>, CGAL::Vector_3<CGAL::Epick> > > > > >' to 'Primitive' (aka 'CGAL::AABB_face_graph_triangle_primitive<CGAL::Polyhedron_3<CGAL::Epick, My_items, HalfedgeDS_default, std::__1::allocator<int> >, CGAL::Default, CGAL::Boolean_tag<true>, CGAL::Boolean_tag<false> >') 
        m_primitives.push_back(Primitive(first)); 
In file included from ./Particle.h:45: 
/opt/local/include/CGAL/AABB_traits.h:63:33: error: no matching member function for call to 'construct_shared_data' 
m_primitive_data=Primitive::construct_shared_data(); 
       ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~ 
/opt/local/include/CGAL/AABB_tree.h:268:15: note: in instantiation of member function 'CGAL::internal::AABB_tree::AABB_traits_base<CGAL::AABB_face_graph_triangle_primitive<CGAL::Polyhedron_3<CGAL::Epick, My_items, HalfedgeDS_default, std::__1::allocator<int> >, CGAL::Default, CGAL::Boolean_tag<true>, CGAL::Boolean_tag<false> >, true>::set_shared_data' requested here 
{m_traits.set_shared_data();} 
     ^

Если у кого есть опыт переключения из устаревшего заголовочного файла на новый, я буду благодарен за любые советы вы могли бы иметь о том, как мне действовать.

Я могу опубликовать файл заголовка для класса Particle, который, кажется, является проблемой, но длиной 3282 строки, и я не уверен, какие части я должен опубликовать.

В ответ на комментарий, вот код, который используется для вставки примитивов в дереве:

// The next chunk creates the 3D polyhedron, storing it in surface_poly 

    Polyhedron surface_poly = getSurfacePolyhedronFromImage(fname,centroid,xBB,yBB,zBB); 

    // First translate its centroid to the origin 
    // CartesianVector is a typedef of CGAL's Vector_3 

    const CartesianVector translation_vector(-centroid[0],-centroid[1],-centroid[2]); 

    Aff_transformation_3 transl(CGAL::TRANSLATION, translation_vector); 
    transform(surface_poly.points_begin(),surface_poly.points_end(), 
       surface_poly.points_begin(),transl); 

    // Now the centroid is the origin 

    centroid.resize(3,0.0); 
    CartesianPoint origin(0.0,0.0,0.0); 

    // Construct the AABB tree for quick intersection queries 

    cout << "Creating AABB tree from polyhedron" << endl; 
    cout.flush(); 

    Tree tree(surface_poly.facets_begin(),surface_poly.facets_end()); 

    // Object intersection will hold the point of intersection with the surface 

    boost::optional<Object_and_primitive_id> intersection; 
+0

Можете ли вы опубликовать код, который вы используете для вставки примитивов в дерево? Вы должны использовать что-то вроде дерева дерева (грань (многогранник) .first, графы (многогранник). Второй, многогранник); ' – sloriot

+0

Я добавил запрошенный вами код. Я замечаю, что это выглядит намного иначе, чем то, что вы предложили. Синтаксис действительно сильно изменился? Я попробую вашу версию и посмотрю, что произойдет. –

+0

Спасибо! Это устранило проблему. Я также просто нашел пример этого в документации CGAL по адресу http://doc.cgal.org/latest/AABB_tree/. Возможно, вы могли бы опубликовать свой комментарий в качестве ответа, и тогда я приму его? –

ответ

1

Синтаксис конструктора Tree неверен для Polyhedron_3 в приведенной выше коде. Правильный синтаксис должен быть

Tree tree(faces(surface_poly).first, faces(surface_poly).second, surface_poly); 

Обновление синтаксиса для правильной формы исправляет ошибки во время компиляции.

 Смежные вопросы

  • Нет связанных вопросов^_^