PV aufs Haus, Dachdicke fuer die Carports, Sonnensegel auf zwei Meter

Auf dem OG-Carport liegt keine Anlage - die Module gehoeren aufs Hausdach.
Dafuer kann der Zeichner jetzt auch Module auf einer Dachschraege und nicht
nur auf einer waagrechten Deckflaeche: "pv" nimmt eine Himmelsrichtung. Auf
dem Haus ist es die Suedschraege, und weil die Wiederkehr danach gezeichnet
wird, deckt sie die Mitte ab - genau wie auf dem Luftbild, wo die Module
links und rechts von ihr liegen. Eingezogen wird dort im Bild und nicht in
Metern: die Schraege ist schon projiziert, und auf ihrer Ebene bleibt ein
Einzug auch nach der Projektion ein Einzug.

Die Carportdaecher haben eine Dicke, mit 30 cm etwas mehr als die 20 cm der
Waende. Das brauchte zwingend einen Ueberstand: buendig aufliegend sind
Stirnflaeche und Wandflaeche deckungsgleich, die Dicke waere gerechnet und
trotzdem unsichtbar. Genau daher kam auch der Eindruck, dem OG-Carport fehle
die Westwand - sie war die ganze Zeit da und wurde auch gezeichnet, sie hatte
nur keine Kante, an der sie aufgehoert haette. Mit 25 cm Ueberstand steht sie
jetzt sichtbar unter dem Dach.

Die Pergola ist ein Sonnensegel: eine Bahn Tuch auf zwei Metern, heller und
ohne Bauwerk darunter. Dass sie zu schweben scheint, ist richtig so - die
Masten waeren bei diesem Massstab duenner als ein Strich.

