1.5.4. Arbeiten mit Datenbäumen

Beispieldateien zu diesem Abschnitt: http://grasshopperprimer.com/appendix/A-2/1_gh-files.html

In diesem Beispiel werden wir die Grasshopper Werkzeuge zur Manipulation von Datenbäumen nutzen, um Daten zu entnehmen, neu zu organisieren und zwischen den gewünschten Punkten zu interpolieren, um ein Raumtragwerk aus miteinander verschneidenden Finnen zu erstellen.

IMAGE

  1. Ziehe eine Fläche entlang zwei Schienen auf, um eine NURBS Fläche zu erhalten.
  2. Teile die Fläche in Segmente variabler Größe auf und extrahiere die Eckpunkte. Die erstellten Daten bestehen aus einer Liste mit vier Elementen je Segment.
  3. Drehe die Matrix, um die Datenstruktur zu verändern. Die Daten bestehen nun aus vier Listen mit je einem Eckpunkt pro Element in jeder Liste.
  4. Nutze "Explode Tree", um den Datenbaum aufzugliedern und die Punkte miteinander zu verbinden, um die Diagonalen eines jeden Elements zu zeichnen.
  5. Mit "Prune Tree" entferne die Äste mit unzureichenden Punkten, um eine NURBS Kurve mit Grad 3 zu erstellen und interpoliere die Punkte.
  6. Extrudiere die Kurve, um die verschneidenden Finnen zu erstellen.
01. Beginne eine neue Definition, drücke Strg+N (in Grasshopper)
02. Params/Geometry/Curve – Ziehe drei curve Parameter auf die Leinwand IMAGE
03. Surface/Freeform/Sweep2 – Ziehe eine Sweep2 Komponente auf die Leinwand IMAGE
04. Rechtsklicke den ersten Curve Parameter und wähle “Set one curve.” Wähle die erste Schienenkurve im Rhinoansichtsfenster aus
05. Rechtsklicke den zweiten Curve Parameter und wähle “Set one curve.” Wähle die zweite Schienenkurve im Rhinoansichtsfenster aus
06. Rechtsklicke auf den dritten Curve Parameter und wähle “Set one curve.” Wähle die Schnittkurve im Rhinoansichtsfenster aus
07. Verbinde den Ausgabeparameter der Curve Parameter mit den Schiene 1 (R1), Schiene 2 (R2), und Schnittkurve (S) Eingabeparameter der Sweep2 Komponente entsprechend

IMAGE

Wir haben gerade eine NURBS Fläche erstellt.

08. Params/Geometry/Surface – Ziehe einen Surface Parameter auf die Leinwand IMAGE
09. Verbinde den Brep (S) Ausgabeparameter der Sweep2 Komponente mit dem Eingabeparameter des Surface Parameter
10. Rechtsklicke auf den Surface Parameter und wähle “Reparameterize”.
In diesem Schritt bilden wir die u und v Domäne der Fläche auf eine Domäne von 0 bis 1 ab. Dies wird die zukünftigen Operationen erleichtern.
11. Maths/Domain/Divide Domain2 – Ziehe eine Divide Domain2 Komponente auf die Leinwand IMAGE
12. Params/Input/Number Slider – Ziehe zwei Number Sliders auf die Leinwand
13. Doppelklicke den ersten Number Sliders und setze die folgenden Werte:
    Rounding: Integer
    Lower Limit: 1
    Upper Limit: 40
    Value: 20
14. Setze dieselben Werte beim zweiten SliNumber Sliders
15. Verbinde den Ausgabeparameter des reparametrisierten Surface Parameters mit dem Domäne (I) Eingabeparameter der Divide Domain2 Komponente
16. Verbinde den ersten Number Sliders mit dem Anzahl U (U) Eingabeparameter der Divide Domain2 Komponente
17. Verbinde den zweiten Number Sliders mit dem Anzahl V (V) Eingabeparameter der Divide Domain2 Komponente
18. Surface/Util/Isotrim – Ziehe eine Isotrim Komponente auf die Leinwand IMAGE
19. Verbinde den Segmente (S) Ausgabaparameter der Divide Domain2 Komponente mit dem Domäne (D) Eingabeparameter der Isotrim Komponente
20. Verbinde den Ausgabeparameter des Surface Parameter mit dem Fläche (S) Eingabeparameter der Isotrim Komponente

IMAGE

Wir haben jetzt eine Fläche in kleinere, gleich große Flächen unterteilt. Passe die Anzahl U und V Schieberegler an, um die Anzahl der Teilungen zu verändern. Lass uns einen "Graph Mapper" hinzufügen, um den Segmenten eine variable Größe zu geben.

