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 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()))
|
||||
{
|
||||
halfedge_descriptor h = halfedge(f, tm);
|
||||
CGAL_assertion(!is_border(h, tm));
|
||||
|
||||
input_triangles.push_back(gt.construct_triangle_3_object()(
|
||||
get(profile.vertex_point_map(), source(h, tm)),
|
||||
get(profile.vertex_point_map(), target(h, tm)),
|
||||
get(profile.vertex_point_map(), target(next(h, tm), tm))));
|
||||
m_input_triangles.emplace_back(gt.construct_triangle_3_object()(
|
||||
get(profile.vertex_point_map(), source(h, tm)),
|
||||
get(profile.vertex_point_map(), target(h, 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)->accelerate_distance_queries();
|
||||
}
|
||||
|
||||
public:
|
||||
|
|
@ -129,6 +130,7 @@ public:
|
|||
private:
|
||||
const FT m_sq_threshold_dist;
|
||||
mutable const AABB_tree* m_tree_ptr;
|
||||
mutable std::vector<Triangle> m_input_triangles;
|
||||
|
||||
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);
|
||||
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));
|
||||
|
||||
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 << "small filtering distance: " << vertices(small_mesh).size() << " vertices left" << std::endl;
|
||||
|
||||
assert(vertices(small_mesh).size() != vertices(ref_mesh).size());
|
||||
assert(vertices(big_mesh).size() == vertices(ref_mesh).size());
|
||||
assert(vertices(ref_mesh).size() < vertices(small_mesh).size());
|
||||
assert(vertices(big_mesh).size() < vertices(small_mesh).size());
|
||||
assert(vertices(ref_mesh).size() < vertices(big_mesh).size());
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue