mirror of https://github.com/CGAL/cgal
the placement must store the triangles has the AABB-tree does not copy them
This commit is contained in:
parent
531071907b
commit
d6d8fbeb8b
|
|
@ -59,21 +59,22 @@ private:
|
||||||
|
|
||||||
const Triangle_mesh& tm = profile.surface_mesh();
|
const Triangle_mesh& tm = profile.surface_mesh();
|
||||||
const Geom_traits& gt = profile.geom_traits();
|
const Geom_traits& gt = profile.geom_traits();
|
||||||
std::vector<Triangle> input_triangles;
|
|
||||||
|
|
||||||
|
m_input_triangles.reserve(faces(tm).size());
|
||||||
for(face_descriptor f : faces(profile.surface_mesh()))
|
for(face_descriptor f : faces(profile.surface_mesh()))
|
||||||
{
|
{
|
||||||
halfedge_descriptor h = halfedge(f, tm);
|
halfedge_descriptor h = halfedge(f, tm);
|
||||||
CGAL_assertion(!is_border(h, tm));
|
CGAL_assertion(!is_border(h, tm));
|
||||||
|
|
||||||
input_triangles.push_back(gt.construct_triangle_3_object()(
|
m_input_triangles.emplace_back(gt.construct_triangle_3_object()(
|
||||||
get(profile.vertex_point_map(), source(h, tm)),
|
get(profile.vertex_point_map(), source(h, tm)),
|
||||||
get(profile.vertex_point_map(), target(h, tm)),
|
get(profile.vertex_point_map(), target(h, tm)),
|
||||||
get(profile.vertex_point_map(), target(next(h, tm), tm))));
|
get(profile.vertex_point_map(), target(next(h, tm), tm))));
|
||||||
}
|
}
|
||||||
|
|
||||||
m_tree_ptr = new AABB_tree(input_triangles.begin(), input_triangles.end());
|
m_tree_ptr = new AABB_tree(m_input_triangles.begin(), m_input_triangles.end());
|
||||||
const_cast<AABB_tree*>(m_tree_ptr)->build();
|
const_cast<AABB_tree*>(m_tree_ptr)->build();
|
||||||
|
const_cast<AABB_tree*>(m_tree_ptr)->accelerate_distance_queries();
|
||||||
}
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
@ -129,6 +130,7 @@ public:
|
||||||
private:
|
private:
|
||||||
const FT m_sq_threshold_dist;
|
const FT m_sq_threshold_dist;
|
||||||
mutable const AABB_tree* m_tree_ptr;
|
mutable const AABB_tree* m_tree_ptr;
|
||||||
|
mutable std::vector<Triangle> m_input_triangles;
|
||||||
|
|
||||||
const BasePlacement m_base_placement;
|
const BasePlacement m_base_placement;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -62,15 +62,16 @@ int main(int argc, char** argv)
|
||||||
Filtered_placement_with_tree placement_small(0.00005*diag, tree, placement_ref);
|
Filtered_placement_with_tree placement_small(0.00005*diag, tree, placement_ref);
|
||||||
SMS::edge_collapse(small_mesh, stop, CGAL::parameters::get_cost(Cost()).get_placement(placement_small));
|
SMS::edge_collapse(small_mesh, stop, CGAL::parameters::get_cost(Cost()).get_placement(placement_small));
|
||||||
|
|
||||||
Filtered_placement placement_big(50*diag, placement_ref); // lazily builds the AABB tree
|
Filtered_placement placement_big(0.005*diag, placement_ref); // lazily builds the AABB tree
|
||||||
SMS::edge_collapse(big_mesh, stop, CGAL::parameters::get_cost(Cost()).get_placement(placement_big));
|
SMS::edge_collapse(big_mesh, stop, CGAL::parameters::get_cost(Cost()).get_placement(placement_big));
|
||||||
|
|
||||||
std::cout << "no filtering: " << vertices(ref_mesh).size() << " vertices left" << std::endl;
|
std::cout << "no filtering: " << vertices(ref_mesh).size() << " vertices left" << std::endl;
|
||||||
std::cout << "large filtering distance: " << vertices(big_mesh).size() << " vertices left" << std::endl;
|
std::cout << "large filtering distance: " << vertices(big_mesh).size() << " vertices left" << std::endl;
|
||||||
std::cout << "small filtering distance: " << vertices(small_mesh).size() << " vertices left" << std::endl;
|
std::cout << "small filtering distance: " << vertices(small_mesh).size() << " vertices left" << std::endl;
|
||||||
|
|
||||||
assert(vertices(small_mesh).size() != vertices(ref_mesh).size());
|
assert(vertices(ref_mesh).size() < vertices(small_mesh).size());
|
||||||
assert(vertices(big_mesh).size() == vertices(ref_mesh).size());
|
assert(vertices(big_mesh).size() < vertices(small_mesh).size());
|
||||||
|
assert(vertices(ref_mesh).size() < vertices(big_mesh).size());
|
||||||
|
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue