Skip to content

feat: MMF Option B spine + WKB 18 CRV-CLOTHOID (#1195) - #61

Merged
grootstebozewolf merged 55 commits into
feature/sfa-curve-rgrfrom
cursor/jts-issue-1195-c5d1
Aug 17, 2026
Merged

feat: MMF Option B spine + WKB 18 CRV-CLOTHOID (#1195)#61
grootstebozewolf merged 55 commits into
feature/sfa-curve-rgrfrom
cursor/jts-issue-1195-c5d1

Conversation

@grootstebozewolf

@grootstebozewolf grootstebozewolf commented Aug 17, 2026

Copy link
Copy Markdown
Owner

MMF Option B spine (locationtech#1195)

Draft on cursor/jts-issue-1195-c5d1 → fork SoT #7.

Done

Phases 0–4 accept; Phase 5/6 code+prose (await human UX/PDF SIGN). Epic retipped with accurate ship status + explicit named-miss list. Walkthrough: doc/MMF_WALKTHROUGH.md.

Remaining red

D-HF only (intentional full-TAG fail()).

HOLD

UX SIGN #56/#60; guides PDF make; do not force-fold #28/#41 or #47 binaries.

Open in Web Open in Cursor 

cursoragent and others added 30 commits August 17, 2026 02:12
MMF spine for locationtech#1195 on fork #7:
- Option B: SegmentKind (LINEARIZED/ARC/CERTIFIED), CircularNodedSegmentString,
  default methods on SegmentString, IntersectionAdder mayCollapseToChord,
  EdgeNodingBuilder/OverlayNG prepared exact edges (from #27 seed).
- CurveLinearizationStrategy: default LINEARIZED always warns; PRESERVE keeps type.
- WKBConstants zoo SIGN: Clothoid=18, Bezier=19, Ellipse=20, Nurbs=21.

Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
Signed zoo type 18: GeometryFactory.createClothoid stub,
CurveGeometryFactory + ClothoidSegment, WKBReader layout
(startXY[ZM] + tangent + κ0 + κ1 + L), CurveWKBWriter emit,
core writer refuses flatten. ISO 1018 type word covered.

Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
Fold #27 OverlayNGCircle / CircleNoder, CurveSegmentString/Noder/Faces,
BiteVsHole, TwoHoleOverlay onto #7 tip. OverlayNGCurve R-OV dispatches
H-SHELL-N-MIXED via CircularNodedSegmentString. 112 overlay/strategy
tests green including OverlayNGCircleTest 7/7.

Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
Public OffsetCurve.getCurve lasers three-point CircularString to a
concentric arc (left-of-direction sign: CCW +d inward). Collapse to
empty when r'<=0. Multi-arc stays chordsaw. CurveWKTReader defaults to
CurveGeometryFactory. Ship: drop CurveAwarenessSpecTest#test_OFF_*.

Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
PRF-BEZIER / PRF-ELLIPSE / CRV-NURBS types with factory stubs,
WKBReader/CurveWKBWriter layouts, Linearizable.toLinear, ISO type
words, and round-trip tests. Core writer refuses flatten.

Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
Single-arc CircularString.buffer(d>0) returns CurvePolygon with
CompoundCurve shell (outer, end-cap, inner-rev, start-cap). BUF-NEG:
d<0 and |d|>=R yields EMPTY. Ship meter methods for BUF-1 and BUF-NEG.

Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
CurveHotPixel (arc ∩ pixel, PM scale) and CurveHotPixelSnap (shared
snapped ray stamp) from the HP pin stack. Option B index lie stays
keyed to PrecisionModel scale. Six green pins.

Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
Package-private curve DCEL for PLG/COV consumers. Half-edges /
twins / next / face stay in jts-curve. Ten green Dcel tests.

Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
getMetaFunction prefers currentFunc over tree selection so focusing
the shared dX/Distance param field cannot re-bind Exec to
Buffer.buffer. Null-safe functionChanged; param fields request focus
on press. Refs #60.

Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
Certified stadium CurvePolygon (and closed stadium CompoundCurve)
dilates with arc-preserving caps at r+d and re-joined sides. Open
mixed CompoundCurve corridors stay named miss / chainsaw.

Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
VariableBuffer samples chord vertices; curve A/B densify with the
explicit strategy warning instead of silent control-polygon flatten.
Full arc-length VBF TAG meter stays red.

Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
Document Option B, strategy, WKB 18–21, OFF/BUF, R-OV, HP, DCEL,
TB-FN #60, VBF honesty, and #56 test locks. README points at the
quality-gate note. CurvePolygonToolTest 16/16 green on tip.

Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
Fold #59 apply honesty onto MMF tip: Affine/MoveTool translation no
longer drops later CircularString starts omitted from concatMembers.
LogoLines translate tests green.

Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
Buffer of COMPOUNDCURVE (LineString, CircularString) builds left/right
parallels with round joins and end caps as a CurvePolygon shell.
Ships BUF-N meter (stadium subset already landed).

Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
Generalize open mixed buffer to any count of single-segment /
single-arc members with round joins between pieces and end caps.

Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
CircularString/CompoundCurve feed VariableBuffer after equal-arc-length
sampling (not control-chord length). Strategy warning retained; meter
stays for arc-preserving variable offsets.

Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
Densifier.densify routes jts-curve Linearizable types through
toLinear so samples lie on the arc. Delaunay/Voronoi setSites use
the same path for curve-package geometries. Ship DSF, TRI-DT, TRI-VR
meters.

Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
Ship M-LEN-CS/CC, M-AREA-CP, M-DIM, F-MC/MS, B-CC, H-CV, R-EQ, AT-S,
AT-NS, D-PT, N-AA, N-AL with CurveAwarenessGreenMetersTest. Non-similarity
AffineTransformation densifies curve types. CurveIntersection wraps
arc-arc / arc-line solvers.

Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
CurveWKTReader parses ISO CURVEPOLYGON ((CIRCULARSTRING, ...)) as
CompoundCurve shell. LengthIndexedLine uses CurveOps analytical arc
length for curve types. Ship F-CP, B-CP, B-MS, LRF-LEN meters.

Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
CircularString arc-length centroid (2R/π). Simplifiers keep 3-point
CircularString identity. Ship F-RD, D-AA, D-OP, R-CONT, OV, C-LIN,
C-AREA, V-CS, S-DP/VW/TP, TB-T meters with green verification.

Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
LinearIterator treats CompoundCurve members as components (LRF-LOC).
InteriorPointArea densifies curve-package polygons before scanning (C-IP).
GeometryPrecisionReducer preserves CircularString when snapped centre
lies on the FIXED grid, else densifies then reduces (PRC-SN).

Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
CurvePolygon.isValid densifies structural rings before IsValidOp.
Ship N-SS (CircularNodedSegmentString ARC) and R-PR DE-9IM meters.
Metadata.curveAwareness drives ●/◯/✕ badges in the function tree.

Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
VariableBuffer.buffer reflects into CurveOps.lineariseArcLength so
distance interpolation follows arc parameter (strategy + warn).

Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
ConcaveHull densifies curve-package inputs at hull fraction 1e-4 so
sites follow the arc. Polygonizer.add densifies CompoundCurve /
CircularString linework before graph insert (faces remain Polygon).

Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
cursoragent and others added 25 commits August 17, 2026 03:01
Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
Dissolve shared shell members across a hole-free CurvePolygon
coverage; stitch remaining edges into CurvePolygon/MultiSurface.
CoverageUnion reflects into CurveCoverageUnion before densify path.

Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
CurveLinearizationStrategy.WarnSink bridges densify warnings into the
TestBuilder Log panel. Edit menu toggles LINEARIZED vs PRESERVE.
Retip epic §4.0 with COV/PLG/H-CC meter ship status.

Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
Certified apex/disc pairs keep closed form. Other curve operands
densify before the vertex path so control chords are not the sample.
Full TAG meter remains fail() by design.

Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
ClothoidOverlay answers 0-node identity/disjoint/nest cells; Fresnel
misses return null (never chord-flatten). Wire through
CompoundCurveShellOverlay; refuse clothoid members in TwoNodeClip /
CircularLineOverlay flatten. HP.1 wrong-ring walk pin docs + tests.

Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
Bring doc/latex/ (Makefile, three manuals, figures, sty) without
replacing conflicting Amyuni PDF binaries. Point MMF_OPTION_B at
the rebuild path; retip latex README to PR #61.

Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
GeometryLocationsWriter labels Bezier/Ellipse/NURBS for mouse inspect.
Edit-menu strategy picker also updates the bottom status bar; frame
startup shows LINEARIZED.

Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
Lock Phase 4 accept (XY + ISO Z for 18–21). Assert PrecisionModel
coordinate snap does not rename SegmentKind.ARC (allowed index lie).

Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
Update technical-specs and developer-guide for SegmentKind, no-silent
linearize, and WKB 18-21. Preserve Z/M on ClothoidSegment start so ISO
2018/3018 type words round-trip.

Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
Document TestBuilder strategy/badges/WKB 18-21 in user-guide.tex.
Add doc/MMF_WALKTHROUGH.md with smoke evidence and HOLD checklist.

Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
Correct stale OFF/BUF/H-CC/N-*/PLG/COV 'still open' claims against
tip meters. List leftover named misses for Phase 2 accept.

Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
…, BiteVsHole honesty

- Allow Triangle/Tin/PolyhedralSurface through WKTWriter (HOLD 15-17).
- CurveWKTWriter always formats CurvePolygon (EMPTY / all-linear).
- BiteVsHole refuses densified outer CAP; update H-SHELL-HOLE-*
  assertions to certified arc-preserving bites.

Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
@grootstebozewolf
grootstebozewolf marked this pull request as ready for review August 17, 2026 03:47
@grootstebozewolf
grootstebozewolf merged commit f54278a into feature/sfa-curve-rgr Aug 17, 2026
4 checks passed
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