solidcore

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 unitDeferred cases
topology.face_p4 claimed210
query.face_p4 claimed4

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 functionDefined atLinesRust (from the file header)
SmFaceProps::HasPropsSmFaceProps.h:3686[FaceProps::has_props], [FaceProps::has_props_stage1], [FaceProps::has_props_stage2], [FaceProps::has_props_stage3]
SmFaceProps::HasProps_Stage1SmFaceProps.h:3747[FaceProps::has_props], [FaceProps::has_props_stage1], [FaceProps::has_props_stage2], [FaceProps::has_props_stage3]
SmFaceProps::HasProps_Stage2SmFaceProps.h:3818[FaceProps::has_props], [FaceProps::has_props_stage1], [FaceProps::has_props_stage2], [FaceProps::has_props_stage3]
SmFaceProps::HasProps_Stage3SmFaceProps.h:3899[FaceProps::has_props], [FaceProps::has_props_stage1], [FaceProps::has_props_stage2], [FaceProps::has_props_stage3]
SmLoopProps::SetContextSmLoopProps.h:1541
SmLooptreeItem::IsNoArea_PairSmLoopProps.h:2691[LooptreeItem::is_no_area_pair], [LooptreeItem::add_partner]
SmLooptreeItem::AddChildSmLoopProps.h:3165[Looptree::add_child], [Looptree::add_sibling]
SmLooptreeItem::AddSiblingSmLoopProps.h:3235[Looptree::add_child], [Looptree::add_sibling]
SmLooptreeItem::AddPartnerSmLoopProps.h:33012[LooptreeItem::is_no_area_pair], [LooptreeItem::add_partner]
SmFaceProps::SmFacePropsSmFaceProps.cpp:4313[FaceProps], [FaceProps::new], [FaceProps::for_face]
SmFaceProps::~SmFacePropsSmFaceProps.cpp:4699Drop (implicit)
SmFaceProps::SetContextSmFaceProps.cpp:4858
SmFaceProps::ReSetSmFaceProps.cpp:499138[FaceProps::reset]
SmFaceProps::SetPropsSmFaceProps.cpp:64582[FaceProps::set_props]
SmFaceProps::SetProps_GapsSmFaceProps.cpp:75663[FaceProps::set_props_gaps]
SmFaceProps::SetProps_Stage2SmFaceProps.cpp:844197[FaceProps::set_props_stage2]
SmFaceProps::SetProps_Stage3SmFaceProps.cpp:1209517[FaceProps::set_props_stage3]
SmFaceProps::IsPoint3dOnPoleSmFaceProps.cpp:173521[FaceProps::is_point3d_on_pole]
SmFaceProps::HasProblemsSmFaceProps.cpp:176455[FaceProps::has_problems]
SmLoopProps::ReSetSmLoopProps.cpp:28832[LoopProps::reset], [LoopProps::set_props]
SmLoopProps::SetPropsSmLoopProps.cpp:340149[LoopProps::reset], [LoopProps::set_props]
SmLooptreeItem::SmLooptreeItemSmLoopProps.cpp:74111[Looptree], [LooptreeItem], [ItemId]
SmLooptreeItem::ReSetNoRecursionSmLoopProps.cpp:8039[LooptreeItem::reset_no_recursion]
SmLooptreeItem::~SmLooptreeItemSmLoopProps.cpp:86610Drop (implicit)
SmLooptreeItem::FindItemSmLoopProps.cpp:91642[Looptree::find_item]
Module file-header table (22 rows)
RustUpstream
[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