Units / heal
heal.gap partial
- Layer
- 42
- Upstream lines
- 1,475
- Functions
- 119
- Rust module
heal::gap
Source: crates/solidcore/src/heal/gap.rs
Upstream: source/SMLib/inc/SmGap.h, source/SMLib/src/SmGap.cpp
Notes
PARTIAL: difftest 445 cases (45 fixture in fixtures/heal.gap/upstream.json: prog_test my_test_drop_point circle/ellipse, my_test_reversed_line_join SmLines, my_test_topology network, TestSmCreateRectangle plane face, box_with_large_fillet.smb, sm_AddUniqueGetOrderedIndex / SetCanonical / SmGapArray edge cases, the WR-88/89/90 triggers; 400 generated: gap functions over SmBSplineCurve/SmHermiteCurve/SmLine/SmEllipse/SmCircle/SmCrvOnSurf and SmBSplineSurface/SmPlane/SmCurveBoundedSurface at 1e-3..1e3 scale with sub/degenerate/outer intervals, tolerance 0/negative/SM_USE_DEFAULT, stop-at-big-gap, SetSampleCnt/SetXSectTol3d; single Evaluate with guesses; the six gap records on .smb/wire/face/network B-reps), 380 pass, 65 deferred (surface.surface_point_solve_p3 35; SmSurface::DropPoint of the crv/srf and srf/srf functions is wired to surface.surface_p5; intersect.curve_class_p4 16: drops onto SmCrvOnSurf; topology.edgeuse_p3 14: GetOrCreateUVTrimCurve creating a missing trim curve), max_rel_err 0; --perturb SENSITIVE. Topology cases reuse the topology.vertexuse B-rep build/export (copied into the shim) and importer; the shim gives the C++ B-rep plain B-spline copies of analytic face surfaces and edge curves (what the import rebuilds; plan/findings.md). Back-edges wired: SmVertexEdgeGap/SmVertexFaceGap::Set (topology.vertexuse), SmEdgeEdgeGap::SetEdgeEdgeGap and SmCrvSrfGapFunction (topology.edgeuse_p1; calc_max_edge_face_gap/max_edge_face_gap now take the Kernel). Upstream issues WR-88, WR-89, WR-90, UB-104. Plan notes: 119 fns; largest: SmGapFunction::BuildSampleSet, SmCrvSrfGapFunction::Evaluate, SmCrvCrvGapFunction::Evaluate, SmSrfCrvGapFunction::Evaluate; unit-SCC #22 (220 units); 317 upstream test entry points reach this unit; CO-PORTED in topology.edgeuse_p1 (PR #55): SmEdgeFaceGap, SmEdgeEdgeGap, SmVertexFaceGap data members, ReSet, IsInit, SmEdgeFaceGap::SetEdgeuse -> heal::gap::{EdgeFaceGap, EdgeEdgeGap, VertexFaceGap}; CO-PORTED in topology.vertexuse (PR #88): SmVertexEdgeGap members, ReSet, IsInit -> heal::gap::VertexEdgeGap; CO-PORTED in topology.edge (PR #103): SmGap::operator< / operator> (m_dGap3d comparisons) -> inline in topology::edge::{max_gap_3d, max_up_dim_gap_3d, max_down_dim_gap_3d} via EdgeGap::length Review PR #106 recertification after merged #50: 445 cases, 415 pass, 30 deferred, 0 failed, max_rel_err=0.0; deferred: intersect.curve_class_p4 16, topology.edgeuse_p3 14. Re-run after merging PR #106 (surface.surface_point_solve_p3 wired, 2026-10-15): 445 cases, 415 pass, 30 deferred (intersect.curve_class_p4 16, topology.edgeuse_p3 14), 0 failed, max_rel_err 0.
Difftest
- Cases
- 445
- Passed
- 415
- Deferred
- 30
- Failed
- 0
- Both errored
- 0
- Max rel. error
- 0.0
- Tolerance
- 1e-09 rel.
- Seeds
- 16
Blocked by
| Unported unit | Deferred cases |
|---|---|
intersect.curve_class_p4 claimed | 16 |
topology.edgeuse_p3 claimed | 14 |
Report JSON (per-case results)
Dependencies
Depends on: curve.curve_p2 green geom.extent1d green geom.tol green geom.vector2d green geom.vector3d green surface.surface_p2 partial topology.edgeuse_p1 partial topology.vertexuse partial
Soft dependencies: curve.curve_p6 green geom.extent2d green intersect.curve_class_p4 claimed nurbs.b_spline_curve_p1 green nurbs.b_spline_surface_p1 green surface.surface_p5 green topology.edge partial topology.edgeuse_p3 claimed topology.face_p2 partial topology.vertex partial
Dependents: none
Soft dependents: heal.heal_data_p2 partial
Upstream functions
| Upstream function | Defined at | Lines | Rust (from the file header) |
|---|---|---|---|
SmGap::operator= | SmGap.h:203 | 8 | [Gap::assign] |
SmGap::operator> | SmGap.h:212 | 1 | [Gap::length], [Gap::is_greater], [Gap::is_less] |
SmGap::operator< | SmGap.h:213 | 1 | [Gap::length], [Gap::is_greater], [Gap::is_less] |
SmGap::GetLength | SmGap.h:223 | 1 | [Gap::length], [Gap::is_greater], [Gap::is_less] |
SmGap::CacheGap | SmGap.h:233 | 4 | [Gap::cache_gap], [Gap::gap_end_points], [Gap::end_points], [GapEndPoints] |
SmGap::GetVertex | SmGap.h:238 | 1 | [Gap::vertex], [Gap::vertexuse], [Gap::edge], [Gap::edgeuse], [Gap::face] |
SmGap::GetEdge | SmGap.h:240 | 1 | [Gap::vertex], [Gap::vertexuse], [Gap::edge], [Gap::edgeuse], [Gap::face] |
SmGap::GetEdgeuse | SmGap.h:241 | 1 | [Gap::vertex], [Gap::vertexuse], [Gap::edge], [Gap::edgeuse], [Gap::face] |
SmGap::GetFace | SmGap.h:242 | 1 | [Gap::vertex], [Gap::vertexuse], [Gap::edge], [Gap::edgeuse], [Gap::face] |
SmGap::GetEdgeT | SmGap.h:261 | 1 | [Gap::edge_t], [Gap::uv_trim_curve_t], [Gap::face_uv] |
SmGap::GetUVTrimCurveT | SmGap.h:262 | 1 | [Gap::edge_t], [Gap::uv_trim_curve_t], [Gap::face_uv] |
SmGap::GetFaceUV | SmGap.h:263 | 1 | [Gap::edge_t], [Gap::uv_trim_curve_t], [Gap::face_uv] |
SmGap::IsKindOf | SmGap.h:298 | 1 | [Gap::type_code], [Gap::is_kind_of], [types] |
SmVertexEdgeGap::IsInit | SmGap.h:328 | 1 | [VertexEdgeGap] |
SmVertexEdgeGap::ReSet | SmGap.h:329 | 4 | [VertexEdgeGap] |
SmVertexEdgeGap::operator= | SmGap.h:333 | 1 | [Gap::assign] |
SmVertexEdgeGap::operator= | SmGap.h:334 | 7 | [Gap::assign] |
SmVertexEdgeGap::GetEdgeT | SmGap.h:368 | 1 | [Gap::edge_t], [Gap::uv_trim_curve_t], [Gap::face_uv] |
SmVertexEdgeGap::Set | SmGap.h:371 | 8 | [VertexEdgeGap] |
SmVertexFaceTrimCurveGap::operator= | SmGap.h:414 | 7 | [Gap::assign] |
SmVertexFaceTrimCurveGap::GetUVTrimCurveT | SmGap.h:446 | 1 | [Gap::edge_t], [Gap::uv_trim_curve_t], [Gap::face_uv] |
SmVertexFaceGap::IsInit | SmGap.h:484 | 1 | [VertexEdgeGap] |
SmVertexFaceGap::ReSet | SmGap.h:485 | 4 | [VertexEdgeGap] |
SmVertexFaceGap::operator= | SmGap.h:490 | 7 | [Gap::assign] |
SmVertexFaceGap::GetFaceUV | SmGap.h:524 | 1 | [Gap::edge_t], [Gap::uv_trim_curve_t], [Gap::face_uv] |
SmVertexFaceGap::Set | SmGap.h:527 | 13 | [VertexEdgeGap] |
SmEdgeEdgeGap::IsInit | SmGap.h:571 | 1 | [VertexEdgeGap] |
SmEdgeEdgeGap::ReSet | SmGap.h:572 | 6 | [VertexEdgeGap] |
SmEdgeEdgeGap::operator= | SmGap.h:579 | 9 | [Gap::assign] |
SmEdgeEdgeGap::GetEdgeT | SmGap.h:615 | 1 | [Gap::edge_t], [Gap::uv_trim_curve_t], [Gap::face_uv] |
SmEdgeEdgeGap::SetEdgeEdgeGap | SmGap.h:620 | 13 | [EdgeEdgeGap] |
SmEdgeFaceTrimCurveGap::operator= | SmGap.h:669 | 8 | [Gap::assign] |
SmEdgeFaceTrimCurveGap::GetEdgeT | SmGap.h:706 | 1 | [Gap::edge_t], [Gap::uv_trim_curve_t], [Gap::face_uv] |
SmEdgeFaceTrimCurveGap::GetUVTrimCurveT | SmGap.h:707 | 1 | [Gap::edge_t], [Gap::uv_trim_curve_t], [Gap::face_uv] |
SmEdgeFaceGap::SmEdgeFaceGap | SmGap.h:747 | 3 | [EdgeFaceGap] |
SmEdgeFaceGap::IsInit | SmGap.h:751 | 1 | [VertexEdgeGap] |
SmEdgeFaceGap::ReSet | SmGap.h:752 | 5 | [VertexEdgeGap] |
SmEdgeFaceGap::operator= | SmGap.h:757 | 1 | [Gap::assign] |
SmEdgeFaceGap::operator= | SmGap.h:758 | 8 | [Gap::assign] |
SmEdgeFaceGap::~SmEdgeFaceGap | SmGap.h:779 | 1 | |
SmEdgeFaceGap::GetEdgeT | SmGap.h:795 | 1 | [Gap::edge_t], [Gap::uv_trim_curve_t], [Gap::face_uv] |
SmEdgeFaceGap::GetFaceUV | SmGap.h:796 | 1 | [Gap::edge_t], [Gap::uv_trim_curve_t], [Gap::face_uv] |
SmEdgeFaceGap::SetEdgeuse | SmGap.h:798 | 1 | [EdgeFaceGap] |
SmEdgeFaceGap::Set | SmGap.h:799 | 16 | [VertexEdgeGap] |
SmGapArray::SmGapArray | SmGap.h:845 | 1 | [GapArray] |
SmGapArray::operator[] | SmGap.h:847 | 1 | [GapArray] |
SmGapArray::~SmGapArray | SmGap.h:855 | 1 | |
SmGapArray::ReSet | SmGap.h:858 | 3 | [VertexEdgeGap] |
SmGapArray::GetSize | SmGap.h:872 | 1 | [GapArray] |
SmGapArray::Add | SmGap.h:875 | 6 | [GapArray] |
SmGapArray::Append | SmGap.h:882 | 3 | [GapArray] |
SmGapSample::GetThisParam | SmGap.h:1013 | 1 | [GapSample], [GapDropType] |
SmGapSample::GetOtherParam | SmGap.h:1014 | 1 | [GapSample], [GapDropType] |
SmGapSample::GetLength | SmGap.h:1017 | 1 | [Gap::length], [Gap::is_greater], [Gap::is_less] |
SmGapSample::GetGapDropType | SmGap.h:1019 | 1 | [GapSample], [GapDropType] |
SmGapSample::SetCanonical | SmGap.h:1022 | 19 | [GapSample], [GapDropType] |
SmGapFunction::~SmGapFunction | SmGap.h:1224 | 4 | |
SmGapFunction::GetTol | SmGap.h:1231 | 1 | [GapFunction], [GapSampleType], [GapGeometry] |
SmGapFunction::GetXSectTol3d | SmGap.h:1235 | 1 | [GapFunction], [GapSampleType], [GapGeometry] |
SmGapFunction::GetMaxGapSample | SmGap.h:1251 | 4 | [GapFunction], [GapSampleType], [GapGeometry] |
SmGapFunction::GetMaxIndexSample | SmGap.h:1259 | 3 | [GapFunction], [GapSampleType], [GapGeometry] |
SmGapFunction::GetThisCurve | SmGap.h:1268 | 1 | |
SmGapFunction::GetThisSurface | SmGap.h:1274 | 1 | |
SmGapFunction::GetOtherSurface | SmGap.h:1275 | 1 | |
SmGapFunction::GetOtherPoint | SmGap.h:1277 | 1 | |
SmGapFunction::Evaluate | SmGap.h:1296 | 8 | [GapFunction::evaluate] |
SmCrvPtGapFunction::~SmCrvPtGapFunction | SmGap.h:1391 | 1 | |
SmCrvPtGapFunction::GetThisCurve | SmGap.h:1396 | 1 | |
SmCrvPtGapFunction::GetOtherPoint | SmGap.h:1397 | 1 | |
SmCrvCrvGapFunction::~SmCrvCrvGapFunction | SmGap.h:1485 | 1 | |
SmCrvCrvGapFunction::GetThisCurve | SmGap.h:1490 | 1 | |
SmCrvSrfGapFunction::SmCrvSrfGapFunction | SmGap.h:1539 | 19 | [GapFunction::crv_pt] ... [GapFunction::srf_srf] |
SmCrvSrfGapFunction::~SmCrvSrfGapFunction | SmGap.h:1585 | 1 | |
SmCrvSrfGapFunction::GetThisCurve | SmGap.h:1590 | 1 | |
SmCrvSrfGapFunction::GetOtherSurface | SmGap.h:1591 | 1 | |
SmSrfPtGapFunction::~SmSrfPtGapFunction | SmGap.h:1681 | 1 | |
SmSrfPtGapFunction::GetThisSurface | SmGap.h:1686 | 1 | |
SmSrfPtGapFunction::GetOtherPoint | SmGap.h:1687 | 1 | |
SmSrfCrvGapFunction::~SmSrfCrvGapFunction | SmGap.h:1762 | 1 | |
SmSrfCrvGapFunction::GetThisSurface | SmGap.h:1767 | 1 | |
SmSrfSrfGapFunction::~SmSrfSrfGapFunction | SmGap.h:1848 | 1 | |
SmSrfSrfGapFunction::GetThisSurface | SmGap.h:1853 | 1 | |
SmSrfSrfGapFunction::GetOtherSurface | SmGap.h:1854 | 1 | |
SmGap::GetGapEndPoints | SmGap.cpp:134 | 72 | [Gap::cache_gap], [Gap::gap_end_points], [Gap::end_points], [GapEndPoints] |
SmVertexEdgeGap::GetVertex | SmGap.cpp:659 | 1 | [Gap::vertex], [Gap::vertexuse], [Gap::edge], [Gap::edgeuse], [Gap::face] |
SmVertexEdgeGap::GetEdge | SmGap.cpp:661 | 1 | [Gap::vertex], [Gap::vertexuse], [Gap::edge], [Gap::edgeuse], [Gap::face] |
SmVertexEdgeGap::GetEdgeuse | SmGap.cpp:662 | 1 | [Gap::vertex], [Gap::vertexuse], [Gap::edge], [Gap::edgeuse], [Gap::face] |
SmVertexEdgeGap::IsKindOf | SmGap.cpp:663 | 1 | [Gap::type_code], [Gap::is_kind_of], [types] |
SmVertexFaceTrimCurveGap::GetVertex | SmGap.cpp:665 | 1 | [Gap::vertex], [Gap::vertexuse], [Gap::edge], [Gap::edgeuse], [Gap::face] |
SmVertexFaceTrimCurveGap::GetEdgeuse | SmGap.cpp:667 | 1 | [Gap::vertex], [Gap::vertexuse], [Gap::edge], [Gap::edgeuse], [Gap::face] |
SmVertexFaceTrimCurveGap::GetFace | SmGap.cpp:668 | 1 | [Gap::vertex], [Gap::vertexuse], [Gap::edge], [Gap::edgeuse], [Gap::face] |
SmVertexFaceTrimCurveGap::IsKindOf | SmGap.cpp:669 | 1 | [Gap::type_code], [Gap::is_kind_of], [types] |
SmVertexFaceGap::GetVertex | SmGap.cpp:671 | 1 | [Gap::vertex], [Gap::vertexuse], [Gap::edge], [Gap::edgeuse], [Gap::face] |
SmVertexFaceGap::GetFace | SmGap.cpp:673 | 1 | [Gap::vertex], [Gap::vertexuse], [Gap::edge], [Gap::edgeuse], [Gap::face] |
SmVertexFaceGap::IsKindOf | SmGap.cpp:674 | 1 | [Gap::type_code], [Gap::is_kind_of], [types] |
SmEdgeEdgeGap::GetEdge | SmGap.cpp:676 | 4 | [Gap::vertex], [Gap::vertexuse], [Gap::edge], [Gap::edgeuse], [Gap::face] |
SmEdgeEdgeGap::GetEdgeuse | SmGap.cpp:680 | 4 | [Gap::vertex], [Gap::vertexuse], [Gap::edge], [Gap::edgeuse], [Gap::face] |
SmEdgeEdgeGap::IsKindOf | SmGap.cpp:684 | 1 | [Gap::type_code], [Gap::is_kind_of], [types] |
SmEdgeFaceTrimCurveGap::GetEdge | SmGap.cpp:687 | 1 | [Gap::vertex], [Gap::vertexuse], [Gap::edge], [Gap::edgeuse], [Gap::face] |
SmEdgeFaceTrimCurveGap::GetEdgeuse | SmGap.cpp:688 | 1 | [Gap::vertex], [Gap::vertexuse], [Gap::edge], [Gap::edgeuse], [Gap::face] |
SmEdgeFaceTrimCurveGap::GetFace | SmGap.cpp:689 | 1 | [Gap::vertex], [Gap::vertexuse], [Gap::edge], [Gap::edgeuse], [Gap::face] |
SmEdgeFaceTrimCurveGap::IsKindOf | SmGap.cpp:691 | 1 | [Gap::type_code], [Gap::is_kind_of], [types] |
SmEdgeFaceGap::GetEdge | SmGap.cpp:693 | 1 | [Gap::vertex], [Gap::vertexuse], [Gap::edge], [Gap::edgeuse], [Gap::face] |
SmEdgeFaceGap::GetEdgeuse | SmGap.cpp:694 | 1 | [Gap::vertex], [Gap::vertexuse], [Gap::edge], [Gap::edgeuse], [Gap::face] |
SmEdgeFaceGap::GetFace | SmGap.cpp:695 | 1 | [Gap::vertex], [Gap::vertexuse], [Gap::edge], [Gap::edgeuse], [Gap::face] |
SmEdgeFaceGap::IsKindOf | SmGap.cpp:697 | 1 | [Gap::type_code], [Gap::is_kind_of], [types] |
SmVertexFaceTrimCurveGap::GetFaceUV | SmGap.cpp:700 | 10 | [Gap::edge_t], [Gap::uv_trim_curve_t], [Gap::face_uv] |
SmEdgeFaceTrimCurveGap::GetFaceUV | SmGap.cpp:710 | 9 | [Gap::edge_t], [Gap::uv_trim_curve_t], [Gap::face_uv] |
SmGapSample::SetTolPoint | SmGap.cpp:943 | 33 | [GapSample], [GapDropType] |
SmGapFunction::SmGapFunction | SmGap.cpp:1351 | 25 | [GapFunction], [GapSampleType], [GapGeometry] |
SmGapFunction::SetSampleCnt | SmGap.cpp:1501 | 27 | [GapFunction], [GapSampleType], [GapGeometry] |
sm_AddUniqueGetOrderedIndex | SmGap.cpp:1537 | 62 | [add_unique_get_ordered_index] |
SmGapFunction::BuildSampleSet | SmGap.cpp:1620 | 454 | [GapFunction], [GapSampleType], [GapGeometry] |
SmCrvPtGapFunction::Evaluate | SmGap.cpp:3473 | 20 | [GapFunction::evaluate] |
SmCrvCrvGapFunction::Evaluate | SmGap.cpp:3665 | 129 | [GapFunction::evaluate] |
SmCrvSrfGapFunction::Evaluate | SmGap.cpp:3951 | 131 | [GapFunction::evaluate] |
SmSrfPtGapFunction::Evaluate | SmGap.cpp:4210 | 22 | [GapFunction::evaluate] |
SmSrfCrvGapFunction::Evaluate | SmGap.cpp:4323 | 105 | [GapFunction::evaluate] |
SmSrfSrfGapFunction::Evaluate | SmGap.cpp:4519 | 92 | [GapFunction::evaluate] |
Module file-header table (20 rows)
| Rust | Upstream |
|---|---|
[Gap] | SmGap (the virtual interface over the derived classes) |
[Gap::length], [Gap::is_greater], [Gap::is_less] | GetLength, operator>, operator< |
[Gap::assign] | operator=(const SmGap&) of every class |
[Gap::cache_gap], [Gap::gap_end_points], [Gap::end_points], [GapEndPoints] | CacheGap, GetGapEndPoints |
[Gap::vertex], [Gap::vertexuse], [Gap::edge], [Gap::edgeuse], [Gap::face] | GetVertex, GetVertexuse, GetEdge, GetEdgeuse, GetFace (base and overrides) |
[Gap::edge_t], [Gap::uv_trim_curve_t], [Gap::face_uv] | GetEdgeT, GetUVTrimCurveT, GetFaceUV (base and overrides) |
[Gap::type_code], [Gap::is_kind_of], [types] | GetType, IsKindOf, the Sm*Gap_TYPE codes |
[XSECT_TOL_3D] | SM_XSECT_TOL_3D |
[VertexEdgeGap] | SmVertexEdgeGap (Set, ReSet, IsInit, GetEdgeT) |
[VertexFaceTrimCurveGap] | SmVertexFaceTrimCurveGap (Set, ReSet, IsInit, GetUVTrimCurveT, GetFaceUV) |
[VertexFaceGap] | SmVertexFaceGap (Set, ReSet, IsInit, GetFaceUV) |
[EdgeEdgeGap] | SmEdgeEdgeGap (SetEdgeEdgeGap, ReSet, IsInit, GetEdgeT) |
[EdgeFaceTrimCurveGap] | SmEdgeFaceTrimCurveGap (Set, GetEdgeT, GetUVTrimCurveT, GetFaceUV) |
[EdgeFaceGap] | SmEdgeFaceGap (constructor, Set, SetEdgeuse, ReSet, IsInit, GetEdgeT, GetFaceUV, destructor) |
[GapArray] | SmGapArray (constructor, operator[], ReSet, GetSize, Add, Append, destructor) |
[GapSample], [GapDropType] | SmGapSample (GetThisParam, GetOtherParam, GetLength, GetGapDropType, SetCanonical, SetTolPoint), SmGapDropType |
[GapFunction], [GapSampleType], [GapGeometry] | SmGapFunction (constructor, destructor, SetSampleCnt, BuildSampleSet, GetMaxGapSample, GetMaxIndexSample, GetTol, GetXSectTol3d, GetThis* / GetOther*), SmGapSampleType |
[GapFunction::crv_pt] ... [GapFunction::srf_srf] | the derived class constructors (SmCrvSrfGapFunction ...) |
[GapFunction::evaluate] | Evaluate of SmCrvPtGapFunction, SmCrvCrvGapFunction, SmCrvSrfGapFunction, SmSrfPtGapFunction, SmSrfCrvGapFunction, SmSrfSrfGapFunction |
[add_unique_get_ordered_index] | sm_AddUniqueGetOrderedIndex |
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