我正在尝试将CGAL的AABB_tree与多个Surface_mesh一起使用,并且失败了一个奇怪的断言,这使我认为它正在尝试将第一个曲面网格的顶点与第二个网格的索引一起使用,或者类似的奇怪。
在提交错误之前,我想确认我没有误解。
这是一个最少修改的示例。我正在使用https://github.com/libigl/libigl/blob/master/tutorial/shared/cube.off中的cube.off和CGAL示例中的四面体,但是无论我添加的第二个表面网格的顶点数是多少,无论它是什么,它似乎每次都会复制。
我失败的断言是/usr/local/include/CGAL/Surface_mesh/Properties.h:178-CGAL_assertion( idx .size());
使用: CGAL_VERSION 4.12
CGAL_VERSION_NR 1041201000
CGAL_SVN_REVISION 99999
CGAL_GIT_HASH f7c3c8212b56c0d6dae63787efc99093f4383415
#include <iostream>
#include <fstream>
#include <CGAL/Simple_cartesian.h>
#include <CGAL/AABB_tree.h>
#include <CGAL/AABB_traits.h>
#include <CGAL/Surface_mesh.h>
#include <CGAL/AABB_face_graph_triangle_primitive.h>
typedef CGAL::Simple_cartesian<double> K;
typedef K::Point_3 Point;
typedef K::Ray_3 Ray;
typedef CGAL::Surface_mesh<Point> Mesh;
typedef CGAL::AABB_face_graph_triangle_primitive<Mesh> Primitive;
typedef CGAL::AABB_traits<K, Primitive> Traits;
typedef CGAL::AABB_tree<Traits> Tree;
typedef boost::optional<Tree::Intersection_and_primitive_id<Ray>::Type> Ray_intersection;
int main(int argc, char* argv[])
{
const char* filename1 = "cube.off";
const char* filename2 = "tetrahedron.off";
std::ifstream input1(filename1);
Mesh mesh1;
input1 >> mesh1;
std::ifstream input2(filename2);
Mesh mesh2;
input2 >> mesh2;
Tree tree;
tree.insert(faces(mesh1).first, faces(mesh1).second, mesh1);
tree.insert(faces(mesh2).first, faces(mesh2).second, mesh2);
tree.build(); // CGAL_assertion( idx < data.size() ) fails
return 0;
}
答案 0 :(得分:0)
我将我的评论重新发布为答案:
根据我的评论:实际上,您可以使用此原语,但是您需要将模板标签OneFaceGraphPerTree设置为CGAL :: Tag_false。 See here