Repository navigation
wire: face classification hooks (query.face_p1) in runner objects - #614
Merged
Merged
Conversation
…ehind resolved face handles ClassifyFaceInterval (curve_class p7) and SmTLSPointFace::SolveIt (topology_solver p1) call query::face::p1 on a copy of the B-rep their adapters resolve the face handle to; topology::brep::p9's loop transfer classifies on its own &mut Brep. LoopObjectCurves (face props) and UvLineObjects (sm_FaceClassifyUVLine) now resolve their topology handles through ClassGeometry::topology_entity. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RvuXmr7S5RoUXxVohC1giE
…adapter hooks The ray votes of OrientTrimmedSurfaces solved against an empty BrepCache (no vertex, curve or surface trees: SM_ERR_NULL_POINTER where upstream's CacheMakeOrValidate builds them); make_brep_cache builds them. The LoopObjectCurves / UvLineObjects topology hooks are left for a follow-up: together with the topology hook forwarding of query::face::p2's WithMadeTrimCurves they expose disagreements outside query.face_p1. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RvuXmr7S5RoUXxVohC1giE
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RvuXmr7S5RoUXxVohC1giE
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Machine-generated (Claude Fable 5.1 coordinator, Claude Opus 5.5 agent) on behalf of @tdamsma.
Found
query.face_p1deferrals came from four DISPATCH GAP stubs. There was no runner-side producer:intersect::curve_class::p7(ClassifyFaceInterval: EdgeCurveOnClassify and Point3DClassify)intersect::topology_solver::p1(SmTLSPointFace::SolveIt: Point3DClassify)topology::brep::p9(inner-loop transfer: Point3DClassify)topology::face::p3(FaceIntersect touching points). Left alone: it is a FaceIntersect bridge.query.face_p1deferral goes throughquery::face::p2::curve_on_classify. That code wraps the caller's objects inWithMadeTrimCurves, which does not forwardtopology_entity, so the face handle cannot be resolved.p2.rsis Codex-owned and not edited here. The forwarding already exists oncodex/primitive-p2-production(4526f4aa0).Done
face_edge_curve_on_classify/face_point_3d_classifyresolve the face (and edge) throughClassGeometry::topology_entity.query::face::p1on a copy of that B-rep, because the upstreamconstmembers may add UV trim curves. The C++ argument list is kept.topology_handle_in. An edge from another B-rep gives "not inside", as upstream.query.face_p1deferral.TopologyObjects::face_entityreturns.point_3d_classifytakes the caller's&mut Brep(guess UV, outer loop only).brep_curve_solvebuilds its cache withmake_brep_cache(CacheMakeOrValidate), so the solve has trees.Result (Mac Studio runs; Linux CI is the gate). Before = main reports (CI 39939270570); after = this branch.
PARTIAL query.brep cases=1172 passed=1115 failed=0 deferred=57 max_rel_err=0e0 with_values=1115 no_values=0 vacuous=0 blocked_by=curve.curve_p2(9),topology.edgeuse_p3(2),topology.face_p2(46)PARTIAL topology.brep_p8 cases=339 passed=338 failed=0 deferred=1 max_rel_err=0e0 with_values=338 no_values=0 vacuous=0 blocked_by=curve.curve_p2(1)PARTIAL sweep.api_surfaces cases=882 passed=862 failed=0 deferred=20 max_rel_err=0e0 with_values=862 no_values=0 vacuous=0 blocked_by=boolean.topology_intersector_p2(17),surface.trim_srf_cache(3)(the deferral moves on)PARTIAL intersect.curve_class_p4 cases=3201 passed=2918 failed=0 deferred=283 max_rel_err=0e0 with_values=2918 no_values=0 vacuous=0 blocked_by=query.face_p1(97),topology.face_p4(186)PARTIAL topology.brep_p3 cases=897 passed=812 failed=0 deferred=85 max_rel_err=0e0 with_values=812 no_values=0 vacuous=0 blocked_by=query.face_p1(38),topology.face_p3(47)PARTIAL heal.face_props cases=1528 passed=1431 failed=0 deferred=97 max_rel_err=0e0 with_values=1422 no_values=9 vacuous=0 blocked_by=query.face_p1(27),topology.edge(1),topology.face_p4(69)PARTIAL topology.face_p2 cases=2692 passed=2532 failed=0 deferred=160 max_rel_err=0e0 with_values=2179 no_values=353 vacuous=0 blocked_by=query.face_p1(19),query.face_p2(30),topology.edge(106),topology.face_p4(3),topology.vertex(2)PARTIAL query.face_p2 cases=1344 passed=1326 failed=0 deferred=18 max_rel_err=0e0 with_values=1299 no_values=27 vacuous=0 blocked_by=query.face_p1(4),topology.edge(14)PARTIAL topology.brep_p1 cases=2627 passed=2461 failed=0 deferred=150 max_rel_err=0e0 with_values=2416 no_values=45 vacuous=0 rejected=16 blocked_by=nurbs.b_spline_surface_n_lib_p2(8),query.face_p1(1),topology.edge(14),topology.face_p2(109),topology.face_p3(18)PARTIAL query.face_p4 cases=500 passed=395 failed=0 deferred=105 max_rel_err=0e0 with_values=368 no_values=27 vacuous=0 blocked_by=query.face_p1(1),topology.edge(104)PASS query.face_p1 cases=2266 passed=2266 failed=0 deferred=0 max_rel_err=0e0 with_values=2266 no_values=0 vacuous=0PARTIAL intersect.topology_solver_p1 cases=3532 passed=3434 failed=0 deferred=98 max_rel_err=0e0 with_values=3434 no_values=0 vacuous=0 blocked_by=topology.edge(98)PARTIAL intersect.topology_solver_p2 cases=2429 passed=2396 failed=0 deferred=33 max_rel_err=0e0 with_values=2396 no_values=0 vacuous=0 blocked_by=geom.tol(2),query.face_p2(8),surface.surface_p2(12),topology.edge(3),topology.face_p2(8)PARTIAL topology.brep_p9 cases=684 passed=683 failed=0 deferred=1 max_rel_err=0e0 with_values=683 no_values=0 vacuous=0 blocked_by=topology.face_p2(1)PARTIAL intersect.curve_class_p7 cases=1516 passed=1515 failed=0 deferred=1 max_rel_err=0e0 with_values=1515 no_values=0 vacuous=0 blocked_by=topology.vertex(1)difftest/cpp),cargo test --workspaceand the wasm32 check all pass.🤖 Generated with Claude Code
https://claude.ai/code/session_01RvuXmr7S5RoUXxVohC1giE