solidcore

Units / surface

surface.surface_p7 partial

Layer
26
Upstream lines
2,406
Functions
23
Rust module
surface::surface::p7

Source: crates/solidcore/src/surface/surface/p7.rs

Upstream: source/SMLib/src/SmSurface.cpp

Notes

PARTIAL: difftest 3660 cases (660 fixture: EvaluateNormal at poles/folds/pinched corners, IsClosed on a rational cylinder and upstream Surface.sms, sm_LoadGuesses with the my_test_surface_closest_point points, GoodDrop/CheckSeam branches, a separated-surface GlobalSurfaceSolve, zero/NaN/tiny projection vectors; 3000 generated over B-splines (incl. 1e-4/1e4 scales), planes and curve-bounded surfaces), 3039 pass bit-identical, 621 deferred (all surface.surface_p1: surface cache for the global solves/projection, SmCSNormalizeENFO, the FindDegenParamForDirection EFO, IsFlatCorner, EvaluateSTEP, GetFace in the B-spline bbox); --perturb SENSITIVE 3039/3039. CO-PORTED from surface.surface_p1: SmSurface::Evaluate1stDerivatives, Evaluate2ndDerivatives, EvaluateDirectionalDerivs -> surface::surface::p7. Back-edges wired (12 UNPORTED(surface.surface_p7) sites, then intersect.surface_tracer's and intersect.point_class's EvaluateNormal after they merged + a mislabelled UNPORTED(surface.surface_p5) IsClosed in b_spline_surface::p1 + the co-ported wrappers' stubs); re-run all pass: crv_on_surf +185, tangent_field +132, surface_cache_p1 +107, surface_cache_p2 +28, curve_bounded_surface +25, intersect.surface_tracer +22, b_spline_surface_p1 +15, intersect.surface_intersector_p1 +10 newly compared cases, none promoted. (CO-PORTED in intersect.surface_intersector_p1 (PR #33): SmSurface::IsClosed (default tolerance, no continuity; SmPlane override) -> private helper surface_is_closed in intersect::surface_intersector::p1; replace it with the real Surface::is_closed; replaced by Surface::is_closed in PR #24, which also points its Evaluate1stDerivatives/EvaluateDirectionalDerivs/EvaluateNormal at surface::surface::p7.) SurfaceEvaluate gained evaluate_normal (default = SmSurface body). 23 fns; largest: SmSurface::EvaluateNormal, SmSurface::FindDegenParamForDirection, SmSurface::LocalCurveSolve, SmSurface::IsClosed; cycle back-edges (call into later units; stub or co-port): surface.surface_p1(26), intersect.adv_surface_intersector(1), intersect.surface_intersector_p5(1), topology.face_p4(1); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit intersect.surface_intersector_p5 wired (PR #82): CreateParallelProjectionCurves fully ported (takes the kernel, returns None for NULL UV curves), deferring at its surface cache (SmSurface::CalculateContinuities, surface.surface_p6); now 3660 cases, 3453 pass, 207 deferred (surface.surface_p8 72, surface.surface_p11 59, surface.surface_p4 52, surface.surface_p6 24). [surface.surface_p6 wired (PR #92): 3660 cases, 3456 pass, 204 deferred (surface.surface_p1 15, surface.surface_p11 59, surface.surface_p4 52, surface.surface_p8 78)] Re-run with surface.surface_p5's back-edges wired (PR #50): cases=3660 passed=3505 failed=0 deferred=155 max_rel_err=0e0 blocked_by=intersect.adv_surface_intersector(9),surface.surface_p11(59),surface.surface_p6(15),surface.surface_p8(72). surface.surface_p11 (PR #120, after merging main with surface.surface_p3): cases=3660 passed=3567 failed=0 deferred=93 (surface.surface_p1 15, surface.surface_p8 78); GlobalCurveSolve/GlobalSurfaceSolve take the kernel and solution handles and run the leaf solves; the cases now compare the first 16 solutions (type, value, parameters), and the generator adds normalize and signed directed curve solves and surface/surface solves (lifted patches; intersect for the node pairs); SmCSGlobalSolver/SmSSGlobalSolver::BranchMayContainAnswers read the solve caches' polar boxes; --perturb SENSITIVE 3522/3522. Re-run (PR #118): 3660 cases, 3509 pass, 151 deferred (surface.surface_p5 72 via GlobalPointSolve_0, which has no surface handle: dispatch gap in plan/findings.md; surface.surface_p11 59, surface.surface_p1 15, surface.surface_point_solve_p3 5). Re-run (PR #118 review): GlobalPointSolve_0 takes the kernel and the surface handle and runs SpGlobalSolver (SmSPGlobalSolver::BranchMayContainAnswers reads the cache); the Gps0 cases now compare the solutions: 3660 cases, 3581 pass, 79 deferred (surface.surface_p11 64, surface.surface_p1 15), 0 failed; the 72 surface.surface_p5 deferrals are gone. Re-run (PR #118, round 3): 3660 cases, 3644 pass, 16 deferred (surface.surface_p1 15, intersect.surface_intersector_p2 1), 0 failed; --perturb SENSITIVE 3644/3644.

Difftest

Cases
3,660
Passed
3,659
Deferred
1
Failed
0
Both errored
0
Max rel. error
0.0
Tolerance
1e-09 rel.
Seeds
16

Blocked by

Unported unitDeferred cases
intersect.surface_intersector_p2 partial1

Report JSON (per-case results)

Dependencies

Depends on: geom.a_object partial geom.extent1d green geom.extent2d green geom.extent3d green geom.global_solver partial geom.local_solve_nd green geom.object partial geom.polar_box green geom.pseudo_box green geom.solution_array partial geom.tree partial geom.vector2d green geom.vector3d green nurbs.b_spline_surface_p1 green surface.surface_cache_p1 green surface.surface_p2 partial

Soft dependencies: curve.curve_cache green curve.curve_p2 green geom.axis2_placement green geom.geom_utility_p2 green geom.local_solve1d green geom.tol green nurbs.b_spline_curve_p1 green nurbs.b_spline_curve_p2 green surface.surface_cache_p3 partial

Dependents: blend.fillet_custom_solver partial blend.fillet_standard_solver_p1 claimed intersect.curve_class_p4 claimed intersect.surface_drop_lib_p1 partial intersect.surface_drop_lib_p2 green intersect.surface_drop_lib_p3 claimed query.face_p3 claimed surface.offset_surface green surface.plane_p2 partial surface.surface_p11 partial surface.surface_p3 green surface.surface_p4 green surface.surface_p5 green surface.surface_p6 green surface.surface_p8 partial topology.edge partial topology.face_p2 partial topology.vertexuse partial

Soft dependents: blend.fillet_corner_p1 todo blend.fillet_corner_p2 todo blend.fillet_executive_p1 todo blend.fillet_geom_p1 claimed blend.fillet_geom_p5 todo blend.fillet_geom_p6 todo blend.fillet_solver_p1 claimed blend.fillet_solver_p4 claimed blend.fillet_standard_solver_p2 todo boolean.topology_intersector_p1 partial heal.face_props partial heal.heal_data_p3 partial intersect.adv_surface_intersector partial intersect.curve_class_p2 claimed intersect.curve_class_p8 partial intersect.point_class partial intersect.ray_tracer partial intersect.surface_drop_curve partial intersect.surface_intersector_p1 partial intersect.surface_intersector_p2 partial intersect.surface_intersector_p3 partial intersect.surface_intersector_p4 partial intersect.surface_silhouette green intersect.surface_tracer partial intersect.topology_solver_p2 partial offset.offset_executive_p1 claimed offset.offset_geometry_creation claimed primitive.primitive_creation_p1 claimed primitive.primitive_creation_p2 todo primitive.primitive_creation_p3 todo query.brep claimed query.tess partial surface.surface_p10 partial surface.surface_point_solve_p1 green sweep.rotational_sweep_geometry partial sweep.trans_sweep_geometry partial topology.brep_p1 claimed topology.brep_p3 claimed topology.brep_p4 claimed topology.brep_p8 claimed topology.edgeuse_p1 partial topology.edgeuse_p2 partial topology.edgeuse_p3 claimed topology.face_p1 partial topology.face_p3 claimed topology.face_p4 claimed topology.loopuse partial topology.trimming_tools partial

Upstream functions

Upstream functionDefined atLinesRust (from the file header)
sm_LoadGuessesSmSurface.cpp:4117169[load_guesses]
sm_PassSCConvergenceTestSmSurface.cpp:475056[pass_sc_convergence_test]
SmSurface::ApproxDerivativeLengthsSmSurface.cpp:573130[approx_derivative_lengths]
SmSurface::FindDegenParamForDirectionSmSurface.cpp:6757292[Surface::find_degen_param_for_direction], [DegenParam]
sm_CheckSeamDropSmSurface.cpp:783785[check_seam_drop]
SmSurface::ComputeHigherOrderDerivsSmSurface.cpp:885567[compute_higher_order_derivs], [HigherOrderDerivs]
SmSurface::ComputeInwardVectorSmSurface.cpp:893024[compute_inward_vector]
SmSurface::CreateParallelProjectionCurvesSmSurface.cpp:9465120[Surface::create_parallel_projection_curves]
sm_GoodDropResultSmSurface.cpp:10256104[good_drop_result]
SmSurface::DropPointsToTangentPlaneSmSurface.cpp:1063645[drop_points_to_tangent_plane]
SmSurface::DropVectorsSmSurface.cpp:1068939[drop_vectors_at]
SmSurface::EvaluateNormalSmSurface.cpp:11016449[Surface::evaluate_normal], [base_evaluate_normal]
SmSurface::GetBrepSmSurface.cpp:120174[Surface::brep]
SmSurface::GetFlatCornersSmSurface.cpp:1265546[Surface::flat_corners], [FlatCorners]
SmSurface::GlobalCurveSolveSmSurface.cpp:1778199[Surface::global_curve_solve]
SmSPGlobalSolver::BranchMayContainAnswersSmSurface.cpp:1956891[SpGlobalSolver]
SmSurface::GlobalPointSolve_0SmSurface.cpp:2026474[Surface::global_point_solve_0]
sm_PassSSConvergenceTestSmSurface.cpp:2085449[pass_ss_convergence_test]
SmSSGlobalSolver::BranchMayContainAnswersSmSurface.cpp:2096448[SpGlobalSolver]
SmSurface::GlobalSurfaceSolveSmSurface.cpp:2167662[Surface::global_surface_solve]
SmSurface::IsClosedSmSurface.cpp:22157200[Surface::is_closed], [base_is_closed]
SmSurface::IsPlanarSmSurface.cpp:2236313[b_spline_is_planar]
SmSurface::LocalCurveSolveSmSurface.cpp:25538240[Surface::local_curve_solve], [CurveSurfaceSolution]
Module file-header table (25 rows)
RustUpstream
[Surface::evaluate_normal], [base_evaluate_normal]EvaluateNormal (virtual: the SmPlane and SmCurveBoundedSurface overrides; the SmSurface body)
SurfaceEvaluate::evaluate_normal (trait method in p2)EvaluateNormal for code generic over the surface type (default: the SmSurface body; [Surface] dispatches)
[Surface::is_closed], [base_is_closed]IsClosed (virtual: the SmPlane override; the SmSurface body)
[Surface::is_planar]IsPlanar (virtual: the SmPlane override; the SmSurface body)
[b_spline_is_planar]SmSurface::IsPlanar of an SmBSplineSurface (over its CalculateBoundingBox override)
[Surface::brep]GetBrep
[Surface::flat_corners], [FlatCorners]GetFlatCorners
[approx_derivative_lengths]ApproxDerivativeLengths
[compute_higher_order_derivs], [HigherOrderDerivs]ComputeHigherOrderDerivs
[compute_inward_vector]ComputeInwardVector
[drop_points_to_tangent_plane]DropPointsToTangentPlane
[drop_vectors_at]DropVectors
[Surface::find_degen_param_for_direction], [DegenParam]FindDegenParamForDirection
[Surface::global_point_solve_0]GlobalPointSolve_0
[Surface::global_curve_solve]GlobalCurveSolve
[Surface::global_surface_solve]GlobalSurfaceSolve
[Surface::local_curve_solve], [CurveSurfaceSolution]LocalCurveSolve
[Surface::create_parallel_projection_curves]CreateParallelProjectionCurves
[SpGlobalSolver]SmSPGlobalSolver (BranchMayContainAnswers)
[SsGlobalSolver]SmSSGlobalSolver (BranchMayContainAnswers)
[load_guesses]sm_LoadGuesses (static)
[pass_sc_convergence_test]sm_PassSCConvergenceTest (static)
[pass_ss_convergence_test]sm_PassSSConvergenceTest (static)
[check_seam_drop]sm_CheckSeamDrop (static)
[good_drop_result]sm_GoodDropResult (static)

Upstream tests reaching this unit

prog_test:my_test_surface_closest_point, prog_test:my_test_drop_point, prog_test:my_test_matrix, prog_test:my_test_reversed_line_join, SM_API_test:TestSmCreateRectangle, SM_API_test:TestSmCreateRegularPolygon