solidcore

Units / surface

surface.srf_in_volume partial

Layer
30
Upstream lines
779
Functions
31
Rust module
surface::srf_in_volume

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

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

Notes

PARTIAL: difftest 2036 cases (2000 generated + 36 inline; B-spline and plane base surfaces; transform, plain, default and component-constructed twist, unbend and bend volume chains; every owned op), 1968 pass bit-identical, 68 deferred (surface.surface_p4 59: the base surface's STEPInversion reaches SmSurface::GlobalPointSolve once the volume inversion succeeded; surface.srf_in_volume 9: Mirror, MakeExactBSplineOutSurfaceFrom*Space), --perturb 1968/1968, 20000-seed run 19382 pass / 654 deferred / 0 failed; SmSurface::operator== wired (surface.surface_p1). B-spline volumes are not built: they evaluate to SM_ERR on both sides (no USE_VOLUMES in the reference build). Evaluate(uv, 0, 0, bOnlyUpperHalf=FALSE) succeeds as upstream (the out-of-range Duv write is skipped; the shim allocates 32 entries). STEPInversion runs SmVolume::InvEvaluatePoint/InvMapPoint (surface.volume_p2; SM_ERR when the inverse fails or has no point, upstream UB-103) through any map kind; ReadFromDB runs SmVolume::ReadFromDB on the text upstream WriteToDB writes for generated objects (about 4% of cases). Added SurfaceKind::SrfInVolume (boxed) and its arms in surface::surface::p2/p7, surface_cache p1/p2/p3, curve crv_on_surf/iso_curve, intersect::surface_tracer. Plane NURB is made on demand upstream also by const methods: the difftest dump makes it on both sides. SmVolume::Mirror and MakeExactBSplineOutSurfaceFrom{Param,In}Space are in no unit in units.json: dispatch gaps tagged surface.srf_in_volume. Wired UNPORTED(surface.srf_in_volume) SmSrfInVolume::ReadFromDB in surface::surface::p2. 31 fns; largest: SmSrfInVolume::Evaluate, SmSrfInVolume::SmSrfInVolume, SmSrfInVolume::ReadFromDB, SmSrfInVolume::STEPInversion; unit-SCC #22 (220 units); 319 upstream test entry points reach this unit Re-run with surface.surface_point_solve_p3 (PR #106): cases=2036 passed=2025 failed=0 deferred=11 max_rel_err=0.0 blocked_by=surface.srf_in_volume(9),surface.surface_p8(2). Re-run after merging PR #106 (surface.surface_point_solve_p3 wired, 2026-10-15): 2036 cases, 2025 pass, 11 deferred (surface.srf_in_volume 9, surface.surface_p8 2), 0 failed, max_rel_err 0.

Difftest

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

Blocked by

Unported unitDeferred cases
surface.srf_in_volume partial9

Report JSON (per-case results)

Dependencies

Depends on: geom.object partial geom.vector3d green surface.surface_p1 partial surface.surface_p2 partial surface.volume_p1 green surface.volume_p2 partial topology.database_io green

Soft dependencies: geom.axis2_placement green geom.extent2d green geom.vector2d green

Dependents: audit.recursion todo

Soft dependents: none

Upstream functions

Upstream functionDefined atLinesRust (from the file header)
SmSrfInVolume::SmSrfInVolumeSmSrfInVolume.h:661[SrfInVolume]
SmSrfInVolume::GetNaturalUVDomainSmSrfInVolume.h:1001[SrfInVolume::natural_uv_domain], [SrfInVolume::step_uv_domain], [SrfInVolume::max_analytic_domain]
SmSrfInVolume::GetSTEPUVDomainSmSrfInVolume.h:1011[SrfInVolume::natural_uv_domain], [SrfInVolume::step_uv_domain], [SrfInVolume::max_analytic_domain]
SmSrfInVolume::GetMaxAnalyticDomainSmSrfInVolume.h:1021[SrfInVolume::natural_uv_domain], [SrfInVolume::step_uv_domain], [SrfInVolume::max_analytic_domain]
SmSrfInVolume::GetDegreeSmSrfInVolume.h:1031[SrfInVolume::degree]
SmSrfInVolume::ConvertUVFromSTEPToNURBSSmSrfInVolume.h:1142[SrfInVolume::convert_uv_from_step_to_nurbs], [SrfInVolume::convert_uv_from_nurbs_to_step]
SmSrfInVolume::ConvertUVFromNURBSToSTEPSmSrfInVolume.h:1172[SrfInVolume::convert_uv_from_step_to_nurbs], [SrfInVolume::convert_uv_from_nurbs_to_step]
SmSrfInVolume::SetContextSmSrfInVolume.h:1453
SmSrfInVolume::OwnsSurfaceSmSrfInVolume.h:1491[SrfInVolume::owns_surface], [SrfInVolume::owns_volume]
SmSrfInVolume::OwnsVolumeSmSrfInVolume.h:1501[SrfInVolume::owns_surface], [SrfInVolume::owns_volume]
SmSrfInVolume::GetClassStringSmSrfInVolume.h:3011[SrfInVolume::TYPE], [SrfInVolume::type_code], [SrfInVolume::type_string], [SrfInVolume::class_string]
SmSrfInVolume::GetTypeSmSrfInVolume.h:3011[SrfInVolume::TYPE], [SrfInVolume::type_code], [SrfInVolume::type_string], [SrfInVolume::class_string]
SmSrfInVolume::GetTypeStringSmSrfInVolume.h:3011[SrfInVolume::TYPE], [SrfInVolume::type_code], [SrfInVolume::type_string], [SrfInVolume::class_string]
SmSrfInVolume::SmSrfInVolumeSmSrfInVolume.cpp:5069[SrfInVolume]
SmSrfInVolume::SmSrfInVolumeSmSrfInVolume.cpp:12851[SrfInVolume]
SmSrfInVolume::CopySmSrfInVolume.cpp:18510[SrfInVolume::copy], Clone
SmSrfInVolume::~SmSrfInVolumeSmSrfInVolume.cpp:20211Drop (implicit)
SmSrfInVolume::operator==SmSrfInVolume.cpp:22031[SrfInVolume::approx_eq]
SmSrfInVolume::GetKnotsSmSrfInVolume.cpp:32012[SrfInVolume::knots]
SmSrfInVolume::EvaluatePointSmSrfInVolume.cpp:4959[SrfInVolume::evaluate_point]
SmSrfInVolume::EvaluateNormalSmSrfInVolume.cpp:51024[SrfInVolume::evaluate_normal]
SmSrfInVolume::EvaluateSmSrfInVolume.cpp:540305[SrfInVolume::evaluate]
SmSrfInVolume::EvaluateSimpleSmSrfInVolume.cpp:85230[SrfInVolume::evaluate_simple]
SmSrfInVolume::STEPInversionSmSrfInVolume.cpp:88849[SrfInVolume::step_inversion]
SmSrfInVolume::ReverseSmSrfInVolume.cpp:94315[SrfInVolume::reverse], [SrfInVolume::swap_uv], [SrfInVolume::trim_with_domain], [SrfInVolume::transform]
SmSrfInVolume::SplitAtSmSrfInVolume.cpp:96428[SrfInVolume::split_at]
SmSrfInVolume::SwapUVSmSrfInVolume.cpp:99817[SrfInVolume::reverse], [SrfInVolume::swap_uv], [SrfInVolume::trim_with_domain], [SrfInVolume::transform]
SmSrfInVolume::TransformSmSrfInVolume.cpp:102826[SrfInVolume::reverse], [SrfInVolume::swap_uv], [SrfInVolume::trim_with_domain], [SrfInVolume::transform]
SmSrfInVolume::TrimWithDomainSmSrfInVolume.cpp:106718[SrfInVolume::reverse], [SrfInVolume::swap_uv], [SrfInVolume::trim_with_domain], [SrfInVolume::transform]
SmSrfInVolume::ReadFromDBSmSrfInVolume.cpp:153353[SrfInVolume::read_from_db]
SmSrfInVolume::IsKindOfSmSrfInVolume.cpp:15914[SrfInVolume::is_kind_of]
Module file-header table (25 rows)
RustUpstream
[SrfInVolume]SmSrfInVolume
[SrfInVolume::new]SmSrfInVolume(SmSurface&, SmBoolean, SmVolume&, ULONG, ULONG, const SmContext*)
[SrfInVolume::copy], Clonecopy constructor, Copy
Drop (implicit)~SmSrfInVolume
[SrfInVolume::approx_eq]operator==
[SrfInVolume::TYPE], [SrfInVolume::type_code], [SrfInVolume::type_string], [SrfInVolume::class_string]GetType, GetTypeString, GetClassString (SM_COMMON)
[SrfInVolume::is_kind_of]IsKindOf
[SrfInVolume::surface], [SrfInVolume::volume], [SrfInVolume::in_param_space]GetSurface, GetVolume, GetInParamSpace
[SrfInVolume::natural_uv_domain], [SrfInVolume::step_uv_domain], [SrfInVolume::max_analytic_domain]GetNaturalUVDomain, GetSTEPUVDomain, GetMaxAnalyticDomain
[SrfInVolume::degree]GetDegree
[SrfInVolume::convert_uv_from_step_to_nurbs], [SrfInVolume::convert_uv_from_nurbs_to_step]ConvertUVFromSTEPToNURBS, ConvertUVFromNURBSToSTEP
[SrfInVolume::owns_surface], [SrfInVolume::owns_volume]OwnsSurface, OwnsVolume
[SrfInVolume::set_owner_flag], [SrfInVolume::make_owner]SetOwnerFlag, MakeOwner
[SrfInVolume::set_base_surface], [SrfInVolume::set_volume]SetBaseSurface, SetVolume
[SrfInVolume::knots]GetKnots
[SrfInVolume::evaluate]Evaluate
[SrfInVolume::evaluate_simple]EvaluateSimple
[SrfInVolume::evaluate_point]EvaluatePoint
[SrfInVolume::evaluate_normal]EvaluateNormal
[SrfInVolume::step_inversion]STEPInversion
[SrfInVolume::reverse], [SrfInVolume::swap_uv], [SrfInVolume::trim_with_domain], [SrfInVolume::transform]Reverse, SwapUV, TrimWithDomain, Transform
[SrfInVolume::split_at]SplitAt
[SrfInVolume::create_mirror_surface]CreateMirrorSurface
[SrfInVolume::make_exact_b_spline_if_possible]MakeExactBSplineIfPossible
[SrfInVolume::read_from_db]ReadFromDB

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