solidcore

Units / intersect

intersect.topology_solver_p1 partial

Layer
32
Upstream lines
1,838
Functions
55
Rust module
intersect::topology_solver::p1

Source: crates/solidcore/src/intersect/topology_solver/p1.rs

Upstream: source/SMLib/inc/SmTopologySolver.h, source/SMLib/src/SmTopologySolver.cpp

Notes

UPDATE after curve.curve_p9 (PR #13): the GlobalCurveSolve back-edge is wired (curve_global_curve_solve); difftest 3532 cases, 3389 pass bit-identical, 0 failed, 143 deferred (topology.brep_p1 48, topology.edge 95; the 151 curve.curve_p9 deferrals are gone), --perturb SENSITIVE 3389/3389. Counts below are from before. PARTIAL: difftest 3532 cases (532 fixture: SM_API_test TestSmCreateRectangle / TestSmCreateRegularPolygon edges, my_test_drop_point, my_test_reversed_line_join lines, every operation on degenerate boxes / coincident and unit-distance vertices, tiny and huge circles, ray and at-distance tolerance limits, sub-domain edges, review adversarial cases (ray behind start, signed directed, at-distance 1e7, projected/directed MayContainAnswer, curve and edge solves), zero and tiny option vectors; 3000 generated), 3161 pass bit-identical, 0 failed, 371 deferred (curve.curve_p9 151: GlobalCurveSolve of non-intersecting curve/edge solves; intersect.topology_solver_p2 87: SmTopologySolver::LocalSolve reached from SolveTrees; topology.edge 85: edge parameter intervals in solution comparisons; topology.brep_p1 48: object zone tolerances of ray-fire solutions and ellipse solves); --perturb SENSITIVE. Solvers read vertices, edges, faces and shape membership through the TopologyObjects trait (the difftest backs it with free-standing SmVertex/SmEdge objects); a B-rep implementation belongs with the BrepCache trees (intersect.topology_solver_p2, topology.vertex, topology.edge, topology.face_p2). SmTLSPointFace and sm_GetFaceSilhouettes remain partial; p2 fixtures exercise face exclusion and explicit surface/query deferrals, and the cache factory is wired. Upstream issues UB-85, UB-86, WR-62 (WR-62 unconfirmed: single-call fixtures defer at SmTol::GetZoneTol3d). The curve_global_curve_solve stub gets both intervals, operation, tolerance, best answer, option vectors and SM_SR_ALL as upstream passes them; face_silhouettes calls surface_cache (surface.surface_p2) through TopologyObjects::surface; face_point_classify must return the class even when PointClassify fails (callers ignore its status). FFI refuses short option vectors only for the MayContainAnswer ray and the curve solvers (findings.md). 55 fns; largest: SmTopologySolver::MayContainAnswer, SmTLSPointFace::SolveIt, SmTLSPointVertex::SolveIt, SmTLSCurveCurve::SolveIt; cycle back-edges (call into later units; stub or co-port): topology.face_p2(6), topology.edge(5), topology.vertex(4), query.face_p1(1), query.face_p2(1); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit; CO-PORTED in intersect.topology_solver_p2 (PR #60): TopologyObjects::brep_trees / shape_member_object / shape_geometry_object -> borrowed tree and topology-to-geometry adapters; LocalSolver::new supplies the shared SmTLSVertexEdge / SmTLSEdgeEdge constructors; LocalSolve and six local class stubs are wired to p2; current validation: 3532 cases, 3248 bit-identical, 0 failed, 284 deferred (curve.curve_p9 151, topology.brep_p1 48, topology.edge 85); max_rel_err=0; no absolute floors

Difftest

Cases
3,532
Passed
3,389
Deferred
143
Failed
0
Both errored
0
Max rel. error
0.0
Tolerance
1e-09 rel.
Seeds
16

Blocked by

Unported unitDeferred cases
topology.edge partial95
topology.brep_p1 claimed48

Report JSON (per-case results)

Dependencies

Depends on: curve.curve_p2 green geom.extent3d green geom.global_solver partial geom.object partial geom.solution_array partial geom.tol green geom.tree partial geom.vector3d green surface.surface_p2 partial

Soft dependencies: curve.curve_p1 partial curve.curve_p8 green curve.curve_p9 green geom.extent1d green geom.geom_utility_p1 green geom.vector2d green intersect.point_class partial surface.surface_cache_p1 green surface.surface_cache_p2 partial surface.surface_p1 partial surface.surface_p4 green surface.surface_p8 partial

Dependents: intersect.topology_solver_p2 partial

Soft dependents: none

Upstream functions

Upstream functionDefined atLinesRust (from the file header)
SmTopoLocalSolver::SmTopoLocalSolverSmTopologySolver.h:527[LocalSolverKind]
SmTopoLocalSolver::~SmTopoLocalSolverSmTopologySolver.h:601
SmTopoLocalSolver::SolveItSmTopologySolver.h:654[LocalSolver::solve_it]
SmTLSPoint::SmTLSPointSmTopologySolver.h:859
SmTLSPoint::~SmTLSPointSmTopologySolver.h:951
SmTLSPoint::SetPointSmTopologySolver.h:974[LocalSolver::set_point]
SmTLSPoint::SolveItSmTopologySolver.h:1074[LocalSolver::solve_it]
SmTLSPointVertex::SmTLSPointVertexSmTopologySolver.h:1248
SmTLSPointVertex::~SmTLSPointVertexSmTopologySolver.h:1331
SmTLSVertexVertex::SmTLSVertexVertexSmTopologySolver.h:1488
SmTLSVertexVertex::~SmTLSVertexVertexSmTopologySolver.h:1571
SmTLSPointCurve::SmTLSPointCurveSmTopologySolver.h:17910
SmTLSPointCurve::~SmTLSPointCurveSmTopologySolver.h:1905
SmTLSPointEdge::SmTLSPointEdgeSmTopologySolver.h:2098
SmTLSPointEdge::~SmTLSPointEdgeSmTopologySolver.h:2181
SmTLSVertexEdge::~SmTLSVertexEdgeSmTopologySolver.h:2421
SmTLSPointFace::SmTLSPointFaceSmTopologySolver.h:2578
SmTLSPointFace::~SmTLSPointFaceSmTopologySolver.h:2661
SmTLSVertexFace::SmTLSVertexFaceSmTopologySolver.h:2818
SmTLSVertexFace::~SmTLSVertexFaceSmTopologySolver.h:2901
SmTLSCurve::SmTLSCurveSmTopologySolver.h:31312
SmTLSCurve::~SmTLSCurveSmTopologySolver.h:3267
SmTLSCurve::SetCurveSmTopologySolver.h:3355[LocalSolver::set_curve]
SmTLSCurve::SolveItSmTopologySolver.h:3464[LocalSolver::solve_it]
SmTLSCurveVertex::SmTLSCurveVertexSmTopologySolver.h:3628
SmTLSCurveVertex::~SmTLSCurveVertexSmTopologySolver.h:3711
SmTLSEdgeVertex::~SmTLSEdgeVertexSmTopologySolver.h:3961
SmTLSCurveCurve::SmTLSCurveCurveSmTopologySolver.h:42012
SmTLSCurveCurve::~SmTLSCurveCurveSmTopologySolver.h:4337
SmTLSCurveEdge::SmTLSCurveEdgeSmTopologySolver.h:4548
SmTLSCurveEdge::~SmTLSCurveEdgeSmTopologySolver.h:4631
SmTLSEdgeEdge::~SmTLSEdgeEdgeSmTopologySolver.h:4871
SmTLSCurveFace::SmTLSCurveFaceSmTopologySolver.h:5038
SmTLSCurveFace::~SmTLSCurveFaceSmTopologySolver.h:5121
SmTLSEdgeFace::SmTLSEdgeFaceSmTopologySolver.h:5278
SmTLSEdgeFace::~SmTLSEdgeFaceSmTopologySolver.h:5361
SmTLSFaceFace::SmTLSFaceFaceSmTopologySolver.h:5518
SmTLSFaceFace::~SmTLSFaceFaceSmTopologySolver.h:5601
SmTopologySolver::~SmTopologySolverSmTopologySolver.h:6011Drop (implicit)
SmTopologySolver::AreReadyForLocalSolveSmTopologySolver.h:7164GlobalSolve::are_ready_for_local_solve for [TopologySolver]
sm_GetFaceSilhouettesSmTopologySolver.cpp:3376face_silhouettes (private)
SmTLSPointVertex::SolveItSmTopologySolver.cpp:116242[LocalSolver::solve_it]
SmTLSVertexVertex::SolveItSmTopologySolver.cpp:36518[LocalSolver::solve_it]
SmTLSPointCurve::SolveItSmTopologySolver.cpp:389128[LocalSolver::solve_it]
SmTLSPointEdge::SolveItSmTopologySolver.cpp:52395[LocalSolver::solve_it]
SmTLSVertexEdge::SolveItSmTopologySolver.cpp:62524[LocalSolver::solve_it]
SmTLSPointFace::SolveItSmTopologySolver.cpp:661276[LocalSolver::solve_it]
SmTLSCurveEdge::SolveItSmTopologySolver.cpp:106647[LocalSolver::solve_it]
SmTLSCurveCurve::SolveItSmTopologySolver.cpp:1119213[LocalSolver::solve_it]
SmTLSEdgeEdge::SolveItSmTopologySolver.cpp:133950[LocalSolver::solve_it]
SmTopologySolver::SmTopologySolverSmTopologySolver.cpp:263772[TopologySolver], [TopologySolver::new]
SmTopologySolver::MayContainAnswerSmTopologySolver.cpp:2716297[TopologySolver::may_contain_answer]
SmTopologySolver::SolveTreesSmTopologySolver.cpp:310446[TopologySolver::solve_trees]
SmTopologySolver::SolveTwoTreesSmTopologySolver.cpp:315633[TopologySolver::solve_two_trees]
SmTopologySolver::GetBestAnswerSoFarSmTopologySolver.cpp:340631[TopologySolver::best_answer_so_far], [best_answer_so_far]
Module file-header table (18 rows)
RustUpstream
[TopologyObjects]the SmObject* casts and the SmVertex, SmEdge, SmFace, SmSurface, SmCurve::GetEdge, SmShape::IsInShape accessors the solvers call
[CurveRef]an SmCurve* member (m_pCurve, m_pCurve2)
[LocalSolverKind]the SmTopoLocalSolver class hierarchy
[LocalSolver], [LocalSolver::new]SmTopoLocalSolver and every derived class, their constructors
Drop (implicit)the local solver destructors
[LocalSolver::set_point]SmTLSPoint::SetPoint
[LocalSolver::set_point_vertex]SmTLSPoint::SetPointVertex
[LocalSolver::set_curve]SmTLSCurve::SetCurve
[LocalSolver::set_curve_edge]SmTLSCurve::SetCurveEdge
[LocalSolver::solve_it]the virtual SolveIt of every local solver: SmTopoLocalSolver::SolveIt, SmTLSPoint::SolveIt, SmTLSCurve::SolveIt (SM_ERR), SmTLSPointVertex::SolveIt, SmTLSVertexVertex::SolveIt, SmTLSPointCurve::SolveIt, SmTLSPointEdge::SolveIt, SmTLSVertexEdge::SolveIt, SmTLSPointFace::SolveIt, SmTLSCurveEdge::SolveIt, SmTLSCurveCurve::SolveIt, SmTLSEdgeEdge::SolveIt
face_silhouettes (private)sm_GetFaceSilhouettes
[TopologySolver], [TopologySolver::new]SmTopologySolver, SmTopologySolver::SmTopologySolver
Drop (implicit)~SmTopologySolver
[TopologySolver::may_contain_answer]SmTopologySolver::MayContainAnswer
[TopologySolver::solve_trees]SmTopologySolver::SolveTrees
[TopologySolver::solve_two_trees]SmTopologySolver::SolveTwoTrees
[TopologySolver::best_answer_so_far], [best_answer_so_far]SmTopologySolver::GetBestAnswerSoFar
GlobalSolve::are_ready_for_local_solve for [TopologySolver]SmTopologySolver::AreReadyForLocalSolve

Upstream tests reaching this unit

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, SM_API_test:TestSmCreateRectangle, SM_API_test:TestSmCreateRegularPolygon