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 unit | Deferred cases |
|---|---|
topology.brep_p7 claimed | 200 |
surface.sphere green | 100 |
surface.surf_of_extrusion_p2 partial | 84 |
surface.cone_p1 green | 50 |
topology.edgeuse_p3 claimed | 7 |
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 function | Defined at | Lines | Rust (from the file header) |
|---|---|---|---|
SmEdgeuse::DeleteUVTrimCurve | SmEdgeuse.h:170 | 1 | [delete_uv_trim_curve] |
SmEdgeuse::SetMemberUVTrimCurve | SmEdgeuse.h:175 | 11 | [set_member_uv_trim_curve] |
SmEdgeuse::GetEdge | SmEdgeuse.h:260 | 1 | [edge] |
SmEdgeuse::GetOrientation | SmEdgeuse.h:265 | 1 | [orientation], [set_orientation] |
SmEdgeuse::GetCWEdgeuse | SmEdgeuse.h:266 | 1 | [cw_edgeuse], [ccw_edgeuse] |
SmEdgeuse::GetCCWEdgeuse | SmEdgeuse.h:267 | 1 | [cw_edgeuse], [ccw_edgeuse] |
SmEdgeuse::HasEdgeFaceGap | SmEdgeuse.h:295 | 1 | [has_edge_face_gap], [has_edge_ccw_edge_gap] |
SmEdgeuse::HasEdgeCCWEdgeGap | SmEdgeuse.h:296 | 1 | [has_edge_face_gap], [has_edge_ccw_edge_gap] |
SmEdgeuse::IsMaxEdgeFaceGapInit | SmEdgeuse.h:300 | 1 | [is_max_edge_face_gap_init] |
SmEdgeuse::SetOrientation | SmEdgeuse.h:363 | 2 | [orientation], [set_orientation] |
SmEdgeuse::GetClassString | SmEdgeuse.h:403 | 1 | [TYPE], [TYPE_STRING], [CLASS_STRING], [is_kind_of] |
SmEdgeuse::GetType | SmEdgeuse.h:403 | 1 | [TYPE], [TYPE_STRING], [CLASS_STRING], [is_kind_of] |
SmEdgeuse::GetTypeString | SmEdgeuse.h:403 | 1 | [TYPE], [TYPE_STRING], [CLASS_STRING], [is_kind_of] |
SmFaceuse::~SmFaceuse | SmFaceuse.h:45 | 5 | [crate::topology::Faceuse] |
SmFaceuse::GetShell | SmFaceuse.h:60 | 1 | [faceuse_shell], [faceuse_region], [faceuse_face], [faceuse_mate], [faceuse_orientation] |
SmFaceuse::GetRegion | SmFaceuse.h:61 | 1 | [faceuse_shell], [faceuse_region], [faceuse_face], [faceuse_mate], [faceuse_orientation] |
SmFaceuse::GetFace | SmFaceuse.h:62 | 1 | [faceuse], [face], [loopuse] |
SmFaceuse::GetMate | SmFaceuse.h:63 | 1 | [mate], [radial] |
SmFaceuse::GetOrientation | SmFaceuse.h:66 | 1 | [orientation], [set_orientation] |
SmFaceuse::GetClassString | SmFaceuse.h:88 | 1 | [TYPE], [TYPE_STRING], [CLASS_STRING], [is_kind_of] |
SmFaceuse::GetType | SmFaceuse.h:88 | 1 | [FACEUSE_TYPE], [FACEUSE_TYPE_STRING], [FACEUSE_CLASS_STRING], [faceuse_is_kind_of] |
SmFaceuse::GetTypeString | SmFaceuse.h:88 | 1 | [TYPE], [TYPE_STRING], [CLASS_STRING], [is_kind_of] |
SmEdgeuse::IsStrut | SmEdgeuse.cpp:294 | 8 | [is_strut] |
SmEdgeuse::GetVertexuse | SmEdgeuse.cpp:308 | 4 | [vertexuse] |
SmEdgeuse::GetFaceuse | SmEdgeuse.cpp:318 | 8 | [faceuse], [face], [loopuse] |
SmEdgeuse::GetFace | SmEdgeuse.cpp:332 | 7 | [faceuse], [face], [loopuse] |
SmEdgeuse::GetLoopuse | SmEdgeuse.cpp:345 | 10 | [faceuse], [face], [loopuse] |
SmEdgeuse::IsLoopEdgeuse | SmEdgeuse.cpp:361 | 5 | [is_loop_edgeuse], [is_shell_edgeuse] |
SmEdgeuse::GetCornerMateEdgeuse | SmEdgeuse.cpp:372 | 10 | [corner_mate_edgeuse] |
SmEdgeuse::IsShellEdgeuse | SmEdgeuse.cpp:513 | 5 | [is_loop_edgeuse], [is_shell_edgeuse] |
SmEdgeuse::GetShell | SmEdgeuse.cpp:524 | 9 | [shell], [brep] |
SmEdgeuse::IsConnectedTo | SmEdgeuse.cpp:806 | 39 | [is_connected_to] |
sm_CalcDistAndDev | SmEdgeuse.cpp:1065 | 49 | [calc_dist_and_dev] |
sm_AreSeamCurves | SmEdgeuse.cpp:1122 | 39 | [are_seam_curves] |
SmFindStepOffENFO::SmFindStepOffENFO | SmEdgeuse.cpp:3222 | 8 | [FindStepOff] |
SmFindStepOffENFO::~SmFindStepOffENFO | SmEdgeuse.cpp:3231 | 1 | |
SmFindStepOffENFO::Evaluate | SmEdgeuse.cpp:3246 | 83 | [FindStepOff] |
SmEdgeuse::GetMate | SmEdgeuse.cpp:3536 | 18 | [mate], [radial] |
SmEdgeuse::GetRadial | SmEdgeuse.cpp:3561 | 18 | [mate], [radial] |
SmEdgeuse::SetUVTrimCurve | SmEdgeuse.cpp:4473 | 246 | [set_uv_trim_curve], [UvTrimCurveArg] |
SmEdgeuse::GetMaxEdgeFaceGap | SmEdgeuse.cpp:4904 | 19 | [max_edge_face_gap], [edge_ccw_edge_gap] |
SmEdgeuse::GetEdgeCCWEdgeGap | SmEdgeuse.cpp:4950 | 19 | [max_edge_face_gap], [edge_ccw_edge_gap] |
SmEdgeuse::GetTolerance | SmEdgeuse.cpp:5064 | 6 | [tolerance] |
SmEdgeuse::CalcMaxEdgeFaceGap | SmEdgeuse.cpp:5206 | 99 | [calc_max_edge_face_gap], [calc_edge_ccw_edge_gap] |
SmEdgeuse::CalcEdgeCCWEdgeGap | SmEdgeuse.cpp:5312 | 73 | [calc_max_edge_face_gap], [calc_edge_ccw_edge_gap] |
SmEdgeuse::GetBrep | SmEdgeuse.cpp:6407 | 5 | [shell], [brep] |
SmEdgeuse::GetUVTrimCurve | SmEdgeuse.cpp:6420 | 22 | [uv_trim_curve], [drop_curve_fail] |
SmEdgeuse::GetDropCurveFail | SmEdgeuse.cpp:6448 | 17 | [uv_trim_curve], [drop_curve_fail] |
SmEdgeuse::GetUVTrimCurvePointer | SmEdgeuse.cpp:6471 | 12 | [uv_trim_curve_pointer] |
SmEdgeuse::GetStartPointUVLoopGap | SmEdgeuse.cpp:6491 | 57 | [start_point_uv_loop_gap] |
SmEdgeuse::IsKindOf | SmEdgeuse.cpp:6618 | 4 | [TYPE], [TYPE_STRING], [CLASS_STRING], [is_kind_of] |
SmFaceuse::SmFaceuse | SmFaceuse.cpp:41 | 10 | [crate::topology::Faceuse] |
SmFaceuse::GetLoopuses | SmFaceuse.cpp:57 | 38 | [faceuse_loopuses], [faceuse_edgeuses] |
SmFaceuse::GetEdgeuses | SmFaceuse.cpp:101 | 32 | [faceuse_loopuses], [faceuse_edgeuses] |
SmFaceuse::GetNeighbors | SmFaceuse.cpp:140 | 49 | [faceuse_neighbors] |
SmFaceuse::CollectAdjacentFaceuses | SmFaceuse.cpp:235 | 87 | [faceuse_collect_adjacent] |
SmFaceuse::IsKindOf | SmFaceuse.cpp:505 | 4 | [TYPE], [TYPE_STRING], [CLASS_STRING], [is_kind_of] |
Module file-header table (39 rows)
| Rust | Upstream |
|---|---|
[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