solidcore

Units / topology

topology.edgeuse_p1 partial

Layer
33
Upstream lines
1,157
Functions
57
Rust module
topology::edgeuse::p1

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

Upstream: source/SMLib/inc/SmEdgeuse.h, source/SMLib/inc/SmFaceuse.h, source/SMLib/src/SmEdgeuse.cpp, source/SMLib/src/SmFaceuse.cpp

Notes

PARTIAL: difftest 2722 cases (2706 fixture: 1155 on 15 upstream .smb B-reps read by SmBrep::ReadFromFile, with and without RebuildUVTrimCurves; 1115 on prog_test my_test_topology's wire network, wire edges and faces from B-spline curves/surfaces and real SmPlanes, plus the geometry statics on B-splines and SmPlanes; 436 review adversarial in fixtures/topology.edgeuse_p1/adversarial.json: pole/pinch, tiny and huge scale (to 1e200), uv up to 100 domain lengths outside, 1% seam tolerance edge, null/drop-curve SetUVTrimCurve, rebuilt .smb gaps; 16 generated, 6000 more checked once), 2625 pass, 97 deferred (surface.surface_point_solve_p3 90, topology.edgeuse_p3 7; heal.gap wired; SmEdge::SetTolerance/SmVertex::SetTolerance by topology.edge PR #103; formerly 28 surface_point_solve_p3: SmEdgeuse::GetStartPointUVLoopGap now drops through Surface::drop_point (surface.surface_p5 wired), whose global point solve (SmSurface::GlobalPointSolve_1) is deferred in the report, topology.edgeuse_p3 7), max_rel_err 0; --perturb SENSITIVE. There is no Rust B-rep reader/builder yet, so the runner imports the graph the shim exports (raw members, traversal order) into topology::Brep. Co-ports the minimal use records into the topology skeleton (see CO-PORTED notes of topology.edge, topology.loopuse, topology.vertexuse, topology.shell, topology.vertex, topology.face_p2, topology.brep_p1, heal.gap, topology.proto_topology_p1); adds curve::line::Line::from_parts (raw constructor for the import). SmBrep::ReadFromFile crashes on SmallBox.smb and Platform.smb (plan/findings.md), so they are not used. Back-edge stubs UNPORTED(topology.edgeuse_p1) in surface::trim_srf_cache (GetUVTrimCurve), intersect::point_class (GetBrep, GetEdge) and geom::tol (GetZoneTol3d dispatch) are not wired: those callers hold opaque object handles without a Brep (plan/findings.md). Plan notes: 57 fns; largest: SmEdgeuse::SetUVTrimCurve, SmEdgeuse::CalcMaxEdgeFaceGap, SmFaceuse::CollectAdjacentFaceuses, SmFindStepOffENFO::Evaluate; cycle back-edges (call into later units; stub or co-port): heal.gap(14), topology.edge(13), topology.loopuse(9), topology.vertexuse(4), topology.face_p2(2), topology.shell(2), topology.edgeuse_p3(1); unit-SCC #22 (220 units); 319 upstream test entry points reach this unit Review PR #106 recertification after merged #50: 2722 cases, 2711 pass, 11 deferred, 0 failed, max_rel_err=0.0; deferred: surface.surface_p8 4, topology.edgeuse_p3 7. Re-run after merging PR #106 (surface.surface_point_solve_p3 wired, 2026-10-15): 2722 cases, 2711 pass, 11 deferred (surface.surface_p8 4, topology.edgeuse_p3 7), 0 failed, max_rel_err 0. Review fixes (2026-10-16): the gap ops now compare the computed gap values (gap_3d, edge_t, face_uv; edge_t0, edge_t1), SmPlane faces are imported exactly (origin, X/Y axes, UV scale, STEP domain) instead of Plane::from_normal, and cases evaluating analytic geometry imported as its B-spline part are deferred (inexact_geometry, as topology.edgeuse_p2): 4402 cases (adds fixtures/topology.edgeuse_p1/review_gap_values.json, 1680 cases), 3961 pass, 441 deferred (surface.cone_p1 50, surface.sphere 100, surface.surf_of_extrusion_p2 84, topology.brep_p7 200, topology.edgeuse_p3 7), 0 failed, max_rel_err 0; --perturb SENSITIVE (3961/3961).

Difftest

Cases
4,402
Passed
3,961
Deferred
441
Failed
0
Both errored
28
Max rel. error
0.0
Tolerance
1e-09 rel.
Seeds
16

Blocked by

Unported unitDeferred cases
topology.brep_p7 claimed200
surface.sphere green100
surface.surf_of_extrusion_p2 partial84
surface.cone_p1 green50
topology.edgeuse_p3 claimed7

Report JSON (per-case results)

Dependencies

Depends on: curve.curve_p2 green geom.extent1d green geom.matrix green geom.object partial geom.tol green geom.vector3d green surface.surface_p2 partial topology.proto_topology_p1 partial topology.topology green

Soft dependencies: geom.vector2d green nurbs.b_spline_curve_p1 green surface.surface_p1 partial surface.surface_p5 green surface.surface_p7 partial

Dependents: blend.fillet_corner_p1 todo blend.fillet_corner_p2 todo blend.fillet_corner_p3 todo blend.fillet_custom_solver partial blend.fillet_executive_p1 todo blend.fillet_geom_p1 claimed blend.fillet_geom_p2 todo blend.fillet_geom_p3 todo blend.fillet_geom_p4 todo blend.fillet_geom_p5 todo blend.fillet_geom_p6 todo blend.fillet_solver_p1 claimed blend.fillet_solver_p2 todo blend.fillet_solver_p3 todo blend.fillet_solver_p4 claimed blend.fillet_standard_solver_p1 claimed blend.fillet_standard_solver_p2 todo blend.hcr claimed boolean.merge_p1 partial boolean.merge_p2 todo boolean.merge_p4 todo boolean.topology_intersector_p3 claimed heal.gap partial heal.stitch_p1 claimed mass.integrator partial offset.offset_executive_p1 claimed offset.offset_executive_p2 claimed offset.offset_geometry_creation claimed primitive.primitive_creation_p1 claimed query.edge partial query.face_p1 claimed query.face_p3 claimed sweep.topology_sweep claimed topology.brep_p1 claimed topology.brep_p10 claimed topology.brep_p2 claimed topology.brep_p3 claimed topology.brep_p4 claimed topology.brep_p5 claimed topology.brep_p6 claimed topology.brep_p7 claimed topology.brep_p9 claimed topology.edge partial topology.edgeuse_p2 partial topology.edgeuse_p3 claimed topology.face_p1 partial topology.face_p2 partial topology.face_p3 claimed topology.face_p4 claimed topology.loopuse partial topology.shell partial topology.topology_traverser partial topology.trimming_tools partial topology.vertex partial topology.vertexuse partial

Soft dependents: blend.fillet_executive_p2 todo blend.fillet_executive_p3 todo blend.fillet_intersector claimed blend.fillet_solver_p5 claimed boolean.merge_p5 partial boolean.topology_intersector_p1 partial heal.face_props partial heal.heal_data_p1 partial heal.heal_data_p2 partial heal.heal_data_p3 partial query.api_queries partial query.loop green

Upstream functions

Upstream functionDefined atLinesRust (from the file header)
SmEdgeuse::DeleteUVTrimCurveSmEdgeuse.h:1701[delete_uv_trim_curve]
SmEdgeuse::SetMemberUVTrimCurveSmEdgeuse.h:17511[set_member_uv_trim_curve]
SmEdgeuse::GetEdgeSmEdgeuse.h:2601[edge]
SmEdgeuse::GetOrientationSmEdgeuse.h:2651[orientation], [set_orientation]
SmEdgeuse::GetCWEdgeuseSmEdgeuse.h:2661[cw_edgeuse], [ccw_edgeuse]
SmEdgeuse::GetCCWEdgeuseSmEdgeuse.h:2671[cw_edgeuse], [ccw_edgeuse]
SmEdgeuse::HasEdgeFaceGapSmEdgeuse.h:2951[has_edge_face_gap], [has_edge_ccw_edge_gap]
SmEdgeuse::HasEdgeCCWEdgeGapSmEdgeuse.h:2961[has_edge_face_gap], [has_edge_ccw_edge_gap]
SmEdgeuse::IsMaxEdgeFaceGapInitSmEdgeuse.h:3001[is_max_edge_face_gap_init]
SmEdgeuse::SetOrientationSmEdgeuse.h:3632[orientation], [set_orientation]
SmEdgeuse::GetClassStringSmEdgeuse.h:4031[TYPE], [TYPE_STRING], [CLASS_STRING], [is_kind_of]
SmEdgeuse::GetTypeSmEdgeuse.h:4031[TYPE], [TYPE_STRING], [CLASS_STRING], [is_kind_of]
SmEdgeuse::GetTypeStringSmEdgeuse.h:4031[TYPE], [TYPE_STRING], [CLASS_STRING], [is_kind_of]
SmFaceuse::~SmFaceuseSmFaceuse.h:455[crate::topology::Faceuse]
SmFaceuse::GetShellSmFaceuse.h:601[faceuse_shell], [faceuse_region], [faceuse_face], [faceuse_mate], [faceuse_orientation]
SmFaceuse::GetRegionSmFaceuse.h:611[faceuse_shell], [faceuse_region], [faceuse_face], [faceuse_mate], [faceuse_orientation]
SmFaceuse::GetFaceSmFaceuse.h:621[faceuse], [face], [loopuse]
SmFaceuse::GetMateSmFaceuse.h:631[mate], [radial]
SmFaceuse::GetOrientationSmFaceuse.h:661[orientation], [set_orientation]
SmFaceuse::GetClassStringSmFaceuse.h:881[TYPE], [TYPE_STRING], [CLASS_STRING], [is_kind_of]
SmFaceuse::GetTypeSmFaceuse.h:881[FACEUSE_TYPE], [FACEUSE_TYPE_STRING], [FACEUSE_CLASS_STRING], [faceuse_is_kind_of]
SmFaceuse::GetTypeStringSmFaceuse.h:881[TYPE], [TYPE_STRING], [CLASS_STRING], [is_kind_of]
SmEdgeuse::IsStrutSmEdgeuse.cpp:2948[is_strut]
SmEdgeuse::GetVertexuseSmEdgeuse.cpp:3084[vertexuse]
SmEdgeuse::GetFaceuseSmEdgeuse.cpp:3188[faceuse], [face], [loopuse]
SmEdgeuse::GetFaceSmEdgeuse.cpp:3327[faceuse], [face], [loopuse]
SmEdgeuse::GetLoopuseSmEdgeuse.cpp:34510[faceuse], [face], [loopuse]
SmEdgeuse::IsLoopEdgeuseSmEdgeuse.cpp:3615[is_loop_edgeuse], [is_shell_edgeuse]
SmEdgeuse::GetCornerMateEdgeuseSmEdgeuse.cpp:37210[corner_mate_edgeuse]
SmEdgeuse::IsShellEdgeuseSmEdgeuse.cpp:5135[is_loop_edgeuse], [is_shell_edgeuse]
SmEdgeuse::GetShellSmEdgeuse.cpp:5249[shell], [brep]
SmEdgeuse::IsConnectedToSmEdgeuse.cpp:80639[is_connected_to]
sm_CalcDistAndDevSmEdgeuse.cpp:106549[calc_dist_and_dev]
sm_AreSeamCurvesSmEdgeuse.cpp:112239[are_seam_curves]
SmFindStepOffENFO::SmFindStepOffENFOSmEdgeuse.cpp:32228[FindStepOff]
SmFindStepOffENFO::~SmFindStepOffENFOSmEdgeuse.cpp:32311
SmFindStepOffENFO::EvaluateSmEdgeuse.cpp:324683[FindStepOff]
SmEdgeuse::GetMateSmEdgeuse.cpp:353618[mate], [radial]
SmEdgeuse::GetRadialSmEdgeuse.cpp:356118[mate], [radial]
SmEdgeuse::SetUVTrimCurveSmEdgeuse.cpp:4473246[set_uv_trim_curve], [UvTrimCurveArg]
SmEdgeuse::GetMaxEdgeFaceGapSmEdgeuse.cpp:490419[max_edge_face_gap], [edge_ccw_edge_gap]
SmEdgeuse::GetEdgeCCWEdgeGapSmEdgeuse.cpp:495019[max_edge_face_gap], [edge_ccw_edge_gap]
SmEdgeuse::GetToleranceSmEdgeuse.cpp:50646[tolerance]
SmEdgeuse::CalcMaxEdgeFaceGapSmEdgeuse.cpp:520699[calc_max_edge_face_gap], [calc_edge_ccw_edge_gap]
SmEdgeuse::CalcEdgeCCWEdgeGapSmEdgeuse.cpp:531273[calc_max_edge_face_gap], [calc_edge_ccw_edge_gap]
SmEdgeuse::GetBrepSmEdgeuse.cpp:64075[shell], [brep]
SmEdgeuse::GetUVTrimCurveSmEdgeuse.cpp:642022[uv_trim_curve], [drop_curve_fail]
SmEdgeuse::GetDropCurveFailSmEdgeuse.cpp:644817[uv_trim_curve], [drop_curve_fail]
SmEdgeuse::GetUVTrimCurvePointerSmEdgeuse.cpp:647112[uv_trim_curve_pointer]
SmEdgeuse::GetStartPointUVLoopGapSmEdgeuse.cpp:649157[start_point_uv_loop_gap]
SmEdgeuse::IsKindOfSmEdgeuse.cpp:66184[TYPE], [TYPE_STRING], [CLASS_STRING], [is_kind_of]
SmFaceuse::SmFaceuseSmFaceuse.cpp:4110[crate::topology::Faceuse]
SmFaceuse::GetLoopusesSmFaceuse.cpp:5738[faceuse_loopuses], [faceuse_edgeuses]
SmFaceuse::GetEdgeusesSmFaceuse.cpp:10132[faceuse_loopuses], [faceuse_edgeuses]
SmFaceuse::GetNeighborsSmFaceuse.cpp:14049[faceuse_neighbors]
SmFaceuse::CollectAdjacentFaceusesSmFaceuse.cpp:23587[faceuse_collect_adjacent]
SmFaceuse::IsKindOfSmFaceuse.cpp:5054[TYPE], [TYPE_STRING], [CLASS_STRING], [is_kind_of]
Module file-header table (39 rows)
RustUpstream
[TYPE], [TYPE_STRING], [CLASS_STRING], [is_kind_of]SmEdgeuse::GetType, GetTypeString, GetClassString, IsKindOf
[FACEUSE_TYPE], [FACEUSE_TYPE_STRING], [FACEUSE_CLASS_STRING], [faceuse_is_kind_of]SmFaceuse::GetType, GetTypeString, GetClassString, IsKindOf
[crate::topology::Edgeuse]SmEdgeuse (members; Default is the constructor)
[crate::topology::Faceuse]SmFaceuse (members; Default is SmFaceuse(), Drop ~SmFaceuse)
[edge]SmEdgeuse::GetEdge
[orientation], [set_orientation]SmEdgeuse::GetOrientation, SetOrientation
[cw_edgeuse], [ccw_edgeuse]SmEdgeuse::GetCWEdgeuse, GetCCWEdgeuse
[has_edge_face_gap], [has_edge_ccw_edge_gap]SmEdgeuse::HasEdgeFaceGap, HasEdgeCCWEdgeGap
[is_max_edge_face_gap_init]SmEdgeuse::IsMaxEdgeFaceGapInit
[is_strut]SmEdgeuse::IsStrut
[vertexuse]SmEdgeuse::GetVertexuse
[faceuse], [face], [loopuse]SmEdgeuse::GetFaceuse, GetFace, GetLoopuse
[is_loop_edgeuse], [is_shell_edgeuse]SmEdgeuse::IsLoopEdgeuse, IsShellEdgeuse
[corner_mate_edgeuse]SmEdgeuse::GetCornerMateEdgeuse
[shell], [brep]SmEdgeuse::GetShell, GetBrep
[is_connected_to]SmEdgeuse::IsConnectedTo
[calc_dist_and_dev]sm_CalcDistAndDev (static)
[are_seam_curves]sm_AreSeamCurves (static)
[FindStepOff]SmFindStepOffENFO (constructor, destructor, Evaluate)
[mate], [radial]SmEdgeuse::GetMate, GetRadial
[set_uv_trim_curve], [UvTrimCurveArg]SmEdgeuse::SetUVTrimCurve
[delete_uv_trim_curve]SmEdgeuse::DeleteUVTrimCurve
[set_member_uv_trim_curve]SmEdgeuse::SetMemberUVTrimCurve
[max_edge_face_gap], [edge_ccw_edge_gap]SmEdgeuse::GetMaxEdgeFaceGap, GetEdgeCCWEdgeGap
[calc_max_edge_face_gap], [calc_edge_ccw_edge_gap]SmEdgeuse::CalcMaxEdgeFaceGap, CalcEdgeCCWEdgeGap
[tolerance]SmEdgeuse::GetTolerance (SM_USE_OLDTOL)
[uv_trim_curve], [drop_curve_fail]SmEdgeuse::GetUVTrimCurve, GetDropCurveFail
[uv_trim_curve_pointer]SmEdgeuse::GetUVTrimCurvePointer
[start_point_uv_loop_gap]SmEdgeuse::GetStartPointUVLoopGap
[faceuse_shell], [faceuse_region], [faceuse_face], [faceuse_mate], [faceuse_orientation]SmFaceuse::GetShell, GetRegion, GetFace, GetMate, GetOrientation
[faceuse_loopuses], [faceuse_edgeuses]SmFaceuse::GetLoopuses, GetEdgeuses
[faceuse_neighbors]SmFaceuse::GetNeighbors
[faceuse_collect_adjacent]SmFaceuse::CollectAdjacentFaceuses
[edgeuse_next], [edgeuse_last]SmTopology::GetNext, GetLast of an edge use (CO-PORTED, topology.topology list links)
[primary_edgeuse], [edge_is_lamina], [edge_brep]SmEdge::GetPrimaryEdgeuse, IsLamina, GetBrep (CO-PORTED, topology.edge)
[loopuse_edgeuses], [loopuse_shell]SmLoopuse::GetEdgeuses, GetShell (unit topology.loopuse)
[vertexuse_edgeuse]SmVertexuse::GetEdgeuse (CO-PORTED, topology.vertexuse)
[shell_region], [shell_brep]SmShell::GetRegion, GetBrep (unit topology.shell)
[owning_topology_is_kind_of]SmOwningTopology::IsKindOf (unit topology.proto_topology_p1)

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