21. Maths/Domain/Deconstruct Domain2 – Ziehe eine Deconstruct Domain2 Komponente auf die Leinwand IMAGE
22. Maths/Domain/Construct Domain2 – Ziehe eine Construct Domain2 Komponente auf die Leinwand IMAGE
23. Params/Input/Graph Mapper – Ziehe einen Graph Mapper auf die Leinwand IMAGE
24. Sets/List/List Length – Ziehe eine List Length Komponente auf die Leinwand IMAGE
25. Sets/Tree/Merge – Ziehe eine Merge Komponente auf die Leinwand IMAGE
26. Sets/List/Split List – Ziehe eine Split List Komponente auf die Leinwand
Die "Merge" und "Split" Komponenten sind hier so angeordnet, dass sie denselben "Graph Mapper" für die U min und U max Werte nutzen können.
IMAGE
27. Verbinde den U min (U0) und U max (U1) Ausgabeparameter der Deconstruct Domain2 Komponente mit dem Daten 1 (D1) und Daten 2 (D2) Eingabeparameter der Merge Komponente
28. Verbinde den Ergebnis (R) Ausgabeparameter der Merge Komponente mit dem Eingabeparameter des Graph Mapper
29. Rechtsklicke auf den Graph Mapper und wähle “Bezier” unter “Graph Types”
30. Verbinde ein zweites Kabel vom U max (U1) Ausgabeparameter der Deconstruct Domain2 Komponente mit dem Liste (L) Eingabeparameter der List Length Komponente
31. Verbinde den Graph Mapper Ausgabeparameter mit dem Liste (L) Eingabeparameter der Split List Komponente
32. Verbinde den Länge (L) Ausgabeparameter der List Length Komponente mit dem Index (i) Eingabeparameter der Split List Komponente
33. Verbinde den Liste A (A) Ausgabeparameter der Split List Komponente mit dem U min (U0) Eingabeparameter der Construct Domain2 Komponente
34. Verbinde den Liste B (B) Ausgabeparameter der Split List Komponente mit dem U max (U1) Eingabeparameter der Construct Domain2 Komponente
35. Verbinde den V min (V0) Ausgabeparameter der Deconstruct Domain2 Komponente mit dem V min (V1) Eingabeparameter der Construct Domain2 Komponente
36. Verbinde den V max (V1) Ausgabeparameter der Deconstruct Domain2 Komponente mit dem V max (V1) Eingabeparameter der Construct Domain2 Komponente
37. Verbinde den 2D Domain (I2) Ausgabeparameter der Construct Domain2 Komponente mit dem Domäne (D) Eingabeparameter der Isotrim Komponente und ersetze dabei die bestehenden Verbindungen

IMAGE

Wir haben gerade die Domänen jedes Flächenelements zerlegt, die U Werte mit dem "Graph Mapper" neu abgebildet und die Domänen aus den Bestandteilen neu erstellt. Pass die Griffe der "Graph Mapper" Komponente an, um die Verteilung der Flächenelemente zu verändern. Lass uns die Datenbäume der Flächenteilung nun verändern und sehen, was passiert.

38. Surface/Analysis/Deconstruct Brep – Ziehe eine Deconstruct Brep Komponente auf die Leinwand IMAGE
39. Sets/Tree/Flip Matrix – Ziehe eine Flip Matrix Komponente auf die Leinwand IMAGE
40. Sets/Tree/Explode Tree – Ziehe eine Explode Tree Komponente auf die Leinwand IMAGE
41. Verbinde den Fläche (S) Ausgabeparameter der Isotrim Komponente mit dem Brep (B) Eingabeparameter der Deconstruct Brep Komponente
Die "Deconstruct Brep" Komponente zerlegt einen Brep in Oberflächen, Kanten und Eckpunkte. Dies ist hilfreich, wenn Du einen spezifischen Bestandteil einer Fläche bearbeiten willst.
42. Verbinde den Eckpunkte (V) Ausgabeparameter der Deconstruct Brep Komponente mit dem Daten (D) Eingabeparameter der Flip Matrix Komponente
Wir haben gerade die Datenstruktur von einer Liste mit vier Eckpunkten, die eine Fläche definieren, zu vier Listen mit je einem Eckpunkt jeder Fläche transformiert.
43. Verbinde den Daten (D) Ausgabeparameter der Flip Matrix Komponente mit dem Daten (D) Eingabeparameter der Explode Tree Komponente
44. Rechtsklicke auf die Explode Tree Komponente und wähle “Match Outputs”
45. Rechtsklicke auf den Daten (D) Eingabeparameter derExplode Tree Komponente und wähle "simplify"

IMAGE

Jeder Ausgabeparameter der "Explode Tree" Komponente enthält eine Liste mit einem Eckpunkt jeder einzelnen Fläche. In anderen Worten, eine Liste mit allen Ecken rechts oben, eine Liste mit allen Ecken rechts unten, eine Liste mit allen Ecken links unten und eine Liste mit allen Ecken links oben.

