solidcore

Units / topology

topology.face_p1 partial

Layer
44
Upstream lines
2,171
Functions
14
Rust module
topology::face::p1

Source: crates/solidcore/src/topology/face/p1.rs

Upstream: source/SMLib/src/SmFace.cpp

Notes

PARTIAL (PR #148): difftest 2312 cases (2260 built-in on the 15 pt_TestFiles B-reps (every op, UV trim curves as read and rebuilt; seam ops with 7 face-property variants on the periodic files) + 36 review crash reproducers + 16 generated), 519 pass bit-identical (max_rel_err 0), 0 failed, 0 both-errored (real passes 519), 1793 deferred (topology.face_p3 1100: SmFace::Notify of every edit, CreateUVTrimCurves; topology.face_p4 307: GetUpwardLoopuses/GetBrep/HasSeamProblem; topology.edgeuse_p3 288: NormalizedEvaluate/GetOrCreateUVTrimCurve; cpp-crash-guard:UB-137 98: seam calls the shim keeps from upstream's SplitAtSeam crash, never comparable; the guard skips ~99.5% valid MoveSeam+split calls and must be replaced when face_p4 lands); --perturb SENSITIVE 519/519. No passing case for UvDomain (with surface), Flip, SetSurface, LoopRoundTrip, RemoveUv, SwapUv, Shrink (all behind face_p3/face_p4); passes are early returns, error paths and guards. The shim normalises analytic geometry to B-splines, so MoveSeam's CopyAndAddAnalytics branch and SwapUV's conic mirrors are not compared. Seam ops take HasSeamProblem's classifications from the C++ shim (Probe op); MergeIntervals wired to intersect.curve_class_p5 (#150); IsCrossedByEdge/HasNearMisses wired to intersect.curve_class_p7 (#65). Back-edges wired: trimming_tools (FlipFaceOrientation, SplitAtSeam), edge, face_p2 points_in_face, mass.integrator (CreateOrientedTrimBoundary); not wirable yet: surface.surface_p3 RemoveUVTrimCurves of owner face (no B-rep there), proto_topology_p2 (ProtoBrep handle). Was: 14 fns; largest: SmFace::MoveSeam, SmFace::SplitAtSeam, SmFace::CreateOrientedTrimBoundary, SmFace::CalculateUVDomainFromUVTrimCurves; cycle back-edges (call into later units; stub or co-port): heal.gap(1), topology.brep_p2(1); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit CalculateUVDomainFromUVTrimCurves wired into boolean.topology_intersector_p1 (PR #146).

Difftest

Cases
2,312
Passed
519
Deferred
1,793
Failed
0
Both errored
0
Max rel. error
0.0
Tolerance
1e-09 rel.
Seeds
16

Blocked by

Unported unitDeferred cases
topology.face_p3 claimed1100
topology.face_p4 claimed307
topology.edgeuse_p3 claimed288
cpp-crash-guard:UB-137 ?98

Report JSON (per-case results)

Dependencies

Depends on: curve.curve_p2 green geom.extent1d green geom.extent2d green geom.extent3d green geom.object partial geom.periodic_extent1d green geom.tol green geom.vector2d green geom.vector3d green intersect.curve_class_p1 partial nurbs.b_spline_curve_p1 green surface.surface_p1 partial surface.surface_p2 partial topology.edgeuse_p1 partial topology.face_p2 partial topology.face_p3 claimed topology.face_p4 claimed topology.loopuse partial topology.vertexuse partial

Soft dependencies: curve.line green geom.axis2_placement green geom.context green geom.geom_utility_p1 green intersect.curve_class_p5 partial intersect.curve_class_p7 partial intersect.point_class partial nurbs.b_spline_curve_p2 green nurbs.b_spline_surface_n_lib_p1 green nurbs.b_spline_surface_p2 partial surface.surface_p5 green surface.surface_p7 partial topology.edge partial topology.edgeuse_p3 claimed topology.proto_topology_p1 partial topology.trimming_tools partial topology.vertex partial

Dependents: mass.integrator partial topology.brep_p3 claimed topology.brep_p4 claimed topology.brep_p9 claimed

Soft dependents: blend.fillet_executive_p1 todo blend.fillet_executive_p3 todo blend.fillet_geom_p1 claimed blend.hcr claimed boolean.topology_intersector_p1 partial boolean.topology_intersector_p2 claimed heal.heal_data_p3 partial heal.stitch_p1 claimed offset.offset_executive_p2 claimed topology.brep_p1 claimed topology.brep_p2 claimed topology.brep_p6 claimed topology.proto_topology_p2 partial

Upstream functions

Upstream functionDefined atLinesRust (from the file header)
SmFace::SmFaceSmFace.cpp:6912[crate::topology::Face::new]
SmFace::~SmFaceSmFace.cpp:8716[destroy]
SmFace::CalculateUVDomainFromUVTrimCurvesSmFace.cpp:1275143[calculate_uv_domain_from_uv_trim_curves], [UvDomainFromTrim]
SmFace::CreateOrientedTrimBoundarySmFace.cpp:7192232[create_oriented_trim_boundary], [OrientedTrimBoundary]
SmFace::FindIfRectangularTrimSmFace.cpp:9267121[find_if_rectangular_trim], [RectangularTrim]
SmFace::FlipFaceOrientationSmFace.cpp:1003028[flip_face_orientation]
SmFace::SetSurfaceSmFace.cpp:1006534[set_surface]
SmFace::InsertLoopSmFace.cpp:1127013[insert_loop]
SmFace::RemoveLoopSmFace.cpp:1193521[remove_loop]
SmFace::RemoveUVTrimCurvesSmFace.cpp:1291244[remove_uv_trim_curves]
SmFace::SwapUVSmFace.cpp:13842109[swap_uv]
SmFace::MoveSeamSmFace.cpp:16791896[move_seam], [MoveSeamOptions], [MoveSeamResult], [SeamProblem]
SmFace::SplitAtSeamSmFace.cpp:17816384[split_at_seam], [SeamSplit]
SmFace::ShrinkGeometrySmFace.cpp:18217118[shrink_geometry]
Module file-header table (15 rows)
RustUpstream
[crate::topology::Face::new]SmFace::SmFace
[destroy]SmFace::~SmFace
[calculate_uv_domain_from_uv_trim_curves], [UvDomainFromTrim]SmFace::CalculateUVDomainFromUVTrimCurves
[create_oriented_trim_boundary], [OrientedTrimBoundary]SmFace::CreateOrientedTrimBoundary
[find_if_rectangular_trim], [RectangularTrim]SmFace::FindIfRectangularTrim
[flip_face_orientation]SmFace::FlipFaceOrientation
[set_surface]SmFace::SetSurface
[insert_loop]SmFace::InsertLoop
[remove_loop]SmFace::RemoveLoop
[remove_uv_trim_curves]SmFace::RemoveUVTrimCurves
[swap_uv]SmFace::SwapUV
[move_seam], [MoveSeamOptions], [MoveSeamResult], [SeamProblem]SmFace::MoveSeam
[split_at_seam], [SeamSplit]SmFace::SplitAtSeam
[shrink_geometry]SmFace::ShrinkGeometry
[FixSeamPlanType]SmFixSeamPlanType (SmTypes.h)

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