Deploy App / deploy (push) Successful in 27s
- Weg um das Haus: der westliche Arm fehlte. Vor dem Gartentor liegt jetzt ein Podest auf -0.14 (Plan: dreimal -0.14 bis zur Suedwestecke), das an der Ecke in den Weg entlang der Suedgrenze uebergeht. Gegen die tiefer liegende Feuerwehrzufahrt schliesst ein Betonabschluss ab. - Westtreppe gedreht: die Trittlinien liegen im Plan parallel zur Rinne, die Treppe laeuft also laengs der Grenze nach Norden, vom Podest auf die Feuerwehrzufahrt (-0.14 auf -1.08). Die Zufahrt ist dort ausgespart. - Osttreppe war unter Rasen verschwunden. Unter Treppen wird das Gelaende jetzt unter die unterste Trittkante gelegt; die Treppe reicht vom Gelaender bis an die Winkelelemente. Der Belagstreifen, der sie zugedeckt hatte, ist weg. - Belaege und feste Ebenen legen das Gelaende auch ausserhalb der Zonen fest. Vorher stand am Fuss der Osttreppe ein Grashuegel ueber dem Podest. Podest und Stellplatte liegen gemeinsam auf -1.57. - Gartenschrank um 90 Grad gedreht: Rueckwand zum Beerenbeet, Doppeltueren zum Hauszugang. Dunkler gebeizt, damit er nicht mit der Fassade verschmilzt. - Schwebender Travertinblock an der Nordwestecke entfernt. - Die App oeffnet im Uebersichtsmodus. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
567 lines
26 KiB
JavaScript
567 lines
26 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 = [
|
|
{
|
|
// Vor dem Gartentor liegt ein Podest auf -0.14 (Plan: dreimal -0.14 bis
|
|
// zur Suedwestecke). Es ist der westliche Arm des Wegs um das Haus und
|
|
// geht an der Ecke in den Weg entlang der Suedgrenze ueber. Erst von hier
|
|
// fuehrt die Treppe hinunter auf die Feuerwehrzufahrt.
|
|
id: 'weg-west', level: -0.14, types: ['tegula'],
|
|
note: 'Podest vor dem Gartentor',
|
|
polygon: [[-23.40, 2.15], [-21.70, 2.15], [-21.70, 6.05], [-23.40, 6.05]],
|
|
},
|
|
{
|
|
// Die Feuerwehrzufahrt ist eine Rampe: der Plan gibt -2.08 bei z -7.21
|
|
// und -1.08 bei z 0.12 an, also rund 13.6 % Steigung. Ohne feste Vorgabe
|
|
// legt sich der Belag als schwebende Platte ueber das Gelaende.
|
|
id: 'feuerwehrzufahrt', plane: [0, 0.1364, -1.096], types: ['tegula'],
|
|
note: 'Feuerwehrzufahrt als Rampe',
|
|
polygon: [[-25.90, -13.80], [-21.90, -13.80], [-21.90, 6.60], [-25.90, 6.60]],
|
|
},
|
|
{
|
|
// Der Ostweg steigt von der Treppenkrone (-0.37 bei z -4.18) bis zur
|
|
// Suedostecke (0.63 bei z 4.31) gleichmaessig an - im Architekturplan
|
|
// steht dort "Steigung 9.9%".
|
|
id: 'weg-ost', plane: [0, 0.1178, 0.1224], types: ['tegula'],
|
|
note: 'Ostweg als Rampe',
|
|
polygon: [[2.05, -4.30], [4.55, -4.30], [4.55, 5.05], [2.05, 5.05]],
|
|
},
|
|
{
|
|
id: 'stellplatte-nordost', level: -1.57, types: ['tegula'],
|
|
note: 'Stellplatte des Nachbarn auf der Hoehe des Treppenfusses',
|
|
polygon: [[0.30, -11.30], [4.70, -11.30], [4.70, -7.25], [0.30, -7.25]],
|
|
},
|
|
{
|
|
id: 'weg-ost-unten', level: -1.57, types: ['tegula'],
|
|
note: 'Podest am Fuss der Osttreppe',
|
|
polygon: [[2.10, -7.40], [4.55, -7.40], [4.55, -6.45], [2.10, -6.45]],
|
|
},
|
|
{
|
|
// Der Weg an der Suedgrenze folgt dem Anstieg der Grenzkoten von -0.04
|
|
// im Westen auf 0.63 im Osten.
|
|
id: 'weg-sued', plane: [0.0305, 0, 0.5231], types: ['tegula'],
|
|
note: 'Weg an der Suedgrenze als Rampe',
|
|
polygon: [[-21.90, 4.45], [4.55, 4.45], [4.55, 6.05], [-21.90, 6.05]],
|
|
},
|
|
{
|
|
// Der Rasen der oberen Ebene ist eben. Die Koten 0.09 bis 0.26 liegen
|
|
// schon im angehobenen Kiesbett des Sichtschutzes, nicht mehr im Rasen -
|
|
// ohne feste Vorgabe zieht die Interpolation den Rasen huegelig hoch.
|
|
id: 'oben', level: -0.02, flatten: true,
|
|
note: 'Obere Ebene: Rasen und Kiesfeld, eben auf -0.02',
|
|
polygon: [[-18.30, 0.90], [-4.70, 0.90], [-4.70, 4.00], [-18.30, 4.00]],
|
|
},
|
|
{
|
|
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: [[4.45, -6.90], [4.45, 4.90]],
|
|
t: 0.16, top: null, base: null, retains: 'ost',
|
|
},
|
|
{
|
|
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,
|
|
},
|
|
{
|
|
// Das Podest liegt bis 0.65 m ueber der Feuerwehrzufahrt. Ohne Abschluss
|
|
// stuende dort eine Grasboeschung von einer Rasterzelle Breite.
|
|
id: 'abschluss-podest-west', type: 'beton',
|
|
note: 'Betonabschluss des Podests gegen die Feuerwehrzufahrt',
|
|
path: [[-23.42, 2.20], [-23.42, 6.00]], t: 0.16, top: -0.10, base: -1.00,
|
|
},
|
|
{
|
|
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 = [
|
|
// Der Plan reserviert 1.8 x 1.8 m fuer das Gartenhaus. Gebaut wird dort ein
|
|
// schmaler Gartenschrank: 1.80 m breit, nur 0.50 m tief, rund 2.00 m hoch,
|
|
// mit dem Ruecken zum Beerenbeet und den Tueren zum Hauszugang hin.
|
|
{ id: 'gartenschrank', type: 'gartenhaus', x: 1.215, z: -4.23, w: 0.50, d: 1.80, h: 2.00, rot: -90,
|
|
note: 'Gartenschrank 1.80 x 0.50 m, 2.00 m hoch' },
|
|
// 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,
|
|
base: -0.13, note: 'Gartentor 100 cm, Stabgitter aus Stahl, auf dem oberen Niveau' },
|
|
// 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.02, note: 'Schwebende Travertinstufe, Tritthoehe -0.02 (Kote im Plan)' },
|
|
{ id: 'stufe-unten', type: 'stufe', x: -14.880, z: -1.480, w: 0.80, d: 3.20, h: 0.08, rot: 0,
|
|
top: -0.17, note: 'Schwebende Travertinstufe, Tritthoehe -0.17 (Kote im Plan)' },
|
|
// 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, 0.35], [-23.40, 0.35], [-23.40, 6.40], [-25.60, 6.40]],
|
|
},
|
|
{
|
|
type: 'tegula',
|
|
note: 'Podest vor dem Gartentor, westlicher Arm des Wegs um das Haus',
|
|
polygon: [[-23.34, 2.20], [-21.74, 2.20], [-21.74, 5.97], [-23.34, 5.97]],
|
|
},
|
|
{
|
|
// Der Plan zeigt oestlich der Grenze einen gepflasterten Weg, erst dahinter
|
|
// beginnt die Wiese. Zwei Leuchten stehen daran.
|
|
type: 'tegula',
|
|
note: 'Weg an der Ostseite, Rampe oberhalb der Treppe (Steigung rund 12%)',
|
|
polygon: [[2.12, -4.18], [4.45, -4.18], [4.45, 4.96], [2.12, 4.96]],
|
|
},
|
|
{
|
|
type: 'tegula',
|
|
note: 'Weg an der Ostseite, Podest unterhalb der Treppe auf -1.57',
|
|
polygon: [[2.17, -7.35], [4.45, -7.35], [4.45, -6.52], [2.17, -6.52]],
|
|
},
|
|
{
|
|
// Schmaler gepflasterter Streifen jenseits der Suedgrenze, zwischen
|
|
// Grenze (z 4.49) und den Winkelelementen des Nachbarn (z 4.96).
|
|
type: 'tegula',
|
|
note: 'Weg entlang der Suedgrenze: von der Grenze bis an die Nachbarmauer gepflastert',
|
|
polygon: [[-21.74, 4.49], [4.45, 4.49], [4.45, 5.97], [-21.74, 5.97]],
|
|
},
|
|
{
|
|
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: [[3.31, -4.18], [3.31, -6.52]], width: 2.28, 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',
|
|
// Die Trittlinien liegen im Plan parallel zur Rinne, die Treppe laeuft
|
|
// also laengs der Grenze nach Norden - nicht quer von ihr weg.
|
|
note: 'Treppe und Rampe vom Podest vor dem Gartentor hinunter zur Feuerwehrzufahrt (-0.14 auf -1.08)',
|
|
path: [[-22.54, 2.20], [-22.54, 0.35]], width: 1.60, fromY: -0.14, toY: -1.08, steps: 6,
|
|
},
|
|
{
|
|
id: 'gelaender-west', kind: 'gelaender',
|
|
note: 'Gelaender an der Treppe zur Feuerwehrzufahrt',
|
|
path: [[-23.38, 2.20], [-23.38, 0.35]], fromY: -0.14, 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 Hauszugang an der Nordostfassade (x = +0.28). Der
|
|
* Situationsplan zeigt ein Eingangspodest von 1.05 + 1.13 m Tiefe, darueber
|
|
* das "Vordach (Holzbauer)".
|
|
*/
|
|
canopy: { face: 'east', a: -2.95, b: 0.75, depth: 2.20, y: 2.28, thickness: 0.16 },
|
|
/**
|
|
* Oeffnungen, abgegriffen aus den Fassadenplaenen von EHLE Architekten
|
|
* (1:100, 27.04.2021). Die Fassaden heissen dort nach Himmelsrichtung:
|
|
* Suedostfassade = z +0.96 (lang, zum Garten) -> face 'south'
|
|
* Nordostfassade = x +0.28 (kurz, Hauszugang) -> face 'east'
|
|
* Suedwestfassade = x -13.82 (kurz, zur Terrasse) -> face 'west'
|
|
* Nordwestfassade = z -6.87 (lang, zum Nachbarn) -> face 'north'
|
|
* Die Nordwestfassade ist im Plansatz nicht gezeichnet; sie steht am
|
|
* Nachbarbau und bleibt geschlossen.
|
|
*/
|
|
openings: [
|
|
// -- Suedostfassade (z = +0.96), zum Garten ---------------------------
|
|
// Erdgeschoss: das Lamellenband vor dem gedeckten Sitzplatz und die
|
|
// grosse, mittig sitzende Fensterfront.
|
|
{ face: 'south', a: -12.44, b: -9.32, sill: 0.15, head: 2.20, kind: 'slats' },
|
|
{ face: 'south', a: -8.82, b: -4.67, sill: 0.0, head: 2.19, kind: 'glass' },
|
|
// Obergeschoss: zwei Fenster aussen, dazwischen zwei schmale Lamellen.
|
|
{ face: 'south', a: -12.44, b: -9.98, sill: 3.08, head: 4.90, kind: 'window', upper: true },
|
|
{ face: 'south', a: -8.90, b: -7.67, sill: 3.30, head: 4.90, kind: 'slats', upper: true },
|
|
{ face: 'south', a: -6.55, b: -5.40, sill: 3.30, head: 4.90, kind: 'slats', upper: true },
|
|
{ face: 'south', a: -3.60, b: -1.10, sill: 3.08, head: 4.90, kind: 'window', upper: true },
|
|
|
|
// -- Nordostfassade (x = +0.28), Hauszugang ---------------------------
|
|
// Der Zugang ist ein Element aus Tuerfluegel und feststehender
|
|
// Verglasung, zusammen rund 3.15 m breit.
|
|
{ face: 'east', a: -0.65, b: 0.48, sill: 0.0, head: 2.20, kind: 'door' },
|
|
{ face: 'east', a: -2.67, b: -0.71, sill: 0.0, head: 2.20, kind: 'glass' },
|
|
{ face: 'east', a: -6.40, b: -5.54, sill: 1.19, head: 2.15, kind: 'slats' },
|
|
{ face: 'east', a: -5.93, b: -3.36, sill: 3.18, head: 4.94, kind: 'window', upper: true },
|
|
|
|
// -- Suedwestfassade (x = -13.82), zur Terrasse -----------------------
|
|
// Der grosse Ausschnitt daneben ist der gedeckte Sitzplatz selbst.
|
|
{ face: 'west', a: -5.60, b: -3.91, sill: 0.42, head: 2.01, kind: 'slats' },
|
|
{ face: 'west', a: -5.71, b: -3.07, sill: 3.17, head: 4.97, kind: 'window', upper: true },
|
|
],
|
|
};
|
|
|
|
/**
|
|
* 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], [4.55, -6.60], [4.55, 5.97], [-20.90, 5.97]],
|
|
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, 5.97], [6.00, 5.97], [6.00, 12.00], [-22.00, 12.00]],
|
|
fallback: 0.45,
|
|
},
|
|
{
|
|
id: 'ost', label: 'Wiese Ost',
|
|
polygon: [[4.55, -6.60], [9.00, -6.60], [9.00, 5.97], [4.55, 5.97]],
|
|
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 = [
|
|
// Auf der Zufahrt selbst gelten die Plankoten -2.08 (z -7.21) und -1.08
|
|
// (z 0.12); quer dazu ist sie eben, sonst entsteht eine Gelaendekante.
|
|
{ x: -25.0, z: -12.0, y: -2.75, zone: 'zufahrt' },
|
|
{ x: -25.0, z: -7.2, y: -2.08, zone: 'zufahrt' },
|
|
{ x: -25.0, z: 0.1, y: -1.08, zone: 'zufahrt' },
|
|
{ x: -25.0, z: 6.0, y: -0.28, zone: 'zufahrt' },
|
|
{ x: -22.4, z: -7.2, y: -2.08, zone: 'zufahrt' },
|
|
{ x: -22.4, z: 6.0, y: -0.28, 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' },
|
|
// Oestlich der Grenze faellt das Gelaende nach Norden zum Stellplatz des
|
|
// Nachbarn ab - die Plankoten dort lauten -0.72 und -1.57. Ohne diese
|
|
// Werte legt sich ein Huegel neben den Weg und deckt ihn zu.
|
|
{ x: 7.5, z: -6.4, y: -1.25, zone: 'ost' },
|
|
{ x: 7.5, z: -3.0, y: -0.35, zone: 'ost' },
|
|
{ x: 7.5, z: 0.0, y: 0.20, zone: 'ost' },
|
|
{ x: 7.5, z: 5.0, y: 0.75, zone: 'ost' },
|
|
{ x: 5.0, z: -6.4, y: -1.35, zone: 'ost' },
|
|
// Fuss der Osttreppe: hier liegt das Gelaende auf Hoehe des Podests, sonst
|
|
// steht neben dem Treppenfuss ein Grashuegel.
|
|
{ x: 4.70, z: -6.55, y: -1.52, zone: 'ost' },
|
|
{ x: 4.70, z: -5.40, y: -0.95, zone: 'ost' },
|
|
{ x: 3.0, z: -8.5, y: -1.55, zone: 'zollet' },
|
|
];
|
|
|
|
/** 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,
|
|
};
|