Planabgleich Etappe A bis C: Zugaenge, Rasenrandplatten, Torstufen
Deploy App / deploy (push) Successful in 28s
Deploy App / deploy (push) Successful in 28s
Systematischer Abgleich Plan gegen Szene, Bereich fuer Bereich. Neu gebaut - Lineare Bauteile (LINEAR): Treppe und Rampe am Ost- und Westzugang, Stahlrohrgelaender laengs des Gefaelles, Entwaesserungsrinnen mit buendigem Rost. Geometrie aus den Trittlinien des Plans abgegriffen (Ost: 8 Trittlinien z -4.18 bis -6.52, Koten -0.37/-1.57; West: Trittlinien alle 20 cm ab x -21.94, Koten -0.28/-1.08). - Rasenrandplatten: das durchgehende Band von 6 cm Breite entlang der Rasenkante wird als hochkant stehende Randplatte mit Sichtkante aufgebaut, nicht mehr als Belag (neuer Typ randplatte, 1.2 m2). - Zwei schwebende Travertinstufen am Gartentor, Koten -0.13 und -0.32. - Winkelelemente entlang der Suedgrenze, Tegula-Streifen des Nachbarn. Korrigiert - Holzscheiterwand: der Plan zeigt zwei Felder 1.50 x 0.46 m, nicht eines. Farbe #ffaa00 war faelschlich als Tegula klassiert. - Gartentor: Fluegel laeuft ueber z, nicht ueber x - das Tor stand um 90 Grad verdreht. Jetzt Stabgitter mit Pfosten und senkrechten Staeben statt geschlossenem schwarzem Blatt. - Winkelelemente Ost auf x 3.735 (Plan: Doppellinie 3.69/3.78), Fussweg auf x 2.86 bis 3.69 zwischen Verbundstein-Anpassung und Winkelelementen. - Rinne beim Gartentor auf die Schraffur des Plans (z 2.295, x -23.34 bis -21.74). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
+17
-2
@@ -8,7 +8,7 @@ import fs from 'node:fs';
|
||||
import path from 'node:path';
|
||||
import { fileURLToPath } from 'node:url';
|
||||
import {
|
||||
SURFACE_BY_COLOR, PLANT_BY_COLOR, TREES, WALLS, PROPS, LEVELS, STELE_HEIGHTS,
|
||||
SURFACE_BY_COLOR, PLANT_BY_COLOR, TREES, WALLS, PROPS, LEVELS, STELE_HEIGHTS, LINEAR,
|
||||
BUILDING, NEIGHBOUR_BUILDINGS, TERRAIN_ZONES, EXTRA_SPOTS, EXTRA_SURFACES,
|
||||
START_VIEWS, SITE_LOCATION,
|
||||
} from './authoring.mjs';
|
||||
@@ -85,7 +85,7 @@ function fitPlane(points) {
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
/** Bauteile, die als Mauer modelliert werden - nicht als begehbare Flaeche. */
|
||||
const NOT_A_SURFACE = new Set(['travertinmauer', 'winkelelement', 'spielhaus', 'gartenhaus', 'roboter', 'ligusterhecke']);
|
||||
const NOT_A_SURFACE = new Set(['travertinmauer', 'winkelelement', 'spielhaus', 'gartenhaus', 'roboter', 'ligusterhecke', 'holzscheiter']);
|
||||
|
||||
const bboxOf = (pts) => {
|
||||
let x0 = Infinity, z0 = Infinity, x1 = -Infinity, z1 = -Infinity;
|
||||
@@ -133,6 +133,19 @@ for (const s of raw.shapes) {
|
||||
}
|
||||
}
|
||||
|
||||
// Rasenrandplatten: derselbe Ton wie die Stelen, aber als durchgehendes
|
||||
// Band von 6 cm Breite entlang der Rasenkante. Sie stehen hochkant und
|
||||
// trennen den Rasen vom Kiesbett des Sichtschutzes.
|
||||
const laenge = Math.max(b.w, b.d);
|
||||
if (s.hex === '#ddd299' && laenge > 0.8 && s.area / laenge < 0.15) {
|
||||
const poly = polygonArea(s.pts) < 0 ? [...s.pts].reverse() : s.pts;
|
||||
surfaces.push({
|
||||
type: 'randplatte', area: round(s.area, 2),
|
||||
polygon: poly.map((p) => [round(p[0]), round(p[1])]),
|
||||
});
|
||||
continue;
|
||||
}
|
||||
|
||||
// Der Plan verwendet denselben hellen Ton fuer Dekorkies und fuer die
|
||||
// Keramikterrasse des Nachbarn; unterschieden wird ueber die Lage.
|
||||
if (type === 'dekorkies' && cz < -6.6) type = 'keramik';
|
||||
@@ -466,6 +479,7 @@ const site = {
|
||||
lamps,
|
||||
walls,
|
||||
props: PROPS,
|
||||
linear: LINEAR,
|
||||
stelen,
|
||||
building: BUILDING,
|
||||
neighbourBuildings: NEIGHBOUR_BUILDINGS,
|
||||
@@ -487,6 +501,7 @@ console.log(`Lose Travertinplatten 40x60: ${slabs.length}`);
|
||||
console.log(`Pflanzen ${plants.length}, Baeume ${trees.length}, Leuchten ${lamps.length}, Mauern ${walls.length}, Objekte ${PROPS.length}`);
|
||||
const bySide = {};
|
||||
for (const s of stelen) bySide[s.side] = (bySide[s.side] ?? 0) + 1;
|
||||
console.log(`Lineare Bauteile ${LINEAR.length}: ` + LINEAR.map((l) => l.kind).join(', '));
|
||||
console.log(`Travertinstelen ${stelen.length}: ` + Object.entries(bySide).map(([k, v]) => `${k} ${v} Stk auf ${STELE_HEIGHTS.find((r) => r.id === k)?.height ?? '?'} m`).join(', '));
|
||||
console.log(`Hoehenraster ${nx} x ${nz} (${CELL} m), Koten ${terrainSpots.length}`);
|
||||
const hs = Array.from(smoothed);
|
||||
|
||||
Reference in New Issue
Block a user