Der Hof laeuft vor dem EG-Carport gerade bis an den Garten weiter; der
Carport steht damit auf ihm. Seine suedliche Kante sind dieselben beiden
Punkte, die auch im Gartenumriss stehen.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-04 20:57:55 +02:00
co-authored by Claude Opus 5
parent 8119645123
commit 1c80ec588e
+60 -13
View File
@@ -107,14 +107,21 @@ function aussenFlaechen()
[24.3, 19.5], [36.8, 17.2], [39.2, 31.2], [24.2, 33.8], [22.7, 24.2], [24.3, 19.5], [36.8, 17.2], [39.2, 31.2], [24.2, 33.8], [22.7, 24.2],
[19.9, 25.6], [20.2, 28.7], [19.0, 29.8], [19.3, 39.1]]], [19.9, 25.6], [20.2, 28.7], [19.0, 29.8], [19.3, 39.1]]],
// Der Hof laeuft vor dem EG-Carport gerade bis an den Garten weiter;
// der Carport steht also auf ihm. Die suedliche Kante ist die
// Gartengrenze - dieselben beiden Punkte stehen dort im Umriss.
["raum" => null, "z" => 0, "hoehe" => 0, "farbe" => "#6e7278", // Hof ["raum" => null, "z" => 0, "hoehe" => 0, "farbe" => "#6e7278", // Hof
"ecken" => [[9.3, 26.1], [8.9, 36.4], [11.0, 36.0], [18.9, 34.7], [19.0, 29.8], "ecken" => [[9.3, 26.1], [8.9, 36.4], [8.6, 40.6], [19.3, 39.1], [18.9, 34.7],
[20.4, 28.7], [19.8, 25.6], [19.6, 24.3]]], [19.0, 29.8], [20.4, 28.7], [19.8, 25.6], [19.6, 24.3]]],
// Das Haus. First ueber die laengere Achse, also Ost-West - so liegt // Das Haus. First ueber die laengere Achse, also Ost-West - so liegt
// er auch auf dem Luftbild. // er auch auf dem Luftbild.
// Die Anlage liegt auf der Suedschraege. Die Wiederkehr wird danach
// gezeichnet und deckt die Mitte ab - genau wie auf dem Luftbild, wo
// die Module links und rechts von ihr liegen.
["raum" => null, "z" => 0, "hoehe" => 6, "farbe" => "#d5d9df", ["raum" => null, "z" => 0, "hoehe" => 6, "farbe" => "#d5d9df",
"dachfarbe" => "#9aa3ad", "dach" => ["art" => "sattel", "hoehe" => 3], "dachfarbe" => "#9aa3ad", "dach" => ["art" => "sattel", "hoehe" => 3],
"pv" => "S",
"ecken" => [[36.8, 17.2], [39.2, 31.2], [24.2, 33.8], [21.8, 19.8]]], "ecken" => [[36.8, 17.2], [39.2, 31.2], [24.2, 33.8], [21.8, 19.8]]],
// Wiederkehr auf der Suedseite: ein Kreuzgiebel quer zum Hauptfirst. // Wiederkehr auf der Suedseite: ein Kreuzgiebel quer zum Hauptfirst.
@@ -138,14 +145,14 @@ function aussenFlaechen()
// Garagendachs an - deshalb 2,23 + 0,27 und nicht glatt 2,5: die // Garagendachs an - deshalb 2,23 + 0,27 und nicht glatt 2,5: die
// Oberkante der hohen Seite soll die 2,5 treffen, nicht die Wand. // Oberkante der hohen Seite soll die 2,5 treffen, nicht die Wand.
["raum" => "Carport OG", "z" => 0, "hoehe" => 2.23, "farbe" => "#b8b3aa", ["raum" => "Carport OG", "z" => 0, "hoehe" => 2.23, "farbe" => "#b8b3aa",
"dachfarbe" => "#a8a29a", "pv" => true, "dachfarbe" => "#a8a29a", "dachdicke" => 0.3,
"dach" => ["art" => "pult", "hoehe" => 0.27, "tief" => "W"], "dach" => ["art" => "pult", "hoehe" => 0.27, "tief" => "W"],
"offen" => ["S"], "offen" => ["S"],
"ecken" => [[12.2, 19.2], [13.3, 25.4], [9.3, 26.1], [8.2, 19.9]]], "ecken" => [[12.2, 19.2], [13.3, 25.4], [9.3, 26.1], [8.2, 19.9]]],
// Der EG-Carport faellt nach Sueden ab und ist nach Westen offen. // Der EG-Carport faellt nach Sueden ab und ist nach Westen offen.
["raum" => "Carport EG", "z" => 0, "hoehe" => 2.2, "farbe" => "#b8b3aa", ["raum" => "Carport EG", "z" => 0, "hoehe" => 2.2, "farbe" => "#b8b3aa",
"dachfarbe" => "#a8a29a", "pv" => true, "dachfarbe" => "#a8a29a", "pv" => true, "dachdicke" => 0.3,
"dach" => ["art" => "pult", "hoehe" => 0.23, "tief" => "S"], "dach" => ["art" => "pult", "hoehe" => 0.23, "tief" => "S"],
"offen" => ["W"], "offen" => ["W"],
"ecken" => [[19.0, 34.6], [19.3, 39.1], [10.7, 40.3], [10.4, 35.8]]], "ecken" => [[19.0, 34.6], [19.3, 39.1], [10.7, 40.3], [10.4, 35.8]]],
@@ -170,7 +177,10 @@ function aussenFlaechen()
["raum" => "Terrasse OG", "z" => 3, "hoehe" => 0, "farbe" => "#c3cbd5", ["raum" => "Terrasse OG", "z" => 3, "hoehe" => 0, "farbe" => "#c3cbd5",
"ecken" => [[23.8, 31.1], [28.3, 30.4], [29.0, 33.0], [24.2, 33.8]]], "ecken" => [[23.8, 31.1], [28.3, 30.4], [29.0, 33.0], [24.2, 33.8]]],
["raum" => "Pergola", "z" => 0, "hoehe" => 0, "farbe" => "#9aa3ad", // Ein Sonnensegel, kein Bauwerk: eine Bahn Tuch auf zwei Metern. Dass
// sie ohne Sichtbares darunter schwebt, ist richtig so - die Masten
// sind duenner als ein Strich bei diesem Massstab.
["raum" => "Pergola", "z" => 2, "hoehe" => 0, "farbe" => "#c6cbd2",
"ecken" => [[48.0, 36.5], [43.8, 36.4], [46.0, 31.5], [49.4, 32.4]]], "ecken" => [[48.0, 36.5], [43.8, 36.4], [46.0, 31.5], [49.4, 32.4]]],
]; ];
} }
@@ -632,22 +642,59 @@ function aussenZeichnung()
$polygone[] = ["punkte" => $schraege, $polygone[] = ["punkte" => $schraege,
"farbe" => aussenSchatten($f["dachfarbe"] ?? "#9aa3ad", "farbe" => aussenSchatten($f["dachfarbe"] ?? "#9aa3ad",
$r === "S" || $r === "W" ? 1.0 : 0.82)]; $r === "S" || $r === "W" ? 1.0 : 0.82)];
// Module auf genau dieser Schraege. Eingezogen wird hier
// im Bild und nicht in Metern: die Flaeche ist schon
// projiziert, und auf ihrer Ebene bleibt der Einzug auch
// nach der Projektion ein Einzug.
if (($f["pv"] ?? null) === $r) {
$polygone[] = ["punkte" => aussenEinzug($schraege, 4.0),
"farbe" => "#2f3a49"];
}
} }
} }
$deck = null; $deck = null;
} else { } else {
// Flach, Pult oder gar kein Dach: die Oberseite ist die Deckflaeche. // Flach, Pult oder gar kein Dach: die Oberseite ist die Deckflaeche.
$polygone[] = ["punkte" => $oben, "farbe" => $f["dachfarbe"] ?? $farbe]; //
$deck = $oben; // Eine Dachdicke braucht zwingend einen Ueberstand. Liegt das Dach
// buendig auf der Wand, sind Stirnflaeche und Wandflaeche
// deckungsgleich - die Dicke waere gerechnet und trotzdem nicht zu
// sehen, und der Koerper saehe aus, als fehle ihm eine Wand.
$dachdicke = $f["dachdicke"] ?? 0;
$dachEcken = $dachdicke > 0
? aussenEinzug($ecken, -($f["ueberstand"] ?? 0.25))
: $ecken;
$deckPunkte = [];
foreach ($dachEcken as $i => $pkt) {
$deckPunkte[] = aussenPunkt($einpassung, $pkt[0], $pkt[1], $zOben[$i]);
}
if ($dachdicke > 0) {
foreach ($dachEcken as $i => $pkt) {
$j = ($i + 1) % count($dachEcken);
$stirn = [
aussenPunkt($einpassung, $pkt[0], $pkt[1], $zOben[$i] - $dachdicke),
aussenPunkt($einpassung, $dachEcken[$j][0], $dachEcken[$j][1],
$zOben[$j] - $dachdicke),
aussenPunkt($einpassung, $dachEcken[$j][0], $dachEcken[$j][1], $zOben[$j]),
aussenPunkt($einpassung, $pkt[0], $pkt[1], $zOben[$i]),
];
if (aussenSichtbar($stirn)) {
$polygone[] = ["punkte" => $stirn,
"farbe" => aussenSchatten($f["dachfarbe"] ?? $farbe, 0.78)];
}
}
}
$polygone[] = ["punkte" => $deckPunkte, "farbe" => $f["dachfarbe"] ?? $farbe];
$deck = $dachEcken;
} }
// Die Module liegen plan auf der Dachflaeche - ein Stueck eingezogen, // Module auf einer flachen oder geneigten Deckflaeche - ein Stueck
// damit der Rand des Daches sichtbar bleibt. // eingezogen, damit der Rand des Daches sichtbar bleibt.
if (!empty($f["pv"]) && $deck) { if (!empty($f["pv"]) && $f["pv"] === true && $deck) {
$modulEcken = aussenEinzug($ecken, 0.4); $modulEcken = aussenEinzug($deck, 0.4);
$modul = []; $modul = [];
foreach ($modulEcken as $i => $p) { foreach ($modulEcken as $i => $pkt) {
$modul[] = aussenPunkt($einpassung, $p[0], $p[1], $zOben[$i] + 0.05); $modul[] = aussenPunkt($einpassung, $pkt[0], $pkt[1], $zOben[$i] + 0.05);
} }
$polygone[] = ["punkte" => $modul, "farbe" => "#2f3a49"]; $polygone[] = ["punkte" => $modul, "farbe" => "#2f3a49"];
} }