Repository navigation
port: topology.face_p4 (stacked on #693, merged with main) - #718
Merged
bherbruck merged 10 commits intoOct 24, 2026
Merged
Conversation
Co-Authored-By: Gemini 3.8 Flash <noreply@google.com>
- Wire FindVertexSector through Mutable<'g, G>::find_vertex_sector in crates/solidcore/src/intersect/curve_class/p7.rs by resolving face and vertex entities and calling find_vertex_sector_in. - Update primitive::api_primitives tests to verify partial sphere and cylinder construct complete manifold solids without deferral. - Set topology.face_p4 status to green in plan/units/topology.face_p4.toml (5,506 cases: 5,506 passed, 0 failed, 0 deferred, max_rel_err 0e0). Co-Authored-By: Gemini 3.8 Flash <noreply@google.com>
- In crates/solidcore/src/topology/face/p4.rs: in find_vertex_sector, fall back to 2D curve_3d as uv_curve when uv_curve is not explicitly passed. - In crates/solidcore/src/intersect/curve_class/p9.rs: in intersect_ts_bound, move curve domain computation before the cache fallback and prune non-singular vertices outside the curve's UV domain, matching upstream's spatial cache node pruning and preventing spurious vertex drops when tol_uv is mapped to 2D. - In crates/difftest/src/units/intersect_curve_class_p4.rs: remove the artificial create_uv_trim_curves invocation in build_pool to match C++ fixture state on closed revolution faces. Co-Authored-By: Gemini 3.8 Flash <noreply@google.com>
The fix was written against main before IntersectTSBound's cached branch moved into ts_bound_cached_visits. The vertex pruning now sits in the loop-use fallback of intersect_ts_bound, and its curve cache domain is computed there. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- intersect_ts_bound: the loop-use fallback (face trimmed cache not up to date) visits every vertex use with no curve-domain check and builds no curve cache, as SmCurveClassification::IntersectTSBound does (SmCurveClass.cpp, the pTSC->m_bFaceWasModified branch). - find_vertex_sector: use the UV curve only when the caller passes one (upstream evaluates cpUVCurve only when it is non-NULL); a 2D curve is not substituted for it. Neither change alters an outcome in intersect.curve_class_p4/p7/p9, topology.face_p2/face_p4/brep_p5/brep_p9 or query.face_p2. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
brett19
marked this pull request as ready for review
October 24, 2026 06:35
github-merge-queue
Bot
removed this pull request from the merge queue due to failed status checks
Oct 24, 2026
github-merge-queue
Bot
removed this pull request from the merge queue due to failed status checks
Oct 24, 2026
github-merge-queue
Bot
removed this pull request from the merge queue due to failed status checks
Oct 24, 2026
github-merge-queue
Bot
removed this pull request from the merge queue due to failed status checks
Oct 24, 2026
…a copy Wiring FindVertexSector lets these cases run past it into SetProps_Stage3 -> ClassifyLoops -> the loop bisector, which the port runs on a copy of the B-rep. They disagree the same way as the cases already listed for that cause: heal.heal_data_p1 file_plane_circ(_rebuild_reverse), topology.brep_p1 plane_circ_heal, topology.brep_p10 read_Fillet_bottle, read_Fillet_cyl_cyl_shell, read_Fillet_fillet0227, read_Solids_extrusion2, gen0040 and gen0165. They use the existing reason and findings entry. The new findings entry records the evidence and the seam-classification caveat for read_Fillet_cyl_cyl_shell. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.
Stacked on #693 by @outlookhazy, which ports
topology.face_p4and wiresSmFace::FindVertexSectoron the mutable curve-classification path.This PR carries #693's commits unchanged (
3ef352f1c,1ba9727ff,c27cab26d; no rebase or squash). On top of them it adds merges and one revert commit (below):main, which port: topology.face_p4 #693 conflicts with;c27cab26d. That commit was written beforeIntersectTSBound's cached branch moved intots_bound_cached_visits, so in this branch its vertex pruning sits in the loop-use fallback ofintersect_ts_bound, and the curve cache domain is computed there.Upstream-faithful reverts (our commit d1a8c32, on top of #693's commits)
Two parts of
c27cab26ddo not match upstream, so they are reverted in a separate commit. #693's commits themselves are left unchanged.intersect_ts_boundfallback:SmCurveClassification::IntersectTSBound's loop-use branch (face trimmed cache not up to date, SmCurveClass.cpp ~15880-16000) visits every vertex use with no curve-domain check and builds no curve cache. The pruning of non-singular vertices outside the curve's UV box, and the cache build for it, are removed.find_vertex_sector: upstream evaluatescpUVCurveonly when the caller passes one, so a 2Dcr3DCurveis no longer substituted for it.Neither revert changes any outcome in intersect.curve_class_p4/p7/p9, topology.face_p2/face_p4/brep_p5/brep_p9 or query.face_p2. The counts match the head before the reverts.
Nine cases now reach the loop bisector on a copy (known mismatches)
Main now has #717, which wired
GetLoopCrossingsinquery/face/p4.rs. With that in place, nine heal-path cases that used to defer atFindVertexSectorrun on intoSetProps_Stage3->ClassifyLoops-> the loop bisector, which the port runs on a copy of the B-rep. They disagree the same way as #717's cases (UV trim curves and vertex/face gap resets missing from the real B-rep):heal.heal_data_p1:file_plane_circ,file_plane_circ_rebuild_reversetopology.brep_p1:plane_circ_healtopology.brep_p10:read_Fillet_bottle,read_Fillet_cyl_cyl_shell,read_Fillet_fillet0227,read_Solids_extrusion2,gen0040,gen0165They are listed in
known_mismatches.tomlunder #717's existing reason and findings entry. A new findings entry records the evidence and a caveat: inread_Fillet_cyl_cyl_shell,HasSeamProblem's seam classification is a second possible source. After the change:All credit for the port and the fixes goes to @outlookhazy. This PR closes nothing by itself. If #693 merges first, this PR will be closed as superseded.
Difftest before, at #693's
1ba9727ffmerged with main:Difftest after, with
c27cab26d, latest main and the two reverts:For reference,
mainhas curve_class_p4 at 2921 passed / 280 deferred, face_p4 at 5484 / 22, and face_p2 at 2596 / 96.🤖 Generated with Claude Code