solidcore

Units / topology

topology.proto_topology_p3 partial

Layer
49
Upstream lines
1,577
Functions
7
Rust module
topology::proto_topology::p3

Source: crates/solidcore/src/topology/proto_topology/p3.rs

Upstream: source/SMLib/src/SmProtoTopology.cpp

Notes

PARTIAL: difftest 3013 cases (12 fixtures edge_proto_p3*, 3001 generated proto scripts rich in ops 120-126 of the shared proto-script engine of topology.proto_topology_p1), 2636 pass bit-identical (max_rel_err 0), 377 deferred (query.brep 69, topology.edge 96, topology.face_p2 94, topology.vertex 118); --perturb SENSITIVE. All 7 fns ported in topology::proto_topology::p3; the callees of topology.proto_topology_p2 (merged) are wired to its manager methods (CreateProtoVertex, AddVertexDefinition(PC,PC), FindOrCreateProtoVertex(position), FindProtoEdge, CreateProtoEdge, AddEdgeDefinition x2, CombineProtoEdge, RemoveEdgeDefinition) with the ignored statuses of upstream; B-rep reads go through p2's ProtoBrep trait (which gained vertex_point, edge_faces, vertex_common_edges, edge_other_vertex and face_curve_on_classify for p3); the remaining private stubs are tagged UNPORTED(<unit>): query.brep (Point3DClassify), topology.brep_p3/p4/p5 (SqueezeEdge/DeleteEdge/GlueVertices), boolean.topology_intersector_p1/p2 (GetOtherMate/RemoveRelationship), intersect.curve_class_p4/p5 (constructor, ExtractGeometry). The engine's stand-in topology has no edge faces: GlueCoincidentBrepVertices runs only where no gluing happens (final vertices that are one vertex or far apart, on stand-in vertices with a point and a tolerance) and ResolveOverlappingProtoEdges only for definition-less face/face groups whose overlaps are symmetric and duplicate-free (the shim refuses the rest: a one-way or repeated overlap, or a proto edge listed twice in the manager, crashes the C++: UB-132), so their glue/squeeze/edge-source paths are ported but not compared; FindOrCreateProtoVertex/Edge inputs whose creation would read an uninitialised position are refused. Upstream defects WR-101 (SmProtoEdge::Split upper child interval) and UB-132 (duplicate manager proto edge). No CO-PORTED. CurveOnClassify is wired through ProtoBrep::face_curve_on_classify (the B-rep owner calls query::face::p2::curve_on_classify). Plan notes: 7 fns; largest: SmProtoTopologyManager::ResolveOverlappingProtoEdges, SmProtoTopologyManager::GlueCoincidentBrepVertices, SmProtoTopologyManager::SplitIntersectingProtoEdges, SmProtoTopologyManager::FindOrCreateProtoEdge; cycle back-edges (call into later units; stub or co-port): boolean.topology_intersector_p1(2), boolean.topology_intersector_p2(1), query.brep(1), query.face_p2(1); unit-SCC #22 (220 units); 112 upstream test entry points reach this unit [PR #144: vertex_point / edge_faces / edge_other_vertex now come from the p1 ProtoTopology supertrait (B-rep walks wired); re-run: cases=3013 passed=2638 failed=0 deferred=375 (query.brep 70, topology.edge 95, topology.face_p2 94, topology.vertex 116), --perturb SENSITIVE]

Difftest

Cases
3,013
Passed
2,638
Deferred
375
Failed
0
Both errored
0
Max rel. error
0.0
Tolerance
1e-09 rel.
Seeds
16

Blocked by

Unported unitDeferred cases
topology.vertex partial116
topology.edge partial95
topology.face_p2 partial94
query.brep claimed70

Report JSON (per-case results)

Dependencies

Depends on: curve.curve_p2 green geom.extent1d green geom.object partial geom.solution_array partial geom.tol green geom.vector3d green intersect.curve_class_p1 partial topology.edge partial topology.proto_topology_p1 partial topology.proto_topology_p2 partial topology.topology green

Soft dependencies: curve.curve_p4 partial curve.curve_p6 green curve.curve_p8 green intersect.curve_class_p4 claimed intersect.curve_class_p5 partial intersect.curve_class_p7 partial intersect.point_class partial topology.brep_p3 claimed topology.brep_p4 claimed topology.brep_p5 claimed topology.vertex partial

Dependents: boolean.topology_intersector_p1 partial boolean.topology_intersector_p2 claimed

Soft dependents: none

Upstream functions

Upstream functionDefined atLinesRust (from the file header)
SmEdgeDefinition::SplitSmProtoTopology.cpp:1626106[ProtoTopologyManager::edge_definition_split]
SmProtoEdge::SplitSmProtoTopology.cpp:2983123[ProtoTopologyManager::proto_edge_split]
SmProtoTopologyManager::FindOrCreateProtoVertexSmProtoTopology.cpp:406754[ProtoTopologyManager::find_or_create_proto_vertex_pcs]
SmProtoTopologyManager::FindOrCreateProtoEdgeSmProtoTopology.cpp:4725175[ProtoTopologyManager::find_or_create_proto_edge]
SmProtoTopologyManager::GlueCoincidentBrepVerticesSmProtoTopology.cpp:5854424[ProtoTopologyManager::glue_coincident_brep_vertices]
SmProtoTopologyManager::SplitIntersectingProtoEdgesSmProtoTopology.cpp:6656190[ProtoTopologyManager::split_intersecting_proto_edges]
SmProtoTopologyManager::ResolveOverlappingProtoEdgesSmProtoTopology.cpp:6995505[ProtoTopologyManager::resolve_overlapping_proto_edges]
Module file-header table (7 rows)
RustUpstream
[ProtoTopologyManager::find_or_create_proto_vertex_pcs]SmProtoTopologyManager::FindOrCreateProtoVertex(PC, PC, ..)
[ProtoTopologyManager::find_or_create_proto_edge]SmProtoTopologyManager::FindOrCreateProtoEdge
[ProtoTopologyManager::edge_definition_split]SmEdgeDefinition::Split
[ProtoTopologyManager::proto_edge_split]SmProtoEdge::Split
[ProtoTopologyManager::split_intersecting_proto_edges]SmProtoTopologyManager::SplitIntersectingProtoEdges
[ProtoTopologyManager::glue_coincident_brep_vertices]SmProtoTopologyManager::GlueCoincidentBrepVertices
[ProtoTopologyManager::resolve_overlapping_proto_edges]SmProtoTopologyManager::ResolveOverlappingProtoEdges

Upstream tests reaching this unit

prog_test:my_test_analytic_tsurf_creation, prog_test:my_test_get_loop_crossings, SM_API_test:TestSmBoolean2DPlanarUnion, prog_test:my_test_bbu, SM_API_test:TestSmMaterialCensus, SM_API_test:TestSmPiecewiseMerge