P2.5.3 N-shell faces in jts-curve (OV-P2 / Bar 2) - #24
Open
grootstebozewolf wants to merge 2 commits into
Open
Conversation
Walk left-most / next-outgoing on the all-pairs node set in jts-curve. N=2 recovers pair-kit CAP+XOR rings; MIXED / pinch / holed stay null. A coincident leave-angle (tangent) is snap-rounding — stamp null. N≥3 pin is HALF_DISC × HALF_HANGING × STADIUM_FOUR. Not P2.5.5. Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
The left-most walk also closes the complementary outer ring (area = sum of the interiors). Keep every closed ring and drop that union so N=2 matches pair-kit CAP+XOR counts and the N=3 pin has nine faces. Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
This was referenced Aug 16, 2026
grootstebozewolf
marked this pull request as ready for review
August 16, 2026 12:49
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.
Stacked on
cursor/p252-n-string-nodes-16dd@ b983f6a (draft #23, P2.5.2 N-string nodes). 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 / #23 / #7. Does not push tofeature/sfa-curve-rgror master. P2.5.5 is not started.Sentence
The noder is the named-miss suite, one assembly rule at a time. P2.1 nodes, P2.2 overlap-as-edge, P2.3 bite vs hole, P2.4 two-hole, hole-on-diameter, P2.5.2 N-string nodes. This rung assembles faces of N shells from that node set + those edges. Densify is never a noder. Snap-rounding is P2.5.4, not this rung: if the walk needs snap-rounding, stamp and stop. Core
SegmentString/Noderis P2.5.5, 74 files, LOCKED.What this is
P2.5.3: package-private
CurveSegmentFacesinorg.locationtech.jts.operation.overlayng.curve.faces(Geometry[])/faces(List<List<CurveSegmentString>>, scale)N=2 recovers the existing pair-kit faces (CAP + XOR components, count and area). A 0-node containment or a same-circle special case falls back to those kits. OverlayNG stays binary — this is the arrangement product, not an N-ary public overlay. If a pair among the N is wired as binary overlay, the existing kits stay in charge of CAP/CUP/SUB/XOR.
MIXED / pinch / holed Geometry-level stays null. Hole rings are walked as strings, as in P2.3/P2.4. A coincident leave-angle at a node (tangent pinch) is snap-rounding (P2.5.4):
facesreturns null with that reason. No HotPixel / ScaledNoder / core SegmentString.No public API. Name is OverlayNGCurve.
Pins
N=2 recovers pair kits (area- and count-identical CAP+XOR):
Named nulls unchanged:
New N≥3 pin (existing fixtures only):
25.5π − LENS + 2, named triple / lens-sides / stadium strip / ears / hanging remainder. Permutation-identical. String-group API matches.What this is not
feature/sfa-curve-rgr/ PR SFA/SQL-MM curve awareness: Curve rename, arc-aware operations, OverlayNGCurve ratchet (#1195 RGR series) #7 / locationtech masterVerify
All green after this revision:
CurveSegmentStringTest24 / 0 (N=2 faces recover pair-kit CAP+XOR; MIXED / pinch / holed stay null; N=3 HALF_DISC × HALF_HANGING × STADIUM_FOUR is nine named faces; N≥3 tangent stamps null)CompoundCurveShellOverlayTest27 / 0 (P2.1–P2.5.2 / HOLE-OUTER unchanged)CircularArcOverlayTest11 / 0CircularDiscOverlayTest12 / 0CircularDiscPolygonOverlayTest7 / 0CircularLineOverlayTest7 / 0OverlayNGCurvePhase0Test19 / 0OverlayNGCurveRatchetTest50 / 0OverlayNGCurvePerfGateTest82 / 0 (15% slack)jts-curvesucceededSlack stays 15%. Overlay name is OverlayNGCurve. No new public API. No noder was written in jts-core. P2.5.5 was not started.