Streets: sidewalks, road curves, junctions and roundabouts
Deploy web Studio / deploy (push) Successful in 4m31s

Roads take sidewalks (none, both, left, right): 12 cm high paving with
kerb faces drawn where they face the viewer. Road curve (radius, angle,
left/right) carries a street round a bend; centre lines are true arcs
when cut and offset, so curve joints are seamless. A road ending on
another road's centre line opens that road's kerb and sidewalk (T
junction); two roads ending at one corner close it. Roundabout: ring
radius and width, one or two lanes, up to four arms with flared kerbs,
splitter islands, give-way lines on the entry side (traffic on the left
or right) and a central island with apron.

Studio: a road run drawn corner by corner gets a curve in each corner
(prefab meta `corner`). Tooltips list the streets each one meets.
Engine: open `polyline` primitive (Prim::Poly open) so dashes run on
round curves. examples/streets and a Streets demo in the web Studio;
MCP guidance, docs. ROADMAP: backlog 5-7 done; multi-select and the
hosted copy marked done.

Tests: Rust 72, Studio 113, web 95.
This commit is contained in:
grabowski committed 2026-10-25 12:32:52 +07:00
1 parent 2442966743
commit c91d63663b
24 files changed
+989 -29

No files matched your search

+12
View File
@@ -272,6 +272,10 @@ mach3 = "#5b6370"
mach4 = "#b8692b"
robot = "#e07a1f"
robotb = "#3a3f48"
# streets: sidewalk paving, kerb stone faces, roundabout apron
walk = "#555c6b"
kerbf = "#7d8494"
apron = "#4a4840"
[palette.light]
sky1 = "#a9d4fb"
@@ -538,6 +542,9 @@ mach3 = "#8a93a1"
mach4 = "#e08a43"
robot = "#f08c2b"
robotb = "#5a616d"
walk = "#d9d6cf"
kerbf = "#a5a9b1"
apron = "#b9ad98"
[materials]
warn = "#e0412f"
@@ -548,6 +555,8 @@ g-asph = "asph"
g-conc = "conc"
g-pad = "pad"
g-path = "path"
g-walk = "walk"
g-apron = "apron"
plinth = "plinth"
wall = "wall"
wall2 = "wall2"
@@ -809,6 +818,9 @@ f-conc = "conc"
".iso-svg .iso-win" = "fill: var(--iso-win); stroke: none"
".iso-svg .iso-school" = "pointer-events: none"
".iso-svg .iso-swimbox" = "fill: none; stroke: none"
".iso-svg .iso-kerbf" = "fill: var(--iso-kerbf); stroke: none"
".iso-svg .iso-lane" = "fill: none; stroke: var(--iso-dash); stroke-width: .6; stroke-dasharray: 4 6"
".iso-svg .iso-giveway" = "fill: none; stroke: var(--iso-dash); stroke-width: .9; stroke-dasharray: 2 2"
".iso-svg .iso-ledr" = "fill: var(--iso-led-r); stroke: none"
".iso-svg .iso-ledg" = "fill: var(--iso-led-g); stroke: none"
".iso-svg .iso-ledo" = "fill: var(--iso-led-o); stroke: none"