Skip to content

P2.4 hole-on-diameter bite (OV-P2 / Bar 2) - #20

Open
grootstebozewolf wants to merge 2 commits into
cursor/p24-two-hole-arrangement-fdecfrom
cursor/p24-hole-meets-diameter-a09a
Open

P2.4 hole-on-diameter bite (OV-P2 / Bar 2)#20
grootstebozewolf wants to merge 2 commits into
cursor/p24-two-hole-arrangement-fdecfrom
cursor/p24-hole-meets-diameter-a09a

Conversation

@grootstebozewolf

@grootstebozewolf grootstebozewolf commented Aug 16, 2026

Copy link
Copy Markdown
Owner

Stacked on cursor/p24-two-hole-arrangement-fdec @ bb45876 (draft #19). Do not merge this into #7. This is OV-P2 / Bar 2, not OV-P1. Does not merge #12 / #13 / #15 / #16 / #17 / #18 / #19 / #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), two-hole (P2.4), then hole-on-diameter. Densify is never a noder. Snap-rounding is not this rung.

What this is

The remaining assertNull in testNotThisCellReturnsNull:

H-SHELL-HOLE-OUTER — hole meets the other diameter.

  • HALF_HOLED = half-disc outer + hole (0 1, 1 1, 1 2, 0 2, 0 1)
  • HALF_RIGHT = right half-disc, vertical diameter (0 5, 0 -5)

The hole sits entirely in Q1. Its left edge (0 1)–(0 2) is collinear with / a subset of HALF_RIGHT's diameter. Not two crossing nodes. P2.2 already names that shared run as an edge. P2.3 BiteVsHole is the straddle (HOLE-CROSS). This cell is the non-crossing cousin: the hole ring itself overlaps the other shell.

Already-lasered DifferentOuterHole rows that reuse the "H-SHELL-HOLE-OUTER" label (testDifferentOuterHoleInsideCapIsPunched / OutsideCap) stay unchanged.

Snap-rounding was not required. No circular noder in jts-core. No general PLG/COV arrangement.

Face assembly

BiteVsHole now falls through to a shared-edge walk when CurveSegmentNoder.nodes is MIXED (null) and edges names exactly one non-degenerate chord ⊂ other.shell. The hole interior is entirely in the solid. Overlay reuses the existing splice / join / punch:

  • CAP = Q1 minus the rectangle — area 6.25π − 1 (shell, not a punch)
  • CUP = three-quarter — area 18.75π (the solid fills the hole; hypothesis 18.75π − 1 was wrong)
  • SUB A\B = Q2 — area 6.25π
  • reverse SUB = Q4 plus the rectangle — area 6.25π + 1
  • XOR = both ears plus the rectangle — area 12.5π + 1

Exact, isApproximate()=false. Decide / clip-edge 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-OUTER (hole meets the other diameter) Laser. Shared-edge bite. CAP/CUP/SUB/XOR exact.
H-SHELL-HOLE-CROSS Unchanged bite.
H-SHELL-HOLE-X Unchanged two-hole arrangement.
SAME-OUTER / DIFF-OUTER inside+outside Unchanged.
H-SHELL-N-MIXED Named miss. Collinear shell overlap stays assertNull.
P2.1 node pins / P2.2 MIXED / H-SAME-CIRCLE / H-ANNULUS-TANGENT / TOUCH-ext Unchanged.

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 (noder names (0 1)–(0 2); nodes stay null; BiteVsHole.BITE)
  • CompoundCurveShellOverlayTest 27 / 0 (hole-on-diameter CAP/CUP/SUB/XOR exact; HOLE-CROSS / HOLE-X / SAME-OUTER / DIFF-OUTER / MIXED unchanged)
  • CircularArcOverlayTest 11 / 0
  • CircularDiscOverlayTest 12 / 0
  • CircularDiscPolygonOverlayTest 7 / 0
  • CircularLineOverlayTest 7 / 0
  • OverlayNGCurvePhase0Test 19 / 0
  • OverlayNGCurveRatchetTest 50 / 0 (hole meets diameter 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:52
H-SHELL-HOLE-OUTER (hole meets the other diameter) is the non-crossing
cousin of HOLE-CROSS. P2.2 already names the shared hole-edge as an
interval; BiteVsHole now treats hole-edge ⊂ other.shell as a bite even
when there are no crossing nodes. CUP is the three-quarter (the solid
fills the hole). Stacked on P2.4; not P2.5 / N-SS.

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