Files
Gartenvisualisierung/tools/authoring.mjs
T
admGitAICDSandClaude Opus 5 ce40d6275b
Deploy App / deploy (push) Successful in 27s
Etappe E: Spielhaus als Stelzenhaus nach Plan
Der Plan zeichnet zwei Rechtecke uebereinander: Podest 1.81 x 2.70 m mit
der Kote 1.47 und darauf an der Ostseite die Huette 1.01 x 2.70 m. Bisher
stand hier ein geschlossener Kasten auf der Podestflaeche. Jetzt Stuetzen,
Podestboden auf 1.47, offene Plattform mit Bruestung im Westen, Huette mit
Pultdach im Osten und eine Leiter an der Westseite.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-10 18:06:32 +02:00

473 lines
21 KiB
JavaScript

/**
* Handgepflegte Ergaenzungen zum Plan.
*
* Der PDF-Plan liefert Flaechen, Pflanzensymbole und Hoehenkoten. Alles, was
* im Plan nur beschriftet ist (Mauerhoehen, Bauteile, Gebaeude), steht hier -
* abgeleitet aus den Planbeschriftungen, den Architekturplaenen von EHLE
* Architekten (Haus 9a, 27.04.2021) und den Fotos des Ist-Zustands.
*
* Alle Koordinaten im Site-Frame in Metern:
* X = Hausachse ENE (Peilung 61.16 deg)
* Z = senkrecht SSE (Peilung 151.16 deg)
* Y = Hoehe relativ zum Fixpunkt 0.00 = 651.17 m ue. M. (= OK FB EG Haus 9a)
*/
/** Farbe im Plan -> Belagsart. Reihenfolge egal, Zuordnung ueber Hex. */
export const SURFACE_BY_COLOR = {
'#ffffcc': 'travertin80', // Travertinplatten: grosse Felder 80x80x3, kleine Rechtecke 40x60x3
'#fcffe7': 'dekorkies', // Dekorkies-Bett; noerdlich der Grenze die Keramikterrasse Zollet
'#f8ffcc': 'travertinstell',// Travertinstellplatten-Streifen
'#eee8cc': 'travertinmauer',// Mauerkronen, Sitzmauern, schwebende Stufen
'#e5ffe5': 'rasen',
'#ccffcc': 'rasen',
'#ccff99': 'schotterwiese',
'#eeeeee': 'keramik', // Keramikplatten 60x60x2 (bauseits vorhanden)
'#bbbbbb': 'verbundstein', // Anpassung Verbundsteine Nachbar
'#ddba99': 'beet',
'#c0bab4': 'spielsand',
'#ffaa00': 'holzscheiter', // orange markiert: die beiden Holzscheiterwaende im Sichtschutz
'#ddd299': 'travertinstell',
'#73e900': 'ligusterhecke',
'#cccccc': 'winkelelement',
'#aaaaaa': 'spielhaus',
'#b29f3c': 'spielhaus',
'#80712a': 'gartenhaus',
'#335533': 'roboter',
};
/** Pflanzensymbole: Planfarbe -> Art. Radius kommt aus dem Plankreis. */
export const PLANT_BY_COLOR = {
'#00bb00': 'eibe', // Eiben `Hilli` 80/100 cm - Heckenpflanzen und ein Solitaer
'#66ff33': 'solitaer',
'#33ff99': 'solitaer',
'#cc5599': 'solitaer', // Parrotia persica, persischer Eisenholzbaum
'#99ff66': 'strauch', // Heidelbeeren / Beerenstraeucher
'#7fff00': 'gras',
'#99ff00': 'kraut',
'#cbe900': 'kraut',
'#74ff63': 'kraut',
'#e8ff64': 'kraut',
'#59b500': 'kraut',
'#0c8e2d': 'kraut',
'#00e93c': 'kraut',
'#33ff66': 'kraut',
'#339966': 'kraut',
'#00dbdd': 'kraut',
'#ccccff': 'kraut',
'#ff66cc': 'kraut',
'#7863ff': 'kraut',
};
/**
* Solitaergehoelze und Baeume. Die Kronenradien stammen aus den Plankreisen,
* die Stammhoehen sind Erfahrungswerte fuer die im Plan gezeigten Groessen.
*/
export const TREES = [
{ name: 'Solitärgehölz Sitzplatz Süd', x: -17.5, z: 1.6, crown: 1.34, height: 4.6, species: 'parrotia' },
{ name: 'Solitärgehölz Terrasse NW', x: -19.1, z: -5.5, crown: 0.67, height: 3.2, species: 'parrotia' },
{ name: 'Solitärgehölz Flammengrill', x: -4.0, z: 3.9, crown: 0.63, height: 3.0, species: 'parrotia' },
{ name: 'Apfelbaum', x: 1.69, z: 4.05, crown: 0.9, height: 3.4, species: 'apfel' },
// Nachbargarten Zollet, im Plan mitgezeichnet
{ name: 'Solitärgehölz Zollet', x: -17.6, z: -10.2, crown: 1.34, height: 4.6, species: 'parrotia', neighbour: true },
];
/**
* Die beiden Hauptebenen des Gartens.
*
* Der Garten liegt auf zwei Niveaus: der Hauptsitzplatz aus Travertinplatten
* liegt auf -0.33, dahinter steht die Travertinsitzmauer mit 31 cm Ansichtshoehe,
* und direkt hinter ihr geht es eben weiter auf -0.02 mit Rasen, Kiesfeld und
* Flammengrill. Flaechen, deren Schwerpunkt in einem dieser Bereiche liegt,
* werden exakt auf das Niveau gelegt statt aus streuenden Koten geschaetzt.
*
* Gegen Osten steigt der Garten laut Plan weiter an (0.26 bis 0.63) - dort
* bleibt die Ausgleichsebene aus den Koten stehen.
*/
export const LEVELS = [
{
id: 'unten',
level: -0.33,
note: 'Untere Ebene: Hauptsitzplatz Travertin mit Kiesstreifen und Eiben',
polygon: [
[-21.90, -6.65], [-13.75, -6.65], [-13.75, 0.90],
[-18.42, 0.90], [-18.42, 4.15], [-21.90, 4.15],
],
},
{
id: 'oben',
level: -0.02,
note: 'Obere Ebene beim Uebergang: gedeckter Sitzplatz und Rasen an der Mauer',
polygon: [[-14.00, -3.20], [-10.20, -3.20], [-10.20, 1.00], [-14.00, 1.00]],
types: ['keramik'],
},
];
/**
* Mauern, Stuetzelemente und Waende.
* `path` = Mittellinie, `t` = Dicke, `top`/`base` = Hoehe der Krone bzw. des Fusses
* (null = folgt dem Gelaende). Alle Werte aus den Planbeschriftungen und Koten.
*/
export const WALLS = [
{
id: 'travertinmauer-nord', type: 'travertin',
note: 'Travertinmauer an der Grenze zum Nachbargrundstueck Zollet; Krone auf dem Niveau der unteren Ebene, stuetzt rund 1.5 m ab',
path: [[-18.17, -6.895], [-13.82, -6.895]], t: 0.55, top: -0.33, base: -1.95,
},
{
id: 'sitzmauer-nord', type: 'travertin',
note: 'Sitzmauer 25 cm ueber der unteren Ebene (gelbe Kote "25" im Plan)',
path: [[-20.08, -6.47], [-13.82, -6.47]], t: 0.30, top: -0.08, base: -0.55,
},
{
id: 'winkelelemente-west', type: 'beton',
note: 'Winkelelemente aus Beton entlang der Westgrenze, stuetzen den Garten ueber der Feuerwehrzufahrt',
path: [[-20.12, -6.62], [-20.66, 0.51], [-21.70, 0.52], [-21.70, 2.37]],
t: 0.22, top: null, base: null, retains: 'west',
},
{
// Diese Mauer ist der Hoehensprung zwischen den beiden Ebenen: Krone
// buendig mit der oberen Ebene (-0.02), Fuss auf der unteren (-0.33).
// Ansichtshoehe damit genau 31 cm.
id: 'travertinsitzmauer-west', type: 'travertin',
note: 'Travertinsitzmauer: 31 cm Hoehensprung vom Hauptsitzplatz zum Rasen',
path: [[-18.64, 0.755], [-14.73, 0.755]], t: 0.41, top: -0.02, base: -0.55, seating: true,
},
{
id: 'travertinsitzmauer-sued', type: 'travertin',
note: 'Schenkel der Travertinsitzmauer laengs des Rasens, gleicher Hoehensprung',
path: [[-18.44, 0.55], [-18.44, 3.94]], t: 0.40, top: -0.02, base: -0.55, seating: true,
},
{
// Der Plan beschriftet die Linien an der Ostgrenze mit "Winkelelemente":
// sie stuetzen den Garten gegen den tiefer liegenden Fussweg ab.
id: 'winkelelemente-ost', type: 'beton',
note: 'Winkelelemente aus Beton an der Ostgrenze, gegen den Fussweg',
path: [[3.735, -6.90], [3.735, 4.90]],
t: 0.14, top: null, base: null, retains: 'ost',
},
{
// Der Plan beschriftet die Linie bei z 4.96 mit "Winkelelemente": sie
// fasst das hoeher liegende Nachbargrundstueck hinter dem Sichtschutz.
id: 'winkelelemente-sued', type: 'beton',
note: 'Winkelelemente aus Beton entlang der Suedgrenze',
path: [[-21.20, 4.96], [1.99, 4.96]],
t: 0.14, top: null, base: null, retains: 'sued',
},
{
id: 'betonmauer-nachbar', type: 'beton',
note: 'Bestehende Betonmauer des Suednachbarn entlang der Grenze',
path: [[-17.41, 6.07], [1.99, 6.07]], t: 0.20, top: 1.10, base: -0.60,
},
{
id: 'betonmauer-nachbar-ost', type: 'beton',
note: 'Rueckspringender Schenkel der Nachbarmauer',
path: [[2.09, 6.07], [2.09, 9.05]], t: 0.20, top: 1.10, base: -0.60,
},
// Der Plan zeigt zwei orange markierte Felder von 1.50 x 0.46 m in der
// Sichtschutzlinie; die Beschriftung "Holzscheiterwand 150 cm x 200 cm"
// steht zwischen ihnen und gilt fuer beide.
{
id: 'holzscheiterwand-west', type: 'holzscheiter',
note: 'Holzscheiterwand 150 cm breit, 200 cm hoch, hinter dem Flammengrill',
path: [[-6.08, 4.18], [-4.58, 4.18]], t: 0.46, top: 2.32, base: 0.22,
},
{
id: 'holzscheiterwand-ost', type: 'holzscheiter',
note: 'Zweite Holzscheiterwand 150 cm breit, 200 cm hoch',
path: [[-8.74, 4.18], [-7.24, 4.18]], t: 0.46, top: 2.28, base: 0.18,
},
{
id: 'stufe-nordwest', type: 'travertin',
note: 'Stufe an der Nordwestecke, vom Sitzplatz auf die Schotterwiese',
path: [[-20.90, -7.29], [-20.10, -7.29]], t: 0.42, top: -0.33, base: -0.95,
},
{
id: 'lamellenwand', type: 'lamellen',
note: 'Lamellenwand zum Sitzen: senkrechte Holzlamellen am gedeckten Sitzplatz',
path: [[-13.26, 0.91], [-8.73, 0.91]], t: 0.34, top: 2.72, base: -0.05, openSlats: true,
},
];
/** Freistehende Bauteile und Moeblierung. rot = Drehung um Y in Grad. */
export const PROPS = [
{ id: 'gartenhaus', type: 'gartenhaus', x: 1.20, z: -3.60, w: 1.8, d: 1.8, h: 2.15, rot: 0,
note: 'Standort Gartenhaus 1,8 x 1,8 m' },
// Der Plan zeichnet zwei Rechtecke: das Podest 1.81 x 2.70 m (x -0.95 bis
// 0.86) und darauf die Huette 1.01 x 2.70 m an der Ostseite (x -0.15 bis
// 0.86). Die Kote 1.47 im Podest ist die Hoehe des Bodens - ein Stelzenhaus,
// rund 0.9 m ueber dem Gelaende.
{ id: 'spielhaus', type: 'spielhaus', x: -0.045, z: 3.15, w: 1.81, d: 2.70, h: 1.90, rot: 0,
top: 1.47, note: 'Spielhaus durch Zimmermann, Podest auf 1.47' },
{ id: 'flammengrill', type: 'flammengrill', x: -6.95, z: 2.45, w: 0.7, d: 0.7, h: 0.85, rot: 0,
note: 'Flammengrill im Dekorkiesfeld' },
{ id: 'baenkli', type: 'bank', x: -20.62, z: 1.42, w: 0.50, d: 1.50, h: 0.45, rot: 90,
note: 'Baenkli aus Travertin' },
{ id: 'maehroboter', type: 'roboter', x: -17.87, z: 3.72, w: 0.75, d: 0.55, h: 0.40, rot: 0,
note: 'Garage Maehroboter' },
{ id: 'wasserhahn', type: 'wasserhahn', x: -13.90, z: -4.60, w: 0.12, d: 0.12, h: 0.85, rot: 0 },
{ id: 'schlaufschacht', type: 'schacht', x: -14.35, z: -3.95, w: 0.30, d: 0.30, h: 0.02, rot: 0,
note: 'Schlaufschacht D = 30 cm' },
// Der Torfluegel liegt im Plan bei x -21.53 und laeuft ueber z 2.56 bis 3.56.
{ id: 'gartentor', type: 'tor', x: -21.53, z: 3.06, w: 1.00, d: 0.06, h: 1.20, rot: 90,
note: 'Gartentor 100 cm, Stabgitter aus Stahl' },
// Zwei schwebende Travertinplatten fuehren vom gedeckten Sitzplatz (-0.02)
// auf den Hauptsitzplatz (-0.33). Lage und Format stehen im Plan, die
// Ausbildung als auskragende Platte zeigt das Referenzbild des Planers.
{ id: 'stufe-oben', type: 'stufe', x: -14.335, z: -1.065, w: 0.81, d: 3.25, h: 0.08, rot: 0,
top: -0.17, note: 'Schwebende Travertinstufe, Tritthoehe -0.17' },
{ id: 'stufe-unten', type: 'stufe', x: -14.880, z: -1.480, w: 0.80, d: 3.20, h: 0.08, rot: 0,
top: -0.31, note: 'Schwebende Travertinstufe, Tritthoehe -0.31' },
// Beim Gartentor liegen ebenfalls zwei schwebende Travertinstufen: der Plan
// zeichnet ein Feld 0.80 x 1.60 m mit den Koten -0.13 (Podest am Tor) und
// -0.32 (Anschluss an den Hauptsitzplatz).
{ id: 'stufe-tor-oben', type: 'stufe', x: -21.05, z: 3.35, w: 0.80, d: 0.80, h: 0.08, rot: 0,
top: -0.13, note: 'Schwebende Travertinstufe am Gartentor, Tritthoehe -0.13' },
{ id: 'stufe-tor-unten', type: 'stufe', x: -21.05, z: 2.55, w: 0.80, d: 0.80, h: 0.08, rot: 0,
top: -0.32, note: 'Schwebende Travertinstufe am Gartentor, Tritthoehe -0.32' },
];
/**
* Flaechen, die der Plan nur als weisses Raster zeigt und die deshalb bei der
* Farbklassierung durchfallen - Masse aus den Planlinien.
*/
export const EXTRA_SURFACES = [
{
type: 'keramik',
note: 'Gedeckter Sitzplatz 14.4 m2, Keramikplatten 60x60x2 cm',
polygon: [[-13.93, -3.06], [-8.73, -3.06], [-8.73, 0.86], [-13.93, 0.86]],
},
{
type: 'tegula',
note: 'Feuerwehrzufahrt und Zugangsweg westlich der Grenze, Tegula-Pflastersteine grau',
polygon: [[-25.60, -13.50], [-22.10, -13.50], [-22.10, 6.40], [-25.60, 6.40]],
},
{
// Der Plan zeigt oestlich der Grenze einen gepflasterten Weg, erst dahinter
// beginnt die Wiese. Zwei Leuchten stehen daran.
type: 'tegula',
note: 'Fussweg an der Ostseite zwischen Verbundstein-Anpassung und Winkelelementen',
polygon: [[2.86, -7.00], [3.69, -7.00], [3.69, 4.90], [2.86, 4.90]],
},
{
// Schmaler gepflasterter Streifen jenseits der Suedgrenze, zwischen
// Grenze (z 4.49) und den Winkelelementen des Nachbarn (z 4.96).
type: 'tegula',
note: 'Tegula-Streifen des Suednachbarn entlang der Grenze',
polygon: [[-21.74, 4.49], [1.99, 4.49], [1.99, 4.96], [-21.74, 4.96]],
},
{
type: 'tegula',
note: 'Stellplatte und Sitzplatz des Nachbarn im Nordosten',
polygon: [[0.40, -11.20], [4.60, -11.20], [4.60, -7.30], [0.40, -7.30]],
},
{
// Die schwebenden Stufen im Plan: eine Zwischenebene zwischen dem
// gedeckten Sitzplatz (-0.02) und dem Hauptsitzplatz (rund -0.15).
// Die Hoehensprünge zeigen sich als Sichtkanten der Belaege.
type: 'travertin80',
note: 'Schwebende Stufen (Travertin) zwischen den beiden Sitzplaetzen',
polygon: [[-15.32, -3.12], [-13.87, -3.12], [-13.87, 0.60], [-15.32, 0.60]],
},
];
/**
* Lineare Bauteile, die der Plan benennt, aber nur als Linienbuendel zeichnet:
* Treppen mit Rampe, die zugehoerigen Gelaender und die Entwaesserungsrinnen.
*
* `path` ist die Achse in Laufrichtung, `fromY`/`toY` die Hoehe an Anfang und
* Ende. Die Hoehen stammen aus den Koten beidseits des jeweiligen Bauteils.
*/
export const LINEAR = [
{
// Der Plan zeichnet acht Trittlinien bei z -4.18 bis -6.52 ueber die
// Breite x 2.17 bis 3.78; die Koten daneben lauten -0.37 und -1.57.
id: 'treppe-ost', kind: 'treppe',
note: 'Treppe und Rampe hinunter zum Stellplatz des Nachbarn (-0.37 auf -1.57)',
path: [[2.975, -4.18], [2.975, -6.52]], width: 1.61, fromY: -0.37, toY: -1.57, steps: 7,
},
{
id: 'gelaender-ost', kind: 'gelaender',
note: 'Gelaender laengs der Osttreppe',
path: [[2.17, -4.18], [2.17, -6.52]], fromY: -0.37, toY: -1.57, height: 0.95,
},
{
// Trittlinien bei x -21.94 bis -22.54 im Abstand von 20 cm, Block bis
// x -23.34; Koten -0.28 oben und -1.08 auf der Feuerwehrzufahrt.
id: 'treppe-west', kind: 'treppe',
note: 'Treppe und Rampe von der Feuerwehrzufahrt zum Gartentor (-0.28 auf -1.08)',
path: [[-21.84, 1.37], [-22.64, 1.37]], width: 1.70, fromY: -0.28, toY: -1.08, steps: 4,
},
{
id: 'gelaender-west', kind: 'gelaender',
note: 'Gelaender an der Treppe zur Feuerwehrzufahrt',
path: [[-21.84, 0.52], [-22.64, 0.52]], fromY: -0.28, toY: -1.08, height: 0.95,
},
{
id: 'rinne-gartentor', kind: 'rinne',
note: 'Entwaesserungsrinne vor dem Gartentor',
path: [[-23.34, 2.295], [-21.74, 2.295]], width: 0.15,
},
{
id: 'edelstahlrinne', kind: 'rinne',
note: 'Edelstahlrinne laengs der Fassade am Hauptsitzplatz',
path: [[-13.98, -6.55], [-13.98, -2.95]], width: 0.13,
},
];
/**
* Hoehe des Sichtschutzes. Er besteht aus aufrechten Travertinstelen
* (50 x 6 cm im Grundriss) und Eibengruppen, die sich abwechseln und
* gemeinsam in einem Dekorkiesbett stehen. Die Stelenpositionen kommen
* direkt aus dem Plan, die Hoehe haengt davon ab, wohin abgeschirmt wird:
*
* - gegen den Suednachbarn, entlang der langen Flaeche: 1.80 m
* - gegen Zollet und die Feuerwehrzufahrt, untere Ebene: 1.50 m
*/
export const STELE_HEIGHTS = [
{ id: 'sued', height: 1.80, test: (x, z) => z > 3.0 },
{ id: 'nord', height: 1.50, test: (x, z) => z < -5.0 },
{ id: 'west', height: 1.50, test: (x) => x < -19.4 },
];
/**
* Gebaeude. Das Wohnhaus 9a ist massgetreu aus dem Gartenplan uebernommen,
* die Hoehen stammen aus der Suedwest- und Nordostfassade 1:100:
* OK FB EG 651.17 -> 0.00 OK FB OG 654.07 -> +2.90
* OK Attika 657.32 -> +6.15 Nachbar Nr. 9 OK FB EG 649.47 -> -1.70
*/
export const BUILDING = {
id: 'haus-9a',
name: 'Haus 9a - Jeanine und Damian Kellenberger',
floorLevel: 0.0,
upperLevel: 2.9,
roofLevel: 6.15,
parapet: 0.35,
/**
* Aussenkante Fassade. Der Baukoerper ist im Grundriss ein Rechteck von
* 14.10 x 7.83 m; die Masse stammen aus den schwarzen Wandflaechen des
* Gartenplans (Nordostfassade z = -6.87, Suedwestfassade z = +0.96).
*/
outline: [[-13.82, -6.87], [0.28, -6.87], [0.28, 0.96], [-13.82, 0.96]],
/**
* Gedeckter Sitzplatz 14.4 m2: im Erdgeschoss zurueckspringende Nische in
* der Suedwestecke, oben vom Obergeschoss ueberdeckt.
*/
loggia: { x0: -13.82, z0: -3.06, x1: -9.06, z1: 0.96, ceiling: 2.75 },
/** Vordach ueber dem Hauseingang an der Nordostfassade (siehe Foto). */
canopy: { a: -3.20, b: 0.28, depth: 1.35, y: 2.60, thickness: 0.16 },
openings: [
// Suedwestfassade (z = 0.96 / 0.51) - grosse Fensterfronten zum Garten
{ face: 'south', a: -4.40, b: -0.20, sill: 0.0, head: 2.45, kind: 'glass' },
{ face: 'south', a: -12.90, b: -9.40, sill: 0.0, head: 2.45, kind: 'glass' },
{ face: 'south', a: -3.90, b: -0.60, sill: 3.35, head: 5.00, kind: 'glass', upper: true },
{ face: 'south', a: -12.60, b: -9.70, sill: 3.35, head: 5.00, kind: 'glass', upper: true },
// Westfassade (x = -13.82) - Fenster
{ face: 'west', a: -5.84, b: -4.24, sill: 0.85, head: 2.35, kind: 'window' },
{ face: 'west', a: -5.60, b: -4.50, sill: 3.75, head: 5.00, kind: 'window', upper: true },
// Nordostfassade (z = -6.87) - Eingang und Lamellenfenster
{ face: 'north', a: -1.90, b: -0.90, sill: 0.0, head: 2.35, kind: 'door' },
{ face: 'north', a: -5.60, b: -3.90, sill: 0.90, head: 2.35, kind: 'window' },
{ face: 'north', a: -11.60, b: -10.20, sill: 0.90, head: 2.35, kind: 'slats' },
{ face: 'north', a: -5.40, b: -4.10, sill: 3.75, head: 5.10, kind: 'window', upper: true },
{ face: 'north', a: -11.40, b: -10.40, sill: 3.75, head: 5.10, kind: 'slats', upper: true },
// Ostfassade (x = 0.28)
{ face: 'east', a: -5.60, b: -4.30, sill: 0.90, head: 2.35, kind: 'window' },
],
};
/**
* Nachbargebaeude als Kontext-Volumen. Haus 9 (Zollet) haengt am gleichen
* Baukoerper, liegt aber 1.70 m tiefer und ist gegen Nordwesten versetzt.
*/
export const NEIGHBOUR_BUILDINGS = [
{
// Gleicher Baukoerper wie 9a, gegen Nordwesten versetzt und 1.70 m tiefer.
// Die Westkante endet bei x = -13.9, damit die Keramikterrasse des
// Nachbargartens (Plan: Schwerpunkt -17.1 / -8.6) frei bleibt.
id: 'haus-9', name: 'Haus 9 - Sharon und Alan Zollet',
outline: [[-13.90, -14.70], [0.20, -14.70], [0.20, -6.87], [-13.90, -6.87]],
floorLevel: -1.70, roofLevel: 4.45,
},
];
/**
* Gelaendezonen. Innerhalb einer Zone wird zwischen den Hoehenkoten
* interpoliert; ueber Zonengrenzen hinweg nicht - dort stehen die Stuetzmauern.
*/
export const TERRAIN_ZONES = [
{
id: 'garten', label: 'Garten Kellenberger',
polygon: [[-20.90, -6.60], [3.74, -6.60], [3.74, 4.96], [-20.90, 4.96]],
fallback: -0.05,
},
{
id: 'zufahrt', label: 'Feuerwehrzufahrt / Schotterwiese West',
polygon: [[-26.00, -9.00], [-20.90, -9.00], [-20.90, 6.50], [-26.00, 6.50]],
fallback: -1.20,
},
{
id: 'zollet', label: 'Nachbargarten Zollet',
polygon: [[-24.00, -14.50], [3.00, -14.50], [3.00, -6.60], [-24.00, -6.60]],
fallback: -1.70,
},
{
// Die Grenze der Zone liegt auf den Winkelelementen bei z 4.96: dort
// faengt der Nachbar sein hoeher liegendes Terrain, dahinter steht die
// bestehende Betonmauer.
id: 'sued', label: 'Nachbargrundstück Süd',
polygon: [[-22.00, 4.96], [6.00, 4.96], [6.00, 12.00], [-22.00, 12.00]],
fallback: 0.45,
},
{
id: 'ost', label: 'Wiese Ost',
polygon: [[3.74, -6.60], [9.00, -6.60], [9.00, 4.96], [3.74, 4.96]],
fallback: 0.55,
},
];
/**
* Zusaetzliche Hoehenpunkte, die im Plan nicht als Kote stehen, fuer ein
* plausibles Gelaende aber noetig sind (Auslauf gegen die Grundstuecksraender).
*/
export const EXTRA_SPOTS = [
{ x: -24.5, z: -8.0, y: -2.60, zone: 'zufahrt' },
{ x: -24.5, z: 0.0, y: -1.60, zone: 'zufahrt' },
{ x: -24.5, z: 5.0, y: -0.60, zone: 'zufahrt' },
{ x: -22.6, z: 5.5, y: -0.30, zone: 'zufahrt' },
{ x: -20.0, z: -12.5, y: -1.75, zone: 'zollet' },
{ x: -8.0, z: -12.5, y: -1.70, zone: 'zollet' },
{ x: 2.0, z: -11.5, y: -1.65, zone: 'zollet' },
// Das Nachbargrundstueck im Sueden liegt hoeher als der Garten - genau
// deshalb stehen dort Winkelelemente und die bestehende Betonmauer. Die
// Werte setzen den Trend der Grenzkoten (-0.04 / 0.26 / 0.63) fort.
{ x: -18.0, z: 5.6, y: 0.10, zone: 'sued' },
{ x: -6.0, z: 5.6, y: 0.45, zone: 'sued' },
{ x: 4.0, z: 5.6, y: 0.85, zone: 'sued' },
{ x: -18.0, z: 9.0, y: 0.25, zone: 'sued' },
{ x: -6.0, z: 9.0, y: 0.60, zone: 'sued' },
{ x: 4.0, z: 9.0, y: 1.00, zone: 'sued' },
{ x: 7.5, z: -5.0, y: 0.10, zone: 'ost' },
{ x: 7.5, z: 0.0, y: 0.45, zone: 'ost' },
{ x: 7.5, z: 5.0, y: 0.80, zone: 'ost' },
];
/** Startposition und Blickrichtung beim Betreten der Szene. yaw = Grad ab Nord. */
export const START_VIEWS = [
{ id: 'sitzplatz', label: 'Hauptsitzplatz', x: -18.6, z: -2.6, yaw: 135, note: 'Travertinplatten 80x80x3 cm, Blick über den Sitzplatz gegen den Rasen' },
{ id: 'gedeckt', label: 'Gedeckter Sitzplatz', x: -11.0, z: -1.2, yaw: 215, note: 'Keramikplatten unter dem Obergeschoss, hinter der Lamellenwand' },
{ id: 'rasen', label: 'Rasen Süd', x: -13.0, z: 2.8, yaw: 75, note: 'Blick der Südfassade entlang zum Spielbereich' },
{ id: 'grill', label: 'Flammengrill', x: -7.8, z: 2.6, yaw: 110, note: 'Dekorkiesfeld mit Flammengrill und Holzscheiterwand' },
{ id: 'spielplatz', label: 'Spielbereich', x: -3.4, z: 1.4, yaw: 150, note: 'Spielsand, Spielhaus und Apfelbaum' },
{ id: 'eingang', label: 'Hauseingang', x: 1.3, z: -1.8, yaw: 250, note: 'Keramikplatten beim Fixpunkt 0.00' },
];
/** Standort fuer den Sonnenstand: Abtwil SG. */
export const SITE_LOCATION = {
name: 'Egglihaldenstrasse 9a, 9030 Abtwil SG',
lat: 47.4206,
lon: 9.2903,
/** Peilung der Site-X-Achse gegenueber Nord, in Grad. */
northBearingOfSiteX: 61.1615,
groundMasl: 651.17,
};