Units / topology
topology.loopuse partial
- Layer
- 39
- Upstream lines
- 892
- Functions
- 48
- Rust module
topology::loopuse
Source: crates/solidcore/src/topology/loopuse.rs
Upstream: source/SMLib/inc/SmLoop.h, source/SMLib/inc/SmLoopuse.h, source/SMLib/src/SmLoop.cpp, source/SMLib/src/SmLoopuse.cpp
Notes
PARTIAL: difftest 8854 cases (8238 fixture: 4712 review adversarial (fixtures/topology.loopuse/review_adversarial.json: every op on loop indices 0..23 of each B-rep, a deterministic subset of a 78120-case sweep that passed once), 1984 tolerance-limit IsClosed3d cases (every edge tolerance 0, 1e-15, -1e-12 or 1e-9, so gaps exceed XSectTol3d: the over-tolerance branch runs 176 times, 88 with bCheckAllGaps FALSE), 1110 on the 15 upstream .smb B-reps read by SmBrep::ReadFromFile, with and without RebuildUVTrimCurves, plus 432 on the prog_test my_test_topology wire network, wire edges and the plane / B-spline faces of topology.edgeuse_p2 incl. tiny, huge, pinched and sub-domain ones; 16 generated + 600 generated in code; 4000 more checked once), 7950 pass bit-identical, 0 failed, 904 deferred (topology.face_p3 366: SmFace::Notify around FlipLoopOrientation of every loop on a face; topology.edgeuse_p3 348: GetOrCreateUVTrimCurve in GetUVCornerBoundaries / the sector computations of IsMissingSeamAtVertices; inexact .smb geometry 190: topology.brep_p7 87, surface.sphere 45, surface.surf_of_extrusion_p2 33, surface.cone_p1 25), max_rel_err 0; --perturb SENSITIVE. Loopuse gains orientation (m_eOrientation); the shared B-rep export (sc_edgeuse_graph.h and the topology.vertexuse / topology.face_p2 / query.edge shim copies) and their importers carry it; the loopuse shim adds each face m_pFU (FaceFu op). Upstream bug WR-93: IsClosed3d never reports a loop open (ported as is). Wired: SmVertex::IsConnectedTo / SmEdge::IsConnectedTo -> topology::vertex / topology::edge is_connected_to (merge of main; the 99 vertex/edge-target cases now run on both sides); topology.edgeuse_p1 co-ports loopuse_edgeuses / loopuse_shell, topology.face_p2 loopuse_vertexuses, query.loop calc_quad_num and topology.vertexuse SmLoopuse::GetOrientation now call topology::loopuse (their difftests unchanged); UNPORTED(topology.loopuse) in intersect::point_class and surface::trim_srf_cache not wired (opaque handles without a Brep; plan/findings.md). Plan notes: 48 fns; largest: SmLoopuse::IsClosed3d, SmLoop::GetUVCornerBoundaries, SmLoop::FlipLoopOrientation, SmLoopuse::IsMissingSeamAtVertices; cycle back-edges (call into later units; stub or co-port): topology.edge(6), topology.edgeuse_p3(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): SmLoopuse members (owner face use, m_pL, m_pLUMate, m_tLoopuseType/m_pEUorVU) -> topology::{Loopuse, LoopuseStart}, SmLoop::m_pLU -> topology::Loop::loopuse; SmLoopuse::GetEdgeuses (no filters), GetShell -> topology::edgeuse::p1::{loopuse_edgeuses, loopuse_shell}; CO-PORTED in query.loop (PR #63): SmLoop::GetUVCornerBoundaries, sm_CalcQuadNum -> query::r#loop::uv_corner_boundaries, query::r#loop::calc_quad_num (private); they read the borrowed FaceLoop view of query::r#loop until the topology binds geometry.; CO-PORTED in topology.face_p2 (PR #91): SmLoopuse::GetVertexuses without filter -> private topology::face::p2::loopuse_vertexuses; CO-PORTED in topology.vertex (PR #96): SmLoopuse::GetVertices(SmTArray&) (no attribute filter), SmLoop::GetVertices -> topology::vertex::{loopuse_vertices, loop_vertices}; CO-PORTED in topology.edge (PR #103): SmLoopuse::GetEdges(SmTArray&) without attribute filter -> private topology::edge::loopuse_edges
Difftest
- Cases
- 8,854
- Passed
- 7,950
- Deferred
- 904
- Failed
- 0
- Both errored
- 333
- Max rel. error
- 0.0
- Tolerance
- 1e-09 rel.
- Seeds
- 16
Blocked by
| Unported unit | Deferred cases |
|---|---|
topology.face_p3 claimed | 366 |
topology.edgeuse_p3 claimed | 348 |
topology.brep_p7 claimed | 87 |
surface.sphere green | 45 |
surface.surf_of_extrusion_p2 partial | 33 |
surface.cone_p1 green | 25 |
Report JSON (per-case results)
Dependencies
Depends on: geom.a_object partial geom.extent1d green geom.object partial geom.tol green geom.vector3d green topology.edgeuse_p1 partial topology.face_p2 partial topology.topology green topology.vertexuse partial
Soft dependencies: curve.curve_p2 green geom.extent2d green geom.vector2d green nurbs.b_spline_curve_p1 green surface.surface_p2 partial surface.surface_p5 green surface.surface_p7 partial topology.proto_topology_p1 partial topology.shell claimed topology.vertex partial
Dependents: boolean.merge_p2 todo heal.face_props partial heal.heal_data_p3 partial query.face_p3 claimed query.face_p4 claimed query.loop green sweep.topology_sweep claimed topology.brep_p1 claimed topology.brep_p3 claimed topology.brep_p4 claimed topology.brep_p6 claimed topology.brep_p8 claimed topology.brep_p9 claimed topology.face_p1 partial topology.face_p3 claimed topology.face_p4 claimed topology.trimming_tools partial
Soft dependents: blend.fillet_geom_p6 todo blend.fillet_solver_p1 claimed blend.fillet_solver_p3 todo blend.fillet_standard_solver_p1 claimed blend.fillet_standard_solver_p2 todo blend.hcr claimed boolean.topology_intersector_p3 claimed query.api_queries partial topology.brep_p10 claimed topology.edge partial topology.topology_traverser partial
Upstream functions
| Upstream function | Defined at | Lines | Rust (from the file header) |
|---|---|---|---|
SmLoop::SmLoop | SmLoop.h:50 | 3 | [crate::topology::Loop] |
SmLoop::~SmLoop | SmLoop.h:54 | 3 | [crate::topology::Loop] |
SmLoop::GetFace | SmLoop.h:61 | 4 | [loop_face], [loop_loopuse], [loop_loopuses] |
SmLoop::GetLoopuse | SmLoop.h:65 | 1 | [loop_face], [loop_loopuse], [loop_loopuses] |
SmLoop::GetVertices | SmLoop.h:66 | 1 | [loop_vertices], [loop_edges], [loop_edgeuses] |
SmLoop::GetEdges | SmLoop.h:68 | 1 | [edges], [edgeuses], [vertexuses], [vertices] |
SmLoop::GetEdgeuses | SmLoop.h:69 | 1 | [edges], [edgeuses], [vertexuses], [vertices] |
SmLoop::GetLoopuses | SmLoop.h:70 | 7 | [loop_face], [loop_loopuse], [loop_loopuses] |
SmLoop::GetClassString | SmLoop.h:157 | 1 | [TYPE], [TYPE_STRING], [CLASS_STRING], [is_kind_of] |
SmLoop::GetClassType | SmLoop.h:157 | 1 | [LOOP_TYPE], [LOOP_TYPE_STRING], [LOOP_CLASS_STRING], [loop_class_type], [loop_is_kind_of] |
SmLoop::GetType | SmLoop.h:157 | 1 | [LOOP_TYPE], [LOOP_TYPE_STRING], [LOOP_CLASS_STRING], [loop_class_type], [loop_is_kind_of] |
SmLoop::GetTypeString | SmLoop.h:157 | 1 | [TYPE], [TYPE_STRING], [CLASS_STRING], [is_kind_of] |
SmLoopuse::SmLoopuse | SmLoopuse.h:60 | 8 | [crate::topology::Loopuse] |
SmLoopuse::~SmLoopuse | SmLoopuse.h:69 | 7 | [crate::topology::Loopuse] |
SmLoopuse::GetVertexuse | SmLoopuse.h:94 | 1 | [vertexuse], [faceuse], [loop_], [orientation], [other_loopuse] |
SmLoopuse::GetFaceuse | SmLoopuse.h:95 | 1 | [vertexuse], [faceuse], [loop_], [orientation], [other_loopuse] |
SmLoopuse::GetLoop | SmLoopuse.h:96 | 1 | [vertexuse], [faceuse], [loop_], [orientation], [other_loopuse] |
SmLoopuse::GetOrientation | SmLoopuse.h:97 | 1 | [vertexuse], [faceuse], [loop_], [orientation], [other_loopuse] |
SmLoopuse::GetOtherLoopuse | SmLoopuse.h:98 | 1 | [vertexuse], [faceuse], [loop_], [orientation], [other_loopuse] |
SmLoopuse::GetEUorVU | SmLoopuse.h:101 | 1 | [eu_or_vu], [loopuse_type] |
SmLoopuse::GetLoopuseType | SmLoopuse.h:102 | 1 | [eu_or_vu], [loopuse_type] |
SmLoopuse::IsVertexLoopuse | SmLoopuse.h:105 | 1 | [is_vertex_loopuse], [is_edge_loopuse] |
SmLoopuse::IsEdgeLoopuse | SmLoopuse.h:106 | 1 | [is_vertex_loopuse], [is_edge_loopuse] |
SmLoopuse::SetOrientation | SmLoopuse.h:128 | 1 | [set_orientation], [set_loop], [set_edgeuse] |
SmLoopuse::SetLoop | SmLoopuse.h:129 | 1 | [set_orientation], [set_loop], [set_edgeuse] |
SmLoopuse::GetClassString | SmLoopuse.h:157 | 1 | [TYPE], [TYPE_STRING], [CLASS_STRING], [is_kind_of] |
SmLoopuse::GetType | SmLoopuse.h:157 | 1 | [TYPE], [TYPE_STRING], [CLASS_STRING], [is_kind_of] |
SmLoopuse::GetTypeString | SmLoopuse.h:157 | 1 | [TYPE], [TYPE_STRING], [CLASS_STRING], [is_kind_of] |
SmLoop::FlipLoopOrientation | SmLoop.cpp:52 | 82 | [flip_loop_orientation] |
SmLoop::IsOuterLoop | SmLoop.cpp:188 | 10 | [is_outer_loop] |
SmLoop::IsClosed3d | SmLoop.cpp:248 | 19 | [loop_is_closed_3d], [loop_is_closed_ptrs] |
SmLoop::IsClosedPtrs | SmLoop.cpp:273 | 10 | [is_closed_ptrs] |
SmLoop::IsConnectedTo | SmLoop.cpp:298 | 45 | [loop_is_connected_to] |
SmLoop::GetUVCornerBoundaries | SmLoop.cpp:386 | 92 | [uv_corner_boundaries], [UvCorners] |
sm_CalcQuadNum | SmLoop.cpp:487 | 7 | [calc_quad_num] |
SmLoop::IsKindOf | SmLoop.cpp:1761 | 4 | [TYPE], [TYPE_STRING], [CLASS_STRING], [is_kind_of] |
SmLoopuse::CollectEdgeuses | SmLoopuse.cpp:66 | 55 | [collect_edgeuses] |
SmLoopuse::GetEdges | SmLoopuse.cpp:240 | 39 | [edges], [edgeuses], [vertexuses], [vertices] |
SmLoopuse::GetEdgeuses | SmLoopuse.cpp:289 | 60 | [edges], [edgeuses], [vertexuses], [vertices] |
SmLoopuse::GetVertexuses | SmLoopuse.cpp:355 | 50 | [edges], [edgeuses], [vertexuses], [vertices] |
SmLoopuse::GetVertices | SmLoopuse.cpp:411 | 53 | [edges], [edgeuses], [vertexuses], [vertices] |
SmLoopuse::GetShell | SmLoopuse.cpp:533 | 8 | [shell] |
SmLoopuse::SetEdgeuse | SmLoopuse.cpp:658 | 12 | [set_orientation], [set_loop], [set_edgeuse] |
SmLoopuse::IsClosed3d | SmLoopuse.cpp:773 | 136 | [is_closed_3d], [Closed3d] |
SmLoopuse::IsClosedPtrs | SmLoopuse.cpp:917 | 51 | [is_closed_ptrs] |
SmLoopuse::IsConnectedTo | SmLoopuse.cpp:983 | 39 | [is_connected_to] |
SmLoopuse::IsMissingSeamAtVertices | SmLoopuse.cpp:1115 | 62 | [is_missing_seam_at_vertices] |
SmLoopuse::IsKindOf | SmLoopuse.cpp:1569 | 4 | [TYPE], [TYPE_STRING], [CLASS_STRING], [is_kind_of] |
Module file-header table (23 rows)
| Rust | Upstream |
|---|---|
[TYPE], [TYPE_STRING], [CLASS_STRING], [is_kind_of] | SmLoopuse::GetType, GetTypeString, GetClassString, IsKindOf |
[LOOP_TYPE], [LOOP_TYPE_STRING], [LOOP_CLASS_STRING], [loop_class_type], [loop_is_kind_of] | SmLoop::GetType, GetTypeString, GetClassString, GetClassType, IsKindOf |
[crate::topology::Loopuse] | SmLoopuse (members; Default is SmLoopuse(), Drop ~SmLoopuse) |
[crate::topology::Loop] | SmLoop (m_pLU is [crate::topology::Loop::loopuse]; SmLoop() / ~SmLoop) |
[vertexuse], [faceuse], [loop_], [orientation], [other_loopuse] | SmLoopuse::GetVertexuse, GetFaceuse, GetLoop, GetOrientation, GetOtherLoopuse |
[eu_or_vu], [loopuse_type] | SmLoopuse::GetEUorVU, GetLoopuseType |
[is_vertex_loopuse], [is_edge_loopuse] | SmLoopuse::IsVertexLoopuse, IsEdgeLoopuse |
[set_orientation], [set_loop], [set_edgeuse] | SmLoopuse::SetOrientation, SetLoop, SetEdgeuse |
[collect_edgeuses] | SmLoopuse::CollectEdgeuses |
[edges], [edgeuses], [vertexuses], [vertices] | SmLoopuse::GetEdges, GetEdgeuses, GetVertexuses, GetVertices (SmTArray overloads) |
[shell] | SmLoopuse::GetShell |
[is_closed_3d], [Closed3d] | SmLoopuse::IsClosed3d |
[is_closed_ptrs] | SmLoopuse::IsClosedPtrs |
[is_connected_to] | SmLoopuse::IsConnectedTo |
[is_missing_seam_at_vertices] | SmLoopuse::IsMissingSeamAtVertices |
[loop_face], [loop_loopuse], [loop_loopuses] | SmLoop::GetFace, GetLoopuse, GetLoopuses |
[loop_vertices], [loop_edges], [loop_edgeuses] | SmLoop::GetVertices, GetEdges, GetEdgeuses |
[flip_loop_orientation] | SmLoop::FlipLoopOrientation |
[is_outer_loop] | SmLoop::IsOuterLoop |
[loop_is_closed_3d], [loop_is_closed_ptrs] | SmLoop::IsClosed3d, IsClosedPtrs |
[loop_is_connected_to] | SmLoop::IsConnectedTo |
[uv_corner_boundaries], [UvCorners] | SmLoop::GetUVCornerBoundaries |
[calc_quad_num] | sm_CalcQuadNum (static) |
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