solidcore

Units / query

query.face_p2 partial

Layer
43
Upstream lines
1,161
Functions
7
Rust module
query::face::p2

Source: crates/solidcore/src/query/face/p2.rs

Upstream: source/SMLib/inc/SmProtoTopology.h, source/SMLib/src/SmFace.cpp, source/SMLib/src/SmProtoTopology.cpp

Notes

PARTIAL: difftest 1344 cases (1044 fixture: grids over the 13 exactly exported faces of the upstream .smb files Endcap, Mouse, box_with_large_fillet, disk, ellips_ts2, plane_circ, plane_square; points on, near and at the ends of every trim curve at offsets 0..1e-3; target-loop selections on ellips_ts2's face with two inner loops; SM_API_test TestSmCreateRectangle's 10x6 rectangle at the origin and at 1e10 on a real SmPlane; sm_ClassifyParamOnFaces face pairs; SmProtoVertex containment at the tolerance/capture limits; CurveOnClassify; 300 generated incl. tiny/huge B-spline and plane faces, tolerance edits and out-of-domain points), 1271 pass bit-identical (max_rel_err 0), 0 failed, 73 deferred (topology.face_p2 38: SmLoop::ContainsUVPoint for points on a domain side runs SmSurface::GetSingularities (surface.surface_p3, merged), which stops at SmFace::GetTolerance of the face-owned surface (SmTol::GetApproxTol3d on an owner handle without a Brep); intersect.curve_class_p2 20: SmCurveClassification::ReSet, the first call of CurveOnClassify, whose body also needs curve_class_p5/p7/p9 and topology.face_p4 GetEdges; topology.edgeuse_p3 15: GetOrCreateUVTrimCurve of faces without trim curves); --perturb SENSITIVE. Not compared: PointClassify's SmTrimSrfCache branch (the shim deletes the cache a file read leaves; B-rep surfaces carry no object cache in the port) and faces with surfaces of revolution/extrusion/cones/spheres/tori (the shared export carries them as B-spline parts). Built on topology.loopuse (PR #102: loopuse::vertices). Wired: SmProtoVertex::ContainsPoint in ProtoTopologyManager::find_proto_vertex / which_pv_to_combine (topology.proto_topology_p1: 63 cases no longer deferred). Not wired, still UNPORTED(query.face_p2): surface::trim_srf_cache, intersect::ray_tracer, intersect::topology_solver p1 (callers hold object handles without a Brep) and the CurveOnClassify calls of topology::face::p2 / intersect::topology_solver p2 (behind UNPORTED(intersect.curve_class_p4)). CO-PORTED in intersect.curve_class_p5 (PR #150): CurveOnClassify vertex handle mapping -> CurveOnClassifyObjects::vertex and ClassGeometry callback bound; IntersectVertices now calls p5. Existing ReSet and classification stubs are retained. Merge of PR #65: ClassifyFaceInterval (p7) and IntersectVertices (p5) both wired; difftest now 1344 cases, 1271 passed, 0 failed, 73 deferred.

Difftest

Cases
1,344
Passed
1,271
Deferred
73
Failed
0
Both errored
27
Max rel. error
0.0
Tolerance
1e-09 rel.
Seeds
16

Blocked by

Unported unitDeferred cases
topology.face_p2 partial38
intersect.curve_class_p2 claimed20
topology.edgeuse_p3 claimed15

Report JSON (per-case results)

Dependencies

Depends on: geom.a_object partial geom.extent2d green geom.object partial geom.tol green geom.vector3d green intersect.curve_class_p1 partial intersect.point_class partial topology.face_p2 partial topology.face_p4 claimed

Soft dependencies: curve.curve_p2 green curve.curve_p4 partial geom.vector2d green intersect.curve_class_p2 claimed intersect.curve_class_p5 partial intersect.curve_class_p7 partial intersect.curve_class_p9 partial nurbs.b_spline_surface_p1 green query.loop green surface.surface_cache_p3 partial surface.surface_p1 partial surface.surface_p2 partial topology.edge partial topology.vertex partial

Dependents: query.face_p1 claimed query.face_p3 claimed

Soft dependents: blend.fillet_solver_p5 claimed blend.fillet_standard_solver_p2 todo boolean.topology_intersector_p1 partial boolean.topology_intersector_p3 claimed primitive.primitive_creation_p3 todo query.api_queries partial

Upstream functions

Upstream functionDefined atLinesRust (from the file header)
SmProtoVertex::DistanceToSmProtoTopology.h:4801[proto_vertex_distance_to]
SmProtoTopologyManager::GetCaptureDistanceSmProtoTopology.h:7801[ProtoTopologyManager::capture_distance]
SmFace::CurveOnClassifySmFace.cpp:8525333[curve_on_classify], [CurveOnClassifyObjects]
SmFace::PointClassifySmFace.cpp:11996750[point_classify], [PointClassifyOptions]
sm_ClassifyParamOnFacesSmProtoTopology.cpp:18968[classify_param_on_faces]
SmProtoVertex::GetCaptureDistanceSmProtoTopology.cpp:19022[proto_vertex_capture_distance]
SmProtoVertex::ContainsPointSmProtoTopology.cpp:19106[proto_vertex_contains_point]
Module file-header table (10 rows)
RustUpstream
[point_classify], [PointClassifyOptions]SmFace::PointClassify
[curve_on_classify], [CurveOnClassifyObjects]SmFace::CurveOnClassify
[classify_param_on_faces]sm_ClassifyParamOnFaces (file static)
[proto_vertex_distance_to]SmProtoVertex::DistanceTo
[proto_vertex_capture_distance]SmProtoVertex::GetCaptureDistance
[proto_vertex_contains_point]SmProtoVertex::ContainsPoint
[ProtoTopologyManager::capture_distance]SmProtoTopologyManager::GetCaptureDistance (already in topology::proto_topology)
[face_vertices]SmFace::GetVertices(SmTArray&, ..) (CO-PORTED, topology.face_p4)
[face_loop]the SmLoop / SmEdgeuse / SmEdge / SmFace data SmLoop::ContainsUVPoint reads
ClassObject for EntityRefthe SmObject* of a classification of B-rep topology

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