C++ 基于CGAL-SDF算法的Boost误差

C++ 基于CGAL-SDF算法的Boost误差,c++,algorithm,boost,cgal,C++,Algorithm,Boost,Cgal,我目前正在尝试使用CGAL的SDF算法,但我有一些boost错误,我不知道它来自哪里。我遵循了 以下是我的代码部分: #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的SDF算法,但我有一些boost错误,我不知道它来自哪里。我遵循了

以下是我的代码部分:

#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;
    }
#包括
#包括
#包括
#包括
#包括
[...]
void shapedAmeterFunction_组件::SDF_算法(多面体PTR pMesh)
{
pMesh->triangulate();
srand((无符号)时间(NULL));
//为段ID创建属性映射
typedef std::map Facet\u int\u map;
刻面图、内部图、线段图;
boost::关联属性映射段映射(内部映射段);
//计算SDF值并使用默认参数分割网格。
std::size\u t number\u of_segments=CGAL::segmentation\u通过_sdf\u值(pMesh,segments\u属性\u映射);

std::cout我发现了我的问题,我使用了使用CGAL库的MEPP库。MEPP库正在重新定义“多面体”的typedef声明,发送到sdf_values函数的“pMesh”与所需的“多面体”类型不同。 当然,类型是通过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);
typedef CGAL::精确的谓词、不精确的构造、内核内核内核df;
typedef CGAL::多面体_3多面体DF;
多面体网格;
typedef std::mapFacet\u double\u map;
面双图内部图;
boost::关联属性映射sdf\u属性映射(内部映射);
//计算SDF值
std::pair min_max_sdf=CGAL::sdf_值(网格、sdf_属性图);
现在我只需要将我的pMesh复制到我的网格对象中


谢谢。

您是否修改了示例?如果是,请发布您试图编译的完整示例。我创建了一个新项目,仅使用示例代码和CGAL库,效果良好。我将此代码用于该项目,但它不起作用。无法发布完整代码,因为它非常大。@CornFlex请编辑您的问题,以便你可以知道你正在使用的CGAL和Boost版本,以及操作系统和编译器(名称和版本)。这可能很重要。使用编译器/OS/CGAL版本进行后期编辑谢谢@CornFlex。因为我们无法重现你的错误(因为你无法提供代码),我们必须远程调试该问题,并提出问题。我在您的编译器版本或CGAL和Boost版本中未发现任何异常(或未测试)。1/我建议您尝试使用CGAL-4.6。2/您是否可以将粘贴复制到完整的错误日志(通常错误会显示“…在以下过程中检测到”:或解释实例化链。然后编辑问题以将链接添加到完整日志。这可能会有所帮助。请注意,sdf函数适用于任何多面体类型,只有属性映射应适用于该多面体类型。
 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);