Nordgrenze
- Sitzmauer und Travertinmauer waren vertauscht. Der Plan zeichnet aussen,
auf der Terrasse der Nachbarn, die "Sitzmauer" (0.55 tief, rund 40 cm
hoch: Terrasse -1.77, Krone -1.35) und direkt dahinter die
"Travertinmauer", die jetzt bis auf das Niveau der Nachbarn hinunter-
reicht - sie sehen Naturstein statt Beton.
- Terrasse der Nachbarn fest auf -1.77.
- Schotterwiese (Flaechen 4 und 5) eben: quer kein Hang mehr, laengs folgt
sie der Feuerwehrzufahrt. Unter der Ligusterhecke fassen Winkelelemente
den Garten der Nachbarn, so wie der Plan sie dort beschriftet. Wiesen mit
fester Ebene werden jetzt plan gerendert statt dem Raster zu folgen.
- Eingang fuer die Nachbarn: Travertinstufe in der Luecke zwischen Hecke
und Mauer ("Stufe" im Plan), darueber ein Torbogen aus Cortenstahl mit
Kletterrose. Kein Tor.
Rundgang
- Klick auf den Boden laeuft dorthin, Ziehen dreht den Blick. Kein
Mausfang mehr.
- Weiches Anfahren und Bremsen, gedaempftes Nachfuehren bei Stufen statt
Fall-und-Aufprall, Rutschen an Hindernissen.
- Travertinmauern mit fester Krone sind begehbar; man steigt ueber die
Sitzmauer vom Sitzplatz auf den Rasen, statt springen zu muessen.
- Gartentor oeffnet sich beim Naehertreten und schliesst hinter einem, E
uebersteuert. Schwelle unter dem Tor schliesst die Luecke zum Podest.
- Blickrichtung blieb beim Wechsel Uebersicht/Rundgang nicht erhalten
(Vorzeichenfehler in yawDegrees).
- mergeGeometries loest indizierte Geometrien vorher auf.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
+50
-6
@@ -84,6 +84,21 @@ export const TREES = [
|
||||
* bleibt die Ausgleichsebene aus den Koten stehen.
|
||||
*/
|
||||
export const LEVELS = [
|
||||
{
|
||||
// Terrasse der Nachbarn: Kote -1.77 auf den Keramikplatten. Die -1.35
|
||||
// daneben ist die Krone ihrer Sitzmauer.
|
||||
id: 'zollet-terrasse', level: -1.77, flatten: true, types: ['keramik'],
|
||||
note: 'Keramikterrasse der Nachbarn',
|
||||
polygon: [[-20.12, -12.10], [-13.90, -12.10], [-13.90, -6.60], [-20.12, -6.60]],
|
||||
},
|
||||
{
|
||||
// Die Schotterwiese zwischen Grenze und Winkelelementen ist eben - quer
|
||||
// dazu kein Hang, laengs folgt sie der Feuerwehrzufahrt.
|
||||
id: 'schotterwiese', plane: [0, 0.1364, -1.096], flatten: true, types: ['schotterwiese'],
|
||||
note: 'Schotterwiese, eben neben der Feuerwehrzufahrt',
|
||||
polygon: [[-22.12, -13.60], [-19.99, -13.60], [-19.99, -7.67], [-20.52, -7.49], [-20.52, -6.70],
|
||||
[-20.02, -6.67], [-20.56, 0.45], [-21.74, 0.45], [-21.74, 0.35], [-22.12, 0.35]],
|
||||
},
|
||||
{
|
||||
// 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
|
||||
@@ -159,14 +174,35 @@ export const LEVELS = [
|
||||
*/
|
||||
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,
|
||||
// Der Plan zeichnet an der Nordgrenze zwei Baender: aussen, auf der
|
||||
// Terrasse der Nachbarn, die "Sitzmauer" (0.55 tief), direkt dahinter die
|
||||
// "Travertinmauer". Die Sitzmauer ist eine Bank fuer die Nachbarn - rund
|
||||
// 40 cm hoch (Terrasse -1.77, Krone -1.35). Die Travertinmauer dahinter
|
||||
// reicht bis auf ihr Niveau hinunter, damit sie eine Natursteinwand sehen
|
||||
// und keinen Betonblock.
|
||||
id: 'sitzmauer-nachbar', type: 'travertin',
|
||||
note: 'Sitzmauer auf der Terrasse der Nachbarn, rund 40 cm hoch',
|
||||
path: [[-18.17, -6.895], [-13.82, -6.895]], t: 0.55, top: -1.35, 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: 'travertinmauer-nord', type: 'travertin',
|
||||
note: 'Travertinmauer an der Nordgrenze, von der Terrasse der Nachbarn bis knapp ueber das Kiesbett des Gartens',
|
||||
path: [[-20.08, -6.47], [-13.82, -6.47]], t: 0.30, top: -0.08, base: -2.15,
|
||||
},
|
||||
{
|
||||
// Der Plan beschriftet auch entlang der Ligusterhecke "Winkelelemente":
|
||||
// sie fassen den Garten der Nachbarn ueber der ebenen Schotterwiese.
|
||||
id: 'winkelelemente-liguster', type: 'beton',
|
||||
note: 'Winkelelemente unter der Ligusterhecke, stuetzen den Garten der Nachbarn',
|
||||
path: [[-20.10, -13.60], [-20.10, -7.60]],
|
||||
t: 0.22, top: null, base: null, retains: 'zollet',
|
||||
},
|
||||
{
|
||||
// Die "Stufe" des Plans in der Luecke zwischen Ligusterhecke und Mauer:
|
||||
// hier betreten die Nachbarn ihren Garten von der Schotterwiese her.
|
||||
id: 'stufe-eingang-nachbar', type: 'travertin',
|
||||
note: 'Travertinstufe unter dem Torbogen zum Garten der Nachbarn',
|
||||
path: [[-20.31, -7.47], [-20.31, -6.67]], t: 0.42, top: -1.77, base: -2.20,
|
||||
},
|
||||
{
|
||||
id: 'winkelelemente-west', type: 'beton',
|
||||
@@ -234,6 +270,14 @@ export const WALLS = [
|
||||
|
||||
/** Freistehende Bauteile und Moeblierung. rot = Drehung um Y in Grad. */
|
||||
export const PROPS = [
|
||||
// Schwelle unter dem Gartentor: schliesst die Luecke zwischen der oberen
|
||||
// Torstufe und dem Podest, damit man eben durch das Tor geht.
|
||||
{ id: 'schwelle-gartentor', type: 'stufe', x: -21.60, z: 3.06, w: 0.34, d: 1.10, h: 0.08, rot: 0, top: -0.13,
|
||||
note: 'Travertinschwelle unter dem Gartentor' },
|
||||
// Kleiner Eingang fuer die Nachbarn: ein Torbogen aus Cortenstahl ueber der
|
||||
// Travertinstufe, ohne Tor. Durchgang in Site-X, der Bogen spannt laengs Z.
|
||||
{ id: 'torbogen-nachbar', type: 'torbogen', x: -20.31, z: -7.07, w: 0.84, d: 0.42, h: 1.95, rot: 90,
|
||||
base: -1.77, note: 'Torbogen zum Garten der Nachbarn' },
|
||||
// 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.
|
||||
|
||||
@@ -298,9 +298,12 @@ function levelFor(s) {
|
||||
|
||||
const flatSurfaces = [];
|
||||
for (const s of surfaces) {
|
||||
if (!FLAT_TYPES.has(s.type) || s.area < 0.4) continue;
|
||||
|
||||
// Auch eine Wiese ist eben, wenn eine feste Ebene sie ausdruecklich nennt -
|
||||
// sonst folgt ihr Netz dem Raster und zackt an den Raendern auf.
|
||||
const fixed = levelFor(s);
|
||||
const genannt = fixed?.types?.includes(s.type) && fixed.flatten;
|
||||
if ((!FLAT_TYPES.has(s.type) && !genannt) || s.area < 0.4) continue;
|
||||
|
||||
let plane, ys;
|
||||
|
||||
if (fixed) {
|
||||
@@ -395,7 +398,7 @@ for (let j = 0; j < nz; j++) {
|
||||
// aber zwischen den Zonen, und dort stand ein Grashuegel darueber.
|
||||
for (const lv of LEVELS) {
|
||||
if (!lv.flatten || !pointInPolygon(x, z, lv.polygon)) continue;
|
||||
y = lv.level;
|
||||
y = lv.plane ? lv.plane[0] * x + lv.plane[1] * z + lv.plane[2] : lv.level;
|
||||
locked[j * nx + i] = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user