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.
- Ziehe eine Fläche entlang zwei Schienen auf, um eine NURBS Fläche zu erhalten.
- 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.
- 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.
- Nutze "Explode Tree", um den Datenbaum aufzugliedern und die Punkte miteinander zu verbinden, um die Diagonalen eines jeden Elements zu zeichnen.
- Mit "Prune Tree" entferne die Äste mit unzureichenden Punkten, um eine NURBS Kurve mit Grad 3 zu erstellen und interpoliere die Punkte.
- 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 |
|
03. |
Surface/Freeform/Sweep2 – Ziehe eine Sweep2 Komponente auf die Leinwand |
|
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 |
|
Wir haben gerade eine NURBS Fläche erstellt.
|
|
|
08. |
Params/Geometry/Surface – Ziehe einen Surface Parameter auf die Leinwand |
|
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 |
|
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 |
|
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 |
|
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 |
|
22. |
Maths/Domain/Construct Domain2 – Ziehe eine Construct Domain2 Komponente auf die Leinwand |
|
23. |
Params/Input/Graph Mapper – Ziehe einen Graph Mapper auf die Leinwand |
|
24. |
Sets/List/List Length – Ziehe eine List Length Komponente auf die Leinwand |
|
25. |
Sets/Tree/Merge – Ziehe eine Merge Komponente auf die Leinwand |
|
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. |
|
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 |
|
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 |
|
39. |
Sets/Tree/Flip Matrix – Ziehe eine Flip Matrix Komponente auf die Leinwand |
|
40. |
Sets/Tree/Explode Tree – Ziehe eine Explode Tree Komponente auf die Leinwand |
|
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" |
|
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 |
|
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 |
|
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 |
|
52. |
Curve/Analysis/Control Points – Ziehe eine Control Points Komponente auf die Leinwand |
|
53. |
Curve/Spline/Interpolate – Ziehe eine Interpolate Komponente auf die Leinwand |
|
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 |
|
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 |
|
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. |
|
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 |
|
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 |
|
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 |
|
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