From 1d35046cf8246277a6becc94d1416407cd9f6907 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8C=82=E4=B9=8B=E9=92=B3?= Date: Fri, 24 Jul 2026 03:02:49 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20boolean=20benchmark=20=E4=BC=A0=E5=85=A5?= =?UTF-8?q?=20to=5Fmesh(deflection=3D0.5)=20=E9=81=BF=E5=85=8D=20OOM=20+?= =?UTF-8?q?=20=E9=87=8D=E6=96=B0=E5=90=AF=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bench/CMakeLists.txt | 2 +- bench/bench_boolean.cpp | 12 +++++++----- 2 files changed, 8 insertions(+), 6 deletions(-) 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