Skip to content

P2.4 two-hole arrangement (OV-P2 / Bar 2) - #19

Open
grootstebozewolf wants to merge 2 commits into
cursor/p23-bite-vs-hole-3909from
cursor/p24-two-hole-arrangement-fdec
Open

P2.4 two-hole arrangement (OV-P2 / Bar 2)#19
grootstebozewolf wants to merge 2 commits into
cursor/p23-bite-vs-hole-3909from
cursor/p24-two-hole-arrangement-fdec

Conversation

@grootstebozewolf

@grootstebozewolf grootstebozewolf commented Aug 16, 2026

Copy link
Copy Markdown
Owner

Stacked on cursor/p23-bite-vs-hole-3909 @ 7a3a4fb (draft #18). Do not merge this into #7. This is OV-P2 / Bar 2, not OV-P1. Does not merge #12 / #13 / #15 / #16 / #17 / #18 / #7. Does not push to feature/sfa-curve-rgr or master.

Sentence

The noder is the named-miss suite, one assembly rule at a time. Nodes (P2.1), overlap-as-edge (P2.2), bite vs hole (P2.3), then two-hole arrangement. Densify is never a noder. Snap-rounding is not this rung.

What this is

P2.4 is the next face walk after P2.3, and only this cell:

H-SHELL-HOLE-X — two holes that cross.

Same HALF_DISC outer. Two axis-aligned unit squares:

  • holeA (0 1, 1 1, 1 2, 0 2, 0 1)
  • holeB (0.5 0.5, 1.5 0.5, 1.5 1.5, 0.5 1.5, 0.5 0.5)

They overlap in [0.5,1] × [1,1.5]. The Geometry-level noder still returns null (the pair has holes). The hole rings are LineStrings: P2.1 names the two crossing nodes (0.5 1) and (1 1.5). No shared run (P2.2 edges empty). No circular–circular hole hits. Snap-rounding was not required.

Face assembly is a 3-ring arrangement (shared circular shell + two hole rings). Package-private TwoHoleOverlay walks each hole in and out of the other with CurveSegmentString / CurveSegmentNoder / TwoNodeClip, then:

  • CAP = HALF_DISC \ (holeA ∪ holeB) — area 12.5π − 1.75
  • CUP = HALF_DISC \ (holeA ∩ holeB) — area 12.5π − 0.25
  • SUB A\B = holeB \ holeA — area 0.75
  • XOR = holeA △ holeB — area 1.5

Exact, isApproximate()=false. Decide / clip-node pins sit next to the overlay pin. No new public API. No noder in jts-core. Name is OverlayNGCurve. P2.5 / N-SS was not started.

Lasering vs stamped

Fixture This rung
H-SHELL-HOLE-X Laser. Two-node hole–hole walk. CAP/CUP/SUB/XOR exact.
H-SHELL-HOLE-CROSS Unchanged bite.
H-SHELL-HOLE-OUTER (hole meets the other diameter) Named miss. Collinear, stays assertNull.
SAME-OUTER / DIFF-OUTER Unchanged.
P2.1 node pins / P2.2 MIXED / H-SAME-CIRCLE / H-ANNULUS-TANGENT / TOUCH-ext Unchanged.
4-node / collinear hole overlap / snap-rounding Would stamp assertNull. This fixture did not need them.

What this is not

Verify

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

All green after this revision:

  • CurveSegmentStringTest 16 / 0 (hole-ring nodes (0.5 1) / (1 1.5); Geometry-level pair still null; BiteVsHole.MISS; TwoHoleOverlay.CROSS)
  • CompoundCurveShellOverlayTest 26 / 0 (HOLE-X CAP/CUP/SUB/XOR exact; HOLE-CROSS / SAME-OUTER / DIFF-OUTER / HOLE-OUTER / MIXED unchanged)
  • CircularArcOverlayTest 11 / 0
  • CircularDiscOverlayTest 12 / 0
  • CircularDiscPolygonOverlayTest 7 / 0
  • CircularLineOverlayTest 7 / 0
  • OverlayNGCurvePhase0Test 19 / 0
  • OverlayNGCurveRatchetTest 48 / 0 (two-hole cross EEEE both orders)
  • OverlayNGCurvePerfGateTest 82 / 0 (15% slack)
  • Naming-guard OK; Checkstyle 0 violations; PMD check on jts-curve succeeded

Slack stays 15%. Overlay name is OverlayNGCurve. No new public API. No noder was written in jts-core. P2.5 / N-SS was not started.

Open in Web Open in Cursor 

cursoragent and others added 2 commits August 16, 2026 08:36
Walk two crossing hole rings with the existing noder (two line-line
nodes, no shared run) and assemble CAP/CUP/SUB/XOR. H-SHELL-HOLE-X
is exact; snap-rounding was not required.

Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
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