solidcore

Units / surface

surface.b_spline_volume green

Layer
16
Upstream lines
1,226
Functions
23
Rust module
surface::b_spline_volume

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

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

Notes

23 fns; largest: SmBSplineVolume::EvaluateSimple, SmBSplineVolume::ReadFromDB, SmBSplineVolume::EvaluateIsoParametricCurveSimple, SmBSplineVolume::EvaluateBoundingBoxSimple; unit-SCC #22 (220 units); only 201 of 1226 lines survive RTA (reached via virtual dispatch to classes no in-scope entry point constructs); low priority / likely deferrable; 319 upstream test entry points reach this unit; GREEN: difftest 2333 cases (333 fixture: unit cube, rational Bezier, knots needing fixup, coincident control points, degree 0, unclamped, closest-point ties, oriented + compounded volumes over info/copy/equal/eval/bbox/iso/guess/transform/predicate ops + 2000 generated), all bit-identical (max_rel_err 0), 0 deferred; 30,333-case run clean; --perturb SENSITIVE. Upstream builds without USE_VOLUMES: EvaluateSimple, EvaluateIsoParametricCurveSimple, ReadFromDB, sm_LoadNLibTransform (so TransformSimple) return SM_ERR and AreEqual_gw_VOLUME is FALSE (findings.md). The SmBSplineVolume UNPORTED stub in surface.volume_p1 now only covers the surface.b_spline_volume_n_lib overrides (HasDiscontinuitiesSimple, IsCurveInParamDomainSimple); no unit deferred on surface.b_spline_volume

Difftest

Cases
2,333
Passed
2,333
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: geom.extent3d green geom.pseudo_box green geom.transform green geom.vector3d green surface.volume_p1 green

Soft dependencies: geom.tol green nlib.math green nlib.spiral green nurbs.nurbs_crv green

Dependents: surface.b_spline_volume_n_lib partial

Soft dependents: surface.volume_p2 partial

Upstream functions

Upstream functionDefined atLinesRust (from the file header)
SmBSplineVolume::GetGwNurbPointerSmBSplineVolume.h:2981[BSplineVolume::nurb]
SmBSplineVolume::GetOrCreateGwNurbPointerSmBSplineVolume.h:2991[BSplineVolume::nurb]
SmBSplineVolume::IsBoundedSimpleSmBSplineVolume.h:6591[BSplineVolume::is_bounded_simple]
SmBSplineVolume::GetClassStringSmBSplineVolume.h:7421Volume::type_code, type_string, class_string, is_kind_of
SmBSplineVolume::GetTypeSmBSplineVolume.h:7421Volume::type_code, type_string, class_string, is_kind_of
SmBSplineVolume::GetTypeStringSmBSplineVolume.h:7421Volume::type_code, type_string, class_string, is_kind_of
smGet_gw_VOLUMESmBSplineVolume.cpp:306[BSplineVolume::nurb]
AreEqual_gw_VOLUMESmBSplineVolume.cpp:4216[are_equal_nurb_volumes]
sm_LoadNLibTransformSmBSplineVolume.cpp:6635[load_nlib_transform]
SmBSplineVolume::SmBSplineVolumeSmBSplineVolume.cpp:29554[BSplineVolume]
SmBSplineVolume::~SmBSplineVolumeSmBSplineVolume.cpp:35512Drop (implicit)
SmBSplineVolume::operator==SmBSplineVolume.cpp:37426[BSplineVolume::approx_eq], Volume::approx_eq
SmBSplineVolume::CopySmBSplineVolume.cpp:43712[BSplineVolume::copy], Volume::copy
SmBSplineVolume::GetDegreeSmBSplineVolume.cpp:81021[BSplineVolume::degree]
SmBSplineVolume::GetNaturalParamDomainSmBSplineVolume.cpp:85922[BSplineVolume::natural_param_domain]
SmBSplineVolume::GetKnotsSmBSplineVolume.cpp:91423[BSplineVolume::knots]
SmBSplineVolume::EvaluateSimpleSmBSplineVolume.cpp:1747444[BSplineVolume::evaluate_simple]
SmBSplineVolume::EvaluateBoundingBoxSimpleSmBSplineVolume.cpp:2221128[BSplineVolume::evaluate_bounding_box_simple]
SmBSplineVolume::EvaluateIsoParametricCurveSimpleSmBSplineVolume.cpp:2364134[BSplineVolume::evaluate_iso_parametric_curve_simple]
SmBSplineVolume::InvEvaluateGuessPointSimpleSmBSplineVolume.cpp:264569[BSplineVolume::inv_evaluate_guess_point_simple]
SmBSplineVolume::TransformSimpleSmBSplineVolume.cpp:300125[BSplineVolume::transform_simple]
SmBSplineVolume::ReadFromDBSmBSplineVolume.cpp:3195189[BSplineVolume::read_from_db]
SmBSplineVolume::IsKindOfSmBSplineVolume.cpp:34754Volume::type_code, type_string, class_string, is_kind_of
Module file-header table (21 rows)
RustUpstream
[BSplineVolume]SmBSplineVolume (members m_pNurb, m_bOutOfBoundsEnabled)
[BSplineVolume::new]SmBSplineVolume(const SmContext*, const gw_VOLUME*), SmBSplineVolume(gw_VOLUME*, FALSE, ctx)
[BSplineVolume::copy], Volume::copySmBSplineVolume(const SmBSplineVolume&, SmBoolean), Copy
Drop (implicit)~SmBSplineVolume
[BSplineVolume::nurb]GetGwNurbPointer, GetOrCreateGwNurbPointer, smGet_gw_VOLUME
[BSplineVolume::out_of_bounds_enabled]GetOutOfBoundsEnabled
[are_equal_nurb_volumes]AreEqual_gw_VOLUME
[BSplineVolume::approx_eq], Volume::approx_eqoperator==
[load_nlib_transform]sm_LoadNLibTransform
[BSplineVolume::degree]GetDegree
[BSplineVolume::natural_param_domain]GetNaturalParamDomain
[BSplineVolume::knots]GetKnots
[BSplineVolume::evaluate_simple]EvaluateSimple
[BSplineVolume::evaluate_bounding_box_simple]EvaluateBoundingBoxSimple
[BSplineVolume::evaluate_iso_parametric_curve_simple]EvaluateIsoParametricCurveSimple
[BSplineVolume::inv_evaluate_guess_point_simple]InvEvaluateGuessPointSimple
[BSplineVolume::is_bounded_simple]IsBoundedSimple
[BSplineVolume::transform_simple]TransformSimple
[BSplineVolume::read_from_db]ReadFromDB
Volume::type_code, type_string, class_string, is_kind_ofGetType, GetTypeString, GetClassString, IsKindOf (SM_COMMON)
[VolumeParam], [VolumeParams]SmVolumeParamType, SmVolumeParamsType

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