Units / heal
heal.face_props partial
- Layer
- 46
- Upstream lines
- 1,410
- Functions
- 25
- Rust module
heal::face_props
Source: crates/solidcore/src/heal/face_props.rs
Upstream: source/SMLib/inc/SmFaceProps.h, source/SMLib/inc/SmLoopProps.h, source/SMLib/src/SmFaceProps.cpp, source/SMLib/src/SmLoopProps.cpp
Notes
PARTIAL: difftest 1528 cases (28 fixture + 1500 generated: SetProps/Gaps/Stage2/Stage3 scripts, SmLoopProps::SetProps of every loop (op 8), seeded state, ReSet, HasProps, HasProblems, IsPoint3dOnPole, loop tree build + FindItem, on one-face B-reps with a plane or SmSurfOfRevolution surface (cylinder, cone with/without apex, sphere, torus; open or closed) owned by the face, a vertex loop or edge loops with holes, face tolerances up to 1e9; 9 fixture cases are FFI-guard regression cases, UB-131 and UB-128), 1314 pass bit-identical (max_rel_err 0), 0 failed, 214 deferred (topology.face_p4 210: SmFace::HasSeamProblem for closed faces in SetProps_Stage2; query.face_p4 4: SmFace::ClassifyLoops in SetProps_Stage3); --perturb 1314/1314 detected. Upstream defects UB-131 (SetProps_Gaps early return makes the Stage2/3 face re-run ineffective) and UB-128 (SetProps_Stage3 on a plane with a degenerate domain and edge loops segfaults in ClassifyLoops; the guard rejects a plane side below 1e-6 when Stage 3 can be reached); the guard rejects the crashing scripts. Snapshots compare the flat corner points too; no generated surface has a nonzero m_lBadFlatCorners (harness limitation, findings.md). Stage 3 is compared only through op 8 (direct Stage 3 cases defer at ClassifyLoops). Added Surface::get_singularities_of_face (face tolerance for the owned surface; other UNPORTED(topology.face_p2) tolerance stubs on surfaces unchanged). Wired: topology.loopuse (PR #102), SmSurface::GetSingularities (surface.surface_p3), SmFace::GetVertices (query.face_p2 co-port). Remaining UNPORTED stubs: topology.face_p4 HasSeamProblem, query.face_p4 ClassifyLoops, intersect.curve_class_p2 CurveClassification::ReSet (dead branch). No UNPORTED(heal.face_props) stubs existed on main. FaceProps<O> is generic over a LoopObject handle; the loop tree is an arena (Looptree). CO-PORTED in heal.face_props (PR #122): SmMixedLinkType, SmTriedLinkType, SmHealerOpType (SmHealProbArray.h) -> heal::face_props::{MixedLinkType, TriedLinkType, HealerOpType} (owner heal.heal_data_p2 extends); SmContainmentType (SmTypes.h) -> heal::face_props::ContainmentType. 25 fns; largest: SmFaceProps::SetProps_Stage3, SmFaceProps::SetProps_Stage2, SmLoopProps::SetProps, SmFaceProps::ReSet; unit-SCC #22 (220 units); 100 upstream test entry points reach this unit
Difftest
- Cases
- 1,528
- Passed
- 1,314
- Deferred
- 214
- Failed
- 0
- Both errored
- 9
- Max rel. error
- 0.0
- Tolerance
- 1e-09 rel.
- Seeds
- 16
Blocked by
| Unported unit | Deferred cases |
|---|---|
topology.face_p4 claimed | 210 |
query.face_p4 claimed | 4 |
Report JSON (per-case results)
Dependencies
Depends on: geom.tol green geom.vector3d green intersect.curve_class_p1 partial topology.face_p2 partial topology.loopuse partial
Soft dependencies: geom.extent2d green geom.object partial intersect.curve_class_p2 claimed query.face_p4 claimed surface.surface_p2 partial surface.surface_p3 green surface.surface_p7 partial topology.edgeuse_p1 partial topology.face_p4 claimed topology.vertex partial topology.vertexuse partial
Dependents: heal.heal_data_p2 partial heal.heal_data_p3 partial
Soft dependents: heal.heal_data_p1 partial
Upstream functions
| Upstream function | Defined at | Lines | Rust (from the file header) |
|---|---|---|---|
SmFaceProps::HasProps | SmFaceProps.h:368 | 6 | [FaceProps::has_props], [FaceProps::has_props_stage1], [FaceProps::has_props_stage2], [FaceProps::has_props_stage3] |
SmFaceProps::HasProps_Stage1 | SmFaceProps.h:374 | 7 | [FaceProps::has_props], [FaceProps::has_props_stage1], [FaceProps::has_props_stage2], [FaceProps::has_props_stage3] |
SmFaceProps::HasProps_Stage2 | SmFaceProps.h:381 | 8 | [FaceProps::has_props], [FaceProps::has_props_stage1], [FaceProps::has_props_stage2], [FaceProps::has_props_stage3] |
SmFaceProps::HasProps_Stage3 | SmFaceProps.h:389 | 9 | [FaceProps::has_props], [FaceProps::has_props_stage1], [FaceProps::has_props_stage2], [FaceProps::has_props_stage3] |
SmLoopProps::SetContext | SmLoopProps.h:154 | 1 | |
SmLooptreeItem::IsNoArea_Pair | SmLoopProps.h:269 | 1 | [LooptreeItem::is_no_area_pair], [LooptreeItem::add_partner] |
SmLooptreeItem::AddChild | SmLoopProps.h:316 | 5 | [Looptree::add_child], [Looptree::add_sibling] |
SmLooptreeItem::AddSibling | SmLoopProps.h:323 | 5 | [Looptree::add_child], [Looptree::add_sibling] |
SmLooptreeItem::AddPartner | SmLoopProps.h:330 | 12 | [LooptreeItem::is_no_area_pair], [LooptreeItem::add_partner] |
SmFaceProps::SmFaceProps | SmFaceProps.cpp:43 | 13 | [FaceProps], [FaceProps::new], [FaceProps::for_face] |
SmFaceProps::~SmFaceProps | SmFaceProps.cpp:469 | 9 | Drop (implicit) |
SmFaceProps::SetContext | SmFaceProps.cpp:485 | 8 | |
SmFaceProps::ReSet | SmFaceProps.cpp:499 | 138 | [FaceProps::reset] |
SmFaceProps::SetProps | SmFaceProps.cpp:645 | 82 | [FaceProps::set_props] |
SmFaceProps::SetProps_Gaps | SmFaceProps.cpp:756 | 63 | [FaceProps::set_props_gaps] |
SmFaceProps::SetProps_Stage2 | SmFaceProps.cpp:844 | 197 | [FaceProps::set_props_stage2] |
SmFaceProps::SetProps_Stage3 | SmFaceProps.cpp:1209 | 517 | [FaceProps::set_props_stage3] |
SmFaceProps::IsPoint3dOnPole | SmFaceProps.cpp:1735 | 21 | [FaceProps::is_point3d_on_pole] |
SmFaceProps::HasProblems | SmFaceProps.cpp:1764 | 55 | [FaceProps::has_problems] |
SmLoopProps::ReSet | SmLoopProps.cpp:288 | 32 | [LoopProps::reset], [LoopProps::set_props] |
SmLoopProps::SetProps | SmLoopProps.cpp:340 | 149 | [LoopProps::reset], [LoopProps::set_props] |
SmLooptreeItem::SmLooptreeItem | SmLoopProps.cpp:741 | 11 | [Looptree], [LooptreeItem], [ItemId] |
SmLooptreeItem::ReSetNoRecursion | SmLoopProps.cpp:803 | 9 | [LooptreeItem::reset_no_recursion] |
SmLooptreeItem::~SmLooptreeItem | SmLoopProps.cpp:866 | 10 | Drop (implicit) |
SmLooptreeItem::FindItem | SmLoopProps.cpp:916 | 42 | [Looptree::find_item] |
Module file-header table (22 rows)
| Rust | Upstream |
|---|---|
[FaceProps], [FaceProps::new], [FaceProps::for_face] | SmFaceProps, SmFaceProps(), SmFaceProps(face, index) |
Drop (implicit) | ~SmFaceProps, ~SmLooptreeItem |
[FaceProps::reset] | SmFaceProps::ReSet |
[FaceProps::set_props] | SmFaceProps::SetProps |
[FaceProps::set_props_gaps] | SmFaceProps::SetProps_Gaps |
[FaceProps::set_props_stage2] | SmFaceProps::SetProps_Stage2 |
[FaceProps::set_props_stage3] | SmFaceProps::SetProps_Stage3 |
[FaceProps::is_point3d_on_pole] | SmFaceProps::IsPoint3dOnPole |
[FaceProps::has_problems] | SmFaceProps::HasProblems |
[FaceProps::has_props], [FaceProps::has_props_stage1], [FaceProps::has_props_stage2], [FaceProps::has_props_stage3] | HasProps, HasProps_Stage1, HasProps_Stage2, HasProps_Stage3 |
[PropStage], [HealNotYetFaceType] | SmPropStageType, SmHealNotYetFaceType |
[MixedLinkType], [TriedLinkType], [HealerOpType] | SmMixedLinkType, SmTriedLinkType, SmHealerOpType (SmHealProbArray.h; CO-PORTED here) |
[ContainmentType] | SmContainmentType (SmTypes.h) |
[LoopProps], [LoopProps::new] | SmLoopProps, its constructors |
[LoopProps::reset], [LoopProps::set_props] | SmLoopProps::ReSet, SmLoopProps::SetProps |
[ClassifyLoopIo] | SmClassifyLoopIO |
[Looptree], [LooptreeItem], [ItemId] | the SmLooptreeItem tree and its nodes |
[LooptreeItem::new], [LooptreeItem::with_loop], [LooptreeItem::with_partner] | SmLooptreeItem constructors |
[LooptreeItem::reset_no_recursion] | SmLooptreeItem::ReSetNoRecursion |
[LooptreeItem::is_no_area_pair], [LooptreeItem::add_partner] | IsNoArea_Pair, AddPartner |
[Looptree::add_child], [Looptree::add_sibling] | SmLooptreeItem::AddChild, AddSibling |
[Looptree::find_item] | SmLooptreeItem::FindItem |
Upstream tests reaching this unit
prog_test:my_test_trimming_tools, SM_API_test:TestSmTrimSurfaceWith3dCurves, prog_test:my_test_closed_sphere_properties, prog_test:my_test_squeeze_edge_tracks_removal, prog_test:my_test_missing_poles_refreshes_all_faces, SM_API_test:TestSmHealBrep