Skip to content

D5: stamp H-ANNULUS-TANGENT as a named miss - #13

Open
grootstebozewolf wants to merge 1 commit into
cursor/d3-hshell-hole-cross-e649from
cursor/d5-annulus-tangent-d7aa
Open

grootstebozewolf wants to merge 1 commit into
cursor/d3-hshell-hole-cross-e649from
cursor/d5-annulus-tangent-d7aa

Conversation

@grootstebozewolf

@grootstebozewolf grootstebozewolf commented Aug 16, 2026

Copy link
Copy Markdown
Owner

Stacked on cursor/d3-hshell-hole-cross-e649 @ 3cc5f1a (draft PR #12). Does not reopen #8, #10, #11, or #12. Does not rewrite D2, D3, or D4 lasers.

OV-P1

Every circular pair that has a closed form has a kit. Everything else is a named miss and the chordsaw. We will not write a circular noder in this PR.

Remaining R2 (named misses only):

  • H-SHELL-N-MIXED — collinear overlap, not a discrete node set
  • H-SHELL-HOLE-CROSS — hole ∩ other shares the clip edge; a punch would guess a bite
  • H-SHELL-HOLE-X — two holes that cross — a noder, stop
  • H-ANNULUS-TANGENT — not strictly inside; 1 node / d+r = R

No other overlay R2 in this PR is an unnamed fallthrough that pretends to be exact.

Split

H-ANNULUS-TANGENT is a named green null, not a laser. CircularDiscOverlay.nestedAnnulus already requires a strict nest (d + r <= R - eps). CIRCLE_5 vs the kit's internal-tangent disc (CIRCLE_INT_TAN: r=3 at (2,0), touches at (5,0)) is 1 node / d+r = R. The kit returns null. This PR gives that miss a name. Do not densify with isApproximate()=false.

The three already-named nulls stay, with their reasons, unchanged.

Already-lasered cells are unchanged: D4 annulus, D2 ODD, different-outer punch, R1.5 crossing, even-n H-SHELL-N.

Out of scope

  • No new public API
  • No noder
  • No densify-as-laser
  • No snap-round

Verify

mvn -pl modules/curve -am test -DfailIfNoTests=false -Dcheckstyle.skip=true -Dpmd.skip=true \
  -Dtest=CompoundCurveShellOverlayTest,CircularArcOverlayTest,CircularDiscOverlayTest,CircularDiscPolygonOverlayTest,OverlayNGCurvePhase0Test,OverlayNGCurveRatchetTest,OverlayNGCurvePerfGateTest
mvn -pl modules/curve checkstyle:check
mvn -pl modules/curve pmd:check

All green after this revision:

  • CompoundCurveShellOverlayTest 24 / 0 (same-outer hole, different-outer punch, D2 ODD, H-SHELL-HOLE-CROSS, H-SHELL-HOLE-X, H-SHELL-N-MIXED)
  • CircularArcOverlayTest 11 / 0 (same three named nulls stay)
  • CircularDiscOverlayTest 10 / 0 (D4 annulus + R1.5 crossing + H-ANNULUS-TANGENT)
  • CircularDiscPolygonOverlayTest 7 / 0
  • OverlayNGCurvePhase0Test 19 / 0
  • OverlayNGCurveRatchetTest 43 / 0
  • OverlayNGCurvePerfGateTest 78 / 0 (15% slack)
  • Checkstyle 0 violations; PMD check on jts-curve succeeded
Open in Web Open in Cursor 

nestedAnnulus already refuses a nest that is not strictly inside
(internal tangent, 1 node, d+r = R). Name that miss. Do not laser it.

Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants