solidcore

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 unitDeferred cases
topology.edgeuse_p3 claimed448
topology.face_p3 claimed76

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 functionDefined atLinesRust (from the file header)
SmVertex::SmVertexSmVertex.h:11712[crate::topology::Vertex]
SmVertex::~SmVertexSmVertex.h:1303[crate::topology::Vertex]
SmVertex::GetMaxGap3dSmVertex.h:1551[max_up_dim_gap_3d], [max_gap_3d], [VertexGap], [HeldGap]
SmVertex::GetPointSmVertex.h:1581[point], [set_point]
SmVertex::GetPolyVertexSmVertex.h:1801[poly_vertex], [set_poly_vertex]
SmVertex::SetExactSmVertex.h:2601[is_exact], [set_exact]
SmVertex::GetToleranceSmVertex.h:2681[tolerance], [set_tolerance], [refresh_tolerance]
SmVertex::GetClassStringSmVertex.h:3431[TYPE], [TYPE_STRING], [CLASS_STRING], [is_kind_of]
SmVertex::GetTypeSmVertex.h:3431[TYPE], [TYPE_STRING], [CLASS_STRING], [is_kind_of]
SmVertex::GetTypeStringSmVertex.h:3431[TYPE], [TYPE_STRING], [CLASS_STRING], [is_kind_of]
SmVertex::AreEdgesTangentSmVertex.cpp:7040[are_edges_tangent]
SmVertex::IsConnectedToSmVertex.cpp:15954[is_connected_to]
SmVertex::GetVertexuseOfFaceSmVertex.cpp:22549[vertexuse_of_face]
SmVertex::GetVertexusesOfFaceSmVertex.cpp:28239[vertexuses_of_face], [vertexuses_of_edge]
SmVertex::GetVertexusesOfEdgeSmVertex.cpp:42739[vertexuses_of_face], [vertexuses_of_edge]
SmVertex::GetCommonEdgesSmVertex.cpp:47234[edges], [common_edges]
SmVertex::GetEdgesSmVertex.cpp:51234[edges], [common_edges]
SmVertex::GetFacesSmVertex.cpp:55231[faces], [faceuses], [shells], [regions], [shell_in_region]
SmVertex::GetFaceusesSmVertex.cpp:58929[faces], [faceuses], [shells], [regions], [shell_in_region]
SmVertex::GetShellsSmVertex.cpp:62417[faces], [faceuses], [shells], [regions], [shell_in_region]
SmVertex::GetRegionsSmVertex.cpp:64717[faces], [faceuses], [shells], [regions], [shell_in_region]
SmVertex::GetShellInRegionSmVertex.cpp:67129[faces], [faceuses], [shells], [regions], [shell_in_region]
SmVertex::IsTopologicalVertexSmVertex.cpp:71694[is_topological_vertex], [is_on_pole]
SmVertex::IsOnPoleSmVertex.cpp:81722[is_topological_vertex], [is_on_pole]
SmVertex::SetPolyVertexSmVertex.cpp:10556[poly_vertex], [set_poly_vertex]
SmVertex::IsWireVertexSmVertex.cpp:106815[is_wire_vertex], [is_lamina_vertex]
SmVertex::IsLaminaVertexSmVertex.cpp:109015[is_wire_vertex], [is_lamina_vertex]
SmVertex::SetToleranceSmVertex.cpp:111434[tolerance], [set_tolerance], [refresh_tolerance]
SmVertex::RefreshToleranceSmVertex.cpp:231324[tolerance], [set_tolerance], [refresh_tolerance]
SmVertex::NotifySmVertex.cpp:240258[notify]
SmVertex::GetMaxUpDimGap3dSmVertex.cpp:297852[max_up_dim_gap_3d], [max_gap_3d], [VertexGap], [HeldGap]
SmVertex::IsShellVertexSmVertex.cpp:307010[is_shell_vertex], [is_loop_vertex]
SmVertex::IsLoopVertexSmVertex.cpp:309716[is_shell_vertex], [is_loop_vertex]
SmVertex::SetPointSmVertex.cpp:32556[point], [set_point]
SmVertex::GetPrimaryVertexuseSmVertex.cpp:32678[primary_vertexuse], [vertexuses], [vertexuses_with_attribute]
SmVertex::GetBrepSmVertex.cpp:328117[brep]
SmVertex::GetVertexusesSmVertex.cpp:33048[primary_vertexuse], [vertexuses], [vertexuses_with_attribute]
SmVertex::IsKindOfSmVertex.cpp:33174[TYPE], [TYPE_STRING], [CLASS_STRING], [is_kind_of]
Module file-header table (21 rows)
RustUpstream
[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