diff --git a/restricted/aussenplan.php b/restricted/aussenplan.php index 1c816bf..bf26f68 100644 --- a/restricted/aussenplan.php +++ b/restricted/aussenplan.php @@ -102,7 +102,39 @@ const PLAN_RAND = 12; function aussenFlaechen() { return [ - // Hier kommen die abgeklickten Flächen hinein. + ["raum" => null, "z" => 0, "hoehe" => 6, "dach" => 3, + "farbe" => "#c8cdd6", + "ecken" => [[36.8, 17.2], [39.2, 31.2], [24.2, 33.8], [21.8, 19.8]]], + ["raum" => null, "z" => 0, "hoehe" => 0, "dach" => 0, + "farbe" => "#57585a", + "ecken" => [[9.3, 26.1], [8.9, 36.4], [11.0, 36.0], [18.9, 34.7], [19.0, 29.8], [20.4, 28.7], [19.8, 25.6], [19.6, 24.3]]], + ["raum" => "Carport EG", "z" => 0, "hoehe" => 2.2, "dach" => 0, + "farbe" => "#3f4a63", + "ecken" => [[18.9, 34.7], [19.6, 38.9], [10.7, 40.5], [10.0, 36.2]]], + ["raum" => "Carport OG", "z" => 0, "hoehe" => 2.5, "dach" => 0, + "farbe" => "#6f7680", + "ecken" => [[12.2, 19.1], [13.2, 25.4], [9.3, 26.1], [8.2, 19.8]]], + ["raum" => "Veranda EG", "z" => 0, "hoehe" => 0, "dach" => 0, + "farbe" => "#9a7b52", + "ecken" => [[24.1, 19.4], [26.1, 30.8], [23.7, 31.2], [21.8, 19.8]]], + ["raum" => "Veranda OG", "z" => 3, "hoehe" => 0, "dach" => 0, + "farbe" => "#c9a978", + "ecken" => [[24.1, 19.4], [26.1, 30.8], [23.7, 31.2], [21.8, 19.8]]], + ["raum" => "Terrasse EG", "z" => 0, "hoehe" => 0, "dach" => 0, + "farbe" => "#9a7b52", + "ecken" => [[23.7, 31.2], [28.6, 30.3], [29.1, 32.9], [24.2, 33.8]]], + ["raum" => "Terrasse OG", "z" => 3, "hoehe" => 0, "dach" => 0, + "farbe" => "#c9a978", + "ecken" => [[23.7, 31.2], [28.6, 30.3], [29.1, 32.9], [24.2, 33.8]]], + ["raum" => "Pergola", "z" => 0, "hoehe" => 0, "dach" => 0, + "farbe" => "#7a6a8f", + "ecken" => [[48.0, 36.5], [43.8, 36.4], [46.0, 31.5], [49.4, 32.4]]], + ["raum" => "Garage", "z" => 0, "hoehe" => 2.5, "dach" => 1.5, + "farbe" => "#8a9099", + "ecken" => [[12.2, 19.1], [13.2, 25.4], [19.6, 24.3], [18.5, 18.0]]], + ["raum" => "Garten", "z" => 0, "hoehe" => 0, "dach" => 0, + "farbe" => "#2e5c33", + "ecken" => [[8.6, 40.8], [7.9, 45.2], [49.0, 38.2], [50.6, 12.5], [23.7, 17.1], [24.1, 19.4], [36.8, 17.2], [39.2, 31.2], [24.2, 33.8], [22.5, 23.8], [19.8, 25.6], [20.4, 28.7], [19.0, 29.8], [19.6, 38.9]]], ]; } @@ -252,16 +284,41 @@ function aussenZeichnung() $polygone[] = ["punkte" => $oben, "farbe" => $farbe]; if ($dach > 0 && count($f["ecken"]) === 4) { - // Satteldach mit First über der Mitte der beiden Schmalseiten. $e = $f["ecken"]; - $first1 = aussenPunkt($einpassung, ($e[0][0] + $e[3][0]) / 2, - ($e[0][1] + $e[3][1]) / 2, $z + $hoehe + $dach); - $first2 = aussenPunkt($einpassung, ($e[1][0] + $e[2][0]) / 2, - ($e[1][1] + $e[2][1]) / 2, $z + $hoehe + $dach); - $polygone[] = ["punkte" => [$oben[0], $oben[1], $first2, $first1], - "farbe" => $f["dachfarbe"] ?? "#b5563a"]; - $polygone[] = ["punkte" => [$oben[3], $oben[2], $first2, $first1], - "farbe" => aussenSchatten($f["dachfarbe"] ?? "#b5563a", 0.78)]; + // Der First laeuft ueber die laengere Achse - er verbindet die + // Mitten der beiden kuerzeren Seiten. Fest verdrahtet waere das + // bei einem quer stehenden Gebaeude falsch herum. + $laenge = function ($a, $b) { + return hypot($a[0] - $b[0], $a[1] - $b[1]); + }; + $langsSeite01 = $laenge($e[0], $e[1]) >= $laenge($e[1], $e[2]); + $paar = $langsSeite01 ? [[0, 3], [1, 2]] : [[0, 1], [2, 3]]; + $first = []; + foreach ($paar as $pp) { + $first[] = aussenPunkt($einpassung, + ($e[$pp[0]][0] + $e[$pp[1]][0]) / 2, + ($e[$pp[0]][1] + $e[$pp[1]][1]) / 2, + $z + $hoehe + $dach); + } + $dachfarbe = $f["dachfarbe"] ?? "#b5563a"; + // Erst die beiden Giebeldreiecke, dann die Dachflaechen darueber: + // ohne sie klaffte an den Schmalseiten ein Loch, durch das die + // Wand darunter zu sehen war. + foreach ($paar as $i => $pp) { + $polygone[] = ["punkte" => [$oben[$pp[0]], $oben[$pp[1]], $first[$i]], + "farbe" => aussenSchatten($farbe, 0.88)]; + } + if ($langsSeite01) { + $polygone[] = ["punkte" => [$oben[0], $oben[1], $first[1], $first[0]], + "farbe" => $dachfarbe]; + $polygone[] = ["punkte" => [$oben[3], $oben[2], $first[1], $first[0]], + "farbe" => aussenSchatten($dachfarbe, 0.78)]; + } else { + $polygone[] = ["punkte" => [$oben[1], $oben[2], $first[1], $first[0]], + "farbe" => $dachfarbe]; + $polygone[] = ["punkte" => [$oben[0], $oben[3], $first[1], $first[0]], + "farbe" => aussenSchatten($dachfarbe, 0.78)]; + } } $stuecke[] = ["tiefe" => $tiefe, "polygone" => $polygone,