solidcore

Units / topology

topology.face_p2 partial

Layer
35
Upstream lines
1,827
Functions
32
Rust module
topology::face::p2

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

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

Notes

PARTIAL: difftest 2692 cases (1176 fixture: upstream-derived (smMergeTest GetPointsInFace(1) on plane and B-spline faces, TestSmBrep ComputePreciseProperties layouts for all 63 flag sets and the iso-curve/area integrands at offset origins, thicknesses 0/0.1, accuracies 1e-3/1e-5, smTopoTest CreateCurvesByTrimming, TestSmTrimmedSurfaces GetOuterLoops) plus edge cases (degenerate and EFF_ZERO-limit UV domains, sm_FixUVTrimCurves gap limits EFF_ZERO/10 and min-size/20, tiny 1e-4 / huge 1e4 / pinched / sub-domain B-spline faces, real SmPlanes, sm_CheckSeamCrossing 90% jumps); 16 generated + 1500 more generated in code), 2322 pass, 0 fail, 370 deferred (topology.edgeuse_p3 156, curve.crv_on_surf 74, topology.face_p3 63 (CalculateUVDomainFromUVTrimCurves wired by topology.face_p1, PR #148; now CreateUVTrimCurves), query.face_p3 47, intersect.curve_class_p4 30; the 112 thick-face cases deferred on surface.offset_surface pass since PR #62 wired SmOffsetSurface::EvaluateSimple); mass.integrator wired in PR #119: 29 previously deferred cases pass and 4 now reach offset evaluation, max_rel_err 0; --perturb SENSITIVE. Runner imports the shim's exported graph into topology::Brep (as topology.vertexuse) with each face's m_pFU / m_vUVDomain / m_bRectangularTrim / m_sZoneTol3d / surface owner, SmPlanes as planes and vertex/face gap UVs; ops on faces or edges whose surface (revolution/extrusion/cone/sphere/torus subclasses) or edge curve (ellipse) the export cannot carry exactly report inexact_geometry on both sides. GetPointsInFace with more than one point compares only the draw-invariant count, U values and V grid slots (upstream srand(time)). Never compared (always deferred): sms_ReviewStartAndStopOnSeamCrvClassifies (GetIvlBound_EdgeuseObj), CalculateAnInternalPoint past its early returns (sm_FaceClassifyUVLine), CreateCurvesByTrimming of non-degenerate curves (SmCurveClassification), CreateCurvesFromFace edge loops (NormalizedEvaluate), sm_AreConnected (ComputeUVPoint stubs). Face record gains faceuse, uv_domain, rectangular_trim, tolerance (Face::new = SmFace()). Wired UNPORTED(topology.face_p2) GetUVDomain/GetTolerance in topology::vertexuse (its shim/runner now export/import the face members and SmPlanes). Remaining UNPORTED(topology.face_p2) sites (geom::object, geom::solution_array, geom::tol, intersect::point_class, intersect::curve_class::p1, intersect::topology_solver::p1, surface::plane::p2, surface::surface::p1/p7, surface::surface_cache::p1) hold opaque face handles without a Brep (plan/findings.md). Plan notes: 32 fns; largest: sm_FixUVTrimCurves, SmFace::GetPointsInFace, SmODEIsoCurveLengthIFEO::Evaluate, SmFace::CreateCurvesByTrimming; cycle back-edges (call into later units; stub or co-port): topology.edge(9), topology.vertexuse(5), topology.vertex(4), topology.loopuse(3), mass.integrator(2), query.face_p2(2), topology.edgeuse_p3(2), heal.gap(1), query.face_p3(1), topology.face_p1(1); unit-SCC #22 (220 units); hazards: clock,rng; 319 upstream test entry points reach this unit; CO-PORTED in topology.edgeuse_p1 (PR #55): SmFace::m_pSurface -> topology::Face::surface; CO-PORTED in topology.edgeuse_p2 (PR #87): SmFace::m_vUVDomain, GetUVDomain, m_sZoneTol3d, GetTolerance -> topology::Face::uv_domain, topology::Face::tolerance

Difftest

Cases
2,692
Passed
2,322
Deferred
370
Failed
0
Both errored
494
Max rel. error
0.0
Tolerance
1e-09 rel.
Seeds
16

Blocked by

Unported unitDeferred cases
topology.edgeuse_p3 claimed156
curve.crv_on_surf partial74
topology.face_p3 claimed63
query.face_p3 claimed47
intersect.curve_class_p4 claimed30

Report JSON (per-case results)

Dependencies

Depends on: curve.crv_on_surf partial curve.curve_p2 green geom.extent1d green geom.extent2d green geom.object partial geom.tol green geom.vector2d green geom.vector3d green intersect.curve_class_p1 partial intersect.point_class partial nurbs.b_spline_curve_p1 green surface.offset_surface green surface.surface_p2 partial surface.surface_p7 partial topology.edgeuse_p1 partial topology.topology green

Soft dependencies: curve.curve_p4 partial curve.curve_p6 green geom.context green intersect.curve_class_p4 claimed nurbs.b_spline_curve_n_lib green nurbs.b_spline_curve_p2 green surface.surface_p1 partial surface.surface_p5 green

Dependents: blend.fillet_executive_p1 todo blend.hcr claimed boolean.merge_p1 partial boolean.merge_p2 todo boolean.merge_p4 todo boolean.topology_intersector_p1 partial boolean.topology_intersector_p2 claimed boolean.topology_intersector_p3 claimed heal.face_props partial heal.heal_data_p3 partial heal.stitch_p1 claimed mass.integrator partial offset.offset_executive_p1 claimed offset.offset_executive_p2 claimed primitive.primitive_creation_p1 claimed primitive.primitive_creation_p3 todo query.face_p1 claimed query.face_p2 partial query.face_p3 claimed query.face_p4 claimed topology.brep_p1 claimed topology.brep_p2 claimed topology.brep_p3 claimed topology.brep_p4 claimed topology.brep_p5 claimed topology.brep_p7 claimed topology.brep_p9 claimed topology.edge partial topology.edgeuse_p2 partial topology.face_p1 partial topology.face_p3 claimed topology.face_p4 claimed topology.loopuse partial topology.proto_topology_p2 partial topology.topology_traverser partial topology.trimming_tools partial topology.vertexuse partial

Soft dependents: blend.fillet_corner_p1 todo blend.fillet_corner_p2 todo blend.fillet_corner_p3 todo blend.fillet_custom_solver partial blend.fillet_geom_p1 claimed blend.fillet_geom_p2 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 blend.fillet_solver_p5 claimed blend.fillet_standard_solver_p1 claimed blend.fillet_standard_solver_p2 todo boolean.merge_p5 partial heal.gap partial heal.heal_data_p1 partial offset.offset_geometry_creation claimed primitive.primitive_creation_p2 todo query.api_queries partial query.brep claimed query.edge partial query.loop green query.poly partial query.tess partial sweep.rotational_sweep_geometry partial sweep.topology_sweep claimed sweep.trans_sweep_geometry partial topology.brep_cache partial topology.brep_p10 claimed topology.brep_p8 claimed topology.edgeuse_p3 claimed topology.vertex partial

Upstream functions

Upstream functionDefined atLinesRust (from the file header)
SmFace::GetSurfaceSmFace.h:6521[surface], [uv_domain], [rectangular_trim], [tolerance]
SmFace::GetUVDomainSmFace.h:6531[surface], [uv_domain], [rectangular_trim], [tolerance]
SmFace::GetRectangularTrimSmFace.h:6541[surface], [uv_domain], [rectangular_trim], [tolerance]
SmFace::GetOuterLoopsSmFace.h:6811[loops], [outer_loops]
SmFace::SetUVDomainSmFace.h:7021[set_uv_domain], [set_faceuse]
SmFace::SetFaceuseSmFace.h:7111[set_uv_domain], [set_faceuse]
SmFace::GetToleranceSmFace.h:7911[surface], [uv_domain], [rectangular_trim], [tolerance]
SmFace::GetClassStringSmFace.h:9971[TYPE], [TYPE_STRING], [CLASS_STRING], [class_type], [is_kind_of]
SmFace::GetClassTypeSmFace.h:9971[TYPE], [TYPE_STRING], [CLASS_STRING], [class_type], [is_kind_of]
SmFace::GetTypeSmFace.h:9971[TYPE], [TYPE_STRING], [CLASS_STRING], [class_type], [is_kind_of]
SmFace::GetTypeStringSmFace.h:9971[TYPE], [TYPE_STRING], [CLASS_STRING], [class_type], [is_kind_of]
sm_CheckSeamCrossingSmFace.cpp:13297[check_seam_crossing]
SmFace::CalculateAnInternalPointSmFace.cpp:117185[calculate_an_internal_point]
sm_AreConnectedSmFace.cpp:1512112[are_connected], [Connection]
sms_ReviewStartAndStopOnSeamCrvClassifiesSmFace.cpp:328176[review_start_and_stop_on_seam_crv_classifies], [SeamCrvReview]
SmPrecisePropertyLayout::SmPrecisePropertyLayoutSmFace.cpp:562312[PrecisePropertyLayout]
SmPrecisePropertyLayout::AddSmFace.cpp:56377[PrecisePropertyLayout]
SmODEIsoCurveLengthIFEO::SmODEIsoCurveLengthIFEOSmFace.cpp:56957[OdeIsoCurveLength]
SmODEIsoCurveLengthIFEO::EvaluateSmFace.cpp:5713206[OdeIsoCurveLength]
SmODEAreaIFEO::EvaluateSmFace.cpp:592550[OdeArea]
SmFace::CreateCurvesByTrimmingSmFace.cpp:6809184[create_curves_by_trimming], [TrimmedCurves]
SmFace::CreateCurvesFromFaceSmFace.cpp:7008157[create_curves_from_face], [FaceCurves]
sm_FixUVTrimCurvesSmFace.cpp:7451308[fix_uv_trim_curves]
sm_FindBestUVCurveSmFace.cpp:7769152[find_best_uv_curve]
SmRescueSurfaceOwner::SmRescueSurfaceOwnerSmFace.cpp:79333[RescueSurfaceOwner]
SmRescueSurfaceOwner::~SmRescueSurfaceOwnerSmFace.cpp:79364
SmFace::GetFaceusesSmFace.cpp:1014217[faceuses], [upward_faceuse]
SmFace::GetLoopsSmFace.cpp:1019031[loops], [outer_loops]
SmFace::GetUpwardFaceuseSmFace.cpp:1042119[faceuses], [upward_faceuse]
sm_RemoveSuspectSplitAtSeamUVTrimCurvesSmFace.cpp:1770562[remove_suspect_split_at_seam_uv_trim_curves]
SmFace::GetPointsInFaceSmFace.cpp:21167223[points_in_face], [PointsInFace]
SmFace::IsKindOfSmFace.cpp:213954[TYPE], [TYPE_STRING], [CLASS_STRING], [class_type], [is_kind_of]
Module file-header table (22 rows)
RustUpstream
[TYPE], [TYPE_STRING], [CLASS_STRING], [class_type], [is_kind_of]SmFace::GetType, GetTypeString, GetClassString, GetClassType, IsKindOf
[surface], [uv_domain], [rectangular_trim], [tolerance]SmFace::GetSurface, GetUVDomain, GetRectangularTrim, GetTolerance (SM_USE_OLDTOL)
[set_uv_domain], [set_faceuse]SmFace::SetUVDomain, SetFaceuse
[faceuses], [upward_faceuse]SmFace::GetFaceuses, GetUpwardFaceuse
[loops], [outer_loops]SmFace::GetLoops, GetOuterLoops
[check_seam_crossing]sm_CheckSeamCrossing (static)
[calculate_an_internal_point]SmFace::CalculateAnInternalPoint
[are_connected], [Connection]sm_AreConnected (static)
[review_start_and_stop_on_seam_crv_classifies], [SeamCrvReview]sms_ReviewStartAndStopOnSeamCrvClassifies
[PrecisePropertyLayout]SmPrecisePropertyLayout (constructor, Add)
[OdeIsoCurveLength]SmODEIsoCurveLengthIFEO (constructor, Evaluate)
[OdeArea]SmODEAreaIFEO::Evaluate
[create_curves_by_trimming], [TrimmedCurves]SmFace::CreateCurvesByTrimming
[create_curves_from_face], [FaceCurves]SmFace::CreateCurvesFromFace
[fix_uv_trim_curves]sm_FixUVTrimCurves
[find_best_uv_curve]sm_FindBestUVCurve (static)
[RescueSurfaceOwner]SmRescueSurfaceOwner (constructor, destructor)
[remove_suspect_split_at_seam_uv_trim_curves]sm_RemoveSuspectSplitAtSeamUVTrimCurves
[points_in_face], [PointsInFace]SmFace::GetPointsInFace
vertex_edges (private)SmVertex::GetEdges without face filter (CO-PORTED, topology.vertex)
edge_edgeuses (private)SmEdge::GetEdgeuses without filters (CO-PORTED, topology.edge)
loopuse_vertexuses (private)SmLoopuse::GetVertexuses without filter (unit 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