diff --git a/Orthtree/doc/Orthtree/Orthtree.txt b/Orthtree/doc/Orthtree/Orthtree.txt index e5ec559ebcb..29253a80257 100644 --- a/Orthtree/doc/Orthtree/Orthtree.txt +++ b/Orthtree/doc/Orthtree/Orthtree.txt @@ -301,7 +301,7 @@ Octree octree(points, points.point_map()); typedef CGAL::Point_set_3 Point_set; typedef CGAL::Octree Octree; ... -Octree octree({points, points.point_map()}); +Octree octree(points, points.point_map()); \endcode The node class does not exist anymore and has been replaced by the lightweight type `Node_index`. All information formerly contained in the node class is now accessible via the `Orthtree` interface. diff --git a/Orthtree/examples/Orthtree/octree_build_from_point_set.cpp b/Orthtree/examples/Orthtree/octree_build_from_point_set.cpp index fd6c0bd97ab..19b5c404e36 100644 --- a/Orthtree/examples/Orthtree/octree_build_from_point_set.cpp +++ b/Orthtree/examples/Orthtree/octree_build_from_point_set.cpp @@ -29,7 +29,7 @@ int main(int argc, char **argv) { std::cout << "loaded " << points.number_of_points() << " points\n" << std::endl; // Create an octree from the points - Octree octree({points, points.point_map()}); + Octree octree(points, points.point_map()); // Build the octree with a small bucket size, using a more verbose method octree.refine(CGAL::Orthtrees::Maximum_number_of_inliers(10)); diff --git a/Orthtree/examples/Orthtree/octree_build_with_custom_split.cpp b/Orthtree/examples/Orthtree/octree_build_with_custom_split.cpp index b3cbac974f5..92c7c777a1d 100644 --- a/Orthtree/examples/Orthtree/octree_build_with_custom_split.cpp +++ b/Orthtree/examples/Orthtree/octree_build_with_custom_split.cpp @@ -46,7 +46,7 @@ int main(int argc, char **argv) { std::cout << "loaded " << points.number_of_points() << " points" << std::endl; // Create an octree from the points - Octree octree({points, points.point_map()}); + Octree octree(points, points.point_map()); // Build the octree using our custom split predicate octree.refine(Split_by_ratio(2)); diff --git a/Orthtree/examples/Orthtree/octree_find_nearest_neighbor.cpp b/Orthtree/examples/Orthtree/octree_find_nearest_neighbor.cpp index 3ce7056424d..a6d53bd2f0d 100644 --- a/Orthtree/examples/Orthtree/octree_find_nearest_neighbor.cpp +++ b/Orthtree/examples/Orthtree/octree_find_nearest_neighbor.cpp @@ -31,7 +31,7 @@ int main(int argc, char** argv) { std::cout << "loaded " << points.number_of_points() << " points" << std::endl; // Create an octree from the points - Octree octree({points, points.point_map()}); + Octree octree(points, points.point_map()); // Build the octree octree.refine(10, 20); diff --git a/Orthtree/examples/Orthtree/octree_surface_mesh.cpp b/Orthtree/examples/Orthtree/octree_surface_mesh.cpp index cda6ad2b024..676eacae273 100644 --- a/Orthtree/examples/Orthtree/octree_surface_mesh.cpp +++ b/Orthtree/examples/Orthtree/octree_surface_mesh.cpp @@ -60,7 +60,7 @@ int main(int argc, char** argv) return EXIT_FAILURE; } - Octree tree({mesh, mesh.points()}); + Octree tree(mesh, mesh.points()); OTraits::Split_predicate_node_min_extent sp(0.01); tree.refine(sp); diff --git a/Orthtree/examples/Orthtree/octree_traversal_custom.cpp b/Orthtree/examples/Orthtree/octree_traversal_custom.cpp index 57321943311..a9a3ccba072 100644 --- a/Orthtree/examples/Orthtree/octree_traversal_custom.cpp +++ b/Orthtree/examples/Orthtree/octree_traversal_custom.cpp @@ -54,7 +54,7 @@ int main(int argc, char** argv) { std::cout << "loaded " << points.number_of_points() << " points\n" << std::endl; // Create an octree from the points - Octree octree({points, points.point_map()}); + Octree octree(points, points.point_map()); // Build the octree octree.refine(); diff --git a/Orthtree/examples/Orthtree/octree_traversal_manual.cpp b/Orthtree/examples/Orthtree/octree_traversal_manual.cpp index 974d52f6077..45c51fa3797 100644 --- a/Orthtree/examples/Orthtree/octree_traversal_manual.cpp +++ b/Orthtree/examples/Orthtree/octree_traversal_manual.cpp @@ -29,7 +29,7 @@ int main(int argc, char** argv) { std::cout << "loaded " << points.number_of_points() << " points\n" << std::endl; // Create an octree from the points - Octree octree({points, points.point_map()}); + Octree octree(points, points.point_map()); // Build the octree using the default arguments octree.refine(); diff --git a/Orthtree/examples/Orthtree/octree_traversal_preorder.cpp b/Orthtree/examples/Orthtree/octree_traversal_preorder.cpp index 5ae7cc0a657..a359f6217ee 100644 --- a/Orthtree/examples/Orthtree/octree_traversal_preorder.cpp +++ b/Orthtree/examples/Orthtree/octree_traversal_preorder.cpp @@ -30,7 +30,7 @@ int main(int argc, char **argv) { std::cout << "loaded " << points.number_of_points() << " points\n" << std::endl; // Create an octree from the points - Octree octree({points, points.point_map()}); + Octree octree(points, points.point_map()); // Build the octree octree.refine(); diff --git a/Orthtree/include/CGAL/Orthtree.h b/Orthtree/include/CGAL/Orthtree.h index 552026d0b3f..882d664431b 100644 --- a/Orthtree/include/CGAL/Orthtree.h +++ b/Orthtree/include/CGAL/Orthtree.h @@ -235,7 +235,7 @@ public: /// @{ /*! - \brief creates an orthtree for a traits instance. + \brief constructs an orthtree for a traits instance. The constructed orthtree has a root node with no children, containing the contents determined by `Construct_root_node_contents` from the traits class. @@ -275,10 +275,18 @@ public: data(root()) = m_traits.construct_root_node_contents_object()(); } + /*! + constructs an orthtree from a set of arguments provided to the traits constructor + */ + template + explicit Orthtree(Arg1&& arg1, Arg2&& arg2, Args&& ... args) + : Orthtree(Traits(std::forward(arg1), std::forward(arg2), std::forward(args)...)) + {} + /// @} // copy constructor - Orthtree(const Orthtree& other) : + explicit Orthtree(const Orthtree& other) : m_traits(other.m_traits), m_node_properties(other.m_node_properties), m_node_contents(m_node_properties), @@ -289,7 +297,7 @@ public: m_bbox(other.m_bbox), m_side_per_depth(other.m_side_per_depth) {} // move constructor - Orthtree(Orthtree&& other) : + explicit Orthtree(Orthtree&& other) : m_traits(other.m_traits), m_node_properties(std::move(other.m_node_properties)), m_node_contents(m_node_properties), diff --git a/Orthtree/test/Orthtree/test_node_adjacent.cpp b/Orthtree/test/Orthtree/test_node_adjacent.cpp index 3655fb2f2c3..db9581b7225 100644 --- a/Orthtree/test/Orthtree/test_node_adjacent.cpp +++ b/Orthtree/test/Orthtree/test_node_adjacent.cpp @@ -34,7 +34,7 @@ int main(void) { points.insert({-1, -1, -1.8}); points.insert({-1, -1, -1.9}); - Octree octree({points, points.point_map()}); + Octree octree(points, points.point_map()); octree.refine(10, 1); std::cout << octree << std::endl; diff --git a/Orthtree/test/Orthtree/test_node_index.cpp b/Orthtree/test/Orthtree/test_node_index.cpp index f2270251e34..472f34455d6 100644 --- a/Orthtree/test/Orthtree/test_node_index.cpp +++ b/Orthtree/test/Orthtree/test_node_index.cpp @@ -33,7 +33,7 @@ int main(void) { points.insert({-1, -1, -1.8}); points.insert({-1, -1, -1.9}); - Octree octree({points, points.point_map()}); + Octree octree(points, points.point_map()); octree.refine(10, 1); std::cout << "root: " << octree.local_coordinates(octree.root()) << std::endl; diff --git a/Orthtree/test/Orthtree/test_octree_bbox.cpp b/Orthtree/test/Orthtree/test_octree_bbox.cpp index c6be3ecfacf..6ec98b0e023 100644 --- a/Orthtree/test/Orthtree/test_octree_bbox.cpp +++ b/Orthtree/test/Orthtree/test_octree_bbox.cpp @@ -19,7 +19,7 @@ void test_1_node() { points.insert({-1, -1, -1}); // Create the octree - Octree octree({points, points.point_map()}); + Octree octree(points, points.point_map()); octree.refine(10, 1); Octree::Bbox expected_bbox{-1, -1, -1, -1, -1, -1}; @@ -36,7 +36,7 @@ void test_9_nodes() { points.insert({1, 1, 1}); // Create the octree - Octree octree({points, points.point_map()}); + Octree octree(points, points.point_map()); octree.refine(10, 1); // Compare the top node @@ -63,7 +63,7 @@ void test_25_nodes() { points.insert({1, 0.5, 1}); // Create the octree - Octree octree({points, points.point_map()}); + Octree octree(points, points.point_map()); octree.refine(10, 1); // Compare the top node diff --git a/Orthtree/test/Orthtree/test_octree_copy_move_constructors.cpp b/Orthtree/test/Orthtree/test_octree_copy_move_constructors.cpp index fcd7caaa5a9..7da85b51a8e 100644 --- a/Orthtree/test/Orthtree/test_octree_copy_move_constructors.cpp +++ b/Orthtree/test/Orthtree/test_octree_copy_move_constructors.cpp @@ -57,7 +57,7 @@ int main() for (std::size_t i = 0; i < nb_pts; ++i) points.insert(*(generator++)); - Octree base({ points, points.point_map() }); + Octree base(points, points.point_map()); test(base); Octree_without_data base2({}); diff --git a/Orthtree/test/Orthtree/test_octree_custom_properties.cpp b/Orthtree/test/Orthtree/test_octree_custom_properties.cpp index 3c69724bd8a..c3f4a7706a2 100644 --- a/Orthtree/test/Orthtree/test_octree_custom_properties.cpp +++ b/Orthtree/test/Orthtree/test_octree_custom_properties.cpp @@ -23,7 +23,7 @@ int main(void) { for (std::size_t i = 0; i < nb_pts; ++i) points.insert(*(generator++)); - Octree tree({points, points.point_map()}); + Octree tree(points, points.point_map()); // Testing built in node properties typename Octree::Property_map data_prop = *tree.property("contents"); diff --git a/Orthtree/test/Orthtree/test_octree_equality.cpp b/Orthtree/test/Orthtree/test_octree_equality.cpp index db1c18a9a12..bbdc0cbb7d1 100644 --- a/Orthtree/test/Orthtree/test_octree_equality.cpp +++ b/Orthtree/test/Orthtree/test_octree_equality.cpp @@ -25,8 +25,8 @@ void test_identical_trees() { points.insert({1, 1, 1}); // Create a pair of trees from the same point set - Octree a({points, points.point_map()}); - Octree b({points, points.point_map()}); + Octree a(points, points.point_map()); + Octree b(points, points.point_map()); // Refine both trees using the same criteria a.refine(10, 1); @@ -51,8 +51,8 @@ void test_identical_contents_different_criteria() { points.insert({1, 1, 1}); // Create a pair of trees from the same point set - Octree a({points, points.point_map()}); - Octree b({points, points.point_map()}); + Octree a(points, points.point_map()); + Octree b(points, points.point_map()); // Refine both trees using different criteria a.refine(10, 1); @@ -86,8 +86,8 @@ void test_different_contents_identical_criteria() { points_b.insert({1, 1, 2}); // Create a pair of trees from the different point sets - Octree a({points_a, points_a.point_map()}); - Octree b({points_b, points_b.point_map()}); + Octree a(points_a, points_a.point_map()); + Octree b(points_b, points_b.point_map()); // Refine both trees using the same criteria a.refine(10, 1); diff --git a/Orthtree/test/Orthtree/test_octree_grade.cpp b/Orthtree/test/Orthtree/test_octree_grade.cpp index 226aa29b10f..5b9eb411c2f 100644 --- a/Orthtree/test/Orthtree/test_octree_grade.cpp +++ b/Orthtree/test/Orthtree/test_octree_grade.cpp @@ -48,7 +48,7 @@ void test(std::size_t dataset_size) { points.insert(*(generator++)); // Build an octree - Octree octree({points, points.point_map()}); + Octree octree(points, points.point_map()); // Refine the octree octree.refine(); diff --git a/Orthtree/test/Orthtree/test_octree_kernels.cpp b/Orthtree/test/Orthtree/test_octree_kernels.cpp index 7cd6fb0de8b..5e477d4a9eb 100644 --- a/Orthtree/test/Orthtree/test_octree_kernels.cpp +++ b/Orthtree/test/Orthtree/test_octree_kernels.cpp @@ -18,7 +18,7 @@ void test() for (std::size_t i = 0; i < 100; ++i) points.insert(*(generator++)); - Octree octree({points, points.point_map()}); + Octree octree(points, points.point_map()); octree.refine(); octree.grade(); } diff --git a/Orthtree/test/Orthtree/test_octree_locate.cpp b/Orthtree/test/Orthtree/test_octree_locate.cpp index 77a243d7bc6..c53c4ce3f63 100644 --- a/Orthtree/test/Orthtree/test_octree_locate.cpp +++ b/Orthtree/test/Orthtree/test_octree_locate.cpp @@ -21,7 +21,7 @@ void test_1_point() { points.insert({-1, -1, -1}); // Create the octree - Octree octree({points, points.point_map()}); + Octree octree(points, points.point_map()); octree.refine(10, 1); // Because there's only the root node, any point should be placed in it @@ -47,7 +47,7 @@ void test_8_points() { points.insert({1, 1, 1}); // Create the octree - Octree octree({points, points.point_map()}); + Octree octree(points, points.point_map()); octree.refine(10, 1); // Existing points should end up in the same place @@ -88,7 +88,7 @@ void test_10_points() { points.insert({-1, -0.75, 1}); // Create the octree - Octree octree({points, points.point_map()}); + Octree octree(points, points.point_map()); octree.refine(10, 1); // Existing points should end up in the same place diff --git a/Orthtree/test/Orthtree/test_octree_nearest_neighbor.cpp b/Orthtree/test/Orthtree/test_octree_nearest_neighbor.cpp index 72b423199ff..5697affb491 100644 --- a/Orthtree/test/Orthtree/test_octree_nearest_neighbor.cpp +++ b/Orthtree/test/Orthtree/test_octree_nearest_neighbor.cpp @@ -66,7 +66,7 @@ void naive_vs_octree(std::size_t dataset_size) { // Do the same using the octree Point octree_nearest = *generator; - Octree octree({points, points.point_map()}); + Octree octree(points, points.point_map()); octree.refine(10, 20); auto octree_start_time = high_resolution_clock::now(); { @@ -118,7 +118,7 @@ void kdtree_vs_octree(std::size_t dataset_size, std::size_t K) { // Do the same using the octree std::vector octree_nearest_neighbors; - Octree octree({points, points.point_map()}); + Octree octree(points, points.point_map()); octree.refine(10, 20); auto octree_start_time = high_resolution_clock::now(); octree.nearest_neighbors(random_point, K, std::back_inserter(octree_nearest_neighbors)); diff --git a/Orthtree/test/Orthtree/test_octree_refine.cpp b/Orthtree/test/Orthtree/test_octree_refine.cpp index f61b6141e53..3aa2ef3dfc2 100644 --- a/Orthtree/test/Orthtree/test_octree_refine.cpp +++ b/Orthtree/test/Orthtree/test_octree_refine.cpp @@ -37,7 +37,7 @@ void test_1_point() { points.insert({-1, -1, -1}); // Create the octree - Octree octree({points, points.point_map()}); + Octree octree(points, points.point_map()); octree.refine(10, 1); // Check that the root node was never split @@ -53,11 +53,11 @@ void test_2_points() { points.insert({1, -1, -1}); // Create the octree - Octree octree({points, points.point_map()}); + Octree octree(points, points.point_map()); octree.refine(10, 1); // The octree should have been split once - Octree other({points, points.point_map()}); + Octree other(points, points.point_map()); other.split(other.root()); assert(Octree::is_topology_equal(other, octree)); assert(1 == octree.depth()); @@ -72,10 +72,10 @@ void test_4_points() { points.insert({1, 1, 4}); // Create the octree - Octree octree({points, points.point_map()}); + Octree octree(points, points.point_map()); octree.refine(10, 1); - Octree other({points, points.point_map()}); + Octree other(points, points.point_map()); other.split(other.root()); other.split(other.node(3)); other.split(other.node(7)); diff --git a/Orthtree/test/Orthtree/test_octree_traverse.cpp b/Orthtree/test/Orthtree/test_octree_traverse.cpp index 4d96f88442c..f61e9919eaf 100644 --- a/Orthtree/test/Orthtree/test_octree_traverse.cpp +++ b/Orthtree/test/Orthtree/test_octree_traverse.cpp @@ -22,7 +22,7 @@ bool test_preorder_1_node() { points.insert({-1, -1, -1}); // Create the octree - Octree octree({points, points.point_map()}); + Octree octree(points, points.point_map()); octree.refine(10, 1); // Create the range @@ -43,7 +43,7 @@ bool test_preorder_9_nodes() { points.insert({1, -1, -1}); // Create the octree - Octree octree({points, points.point_map()}); + Octree octree(points, points.point_map()); octree.refine(10, 1); // Create the range @@ -68,7 +68,7 @@ bool test_level_9_nodes() { points.insert({1, -1, -1}); // Create the octree - Octree octree({points, points.point_map()}); + Octree octree(points, points.point_map()); octree.refine(10, 1); // Create the range @@ -94,7 +94,7 @@ bool test_preorder_25_nodes() { points.insert({1, 1, 4}); // Create the octree - Octree octree({points, points.point_map()}); + Octree octree(points, points.point_map()); octree.refine(10, 1); std::cout << octree << std::endl;