46. Curve/Primitive/Line – Ziehe eine Line Komponente auf die Leinwand IMAGE
47. Verbinde den Ast 0 {0} Ausgabeparameter der Explode Tree Komponente mit dem Startpunkt (A) Eingabeparameter der ersten Line Komponente
48. Verbinde den Ast 1 {1} Ausgabeparameter der Explode Tree Komponente mit dem Startpunkt (A) Eingabeparameter der zweiten Line Komponente
49. Verbinde den Ast 2 {2} Ausgabeparameter der Explode Tree Komponente mit dem Endpunkt (B) Eingabeparameter der ersten Line Komponente
50. Verbinde den Ast 3 {3} Ausgabeparameter der Explode Tree Komponente mit dem Endpunkt (B) Eingabeparameter der zweiten Line Komponente

IMAGE

Wir haben nun die Eckpunkte einer jeden Fläche diagonal mit Linien verbunden.

51. Curve/Util/Join Curves – Ziehe eine Join Curves Komponente auf die Leinwand IMAGE
52. Curve/Analysis/Control Points – Ziehe eine Control Points Komponente auf die Leinwand IMAGE
53. Curve/Spline/Interpolate – Ziehe eine Interpolate Komponente auf die Leinwand IMAGE
54. Verbinde den Linie (L) Ausgabeparameter jeder Line Komponente mit dem Kurven (C) Eingabeparameter der Join Curve Komponente
Halte Shift gedrückt, um mehrere Kabel mit einem Eingabeparameter zu verbinden.
55. Verbinde den Kurven (C) Ausgabeparameter der Join Curves Komponente mit dem Kurven (C) Eingabeparameter der Control Points Komponente
56. Verbinde den Punkte (P) Ausgabeparameter der Control Points Komponente mit dem Eckpunkte (V) Eingabeparameter der Interpolate Komponente

IMAGE

Wir haben nun unsere Linien zu Polylinien zusammengefügt und als NURBS Kurven neu aufgebaut, indem wir ihre Kontrollpunkte interpoliert haben. Wie Du vielleicht gemerkt hast, sind die kürzeren Kurven im Rhino Ansichtsfenster immer noch gerade Linien. Dies liegt darin begründet, dass Du eine NURBS Kurve dritten Grades nicht mit weniger als vier Kontrollpunkten erstellen kannst. Lass uns den Datenbaum anpassen, um die Listen der Kontrollpunkte mit weniger als vier Elementen zu entfernen.

57. Sets/Tree/Prune Tree – Ziehe eine Prune Tree Komponente auf die Leinwand IMAGE
58. Params/Input/Panel – Ziehe ein Paneel auf die Leinwand
59. Verbinde den Punkte (P) Ausgabeparameter der Control Points Komponente mit dem Baum (T) Eingabeparameter der Prune Tree Komponente
Wenn Du einen "Param Viewer" mit dem Punkte (P) Ausgabeparameter der "Control Points" Komponente verbindest und einen anderen mit dem Baum (T) Ausgabeparameter der "Prune Tree" Komponente, kannst Du sehen, dass die Anzahl der Äste reduziert wurde.
60. Doppelklicke auf das Panel und gebe 4 ein. IMAGE
61. Verbinde den Ausgabeparameter des Panel mit dem Minimum (N0) Eingabeparameter der Prune Tree Komponente
62. Verbinde den Baum (T) Ausgabeparameter der Prune Tree Komponente mit dem Eckpunkte (V) Eingabeparameter der Interpolate Komponente
63. Surface/Freeform/Extrude – Ziehe eine Extrude Komponente auf die Leinwand IMAGE
64. Vector/Vector/Unit Y – Ziehe eine Unit Y Komponente auf die Leinwand

Du benötigst vielleicht einen Y Einheitsvektor, je nachdem, in welcher Ortientierung Du die Geometrie in Rhino referenziert hast
IMAGE
65. Params/Input/Number Slider – Ziehe einen Number Slider auf die Leinwand
66. Doppelklicke den Number Slider und setze die folgenden Werte:
    Rounding: Integer
    Lower Limit: 1
    Upper Limit: 5
    Value: 3
67. Verbinde den Kurve (C) Ausgabeparameter der Interpolate Komponente mit dem Basis(B) Eingabeparameter der Extrude Komponente
68. Verbinde den Number Slider Ausgabeparameter mit dem Faktor (F) Eingabeparameter der Unit Y Komponente
69. Verbinde den Einheitsvektor (V) Ausgabeparameter der Unit Y Komponente mit dem Richtung(D) Eingabeparameter der Extrude Komponente

IMAGE

Du solltest nun ein Diagonalraster von Streifen oder Finnen im Rhinoansichtsfenster sehen. Passe den Faktor Schieberegler an, um die Tiefe der Finnen zu verändern

IMAGE