solidcore

Units / surface

surface.surf_of_revolution_p3 partial

Layer
24
Upstream lines
1,620
Functions
12
Rust module
surface::surf_of_revolution::p3

Source: crates/solidcore/src/surface/surf_of_revolution/p3.rs

Upstream: source/SMLib/src/SmSurfOfRevolution.cpp

Notes

PARTIAL: after merging main (surface.torus, surface.cone_p1, surface.surface_p1): 26705 cases, 26687 bit-identical, 0 failed, 18 deferred (surface.cone_p1 18: the Rust side cannot build the SmCone operand); after merging surface.sphere (PR #100) the IntersectWithSphere cases build the Rust SmSphere::CreateCanonical operand and run (26 cases now compared); wired surface.torus and surface.cone_p1 Transform/ReadFromDB back-edges (transform_using with the derived iso maker); ConvertDomainFromNURBSToSTEP body shared with surface.surface_p1. Before the merge: difftest 26705 cases (55 fixture + 3695 review-adversarial fixture + 1092 review-2 scale fixture + 4654 review-2 adversarial fixture + 240 review-3 update fixture + 5829 review-3 adversarial fixture + 10240 review-3b adversarial fixture + 900 generated), 26118 bit-identical (max_rel_err 0), 0 failed, 587 deferred: surface.sphere 26 and surface.cone_p1 18 (IntersectWithSphere / IntersectWithCone cases: the Rust side cannot build the SmSphere / SmCone operand), surface.surface_p1 543 (IntersectWithSurfOfRevolution without approximation tolerance: the bounding box zone tolerance needs SmSurface::GetFace; the paths without exact polar conversion, SmSurface::LocalPointSolve (surface.surface_p5) and SmSTEPSurface (surface.surface_p1), are ported but not reached by these inputs). Perturbation: 26118/26118 detected. Review fixes: FFI accepts zero-width drop/intersect/update domains and zero tolerances (Reparameterize keeps positive extents); UNPORTED(surface.surf_of_revolution_p1) and UNPORTED(surface.plane_p1) CreateIsoParametricCurve stubs in surface.surface_cache_p1 retagged to surface.surface_cache_p1 (iso curves stored as BSplineCurve). Review fixes 2: FFI accepts any finite Transform / rebuild scale (zero, tiny, negative; the SM_EFF_ZERO branch of Transform is now compared); intersection bounding box error carries the intersection op path; SurfaceKind::SurfOfRevolution added to the surface.surface_p7 dispatchers (EvaluateNormal / IsClosed base bodies, IsPlanar through SmBSplineSurface::CalculateBoundingBox). After merging main: SurfaceKind::SurfOfRevolution added to intersect.surface_silhouette (EvaluateGeometric / EvaluateNormalSection: no override, stubbed to surface.surface_p3 as for B-splines) and surface.surface_cache_p3 BuildTreeBase (its NURB, SmSurfOfRevolution::MakeNurb on a copy when missing). Review fixes 3: runner maps SolidError::InvalidInput to 1007 (SM_ERR_INVALID_INPUT; SmBSplineCurve::Trim via AdjustSTEPInterval in UpdateAnalyticalDomain with a B-spline generator and a zero-width U domain); after merging main, SurfaceKind::SurfOfRevolution added to the intersect.surface_intersector_p2 IsSingularity dispatcher (base body, stubbed to surface.surface_p5). Also covers the inherited SmBSplineSurface::Reverse / SwapUV of a surface of revolution (through SmSurface dispatch). Wired the UNPORTED(surface.surf_of_revolution_p3) SmSurfOfRevolution::ReadFromDB stub in SmSurface::ReadFromDB: SurfaceKind::SurfOfRevolution joins the SmSurface dispatch (Surface::reverse / swap_uv / reparameterize / transform / drop_point_fast / convert_uv_* now take the kernel; STEPInversion, AdjustSTEPUVDomain, TrimWithDomain stubbed to surface.surf_of_revolution_p2). Extended curve.ellipse_p1 (PolarConversion::read_from_db_with_curve: the bHasCurve branch of SmPolarConversion::ReadFromDB) and geom.solution_array (SolutionObject::natural_uv_domain for surface handles). Co-ports SmSurface::ConvertDomainFromNURBSToSTEP (surface.surface_p1). MakeNurbWithSweepParams lives in surface::surf_of_revolution::p1 (co-ported there by PR #15). 12 fns; largest: SmSurfOfRevolution::IntersectWithSurfOfRevolution, SmSurfOfRevolution::DropPointFast, SmSurfOfRevolution::RebuildSTEPFromNURBParameters, SmSurfOfRevolution::ConvertUVFromSTEPToNURBS; cycle back-edges (call into later units; stub or co-port): surface.surface_p5(2), surface.surface_p1(1); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit Review PR #106 recertification: 26705 cases, 26661 pass, 44 deferred, 0 failed, max_rel_err=0.0; deferred: surface.cone_p1 18, surface.sphere 26.

Difftest

Cases
26,705
Passed
26,687
Deferred
18
Failed
0
Both errored
0
Max rel. error
0.0
Tolerance
1e-09 rel.
Seeds
16

Blocked by

Unported unitDeferred cases
surface.cone_p1 green18

Report JSON (per-case results)

Dependencies

Depends on: curve.curve_p2 green curve.curve_p5 partial curve.iso_curve green geom.axis2_placement green geom.extent1d green geom.extent2d green geom.global_solver partial 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_surface_n_lib_p1 green nurbs.b_spline_surface_p1 green nurbs.b_spline_surface_p2 partial surface.surf_of_revolution_p1 green surface.surface_p2 partial topology.database_io green

Soft dependencies: curve.curve_p1 partial curve.curve_p4 partial curve.curve_p6 green curve.curve_p8 green curve.ellipse_p1 green curve.ellipse_p2 green geom.extent3d green geom.geom_utility_p1 green nlib.srf_basic green nurbs.b_spline_curve_n_lib green nurbs.b_spline_curve_p2 green

Dependents: surface.cone_p2 claimed surface.cone_p3 partial surface.sphere green surface.surf_of_revolution_p2 partial

Soft dependents: blend.fillet_solver_p2 todo

Upstream functions

Upstream functionDefined atLinesRust (from the file header)
SmSurfOfRevolution::CopySmSurfOfRevolution.cpp:38511[SurfOfRevolution::copy]
SmSurfOfRevolution::ReparameterizeSmSurfOfRevolution.cpp:40259[SurfOfRevolution::reparameterize]
SmSurfOfRevolution::MakeNurbWithSweepParamsSmSurfOfRevolution.cpp:95795[SurfOfRevolution::make_nurb_with_sweep_params]
SmSurfOfRevolution::ConvertUVFromSTEPToNURBSSmSurfOfRevolution.cpp:2089161[SurfOfRevolution::convert_uv_from_step_to_nurbs]
SmSurfOfRevolution::DropPointFastSmSurfOfRevolution.cpp:2356304[SurfOfRevolution::drop_point_fast]
SmSurfOfRevolution::IntersectWithConeSmSurfOfRevolution.cpp:403230[SurfOfRevolution::intersect_with_cone]
SmSurfOfRevolution::IntersectWithSphereSmSurfOfRevolution.cpp:406931[SurfOfRevolution::intersect_with_sphere]
SmSurfOfRevolution::IntersectWithSurfOfRevolutionSmSurfOfRevolution.cpp:4107459[SurfOfRevolution::intersect_with_surf_of_revolution], [Revolved]
SmSurfOfRevolution::RebuildSTEPFromNURBParametersSmSurfOfRevolution.cpp:4995231[SurfOfRevolution::rebuild_step_from_nurb_parameters]
SmSurfOfRevolution::TransformSmSurfOfRevolution.cpp:533494[SurfOfRevolution::transform]
SmSurfOfRevolution::UpdateAnalyticalDomainSmSurfOfRevolution.cpp:581346[SurfOfRevolution::update_analytical_domain]
SmSurfOfRevolution::ReadFromDBSmSurfOfRevolution.cpp:652899[SurfOfRevolution::read_from_db]
Module file-header table (13 rows)
RustUpstream
[SurfOfRevolution::copy]Copy
[SurfOfRevolution::reparameterize]Reparameterize
[SurfOfRevolution::make_nurb_with_sweep_params]MakeNurbWithSweepParams (co-ported in p1)
[SurfOfRevolution::convert_uv_from_step_to_nurbs]ConvertUVFromSTEPToNURBS
[SurfOfRevolution::drop_point_fast]DropPointFast
[SurfOfRevolution::intersect_with_cone]IntersectWithCone
[SurfOfRevolution::intersect_with_sphere]IntersectWithSphere
[SurfOfRevolution::intersect_with_surf_of_revolution], [Revolved]IntersectWithSurfOfRevolution
[SurfOfRevolution::rebuild_step_from_nurb_parameters]RebuildSTEPFromNURBParameters
[SurfOfRevolution::transform]Transform
[SurfOfRevolution::update_analytical_domain]UpdateAnalyticalDomain
[SurfOfRevolution::read_from_db]ReadFromDB
[SurfOfRevolution::convert_domain_from_nurbs_to_step]SmSurface::ConvertDomainFromNURBSToSTEP (body in surface::surface::p1)

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