Units / topology
topology.vertex partial
- Layer
- 38
- Upstream lines
- 824
- Functions
- 38
- Rust module
topology::vertex
Source: crates/solidcore/src/topology/vertex.rs
Upstream: source/SMLib/inc/SmVertex.h, source/SMLib/src/SmVertex.cpp
Notes
PARTIAL: difftest 5508 cases (5492 fixture: 1408 review (rational degree-1 / quadratic / arc edges meeting lines and arcs at a vertex, B-spline-line and reversed SmLine turns at 0.49..180 degrees, 1e-12..1e12 scales, 2- and 3-edge closed chains, tangent / gap / SetTolerance limits); 2160 on 15 upstream .smb B-reps read by SmBrep::ReadFromFile, some with RebuildUVTrimCurves; 1665 constructed: prog_test my_test_topology's wire network, my_test_edge_geometry_repairs' wire line (SetTolerance/SetPoint), chains of wire edges from real SmLines (re-parameterised), degree-1 B-spline lines and B-spline curves turning by 0 to 180 degrees around the 0.5 degree continuity limit (IsTopologicalVertex / AreEdgesTangent), closed squares, a closed seam curve, wire edges and plane / B-spline / pinched faces (full and sub-domain); 259 adversarial: 1e-6..1e6 scales, zero-length and tiny segments, a point B-spline, tolerance limits incl. SM_USE_DEFAULT and negatives, gap tolerance limits, every notify operation, null selectors, far edges; 16 generated), 4651 pass, 857 deferred (topology.edgeuse_p3 399, surface.surface_p3 382, topology.face_p3 76; SmEdge::SetTolerance wired by topology.edge PR #103; after merging main: SmFace::GetUpwardFaceuse wired to topology::face::p2::upward_faceuse, the shim exports each face's upward face use, and heal.gap gaps are real), max_rel_err 0; --perturb SENSITIVE. Runner imports the shim's exported graph (with each vertex's vertex use list in upstream order, cached gap values, edge curve identity) into topology::Brep. topology::Vertex gains vertexuses (m_pList) and poly_vertex; SM_TOLERANT_WATCH is off in the reference build (no m_bExact: IsExact is TRUE, SetExact no-op). Upstream bugs WR-91 (GetVertexuseOfFace ignores its face), WR-92 (IsTopologicalVertex SER/cusps), UB-105 (GetMaxUpDimGap3d NULL array), UB-106 (uninitialised tangents). Wired UNPORTED(topology.vertex) in geom::tools (geom.tools: 60 deferred now pass); generic-handle stubs in intersect::point_class, geom::solution_array, geom::object, geom::tol, surface::trim_srf_cache, topology::proto_topology::p1::proto and query::poly stay (opaque handles, plan/findings.md); the co-ported vertex use scans in topology::vertexuse now call topology::vertex. Plan notes: 38 fns; largest: SmVertex::IsTopologicalVertex, SmVertex::Notify, SmVertex::IsConnectedTo, SmVertex::GetMaxUpDimGap3d; cycle back-edges (call into later units; stub or co-port): topology.edge(12), heal.gap(4), topology.loopuse(2), blend.fillet_geom_p1(1), topology.face_p3(1); unit-SCC #22 (220 units); 319 upstream test entry points reach this unit; CO-PORTED in topology.edgeuse_p1 (PR #55): SmVertex::m_sZoneTol3d -> topology::Vertex::tolerance; CO-PORTED in topology.vertexuse (PR #88): SmVertex::GetVertexuses / GetVertexusesOfEdge / GetVertexusesOfFace (replaced by topology::vertex in PR #96); CO-PORTED in topology.face_p2 (PR #91): SmVertex::GetEdges without face filter (uses found by scanning the B-rep's vertex uses) -> private topology::face::p2::vertex_edges Re-run (PR #52, after merging surface_p4/#49 and surface_p5/#50): 5508 cases, 4984 pass, 524 deferred (topology.edgeuse_p3 448, topology.face_p3 76).
Difftest
- Cases
- 5,508
- Passed
- 4,984
- Deferred
- 524
- Failed
- 0
- Both errored
- 2
- Max rel. error
- 0.0
- Tolerance
- 1e-09 rel.
- Seeds
- 16
Blocked by
| Unported unit | Deferred cases |
|---|---|
topology.edgeuse_p3 claimed | 448 |
topology.face_p3 claimed | 76 |
Report JSON (per-case results)
Dependencies
Depends on: geom.object partial geom.tol green geom.vector3d green topology.edgeuse_p1 partial topology.proto_topology_p1 partial topology.topology green topology.vertexuse partial
Soft dependencies: curve.curve_p5 partial geom.context green geom.extent1d green topology.face_p2 partial topology.shell partial
Dependents: blend.fillet_corner_p1 todo blend.fillet_corner_p2 todo blend.fillet_corner_p3 todo 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 boolean.merge_p1 partial boolean.topology_intersector_p1 partial boolean.topology_intersector_p2 claimed heal.heal_data_p2 partial heal.stitch_p1 claimed heal.stitch_p2 claimed offset.offset_executive_p1 claimed offset.offset_geometry_creation 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_p9 claimed topology.face_p3 claimed topology.face_p4 claimed topology.topology_traverser partial
Soft dependents: blend.fillet_executive_p3 todo blend.fillet_solver_p4 claimed blend.fillet_solver_p5 claimed blend.fillet_standard_solver_p2 todo blend.hcr claimed boolean.merge_p2 todo boolean.merge_p4 todo boolean.merge_p5 partial heal.face_props partial heal.gap partial heal.heal_data_p3 partial mass.integrator partial primitive.primitive_creation_p2 todo query.api_queries partial query.brep claimed query.edge partial query.face_p1 claimed query.face_p2 partial query.face_p3 claimed query.face_p4 claimed query.poly partial sweep.rotational_sweep_geometry partial sweep.trans_sweep_geometry partial topology.brep_cache partial topology.brep_p8 claimed topology.edge partial topology.edgeuse_p3 claimed topology.face_p1 partial topology.loopuse partial topology.proto_topology_p3 partial
Upstream functions
| Upstream function | Defined at | Lines | Rust (from the file header) |
|---|---|---|---|
SmVertex::SmVertex | SmVertex.h:117 | 12 | [crate::topology::Vertex] |
SmVertex::~SmVertex | SmVertex.h:130 | 3 | [crate::topology::Vertex] |
SmVertex::GetMaxGap3d | SmVertex.h:155 | 1 | [max_up_dim_gap_3d], [max_gap_3d], [VertexGap], [HeldGap] |
SmVertex::GetPoint | SmVertex.h:158 | 1 | [point], [set_point] |
SmVertex::GetPolyVertex | SmVertex.h:180 | 1 | [poly_vertex], [set_poly_vertex] |
SmVertex::SetExact | SmVertex.h:260 | 1 | [is_exact], [set_exact] |
SmVertex::GetTolerance | SmVertex.h:268 | 1 | [tolerance], [set_tolerance], [refresh_tolerance] |
SmVertex::GetClassString | SmVertex.h:343 | 1 | [TYPE], [TYPE_STRING], [CLASS_STRING], [is_kind_of] |
SmVertex::GetType | SmVertex.h:343 | 1 | [TYPE], [TYPE_STRING], [CLASS_STRING], [is_kind_of] |
SmVertex::GetTypeString | SmVertex.h:343 | 1 | [TYPE], [TYPE_STRING], [CLASS_STRING], [is_kind_of] |
SmVertex::AreEdgesTangent | SmVertex.cpp:70 | 40 | [are_edges_tangent] |
SmVertex::IsConnectedTo | SmVertex.cpp:159 | 54 | [is_connected_to] |
SmVertex::GetVertexuseOfFace | SmVertex.cpp:225 | 49 | [vertexuse_of_face] |
SmVertex::GetVertexusesOfFace | SmVertex.cpp:282 | 39 | [vertexuses_of_face], [vertexuses_of_edge] |
SmVertex::GetVertexusesOfEdge | SmVertex.cpp:427 | 39 | [vertexuses_of_face], [vertexuses_of_edge] |
SmVertex::GetCommonEdges | SmVertex.cpp:472 | 34 | [edges], [common_edges] |
SmVertex::GetEdges | SmVertex.cpp:512 | 34 | [edges], [common_edges] |
SmVertex::GetFaces | SmVertex.cpp:552 | 31 | [faces], [faceuses], [shells], [regions], [shell_in_region] |
SmVertex::GetFaceuses | SmVertex.cpp:589 | 29 | [faces], [faceuses], [shells], [regions], [shell_in_region] |
SmVertex::GetShells | SmVertex.cpp:624 | 17 | [faces], [faceuses], [shells], [regions], [shell_in_region] |
SmVertex::GetRegions | SmVertex.cpp:647 | 17 | [faces], [faceuses], [shells], [regions], [shell_in_region] |
SmVertex::GetShellInRegion | SmVertex.cpp:671 | 29 | [faces], [faceuses], [shells], [regions], [shell_in_region] |
SmVertex::IsTopologicalVertex | SmVertex.cpp:716 | 94 | [is_topological_vertex], [is_on_pole] |
SmVertex::IsOnPole | SmVertex.cpp:817 | 22 | [is_topological_vertex], [is_on_pole] |
SmVertex::SetPolyVertex | SmVertex.cpp:1055 | 6 | [poly_vertex], [set_poly_vertex] |
SmVertex::IsWireVertex | SmVertex.cpp:1068 | 15 | [is_wire_vertex], [is_lamina_vertex] |
SmVertex::IsLaminaVertex | SmVertex.cpp:1090 | 15 | [is_wire_vertex], [is_lamina_vertex] |
SmVertex::SetTolerance | SmVertex.cpp:1114 | 34 | [tolerance], [set_tolerance], [refresh_tolerance] |
SmVertex::RefreshTolerance | SmVertex.cpp:2313 | 24 | [tolerance], [set_tolerance], [refresh_tolerance] |
SmVertex::Notify | SmVertex.cpp:2402 | 58 | [notify] |
SmVertex::GetMaxUpDimGap3d | SmVertex.cpp:2978 | 52 | [max_up_dim_gap_3d], [max_gap_3d], [VertexGap], [HeldGap] |
SmVertex::IsShellVertex | SmVertex.cpp:3070 | 10 | [is_shell_vertex], [is_loop_vertex] |
SmVertex::IsLoopVertex | SmVertex.cpp:3097 | 16 | [is_shell_vertex], [is_loop_vertex] |
SmVertex::SetPoint | SmVertex.cpp:3255 | 6 | [point], [set_point] |
SmVertex::GetPrimaryVertexuse | SmVertex.cpp:3267 | 8 | [primary_vertexuse], [vertexuses], [vertexuses_with_attribute] |
SmVertex::GetBrep | SmVertex.cpp:3281 | 17 | [brep] |
SmVertex::GetVertexuses | SmVertex.cpp:3304 | 8 | [primary_vertexuse], [vertexuses], [vertexuses_with_attribute] |
SmVertex::IsKindOf | SmVertex.cpp:3317 | 4 | [TYPE], [TYPE_STRING], [CLASS_STRING], [is_kind_of] |
Module file-header table (21 rows)
| Rust | Upstream |
|---|---|
[TYPE], [TYPE_STRING], [CLASS_STRING], [is_kind_of] | SmVertex::GetType, GetTypeString, GetClassString, IsKindOf |
[crate::topology::Vertex] | SmVertex (members; Default is SmVertex(), Drop ~SmVertex) |
[point], [set_point] | SmVertex::GetPoint, SetPoint |
[tolerance], [set_tolerance], [refresh_tolerance] | SmVertex::GetTolerance, SetTolerance, RefreshTolerance (SM_USE_OLDTOL) |
[is_exact], [set_exact] | SmVertex::IsExact, SetExact (without SM_TOLERANT_WATCH) |
[poly_vertex], [set_poly_vertex] | SmVertex::GetPolyVertex, SetPolyVertex |
[primary_vertexuse], [vertexuses], [vertexuses_with_attribute] | SmVertex::GetPrimaryVertexuse, GetVertexuses |
[brep] | SmVertex::GetBrep |
[vertexuse_of_face] | SmVertex::GetVertexuseOfFace |
[vertexuses_of_face], [vertexuses_of_edge] | SmVertex::GetVertexusesOfFace, GetVertexusesOfEdge |
[edges], [common_edges] | SmVertex::GetEdges, GetCommonEdges |
[faces], [faceuses], [shells], [regions], [shell_in_region] | SmVertex::GetFaces, GetFaceuses, GetShells, GetRegions, GetShellInRegion |
[is_connected_to] | SmVertex::IsConnectedTo |
[are_edges_tangent] | SmVertex::AreEdgesTangent |
[is_topological_vertex], [is_on_pole] | SmVertex::IsTopologicalVertex, IsOnPole |
[is_wire_vertex], [is_lamina_vertex] | SmVertex::IsWireVertex, IsLaminaVertex |
[is_shell_vertex], [is_loop_vertex] | SmVertex::IsShellVertex, IsLoopVertex |
[max_up_dim_gap_3d], [max_gap_3d], [VertexGap], [HeldGap] | SmVertex::GetMaxUpDimGap3d, GetMaxGap3d (the SmGap* results) |
[notify] | SmVertex::Notify |
[edge_start_vertex], [edge_vertex_pair], [edge_vertices], [edge_end_tangent] | SmEdge::GetStartVertex, GetVertices(SmVertex*&, SmVertex*&), GetVertices(SmTArray&), GetEndTangent (CO-PORTED, topology.edge) |
[loopuse_vertices], [loop_vertices] | SmLoopuse::GetVertices, SmLoop::GetVertices (CO-PORTED, topology.loopuse) |
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