diff --git a/bench/CMakeLists.txt b/bench/CMakeLists.txt index 13a6638..6ce2c0e 100644 --- a/bench/CMakeLists.txt +++ b/bench/CMakeLists.txt @@ -71,6 +71,6 @@ add_custom_target(vde_benchmarks enable_testing() add_test(NAME bench_bvh COMMAND vde_bench_bvh --benchmark_min_time=0.01s) add_test(NAME bench_delaunay COMMAND vde_bench_delaunay --benchmark_min_time=0.01s) -# add_test(NAME bench_boolean COMMAND vde_bench_boolean --benchmark_min_time=0.01s) +add_test(NAME bench_boolean COMMAND vde_bench_boolean --benchmark_min_time=0.01s) add_test(NAME bench_curves COMMAND vde_bench_curves --benchmark_min_time=0.01s) add_test(NAME bench_spatial COMMAND vde_bench_spatial --benchmark_min_time=0.01s) diff --git a/bench/bench_boolean.cpp b/bench/bench_boolean.cpp index c1e2dd4..631d3cc 100644 --- a/bench/bench_boolean.cpp +++ b/bench/bench_boolean.cpp @@ -28,12 +28,14 @@ struct SpherePair { /// sphere_a at origin, sphere_b translated by +1.0 along X (overlap ~0.5) SpherePair make_sphere_pair(int face_count) { // make_sphere produces ~ 2 * seg_u * seg_v faces → solve for seg - int seg = std::max(static_cast(std::ceil(std::sqrt(face_count / 2.0))), 4); - int seg_u = seg; - int seg_v = seg; + int seg = std::max(static_cast(std::ceil(std::sqrt(face_count / 2.0))), 3); + // Use deflection to control tessellation density per face + // Each NURBS face tessellates res×res quads where res = max(4, 1/deflection) + // For benchmark we want coarse tessellation: deflection = 0.5 → res=4 + double deflection = 0.5; - auto sphere_a = brep::make_sphere(1.0, seg_u, seg_v).to_mesh(); - auto sphere_b = brep::make_sphere(1.0, seg_u, seg_v).to_mesh(); + auto sphere_a = brep::make_sphere(1.0, seg, seg).to_mesh(deflection); + auto sphere_b = brep::make_sphere(1.0, seg, seg).to_mesh(deflection); // Translate sphere_b by +1.0 along X so they overlap by ~0.5 // Rebuild from triangles with translated vertices