Grasshopper Script

Nachdem die 3D Geometrie in Rhino geladen wurde, liegt diese noch orientierungslos an einem beliebigen Punkt im Script. Diese Geometrie hat demnach noch keine Ausrichtung. Die genaue Orientierung im 3D Scan hinterlegt, doch dieser weiß noch nicht an welcher Stelle das Objekt ausgerichtet wird. Somit war meine Aufgabe als erstes die Orientierung und Ausrichtung zu regeln. Die geladene Geometrie kann auf der X-, Y- und Z-Achse verdreht sein. Ein kleines Galapagos Script muss ausgeführt werden, welches die Geometrie um den Ursprung rotieren lässt, bis eine gewünschte Position erreicht wird. Die Rotation wird wiederum über einen Algorithmus geregelt. Das kleine Galapagos Script versucht nun die Geometrie in eine möglichst kleine Kiste, also in eine minimale Boundingbox, zu packen. Diese Kiste wiederum wird in den Ursprung, der bei Punkt 00 liegt, gesetzt. Natürlich muss die kleinste „Kiste“ nicht geometrisch eine Kiste sein, es ist die kleinste gefunden Form in die das 3D Objekt passt. Bei einer Kugel z.B. ist es ein Würfel, denn die kleinste darum gefundene Geometrie ist eine Kiste mit sechs gleichen Seiten. Um die kleinste mögliche Kiste, die immer ausgerichtet ist, zu finden, wird die Geometrie ständig gedreht. Dadurch, dass die Kiste immer ausgerichtet ist, ist lediglich eine Rotation um 180 Grad möglich. Natürlich ist auch hier wieder eine manuelle Nachbearbeitung möglich und das Objekt kann im Detail noch gedreht werden. Für die Gängigkeit des gesamten Scriptes ist es sinnvoll immer die gleiche Ausrichtung zu verwenden.
Nachdem die Orientierung und die Rotation geregelt sind sollte das Objekt in das Zentrum, den 0 Punkt, gesetzt werden. Dafür wird das Auswahl-Element aktiviert. Eine Beispielgeometrie könnte z.B. ein Schrank, Bett oder eine Küchenzeile sein. Diese Beispielgeometrien fangen immer im 0 Punkt an. Manuell könnte man den Starpunkt dieser Elemente jederzeit verschieben. Oder man bestimmt bereits bei der Auswahl der Elemente einige wichtige Punkte. So den Startpunkt und die Mindestgröße. Zum Beispiel kann ich so meinem Bett den Startpunkt ´hinten links´ geben und als minimale Größe 2m Länge, 1,50m Breite. All diese Eingabewerte nennt man Inputwerte.
Im zweiten Galapagos Script wird bestimmt, ob die Zahl des Inputwertes maximiert oder minimiert werden soll. Dafür gibt es die Möglichkeit einzelne Slider zu verschieben. In unserem Fall heißen die Slider Position und Größe. Zusätzlich zu meinen zu plazierenden Möbeln gebe ich meinem Script einen imaginären Volumenluftraum. Dieser Raum sitzt immer mittig in meinem Fahrzeug und möchte sich maximal groß ausdehnen. Wenn das Script nun gestartet wird, versucht es die optimale Position und Größe meiner Möbel zu finden und gleichzeitig einen maximalen Luftvolumenraum zu berechnen. Somit werden all meine Möbel an die Außenwände geschoben. Die Position der Möbel ist wiederum über einen Punkt definiert, welcher Galapagos bis zu einem bestimmten, vorgegebenem Wert verändern darf. Der Zentrumspunkt des Bettes wird somit stetig verändert, da das Restvolumen sich gleichzeitig ständig vergrößern möchte. Das Restvolumen wird hier nicht über einen Zentrumspunkt definiert, sondern über einen Start- und Endpunkt. Ergänzend zu erwähnen ist, dass die definierten Punkte selbstverständlich aus X, Y und Z Werten bestehen.
Abstrakt erläutert heißt das, dass in eine Kiste alle möglichen Objekte mit einer bestimmten Größe geschmissen werden und zusätzlich ein Luftballon, den ich maximal groß aufpusten möchte. Dabei kann das maximale Volumen des Luftballons das Volumen der Kiste haben. Beim aufpusten verschiebt der Luftballon die Objekte soweit wie möglich. Im Gegenzug versuchen die Objekte so nah wie möglich an ihrem Starpunkt zu bleiben. Diese abstrakte Darstellung erläutert, was das Script im Innenraum meines Fahrzeuges versucht. Hierbei ist der Luftballon mein Luftvolumenraum bzw. mein Restraum, den ich gerne möglichst groß hätte um mich im Fahrzeug bequem bewegen zu können.
Während das Scrip das alles berechnet, verschiebt es per Zufall alle möglichen Punkte so lange bis sie sich berühren. Immer wenn z.B. ein Möbel den Luftraum berührt beendet Grashopper die Berechnungen. Das Problem liegt darin, dass Galapagos eine mathematische Lösung anbietet, denn es arbeitet anhand eingegebener Zahlen. Das heißt, es muss eine mathematische Formel geschaffen werden, die alle meine Inputwerte auf eine Zahl herunterbricht. Diese Zahl muss aussagen könne, dass z.B. ein großes Volumen und ein kleiner Abstand gut ist. Zwischen diesen zwei verschiedenen Werten muss jetzt ein Verhältnis geschaffen werden, damit es auf eine Zahl runtergebrochen werden kann. Wenn beispielsweise Volumen / Abstand gerechnet wird, wird das Ergebnis in beiden Fällen größer. Um ein korrektes Verhältnis zwischen den Werten zu schaffen muss ein zusätzlicher Parameter, nämlich die Relevanz, integrieren werden. In unserem Fall teilen wir das Volumen durch den Wert 100 und nehmen das Ergebnis mal den Abstand. Dadurch bekommt der Abstand eine größere Gewichtung.
Da Grashopper auf unterschiedliche Plugins aufbaut kann es vorkommen, dass es den gewünschten Baustein nicht gibt. In meinem Fall, das Raumvolumen zwischen zwei Punkten und dafür gab es keine dynamischen Slider. Ein dynamischer Slider ist ein Slider der automatisch nicht nur seinen Wert verändert, sondern auch seine minimalen und maximalen Werte. Ein Slider ist immer ein Wert mit einer minimalen und maximalen Einstellung, bei einer Genauigkeit von z.B. 1 bis 100 in Einserschritten. Das Problem in diesem Fall ist, dass ich meine Punkte, indem die Geometrie erzeugt werden soll, nur im Fahrzeuginnenraum haben möchte. Mein X-Wert kann also zwischen einem minimalen und maximalen Punkt liegen, das heißt, dass der Slider sich automatisch selbst einstellen muss. Manuell wäre es kein Problem dem Slider einen minimalen und maximalen Wert vorzugeben, da es sich dabei aber um eine zeitintensive, aufwendige Prozedur handelt, möchte ich, dass der Slider seine Werte automatisch selbst erkennt. Dazu muss ein c# erzeugt werden. Dieses zusätzliche Script ist dafür zuständig den Slider zu verändern. Der Inputwert ist hierbei die eingespeiste Geometrie. Besonders kompliziert ist hierbei, dass einerseits der Wert des Sliders verändert werden soll und gleichzeitig ein Export-Slider entstehen soll, der diesen Wert bekommt. Somit ändern sich hierbei mit einem Slider auch andere und es ergibt sich eine Überschreibung der Slider. In meinem Fall gibt es nun zwei Input-Slider, die den minimalen und den maximalen Wert beschreiben und diese ändern dann den Export-Slider. Das bis dahin definierte Script sucht nun einen Punkt innerhalb des Punktraumes. Meine Inputwerte sind jetzt nicht mehr die Slider, sondern die Geometrie. Diese Geometrie wiederum hat X-, Y-, und Z Werte die jeweils Werte auf einem Slider sind.
Eines meiner Scripte soll nun zwei Punkte innerhalb einer Geometrie erstellen und auch das Raumvolumen wird über zwei Punkte definiert. Ein Script ist somit zuständig das Raumvolumen zu formen, das andere die Möbelstücke über einen Zentrumspunkt und eine Größe zu formen. Zusätzlich wird ein Schalter integriert, der das Volumen jederzeit wieder zurücksetzten kann. Nun war es mir möglich einen Startpunkt und eine Größe der Geometrie zu definieren, die Punkte zu verschieben und bei einer bestimmten Restgeometrie alles auf den Startpunkt zurück zu setzten. Oder wenn das Script z.B. Fehler produziert kann es problemlos zurückgesetzt werden.
Nun habe ich meine zwei selbst geschriebenen Module, die sich mit den Slidern beschäftiget und das Script welches die Position der Möbel im Auto ausrechnet erläutert. Das nächste Script entwirft ein parametrisches Möbelstück. Anhand eines Küchenunterschrankes werde ich das folgende Script erklären. Als ersten Punkt muss definiert werden welche Funktion mein Küchenschrank braucht. Der Nutzer soll hierbei die Möglichkeit haben die Funktion des Möbels selbst zu definieren. Zum Beispiel drei Schubladen, ein Regal, ein Waschbecken und eine Herdplatte. Diese Einstellungswerte sind für die Gestaltung des Schranks relevant. Die erste Abhängigkeit die sich ergibt ist, dass das ausgewählte Waschbecken automatisch einen Wassertank für frisches und benutztes Wasser benötigt, die Platz im Schrank finden müssen. Die Abhängigkeit die sich aus dem Wunsch der Herdplatte ergibt ist, dass ein Anschluss an die Batterie möglich sein muss. All diese Abhängigkeiten ändern stetig die Aufteilung des Küchenmöbels, denn die Geometrie ist bereits im ersten Script definiert. Als zusätzlichen Inputwert kann die Größe der einzelnen Elemente bestimmt werden, z.B. eine Mindestgröße der Schubladen. Ein Galapagosscript kann helfen alle Teile mit vordefinierten Maßen an die optimale Position zu bringen. Bei anderen Teilen wiederum bin ich in der Größe flexibel und so berechnet das Script unterschiedliche Varianten, von denen ich mich am Ende für eine entscheiden kann.
Das letzte Script, Script Nummer drei, ist das Export-Script. Dieses wurde zusätliche geschrieben, um das Modell in ein Schichtmodell umzuwandeln. Im Idealfall besitze ich nun 3D Geometrien, die am Ende auf 2D Daten reduziert werden müssen. Hierfür setzte ich mir dir Vorgabe meine Möbel über eine simple Steckverbindung zu produzieren. Das Exportscript wickelt die 3D Geometrien auf einer Ebene ab, sodass eine 2D Datei entsteht und weist jeder Linie einen Namen zu. Wichtig für die Fertigung auf einer Fräse am Ende ist die richtige Bezeichnung. Jede Linie muss eine Definition mit Fräsgeschwindigkeit, Fräskopf oder Frästiefe bekommen. So bedeutet beispielsweise, dass eine Umrissgeometrie die Geometrie ausschneidet und eine Schräge die Kanten und Löcher generiert.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert