Files
Gartenvisualisierung/tools/authoring.mjs
T
admGitAICDSandClaude Opus 5 32ceba7de0
Deploy App / deploy (push) Successful in 28s
Planabgleich Etappe A bis C: Zugaenge, Rasenrandplatten, Torstufen
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>
2026-09-10 17:56:58 +02:00

460 lines
20 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' },
{ id: 'spielhaus', type: 'spielhaus', x: 0.0, z: 3.15, w: 1.8, d: 2.7, h: 2.30, rot: 0,
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.00, -6.60], [3.00, 5.95], [-20.90, 5.95]],
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,
},
{
id: 'sued', label: 'Nachbargrundstück Süd',
polygon: [[-22.00, 5.95], [6.00, 5.95], [6.00, 12.00], [-22.00, 12.00]],
fallback: -0.20,
},
{
id: 'ost', label: 'Wiese Ost',
polygon: [[3.00, -6.60], [9.00, -6.60], [9.00, 5.95], [3.00, 5.95]],
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' },
{ x: -18.0, z: 9.0, y: -0.40, zone: 'sued' },
{ x: -6.0, z: 9.0, y: 0.10, zone: 'sued' },
{ x: 4.0, z: 9.0, y: 0.60, 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,
};