Skip to content

P2.5.2 N-string node set in jts-curve (OV-P2 / Bar 2) - #23

Open
grootstebozewolf wants to merge 1 commit into
cursor/p24-hole-meets-diameter-a09afrom
cursor/p252-n-string-nodes-16dd
Open

grootstebozewolf wants to merge 1 commit into
cursor/p24-hole-meets-diameter-a09afrom
cursor/p252-n-string-nodes-16dd

Conversation

@grootstebozewolf

@grootstebozewolf grootstebozewolf commented Aug 16, 2026

Copy link
Copy Markdown
Owner

Stacked on cursor/p24-hole-meets-diameter-a09a @ 3d11f8e (draft #20, HOLE-OUTER hole-on-diameter). 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 / #20 / #7. Does not push to feature/sfa-curve-rgr or master. P2.5.5 is not started.

Sentence

The noder is the named-miss suite, one assembly rule at a time. P2.1–P2.4 landed (pair nodes, overlap-as-edge, bite vs hole, two-hole, hole-on-diameter). Next general-N rung is all-pairs CurveSegmentString nodes in jts-curve. Densify is never a noder. Pick C (CurveSegmentString in jts-curve). A (metadata) already shipped. B (lie that [i,i+1] is non-linear in core SegmentString) is P2.5.5, 74 files, LOCKED — not started.

What this is

P2.5.2: same atoms as P2.1 (CurveSegmentString chord/arc + CurveSegmentNoder), N pairs not 2.

Package-private in org.locationtech.jts.operation.overlayng.curve:

  • CurveSegmentNoder.nodes(Geometry[] geoms)
  • CurveSegmentNoder.nodes(List<List<CurveSegmentString>> groups, double scale)
  • CurveSegmentNoder.nodes(CurveSegmentString[] strings, double scale)

Each unordered pair runs the existing pair noder. The N-set is the unique union. N=2 delegates to the pair path (bit-identical). MIXED / pinch stay edges via the existing P2.2 path — nodes() may still be null on a MIXED pair; all-pairs does not invent crossings there. Geometry-level holed pair stays null (walk uses hole rings as strings, as in P2.3/P2.4).

No faces (P2.5.3). No snap-rounding (P2.5.4). No org.locationtech.jts.noding.SegmentString change (P2.5.5). No new public API. Name is OverlayNGCurve.

Pins

Reuse existing kit-identical pins so N=2 still matches P2.1:

  • R1.5 (3.5, ±√12.75)
  • R1.6-2 (0, ±5)
  • H-SHELL-2 (±3, 4)
  • H-FOUR / H-SHELL-N / H-SHELL-N-ODD (tangent is a node)
  • MIXED / pinch / holed Geometry pair still null

New N≥3 pins (existing fixtures only):

  • HALF_DISC × HALF_HANGING × STADIUM_FOUR: N-set is the union of the three pair sets, no extras.
  • MIXED (ON_DIAMETER) or pinch (CIRCLE_INT_TAN) inside an N-set adds no fake crossing. Pinch at (5, 0) is not a node.
  • Holed Geometry pair still null at the noder; an N-set that includes a holed operand does not invent hole-ring nodes.

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 20 / 0 (N=2 bit-identical to P2.1 pins; N=3 union of HALF_DISC / HALF_HANGING / STADIUM_FOUR; MIXED / pinch add no fake node; holed Geometry pair stays null)
  • CompoundCurveShellOverlayTest 27 / 0 (P2.1–P2.4 / HOLE-OUTER unchanged)
  • CircularArcOverlayTest 11 / 0
  • CircularDiscOverlayTest 12 / 0
  • CircularDiscPolygonOverlayTest 7 / 0
  • CircularLineOverlayTest 7 / 0
  • OverlayNGCurvePhase0Test 19 / 0
  • OverlayNGCurveRatchetTest 50 / 0
  • 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.5 was not started.

Open in Web Open in Cursor 

Package-private CurveSegmentNoder.nodes accepts N geometries or N
string collections and unions each unordered pair. N=2 delegates to
the pair noder. MIXED, pinch, and holed pairs stay null and add no
point. No faces, no jts-core noding change.

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