solidcore

Units / surface

surface.surf_of_extrusion_p1 green

Layer
24
Upstream lines
1,865
Functions
37
Rust module
surface::surf_of_extrusion::p1

Source: crates/solidcore/src/surface/surf_of_extrusion/p1.rs

Upstream: source/SMLib/inc/SmSurfOfExtrusion.h, source/SMLib/src/SmSurfOfExtrusion.cpp

Notes

UPDATE after curve.curve_p9 (PR #13): sm_IntersectGenerators now calls Curve::global_curve_solve (ProjectedIntersect); difftest 2055 cases, 1999 pass bit-identical, 0 failed, 56 deferred (surface.surface_p4 30, surface.surface_p5 26; the 41 curve.curve_p9 deferrals are gone), --perturb SENSITIVE 1999/1999. Counts below are from before. PARTIAL: difftest 2055 cases (1255 fixture, incl. 1082 second-review cases in review2_extra_cases.json: TestSmCreateExtrude, the my_ssi_analytic_demo cylinders, seams, orientations, tolerance-limit tilts, tiny/huge scales, SmHyperbola/SmParabola generators; 800 generated over B-spline, SmLine, SmCircle, SmEllipse, SmHyperbola, SmParabola generators), 1958 pass bit-identical (max_rel_err 0), 0 failed, 97 deferred: 56 in STEPInversion of a non-perpendicular generator (SmBSplineSurface::STEPInversion solves; since surface.surface_p1 merged (PR #43) they reach surface.surface_p4 30: SmSurface::GlobalPointSolve, surface.surface_p5 26: SmSurface::LocalPointSolve), curve.curve_p9 41 (sm_IntersectGenerators: SmCurve::GlobalCurveSolve); --perturb SENSITIVE. UNPORTED(surface.surf_of_extrusion_p1) owner stubs in SmLine/SmEllipse/SmHyperbola/SmParabola::MakeNurb not wired (curves hold only an ObjectRef owner; see plan/findings.md); the SmLine, SmHyperbola and SmParabola owner steps are applied by SurfOfExtrusion itself. Review fixes: hyperbola/parabola owner step, InvalidInput->1007 status mapping, conversions/DropPointFast return SM_ERR without NURB; second review: STEPInversion owner step for hyperbola/parabola GlobalPointSolveSTEP (rel. err up to 9e-3 before), FFI circle/ellipse/line size guards relaxed to > 0; 20000 seeds 0 failed, max_rel_err 1.7e-16. 37 fns; largest: sm_IntersectGenerators, SmSurfOfExtrusion::STEPInversion, SmSurfOfExtrusion::DropPointFast, SmSurfOfExtrusion::MakeNurb; unit-SCC #22 (220 units); 319 upstream test entry points reach this unit Re-run with surface.surface_p5's back-edges wired (PR #50): cases=2055 passed=1958 failed=0 deferred=97 max_rel_err=0e0 blocked_by=curve.curve_p9(41),intersect.surface_intersector_p3(26),surface.surface_p4(30). Re-run with surface.surface_point_solve_p3 (PR #106): cases=2055 passed=2002 failed=0 deferred=53 max_rel_err=0.0 blocked_by=surface.surface_p3(51),surface.surface_p8(2). Re-run after merging PR #106 (surface.surface_point_solve_p3 wired, 2026-10-15): 2055 cases, 2053 pass, 2 deferred (surface.surface_p8 2), 0 failed, max_rel_err 0. Re-run after wiring PR #118 (surface.surface_p8 and its back-edges, GlobalPointSolve_0 included): 2055 cases, 2055 pass, 0 deferred, 0 failed, max_rel_err 0; green.

Difftest

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

Blocked by

Nothing: no deferred cases.

Report JSON (per-case results)

Dependencies

Depends on: curve.curve_p2 green geom.axis2_placement green geom.extent1d green geom.extent2d green geom.geom_utility_p1 green geom.object partial geom.solution_array partial geom.tol green geom.vector2d green geom.vector3d green nurbs.b_spline_curve_p1 green nurbs.b_spline_curve_p2 green nurbs.b_spline_surface_n_lib_p1 green nurbs.b_spline_surface_p1 green nurbs.b_spline_surface_p2 partial surface.surface_p2 partial

Soft dependencies: curve.curve_p1 partial curve.curve_p4 partial curve.curve_p5 partial curve.curve_p6 green curve.curve_p8 green curve.curve_p9 green curve.line green nlib.srf_basic green nurbs.b_spline_curve_n_lib green nurbs.b_spline_curve_p3 partial

Dependents: primitive.primitive_creation_p1 claimed surface.surf_of_extrusion_p2 partial

Soft dependents: blend.fillet_custom_solver partial surface.surface_p1 partial

Upstream functions

Upstream functionDefined atLinesRust (from the file header)
SmSurfOfExtrusion::SmSurfOfExtrusionSmSurfOfExtrusion.h:1271[SurfOfExtrusion], [CurveOrientType]
SmSurfOfExtrusion::GetSTEPUVDomainSmSurfOfExtrusion.h:2491[SurfOfExtrusion::step_uv_domain], [SurfOfExtrusion::gen_curve], [SurfOfExtrusion::set_context], [SurfOfExtrusion::toggle_swap_uv_bit]
SmSurfOfExtrusion::GetGenCurveSmSurfOfExtrusion.h:2591[SurfOfExtrusion::step_uv_domain], [SurfOfExtrusion::gen_curve], [SurfOfExtrusion::set_context], [SurfOfExtrusion::toggle_swap_uv_bit]
SmSurfOfExtrusion::SetContextSmSurfOfExtrusion.h:4082[SurfOfExtrusion::step_uv_domain], [SurfOfExtrusion::gen_curve], [SurfOfExtrusion::set_context], [SurfOfExtrusion::toggle_swap_uv_bit]
SmSurfOfExtrusion::ToggleSwapUVBitSmSurfOfExtrusion.h:4401[SurfOfExtrusion::step_uv_domain], [SurfOfExtrusion::gen_curve], [SurfOfExtrusion::set_context], [SurfOfExtrusion::toggle_swap_uv_bit]
SmSurfOfExtrusion::GetClassStringSmSurfOfExtrusion.h:4871[SurfOfExtrusion::is_kind_of], [SurfOfExtrusion::TYPE], [SurfOfExtrusion::type_code], [SurfOfExtrusion::type_string], [SurfOfExtrusion::class_string]
SmSurfOfExtrusion::GetTypeSmSurfOfExtrusion.h:4871[SurfOfExtrusion::is_kind_of], [SurfOfExtrusion::TYPE], [SurfOfExtrusion::type_code], [SurfOfExtrusion::type_string], [SurfOfExtrusion::class_string]
SmSurfOfExtrusion::GetTypeStringSmSurfOfExtrusion.h:4871[SurfOfExtrusion::is_kind_of], [SurfOfExtrusion::TYPE], [SurfOfExtrusion::type_code], [SurfOfExtrusion::type_string], [SurfOfExtrusion::class_string]
SmSurfOfExtrusion::SetCurvePointSmSurfOfExtrusion.h:4941[SurfOfExtrusion::set_curve_point], [SurfOfExtrusion::set_curve_vec]
SmSurfOfExtrusion::SetCurveVecSmSurfOfExtrusion.h:4951[SurfOfExtrusion::set_curve_point], [SurfOfExtrusion::set_curve_vec]
SmSurfOfExtrusion::SmSurfOfExtrusionSmSurfOfExtrusion.cpp:3790[SurfOfExtrusion], [CurveOrientType]
SmSurfOfExtrusion::SmSurfOfExtrusionSmSurfOfExtrusion.cpp:13889[SurfOfExtrusion], [CurveOrientType]
SmSurfOfExtrusion::SmSurfOfExtrusionSmSurfOfExtrusion.cpp:23428[SurfOfExtrusion], [CurveOrientType]
SmSurfOfExtrusion::~SmSurfOfExtrusionSmSurfOfExtrusion.cpp:2686Drop (implicit)
SmSurfOfExtrusion::operator==SmSurfOfExtrusion.cpp:28133[SurfOfExtrusion::approx_eq]
SmSurfOfExtrusion::AdjustSTEPUVDomainSmSurfOfExtrusion.cpp:32978[SurfOfExtrusion::adjust_step_uv_domain]
SmSurfOfExtrusion::UpdateAnalyticalDomainSmSurfOfExtrusion.cpp:43151[SurfOfExtrusion::update_analytical_domain]
SmSurfOfExtrusion::CopySmSurfOfExtrusion.cpp:48811[SurfOfExtrusion::copy], Clone
SmSurfOfExtrusion::ReparameterizeSmSurfOfExtrusion.cpp:50555[SurfOfExtrusion::reparameterize]
SmSurfOfExtrusion::STEPInversionSmSurfOfExtrusion.cpp:579159[SurfOfExtrusion::step_inversion]
SmSurfOfExtrusion::ConvertUVFromSTEPToNURBSSmSurfOfExtrusion.cpp:75953[SurfOfExtrusion::convert_uv_from_step_to_nurbs], [SurfOfExtrusion::convert_uv_from_nurbs_to_step]
SmSurfOfExtrusion::ConvertUVFromNURBSToSTEPSmSurfOfExtrusion.cpp:82433[SurfOfExtrusion::convert_uv_from_step_to_nurbs], [SurfOfExtrusion::convert_uv_from_nurbs_to_step]
SmSurfOfExtrusion::CreateCanonicalSmSurfOfExtrusion.cpp:86522[SurfOfExtrusion::create_canonical]
SmSurfOfExtrusion::EvaluateSTEPSmSurfOfExtrusion.cpp:897106[SurfOfExtrusion::evaluate_step], [SurfOfExtrusion::evaluate_step_point]
SmSurfOfExtrusion::EvaluateSTEPPointSmSurfOfExtrusion.cpp:100921[SurfOfExtrusion::evaluate_step], [SurfOfExtrusion::evaluate_step_point]
SmSurfOfExtrusion::GetCanonicalSmSurfOfExtrusion.cpp:103612[SurfOfExtrusion::canonical]
SmSurfOfExtrusion::GetSTEPLinearParamExtentSmSurfOfExtrusion.cpp:105612[SurfOfExtrusion::step_linear_param_extent]
SmSurfOfExtrusion::GetGenDirParamExtentSmSurfOfExtrusion.cpp:110622[SurfOfExtrusion::gen_dir_param_extent]
SmSurfOfExtrusion::GetMaxAnalyticDomainSmSurfOfExtrusion.cpp:114115[SurfOfExtrusion::max_analytic_domain]
SmSurfOfExtrusion::GetExtrusionVectorSmSurfOfExtrusion.cpp:11824[SurfOfExtrusion::extrusion_vector], [SurfOfExtrusion::origin]
SmSurfOfExtrusion::GetOriginSmSurfOfExtrusion.cpp:11914[SurfOfExtrusion::extrusion_vector], [SurfOfExtrusion::origin]
SmSurfOfExtrusion::CreateDirectrixFromPointSmSurfOfExtrusion.cpp:1407109[SurfOfExtrusion::create_directrix_from_point]
SmSurfOfExtrusion::DropPointFastSmSurfOfExtrusion.cpp:1730134[SurfOfExtrusion::drop_point_fast]
sm_IntersectGeneratorsSmSurfOfExtrusion.cpp:2658499[intersect_generators], [GeneratorIntersection]
SmSurfOfExtrusion::MakeNurbSmSurfOfExtrusion.cpp:3668116[SurfOfExtrusion::make_nurb]
SmSurfOfExtrusion::TransformSmSurfOfExtrusion.cpp:380888[SurfOfExtrusion::transform]
SmSurfOfExtrusion::IsKindOfSmSurfOfExtrusion.cpp:45894[SurfOfExtrusion::is_kind_of], [SurfOfExtrusion::TYPE], [SurfOfExtrusion::type_code], [SurfOfExtrusion::type_string], [SurfOfExtrusion::class_string]
Module file-header table (27 rows)
RustUpstream
[SurfOfExtrusion], [CurveOrientType]SmSurfOfExtrusion, SmCurveOrientType
[SurfOfExtrusion::new]SmSurfOfExtrusion(pGenCurve, crOrigin, crExtrusionVec, crAnalUVDomain, bSwapUV)
[SurfOfExtrusion::new_infinite]SmSurfOfExtrusion(pGenCurve, crExtrusionVec, bSwapUV)
[SurfOfExtrusion::empty]SmSurfOfExtrusion()
[SurfOfExtrusion::copy], CloneSmSurfOfExtrusion(const SmSurfOfExtrusion&), Copy
Drop (implicit)~SmSurfOfExtrusion
[SurfOfExtrusion::approx_eq]operator==
[SurfOfExtrusion::adjust_step_uv_domain]AdjustSTEPUVDomain
[SurfOfExtrusion::update_analytical_domain]UpdateAnalyticalDomain
[SurfOfExtrusion::reparameterize]Reparameterize
[SurfOfExtrusion::step_inversion]STEPInversion
[SurfOfExtrusion::convert_uv_from_step_to_nurbs], [SurfOfExtrusion::convert_uv_from_nurbs_to_step]ConvertUVFromSTEPToNURBS, ConvertUVFromNURBSToSTEP
[SurfOfExtrusion::create_canonical]CreateCanonical
[SurfOfExtrusion::evaluate_step], [SurfOfExtrusion::evaluate_step_point]EvaluateSTEP, EvaluateSTEPPoint
[SurfOfExtrusion::canonical]GetCanonical
[SurfOfExtrusion::step_linear_param_extent]GetSTEPLinearParamExtent
[SurfOfExtrusion::gen_dir_param_extent]GetGenDirParamExtent
[SurfOfExtrusion::max_analytic_domain]GetMaxAnalyticDomain
[SurfOfExtrusion::extrusion_vector], [SurfOfExtrusion::origin]GetExtrusionVector, GetOrigin
[SurfOfExtrusion::create_directrix_from_point]CreateDirectrixFromPoint
[SurfOfExtrusion::drop_point_fast]DropPointFast
[intersect_generators], [GeneratorIntersection]sm_IntersectGenerators (file static)
[SurfOfExtrusion::make_nurb]MakeNurb
[SurfOfExtrusion::transform]Transform
[SurfOfExtrusion::is_kind_of], [SurfOfExtrusion::TYPE], [SurfOfExtrusion::type_code], [SurfOfExtrusion::type_string], [SurfOfExtrusion::class_string]IsKindOf, GetType, GetTypeString, GetClassString (SM_COMMON)
[SurfOfExtrusion::step_uv_domain], [SurfOfExtrusion::gen_curve], [SurfOfExtrusion::set_context], [SurfOfExtrusion::toggle_swap_uv_bit]GetSTEPUVDomain, GetGenCurve, SetContext, ToggleSwapUVBit (inline)
[SurfOfExtrusion::set_curve_point], [SurfOfExtrusion::set_curve_vec]SetCurvePoint, SetCurveVec (inline, protected)

Upstream tests reaching this unit

prog_test:my_test_extent3d, prog_test:my_test_vector2d, 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