Repository navigation
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
IsInnerShell ran its rays and PointsInFace on a copy of the B-rep, and PointsInFace's UV-domain and curve classification on further copies, so the UV trim curves upstream's const face queries leave on the B-rep were dropped. Run them on the caller's B-rep and copy the classification snapshot's trims and tolerance growth back. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…in its rays Running IsInnerShell in place fixes the brep_p6 geometry but turns 14 topology.topology_traverser passes into deferrals at the face-owned trimmed surface cache: the scratch copy used to drop surface owners. Record the blocker and the proposed follow-up. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… branch Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Oct 24, 2026
…ntersectTSBound's cached branch The surface's cache slot now holds its SmTrimSrfCache: smsurf_GetSurfaceCache of a face surface reuses it (CacheMakeOrValidate), PointClassify reads it (GetObjectCache), Notify(PRE_EDIT) marks it modified. IntersectTSBound fetches it and takes the cached leaf-node branch with its context mark (SmNewMarkAndLock, claimed through atomic context marks). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…und makes missing trims in its cached branch ComputeUVPoint fetches the face surface's cache (smsurf_GetSurfaceCache) and keeps it checked out around GlobalPointSolve, whose fast drop classifies on the B-rep when the cache is trimmed with point testing on. IntersectTSBound's cached branch runs its traversals itself, so GetOrCreateUVTrimCurve makes a missing trim on the classification snapshot when the edge use is visited. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s cleared are kept; scratch copies share the cache slots IntersectVertices and IntersectEdges clear the face surface's owner while they read the vertex/face and edge/face gaps, so a trimmed cache that ComputeUVPoint makes then is a standalone one, and upstream keeps it on the surface (SmCacheMgrTSrf). The face-unaware smsurf_GetSurfaceCache keeps such a cache too when it is made in an owner-cleared scope. The classification snapshots, HasSeamProblem's seam objects and the curve classification's binormal and sector scratch copies stand for the B-rep itself, so their face surfaces share the B-rep's cache slots (Brep::clone_sharing_surface_caches). difftest: intersect.curve_class_p9's ComputeUVPoint fixture attaches the shim's cache first, as the shim does; topology.brep_p4 seeds the face surfaces' cache states a file read leaves. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…cs for the kept trimmed caches The shared import recomputes the cached gaps the C++ export reported. Its ComputeUVPoint calls now fetch the face surface's trimmed cache, which would build it with the face (making UV trim curves the C++ B-rep does not have). The refill now runs as during a Boolean operation and drops the trimmed caches it kept, leaving each surface's slot as before (topology.brep_p4: 241 -> 302 passes). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…dings and unit notes for the kept trimmed caches A face cache built while the B-rep is edited has no face data, and the base cache's GetTree would ask to rebuild it with the face (an Unported dispatch gap): the face source's own GetTree stands. Found with tangency-labs#694 merged (primitive_creation_p2 gen0201, gen0214 then pass). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…shell-trims # Conflicts: # crates/difftest/known_mismatches.toml
…cy-labs#697's kept trimmed caches Merged tangency-labs#697 (face surfaces keep their trimmed caches; IntersectTSBound's cached branch and its mark). The 7 brep_p6 region-nesting known mismatches now pass and are removed; the unit is green (595/595). The two skin annulus cases still differ (the cap comes out as two faces) and stay listed with a findings entry. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Collaborator
Author
|
@bherbruck, could you tell me why this was closed? Was it because #697 seemed to supersede it? #697 fixed the traverser deferrals that blocked this PR, but this branch still adds the 🤖 Generated with Claude Code |
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.
This follows up the 9 cases #685 parked in
known_mismatches.toml. Status: draft. The root cause is found, but the fix is blocked on a larger port (see below).Root cause
topology_traverser::is_inner_shellran its rays andGetPointsInFaceon ab.clone()scratch copy.points_in_faceranCalculateUVDomainFromUVTrimCurvesand its iso-lineCurveOnClassifyon further copies.constface queries leave the UV trim curves they create on the B-rep, so C++ exported stored trims that Rust lacked. For brep_p6two_disjoint_cubes, geom.len was cpp 1385 vs rust 1232.set_uv_trim_curvewith its B-rep address: 15 trims landed on the final B-rep and 18 on copies, all of them fromis_inner_shell.What this branch does
is_inner_shell,points_in_faceandShell::is_inner_shelltake&mut Brepand run on the caller's B-rep.CurveOnClassifyCachesnapshot.Results:
make_face.json#89..95: geometry and topology now match C++ exactly. Only the Mark2 counter still differs. UpstreamIntersectTSBoundtakes its trimmed-cache branch withSmNewMarkAndLock(SmCurveClass.cpp:16242), while the port walks the loop uses. These 7 cases stay known mismatches with that reason.skin_concentric_loops,skin_primitive_annular), plus creation_p2 gen0201/gen0214, now defer atTrimSrfCache::build_tree_with_face for a face-owned surface. Their known-mismatch entries are removed.Blocker
IsInnerShell) cases go from pass to deferred atSmFace handle of a surface's face(topology.face_p2).Brep::clone, which drops geometry owners (see fix: B-rep copies keep geometry owners #681). The ray's surface looked free, so an untrimmed cache was built. On the real B-rep, the face-owned surface needs a face-bound trimmed cache, andglobal_line_intersect_held'sRaySurfacehandles don't bind one.global_line_intersect_held/ theIsInnerShellray world a face-bound trimmed surface cache, assmsurf_GetSurfaceCachebuilds.IntersectTSBound's cached branch with its mark, which needs&mut Kernel.build_tree_with_facedeferral and the brep_p6 Mark2 counter together.is_inner_shell's). That would hit the same deferral, so the two need to be coordinated.Local checks on
165745d64: fmt, clippy-D warnings,cargo test -p solidcore(2079 lib tests) and wasm all pass.🤖 Generated with Claude Code