solidcore

Units / intersect

intersect.surface_intersector_p3 partial

Layer
34
Upstream lines
1,932
Functions
5
Rust module
intersect::surface_intersector::p3

Source: crates/solidcore/src/intersect/surface_intersector/p3.rs

Upstream: source/SMLib/src/SmSurfaceIntersector.cpp

Notes

5 fns; largest: SmSurfaceIntersector::FindBoundaryStartPoints, SmSurfaceIntersector::TestPoint, SmSurfaceIntersector::ComputeNextPoint, sm_UpdateTsectPoint; unit-SCC #22 (220 units); 150 upstream test entry points reach this unit; PARTIAL (PR #56): difftest 1527 cases (17 inline edge cases, 10 fixture cases from my_test_planar_section on shovel.srf, 1500 generated programs: plane/plane traces at angles down to 1e-6 with through, start and end points, random programs on planes, B-spline and curve-bounded surfaces, boundary start point searches, scales 1e-6..1e5), 851 pass bit-identical (max_rel_err 0), 676 deferred (surface.surface_p11 353, surface.surface_p3 135, surface.surface_p8 79, surface.plane_p1 64, surface.surface_p5 28, blend.fillet_executive_p1 13, surface.surface_p6 4); --perturb SENSITIVE 851/851. UNPORTED stubs: SmSurface::GlobalCurveIntersect (surface.surface_p8), SmSurface::IsSingularity of non-planes (surface.surface_p5); SmSurface::DropAndTrimCurve wired to intersect.surface_drop_lib_p1 (PR #98; its trace defers to intersect.surface_drop_curve). The face edge branch (static constexpr bGWCAddEdgeThroughPoints = FALSE) and the bStopAtSingularity = FALSE code are dead upstream and not ported, so the planned topology back-edges (topology.edge, topology.edgeuse_p1, topology.edgeuse_p3, topology.face_p4) are not needed. find_boundary_start_points fetches caches with smsurf_GetSurfaceCache (tree build reaches surface.surface_p6); find_boundary_start_points_with_caches takes them from the caller. [surface.surface_p6 wired (PR #92): 1527 cases, 855 pass, 672 deferred (blend.fillet_executive_p1 13, surface.surface_cache_p1 64, surface.surface_p11 353, surface.surface_p3 135, surface.surface_p5 28, surface.surface_p8 79)] Re-run (PR #52, after merging surface_p4/#49 and surface_p5/#50): 1527 cases, 974 pass, 553 deferred (surface.surface_p11 395, surface.surface_p8 79, surface.surface_cache_p1 64, blend.fillet_executive_p1 15). surface.surface_p11 (PR #120, after merging main with surface.surface_p3): cases=1527 passed=1084 failed=0 deferred=443 (blend.fillet_executive_p1 17, surface.surface_cache_p1 67, surface.surface_p8 359); --perturb SENSITIVE. Re-run (PR #118, surface.surface_p8 and the p10 stubs wired): 1527 cases, 1006 pass, 521 deferred (surface.surface_p11 395, surface.surface_cache_p1 64, surface.surface_point_solve_p3 47, blend.fillet_executive_p1 15). Re-run (PR #118, round 3: GlobalCurveIntersect on the caller's cache; the runner builds real caches): 1527 cases, 1181 pass, 0 failed, 346 deferred (curve.iso_curve 250, surface.surface_cache_p1 77, blend.fillet_executive_p1 17, intersect.surface_drop_curve 2); --perturb SENSITIVE 1181/1181.

Difftest

Cases
1,527
Passed
1,181
Deferred
346
Failed
0
Both errored
0
Max rel. error
0.0
Tolerance
1e-09 rel.
Seeds
16

Blocked by

Unported unitDeferred cases
curve.iso_curve green250
surface.surface_cache_p1 green77
blend.fillet_executive_p1 todo17
intersect.surface_drop_curve partial2

Report JSON (per-case results)

Dependencies

Depends on: curve.curve_p2 green geom.extent1d green geom.extent2d green geom.extent3d green geom.solution_array partial geom.tol green geom.vector2d green geom.vector3d green intersect.surface_intersector_p1 partial intersect.surface_intersector_p2 partial nurbs.b_spline_curve_p1 green surface.surface_p2 partial

Soft dependencies: curve.curve_p1 partial curve.curve_p4 partial curve.curve_p6 green geom.geom_utility_p1 green geom.object partial intersect.surface_drop_lib_p1 partial nurbs.b_spline_curve_n_lib green nurbs.b_spline_curve_p2 green surface.surface_cache_p1 green surface.surface_p1 partial surface.surface_p5 green surface.surface_p7 partial surface.surface_p8 partial

Dependents: intersect.surface_intersector_p4 partial intersect.surface_intersector_p5 partial

Soft dependents: none

Upstream functions

Upstream functionDefined atLinesRust (from the file header)
SmSurfaceIntersector::FindBoundaryStartPointsSmSurfaceIntersector.cpp:10781083[SurfaceIntersector::find_boundary_start_points], [SurfaceIntersector::find_boundary_start_points_with_caches]
SmSurfaceIntersector::ComputeNextPointSmSurfaceIntersector.cpp:3036222[SurfaceIntersector::compute_next_point], [NextPoint]
sm_UpdateTsectPointSmSurfaceIntersector.cpp:426278[SurfaceIntersector::update_tsect_point]
SmSurfaceIntersector::TestPointSmSurfaceIntersector.cpp:4364487[SurfaceIntersector::test_point]
SmSurfaceIntersector::SplitSpanSmSurfaceIntersector.cpp:774662[SurfaceIntersector::split_span]
Module file-header table (6 rows)
RustUpstream
[SurfaceIntersector::find_boundary_start_points], [SurfaceIntersector::find_boundary_start_points_with_caches]FindBoundaryStartPoints
[SurfaceIntersector::compute_next_point], [NextPoint]ComputeNextPoint
[SurfaceIntersector::update_tsect_point]sm_UpdateTsectPoint (static)
[SurfaceIntersector::test_point]TestPoint
[SurfaceIntersector::split_span]SplitSpan
[TsectPnt::zeroed]a point fresh from m_vTSPntMgr (zero-filled)

Upstream tests reaching this unit

prog_test:my_test_parallel_projection, prog_test:my_test_tsurf_projection, prog_test:my_test_surface_interface, prog_test:my_test_ssi, prog_test:my_test_tsurf_section, prog_test:my_test_planar_section