solidcore

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 unitDeferred cases
topology.face_p3 claimed366
topology.edgeuse_p3 claimed348
topology.brep_p7 claimed87
surface.sphere green45
surface.surf_of_extrusion_p2 partial33
surface.cone_p1 green25

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 functionDefined atLinesRust (from the file header)
SmLoop::SmLoopSmLoop.h:503[crate::topology::Loop]
SmLoop::~SmLoopSmLoop.h:543[crate::topology::Loop]
SmLoop::GetFaceSmLoop.h:614[loop_face], [loop_loopuse], [loop_loopuses]
SmLoop::GetLoopuseSmLoop.h:651[loop_face], [loop_loopuse], [loop_loopuses]
SmLoop::GetVerticesSmLoop.h:661[loop_vertices], [loop_edges], [loop_edgeuses]
SmLoop::GetEdgesSmLoop.h:681[edges], [edgeuses], [vertexuses], [vertices]
SmLoop::GetEdgeusesSmLoop.h:691[edges], [edgeuses], [vertexuses], [vertices]
SmLoop::GetLoopusesSmLoop.h:707[loop_face], [loop_loopuse], [loop_loopuses]
SmLoop::GetClassStringSmLoop.h:1571[TYPE], [TYPE_STRING], [CLASS_STRING], [is_kind_of]
SmLoop::GetClassTypeSmLoop.h:1571[LOOP_TYPE], [LOOP_TYPE_STRING], [LOOP_CLASS_STRING], [loop_class_type], [loop_is_kind_of]
SmLoop::GetTypeSmLoop.h:1571[LOOP_TYPE], [LOOP_TYPE_STRING], [LOOP_CLASS_STRING], [loop_class_type], [loop_is_kind_of]
SmLoop::GetTypeStringSmLoop.h:1571[TYPE], [TYPE_STRING], [CLASS_STRING], [is_kind_of]
SmLoopuse::SmLoopuseSmLoopuse.h:608[crate::topology::Loopuse]
SmLoopuse::~SmLoopuseSmLoopuse.h:697[crate::topology::Loopuse]
SmLoopuse::GetVertexuseSmLoopuse.h:941[vertexuse], [faceuse], [loop_], [orientation], [other_loopuse]
SmLoopuse::GetFaceuseSmLoopuse.h:951[vertexuse], [faceuse], [loop_], [orientation], [other_loopuse]
SmLoopuse::GetLoopSmLoopuse.h:961[vertexuse], [faceuse], [loop_], [orientation], [other_loopuse]
SmLoopuse::GetOrientationSmLoopuse.h:971[vertexuse], [faceuse], [loop_], [orientation], [other_loopuse]
SmLoopuse::GetOtherLoopuseSmLoopuse.h:981[vertexuse], [faceuse], [loop_], [orientation], [other_loopuse]
SmLoopuse::GetEUorVUSmLoopuse.h:1011[eu_or_vu], [loopuse_type]
SmLoopuse::GetLoopuseTypeSmLoopuse.h:1021[eu_or_vu], [loopuse_type]
SmLoopuse::IsVertexLoopuseSmLoopuse.h:1051[is_vertex_loopuse], [is_edge_loopuse]
SmLoopuse::IsEdgeLoopuseSmLoopuse.h:1061[is_vertex_loopuse], [is_edge_loopuse]
SmLoopuse::SetOrientationSmLoopuse.h:1281[set_orientation], [set_loop], [set_edgeuse]
SmLoopuse::SetLoopSmLoopuse.h:1291[set_orientation], [set_loop], [set_edgeuse]
SmLoopuse::GetClassStringSmLoopuse.h:1571[TYPE], [TYPE_STRING], [CLASS_STRING], [is_kind_of]
SmLoopuse::GetTypeSmLoopuse.h:1571[TYPE], [TYPE_STRING], [CLASS_STRING], [is_kind_of]
SmLoopuse::GetTypeStringSmLoopuse.h:1571[TYPE], [TYPE_STRING], [CLASS_STRING], [is_kind_of]
SmLoop::FlipLoopOrientationSmLoop.cpp:5282[flip_loop_orientation]
SmLoop::IsOuterLoopSmLoop.cpp:18810[is_outer_loop]
SmLoop::IsClosed3dSmLoop.cpp:24819[loop_is_closed_3d], [loop_is_closed_ptrs]
SmLoop::IsClosedPtrsSmLoop.cpp:27310[is_closed_ptrs]
SmLoop::IsConnectedToSmLoop.cpp:29845[loop_is_connected_to]
SmLoop::GetUVCornerBoundariesSmLoop.cpp:38692[uv_corner_boundaries], [UvCorners]
sm_CalcQuadNumSmLoop.cpp:4877[calc_quad_num]
SmLoop::IsKindOfSmLoop.cpp:17614[TYPE], [TYPE_STRING], [CLASS_STRING], [is_kind_of]
SmLoopuse::CollectEdgeusesSmLoopuse.cpp:6655[collect_edgeuses]
SmLoopuse::GetEdgesSmLoopuse.cpp:24039[edges], [edgeuses], [vertexuses], [vertices]
SmLoopuse::GetEdgeusesSmLoopuse.cpp:28960[edges], [edgeuses], [vertexuses], [vertices]
SmLoopuse::GetVertexusesSmLoopuse.cpp:35550[edges], [edgeuses], [vertexuses], [vertices]
SmLoopuse::GetVerticesSmLoopuse.cpp:41153[edges], [edgeuses], [vertexuses], [vertices]
SmLoopuse::GetShellSmLoopuse.cpp:5338[shell]
SmLoopuse::SetEdgeuseSmLoopuse.cpp:65812[set_orientation], [set_loop], [set_edgeuse]
SmLoopuse::IsClosed3dSmLoopuse.cpp:773136[is_closed_3d], [Closed3d]
SmLoopuse::IsClosedPtrsSmLoopuse.cpp:91751[is_closed_ptrs]
SmLoopuse::IsConnectedToSmLoopuse.cpp:98339[is_connected_to]
SmLoopuse::IsMissingSeamAtVerticesSmLoopuse.cpp:111562[is_missing_seam_at_vertices]
SmLoopuse::IsKindOfSmLoopuse.cpp:15694[TYPE], [TYPE_STRING], [CLASS_STRING], [is_kind_of]
Module file-header table (23 rows)
RustUpstream
[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