使用CGAL SDF算法增加错误

时间:2015-06-02 13:59:18

标签: c++ algorithm boost cgal

我目前正在尝试使用CGAL的SDF算法,但我有一些提升错误,而且我不知道它来自哪里。我按照CGAL doc

中的示例代码进行操作

这是我的代码的一部分:

#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
#include <CGAL/boost/graph/graph_traits_Polyhedron_3.h>
#include <CGAL/IO/Polyhedron_iostream.h>
#include <CGAL/mesh_segmentation.h>
#include <CGAL/property_map.h>

[...]

    void ShapeDiameterFunction_Component::SDF_Algorithm(PolyhedronPtr pMesh)
    {
        pMesh->triangulate();

        srand((unsigned)time(NULL));

        // create a property-map for segment-ids
        typedef std::map<Polyhedron::Facet_const_handle, std::size_t> Facet_int_map;
        Facet_int_map internal_segment_map;
        boost::associative_property_map<Facet_int_map> segment_property_map(internal_segment_map);

        // calculate SDF values and segment the mesh using default parameters.
        std::size_t number_of_segments = CGAL::segmentation_via_sdf_values(pMesh, segment_property_map);
        std::cout << "Number of segments: " << number_of_segments << std::endl;
    }

我在使用&#34; segmentation_via_sdf_values&#34;时遇到错误功能:

/usr/include/boost/mpl/eval_if.hpp|38|error: no type named ‘type’ in ‘boost::mpl::eval_if<boost::detail::has_vertex_property_type<boost::shared_ptr<Enriched_polyhedron<CGAL::Simple_cartesian<double>, Enriched_items> >, mpl_::bool_<false> >, boost::detail::get_vertex_property_type<boost::shared_ptr<Enriched_polyhedron<CGAL::Simple_cartesian<double>, Enriched_items> > >, boost::no_property>::f_ {aka struct boost::no_property}’|

我不知道它是来自我的升级安装还是来自代码本身。 我使用1.55版本的libboost-dev和4.5.2版本的CGAL。 我使用的是Ubuntu 15.04版本,而我的编译器是GCC编译器4.9.2。

我试过CGAL文档中的例子是另一个项目,它确实编译了。

[编辑]这是我的编译器log

谢谢, CornFlex

1 个答案:

答案 0 :(得分:0)

我发现了我的问题,我使用了使用CGAL库的MEPP库。 MEPP库正在重新定义“多面体”的typedef声明,发送到sdf_values函数的“pMesh”与“Polyhedron”所需的类型不同。 当然,使用boost(eval_if)检查类型,这就是为什么它会给我这个错误。

 typedef CGAL::Exact_predicates_inexact_constructions_kernel KernelSDF;
 typedef CGAL::Polyhedron_3<KernelSDF> PolyhedronSDF;

 PolyhedronSDF mesh;

 typedef std::map< PolyhedronSDF::Facet_const_handle, double> Facet_double_map;
 Facet_double_map internal_map;
 boost::associative_property_map<Facet_double_map> sdf_property_map(internal_map);
 // compute SDF values
 std::pair<double, double> min_max_sdf = CGAL::sdf_values(mesh, sdf_property_map);

现在我只需要将我的pMesh复制到我的网格对象中!

感谢。