diff --git a/restricted/aussenplan.php b/restricted/aussenplan.php index 6e9c7a1..86e99a0 100644 --- a/restricted/aussenplan.php +++ b/restricted/aussenplan.php @@ -134,27 +134,30 @@ function aussenFlaechen() // Beide Carports sind Holzkonstruktionen mit Pultdach, die Module // liegen plan darauf. Der OG-Carport faellt zur Strasse ab, also nach // Westen, und ist nach Sueden offen. - ["raum" => "Carport OG", "z" => 0, "hoehe" => 2.5, "farbe" => "#b8b3aa", + // Die hohe Seite liegt im Osten und schliesst dort an die Traufe des + // 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. + ["raum" => "Carport OG", "z" => 0, "hoehe" => 2.23, "farbe" => "#b8b3aa", "dachfarbe" => "#a8a29a", "pv" => true, - "dach" => ["art" => "pult", "hoehe" => 0.8, "tief" => "W"], + "dach" => ["art" => "pult", "hoehe" => 0.27, "tief" => "W"], "offen" => ["S"], "ecken" => [[12.2, 19.2], [13.3, 25.4], [9.3, 26.1], [8.2, 19.9]]], - // Der EG-Carport faellt nach Sueden ab, ist nach Westen offen, und - // seine Nord- und Suedwand stehen nur in der hinteren Haelfte. + // Der EG-Carport faellt nach Sueden ab und ist nach Westen offen. ["raum" => "Carport EG", "z" => 0, "hoehe" => 2.2, "farbe" => "#b8b3aa", "dachfarbe" => "#a8a29a", "pv" => true, - "dach" => ["art" => "pult", "hoehe" => 0.7, "tief" => "S"], - "offen" => ["W"], "halb" => ["N", "S"], + "dach" => ["art" => "pult", "hoehe" => 0.23, "tief" => "S"], + "offen" => ["W"], "ecken" => [[19.0, 34.6], [19.3, 39.1], [10.7, 40.3], [10.4, 35.8]]], // Die Garage hat ein begruentes Dach und ihr Tor nach Sueden. Der - // First laeuft quer zu dem, was die laengere Achse nahelegen wuerde - - // bei einem fast quadratischen Grundriss entscheidet das sonst der - // Zufall der zweiten Nachkommastelle. + // First laeuft Nord-Sued, die Traufen liegen also im Osten und Westen; + // an der westlichen setzt der OG-Carport an. Ausgeschrieben, weil bei + // einem fast quadratischen Grundriss sonst die zweite Nachkommastelle + // entscheidet, welche Seite die laengere ist. ["raum" => "Garage", "z" => 0, "hoehe" => 2.5, "farbe" => "#c9ced5", "dachfarbe" => "#7d9470", "tor" => "S", - "dach" => ["art" => "sattel", "hoehe" => 1.5, "achse" => "OW"], + "dach" => ["art" => "sattel", "hoehe" => 1.5, "achse" => "NS"], "ecken" => [[12.2, 19.2], [13.3, 25.4], [19.6, 24.3], [18.5, 18.0]]], ["raum" => "Veranda EG", "z" => 0, "hoehe" => 0, "farbe" => "#aeb8c4", @@ -398,6 +401,9 @@ function aussenZeichnung() $farbe = $f["farbe"] ?? "#8a9099"; $offen = $f["offen"] ?? []; $halb = $f["halb"] ?? []; + // Wandstaerke gibt es nur, wo sie zu sehen ist - an einer Oeffnung. + // Bei einem geschlossenen Koerper waere sie Rechenarbeit fuer nichts. + $dicke = ($offen || $halb) ? ($f["dicke"] ?? 0.2) : 0.0; // --- Hoehe der Oberkante je Ecke --------------------------------- // @@ -481,16 +487,63 @@ function aussenZeichnung() } } - $wandflaeche = [ + // Eine Wand ist ein Kasten und keine Flaeche. Sichtbar wird + // die Dicke nur an einer Oeffnung - dort steht sonst ein + // Blatt Papier im Raum, und genau das sah seltsam aus. + // Innenseite, Oberkante und die beiden Schnittkanten kommen + // deshalb nur dazu, wo der Koerper ueberhaupt offen ist. + $innenVon = [$von[0] - $k["nx"] * $dicke, $von[1] - $k["ny"] * $dicke]; + $innenBis = [$bis[0] - $k["nx"] * $dicke, $bis[1] - $k["ny"] * $dicke]; + + $seiten = []; + // Aussenseite + $seiten[] = [[ aussenPunkt($einpassung, $von[0], $von[1], $z), aussenPunkt($einpassung, $bis[0], $bis[1], $z), aussenPunkt($einpassung, $bis[0], $bis[1], $zBis), aussenPunkt($einpassung, $von[0], $von[1], $zVon), - ]; - if (!aussenSichtbar($wandflaeche)) { + ], 0.72]; + if ($dicke > 0) { + // Innenseite - umgekehrter Umlauf, damit sie zaehlt, wenn + // man durch die Oeffnung hineinsieht. + $seiten[] = [[ + aussenPunkt($einpassung, $innenBis[0], $innenBis[1], $z), + aussenPunkt($einpassung, $innenVon[0], $innenVon[1], $z), + aussenPunkt($einpassung, $innenVon[0], $innenVon[1], $zVon), + aussenPunkt($einpassung, $innenBis[0], $innenBis[1], $zBis), + ], 0.60]; + // Oberkante + $seiten[] = [[ + aussenPunkt($einpassung, $von[0], $von[1], $zVon), + aussenPunkt($einpassung, $bis[0], $bis[1], $zBis), + aussenPunkt($einpassung, $innenBis[0], $innenBis[1], $zBis), + aussenPunkt($einpassung, $innenVon[0], $innenVon[1], $zVon), + ], 0.86]; + // Die beiden Schnittkanten an den Enden der Wand + $seiten[] = [[ + aussenPunkt($einpassung, $innenVon[0], $innenVon[1], $z), + aussenPunkt($einpassung, $von[0], $von[1], $z), + aussenPunkt($einpassung, $von[0], $von[1], $zVon), + aussenPunkt($einpassung, $innenVon[0], $innenVon[1], $zVon), + ], 0.84]; + $seiten[] = [[ + aussenPunkt($einpassung, $bis[0], $bis[1], $z), + aussenPunkt($einpassung, $innenBis[0], $innenBis[1], $z), + aussenPunkt($einpassung, $innenBis[0], $innenBis[1], $zBis), + aussenPunkt($einpassung, $bis[0], $bis[1], $zBis), + ], 0.84]; + } + $etwasSichtbar = false; + foreach ($seiten as $seite) { + if (aussenSichtbar($seite[0])) { + $polygone[] = ["punkte" => $seite[0], + "farbe" => aussenSchatten($farbe, $seite[1])]; + $etwasSichtbar = true; + } + } + if (!$etwasSichtbar) { continue; } - $polygone[] = ["punkte" => $wandflaeche, "farbe" => aussenSchatten($farbe, 0.72)]; // Das Tor sitzt mittig in seiner Wand und reicht nicht ganz // bis unter die Traufe.