Repository navigation
wire: primitive.primitive_creation_p3 B-rep face services and axis classification (unit to green) - #617
Merged
bherbruck merged 4 commits intoOct 23, 2026
Conversation
…een) PrimitiveAccess's CreatePlanarFace(s)With3DCurves, CreateFace(s)FromSurface (topology.brep_p8) and DeleteFace (topology.brep_p3) defaults were UNPORTED stubs; they now call the ported B-rep functions through SweepAccess::with_brep_mut. PrimitiveModel's identical overrides are removed. The difftest adapter gains a tag store, untagged curve lookups and face deletion through KernelManifoldIntersector::delete_faces_with_keys, and every entry-point record now also compares the B-rep's face/edge/vertex counts. difftest: 296 cases, 295 bit-identical passes, 0 deferred (was 9), 1 UB-78 rejection, 0 failures. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- axis_inside_face becomes a trait default over the SweepStore classifier (SmFace::CurveOnClassify); SweepStore's identical override and PrimitiveModel's Unported(query.face_p2) are removed. - planar_faces empties each consumed slot instead of clearing the vector, as the trait documents. - The p2 runner adapter keeps a tag store and untagged curves, like p3's; both fixtures drop their axis_inside_face fallback. - api_primitives: partial solids now get past the axis check and stop at SmFace::FindVertexSector / SmFace::Point3DClassify. difftest: primitive_creation_p2 196 passes (was 146), 0 failed, 112 deferred (was 162); primitive_creation_p3 295 passes, 0 deferred; sweep.api_brep 502 (was 501); other touched units unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TYEpC4tUKxEP3MCaFL5Kz2
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.
Wires the
PrimitiveAccessdefaults that were stillUNPORTEDstubs, although their targets are ported, and makes the difftest fixtures reach them.Changes
planar_faces/planar_face/surface_faces/surface_face(topology.brep_p8:CreatePlanarFace(s)With3DCurves,CreateFace(s)FromSurfacewithSM_CT_G1as at every call site) anddelete_primitive_face(topology.brep_p3:DeleteFace(face, FALSE, TRUE)) are now real trait defaults overSweepAccess::with_brep_mut.PrimitiveModel's identical overrides are removed.axis_inside_faceis a trait default over the classifierSweepStorealready used (SmFace::CurveOnClassify). That removesSweepStore's override andPrimitiveModel'sUnported(query.face_p2).planar_facesnow empties each consumed slot instead of clearing the vector, as the trait documents. No current caller depended on the old behaviour (skin.rssets its transfer flags in theOkbranch).PrimitiveModel.KernelManifoldIntersector::delete_faces_with_keys, as inSweepStore. It used to fail there silently, which the ignored upstream status hid.store.rs: the test that pinned thebrep_p8stub now checks that the real constructor runs.api_primitives: partial solids now get past the axis check. Sphere and cylinder stop atSmFace::FindVertexSector(topology.face_p4), the torus atSmFace::Point3DClassify(query.face_p1).primitive.primitive_creation_p3→green; p2 notes updated.Difftest (macOS arm64, Apple clang, pinned
c9c5979; Rust side merged with main10a92977e)Compared with main's CI reports:
topology.brep_p871 → 0).sweep.api_brep: 501 → 502 passes.Full
--green --jobs 4on this Mac: every failing unit fails identically on unmodified main, from known macOS/arm64 issues (#448, #449, #450). I checkedheal.heal_data_p1case by case against main.blend.fillet_solver_p5andgeom.local_solve1dalso fail identically on main locally. No absolute floors and no loosened tolerances. Run on macOS only, so CI is the Linux gate.Also run:
cargo fmt --all --check,cargo clippy --workspace --all-targets -- -D warnings,cargo test -p solidcore(2053 passed) andcargo check -p solidcore --target wasm32-unknown-unknown.Related
PrimitiveModel, whose implementations this lifts into the trait.api_primitivestest. The scopes are independent; whichever lands second has a small text conflict in the partial-solids assertion block.🤖 Generated with Claude Code
https://claude.ai/code/session_01TYEpC4tUKxEP3MCaFL5Kz2