C++ 基于CGAL-SDF算法的Boost误差
我目前正在尝试使用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 <
#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);