smlib: pin the fork's SSI fixes (1499681); the corpus passes 111 of 119

SMLIB_REV moves to tangency-labs/smlib capi-solidcraft 1499681, eight SMLib
commits for surface/surface intersection: an empty curve is no longer
reverse-traced (SM_ERR_NULL_POINTER), tangent curves are traced once, curves
split at singular crossings, interior tangential contact points, tangential
curves and branches through tangent nodes, small loops above tolerance, and
high-order contact curves covered across their band. The corpus test's pass
list grows from 81 to 111 cases; the 8 still failing are all below SMLib's
1e-5 zone tolerance (angles 1e-6..1e-8, offsets 1e-7, loops of 2e-6 or less).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Brennen Herbruck
2026-10-21 08:15:36 -04:00
committed by jyviko
parent f8b48d0e4d
commit de6633b9c6
2 changed files with 32 additions and 2 deletions
+1 -1
View File
@@ -1 +1 @@
70e1bf5a8e75d7576e1e2971d28295a55c80bfcc
14996818bedacc057cf35f296b29876df022faa7
+31 -1
View File
@@ -388,14 +388,24 @@ const GSI_1E6_PASS: &[&str] = &[
"c2_cyl_on_plane",
"c2_sphere_in_cyl",
"c2_sphere_in_torus",
"c2n_cylN_on_planeN",
"c2n_parabcyl_plane",
"c2n_quartic_circle",
"c2n_quartic_contact_parabola",
"c2n_sphereN_in_cyl",
"c3_sphere_on_plane",
"c3_sphere_torus_outer",
"c3_spheres_external",
"c3_spheres_internal",
"c3n_four_points",
"c3n_parab_apex",
"c3n_parab_parab_apex",
"c4_cone_apex_plane",
"c4_steinmetz",
"c4_viviani_figure8",
"c4n_cusp",
"c4n_saddle_tangent_plane",
"c4n_viviani_nurbs",
"c5_corner_to_corner",
"c5_curve_on_edge",
"c5_cyl_end_circle",
@@ -422,6 +432,11 @@ const GSI_1E6_PASS: &[&str] = &[
"c7_sunk_cyl_1e-4",
"c7_sunk_cyl_1e-5",
"c7_sunk_cyl_1e-6",
"c7_tiny_loop_parab_1e-4",
"c7_tiny_loop_parab_1e-5",
"c7_tiny_loop_sphere_1e-4",
"c7_tiny_loop_sphere_1e-5",
"c7_tiny_loop_sphere_1e-6",
"c8_cone_plane_seam",
"c8_cyl_plane_seam_line",
"c8_sphere_cyl_through_poles",
@@ -441,15 +456,30 @@ const GSI_1E6_PASS: &[&str] = &[
"c9n_rational_deg5_sphere_arc",
"c9n_refined_torus_sphere",
"y23_appendix_ex2",
"y23_fig1a_two_loops_cross",
"y23_fig1b_two_arcs_and_point",
"y23_fig1c_boundary_triangle",
"y23_fig1d_two_quads",
"y23_fig1e_loops_touching",
"y23_fig1f_high_order_contact",
"y23_fig1g_three_points",
"y23_t2_ex1_tangent_line",
"y23_t2_ex2_tangential_curve",
"y23_t2_ex3_loop_two_curves",
"y23_t2_ex4_tangential_curve_saddle",
"y23_t2_ex5_two_loops",
"y23_t2_ex6_loop_and_point",
"y23_t3_ex1_torus_ellipsoid",
"y23_t3_ex2_torus_ellipsoid",
"y23_t3_ex3_torus_ellipsoid",
"y23_t3_ex4_torus_ellipsoid",
"y23_t3_ex5_torus_ellipsoid",
"y23_t6_ex1_tangent_line",
"y23_t6_ex2_tangential_arc",
"y23_t6_ex3_two_crossing_curves",
"y23_t6_ex4_tangential_point",
"y23_t6_ex5_four_boundary_curves",
"y23_t6_ex6_four_boundary_curves",
];
/// The corpus runner's samples per curve.
@@ -606,5 +636,5 @@ fn smlib_global_intersect_at_1e_6() {
let newly: Vec<_> = passed.difference(&listed).collect();
let lost: Vec<_> = listed.difference(&passed).collect();
assert!(newly.is_empty() && lost.is_empty(), "now pass (add to GSI_1E6_PASS): {newly:?}; no longer pass: {lost:?}");
assert_eq!(passed.len(), 81);
assert_eq!(passed.len(), 111);
}