90% problemów w Grasshopperz wynika z niewłaściwej manipulacji drzewemi danych. Co tydzień otrzymuję wiele pytań na ten temat tego problemu, a większość z nich można łatwo rozwiązać za pomocą jednego komponentu z manu tree. Wiem, że spośród 26 komponentów nie jest łatwo wybrać ten właściwy, ale dzisiaj pokażę jeden naprawdę potężny, który może nawet zastąpić inne. Mówię o Path Mapperze. Znasz go?
Path mapper jest kozacki
Komponent Path Mapper można znaleźć w menu Set → Tree → Path Mapper. Komponent ten umożliwia wykonywanie operacji leksykalnych na drzewach danych.
Ledwo zacząłem, a już używam trudnych słów.
OK, więc…
Operacje leksykalne to logiczne odwzorowania między ścieżkami danych i indeksami, które są definiowane przez maski tekstowe. Pamiętasz maski? Pisałem o nich w poprzednim poście. Przeczytaj ten post najpierw i wróć do tego artykułu:
—> Jak używać masek w Grasshopperze <—
W uproszczeniu: Path Mapper pomaga w reorganizacji elementów w drzewach lub zmianie jego struktury .
Jeśli pracujesz na złożonych strukturach danych, musisz dość często je modifikować. W Grasshopperze możesz znaleźć kilka komponentów do tego celu. Między innymi:
- Flatten
- Graft
- Trim
- Simplifie
- Flip
Wszystkie z nich mogą być niewystarczające podczas pracy na zaawansowanych strukturach drzewa lub gdy potrzebne jest niestandardowe przegrupowanie. W wielu przypadkach użycie komponentu Path Mapper jest jedynym sposobem na znalezienie rozwiązania. Ten komponent ma również wady, ale o nich opowiem na końcu tego postu.
1. Drzewa danych w Grasshopperze
W porządku.
Zacznijmy od czegoś prostego. Umiejśćmy jeden element w konrektnej gałęzi drzewa
Wybieramy nasz komponent Path mapper i łączymy dane wyjściowe. Komponent zaczyna działać po napisaniu ścieżki źródłowej. Najłatwiejszym sposobem uzyskania tej ścieżki jest po prostu przejście do wbudowanych funkcji i utworzenie mapowania (flatten lub graft). Element zmieni kolor na zielony i zacznie działać. Teraz możemy dowolnie modyfikować naszą docelową ścieżkę np. wpisujemy tylko numer gałęzi {1;5} i element zostanie umieszczony dokładnie we wskazanej ścieżce. W ten sposób możemy dowolnie dodawać nowe gałęzie drzewa.
Przejdźmy do bardziej zaawansowanych przykładów.
Do wszystkich operacji będziemy używać naszego drzewa bazowego. To drzewo składa się z 24 punktów umieszczonych w 12 gałęziach po dwa elementy każda.
Ścieżka źródłowa jest zawsze stała i jest podawana przez drzewo wejściowe. Możesz ustawić tylko ścieżkę docelową. Klikając prawym przyciskiem myszy na komponencie, możesz znaleźć wbudowane mapowania wewnątrz Path Mapper. Zawsze używam jednego z nich, aby automatycznie znaleźć moją ścieżkę źródłową.
Sign up for free mailing and you will receive Grasshopper TIPS every week.
Join NOW – I’ll send the first secrets of Grasshopper right away!
2. Flattening
Aby wykonać operację flatten, zmieniamy naszą gałąź targetów na 0, więc wszystkie elementy zostaną umieszczone tylko w jednej gałęzi. Widać to wyraźnie w komponecie param viever poniżej, gdzie jest tylko jedna gałąź.
Możemy teraz porównać te dwa drzewa.
Nasze drzewo bazowe ma dwie ścieżki w nawiasie klamrowym, które odpowiadają dużej literze B i dużej literze A. W zwykłym nawiasie znajdują się elementy opisane małą literą i .Operacja Flatten oznacza, że zamiast ścieżki A i B będziemy mieć tylko jedną i będzie ona równa 0. Czyli wszystkie elementy zostaną zebrane i wynikiem będzie tylko jedna gałąź i 24 pozycj
3. Graft
Teraz przejdziemy do funkcji graft. W tym przypadku będziemy mieli więcej ścieżek, więc nasze źródło będzie takie samo jak w poprzednim przykładzie. Gradt oznacza dodanie jeszcze jednej ścieżki i w tym przypadku przeniesiemy punkty z poziomu elementu na poziom ścieżki, tak aby stworzyć dodatkową ścieżkę.
No dobra, spójrzmy więc na naszą pierwszą gałąź z naszego drzewa bazowego to było 0;0 i po graftawoani zmieniliśmy tę gałąź na dwie 0;0;0 i 0;0;1. Poniżej widać, że do każdej ostatniej ścieżki dodajemy 2 gałęzie.
4. Trim
Teraz przystępujemy do operacji Trim. Jak sama nazwa wskazuje, zamierzamy obciąć niektóre gałęzie. W tym przykładzie usuniemy ścieżkę B, czyli ostatnią ścieżkę w naszym drzewie. Nie oznacza to, że usuniemy wszystkie elementy ze ścieżki B. Wszystkie te elementy zostaną przeniesione na poziom elementów (i).
Innymi słowy…
połączymy wszystkie gałęzie, które na początku mają ten sam numer. W naszym przykładzie 0;0, 0;1 i 0;2 zostaną połączone. Dlatego w tej gałęzi otrzymamy 6 elementów. Aby lepiej to zobaczyć, spójrz na zdjęcie poniżej. Jak widać nadal mamy 24 punkty, nic nie usunęliśmy, ale zamiast 12 gałęzi mamy tylko cztery
5. Patch index
Istnieje zestaw stałych, które pomagają w mapowaniu, na przykład indeks ścieżki (Patch index). Możemy użyć tej stałej, jeśli chcemy, aby zmieniały się tylko nazwy gałęzi, a elementy danych pozostały na tych samych gałęziach, tylko maska zostanie zmieniona. Da nam to możliwość wyodrębnienia ilości gałęzi ze źródła i konwersji tej samej ilości gałęzi docelowych. W tym przypadku cała struktura wraz z pozycjami i gałęziami zostaje przeniesiona do gałęzi docelowych.
Czyli w rezultacie zawsze otrzymamy gałęzie w sekwencji od 0 do liczby gałęzi -1. Elementy pozostają w tej samej pozycji
6. Patch count
Kolejna stała to liczba ścieżek (Patch count). Istnieje również możliwość powiązania liczby pozycji lub oddziałów z numerem indeksu oddziału docelowego. Na przykład, gdy gałąź źródłowa jest zdefiniowana jako A i B, a gałąź docelowa jako połowa liczby, końcowa nazwa gałęzi będzie w naszym przypadku 12, ponieważ w naszym przykładzie jest 12 gałęzi. Innymi słowy, liczba ścieżek jest wartością stałą i opisuje ilość gałęzi w drzewie.
7. Item count
Podobną opcją do liczby ścieżek jest stała liczba elementów (Item count). Spowoduje to zdefiniowanie liczby na podstawie liczby pozycji elementów. Możesz użyć tej stałej do wykonania operacji odwracania (reverse) i odwróć wszystkie elementy w swoim drzewie.
W ścieżce docelowej wpisz item_count minus 1 minus i (zobacz zdjęcie poniżej)
Praca domowa - Grasshopper drzewa danych
Teraz mam dla ciebie ćwiczenie! Pokazałem, jak wykonać odwrotną operację na elementach za pomocą komponentu path mapper. Ale jak odwrócisz elementy wewnątrz gałęzi? Napisz swoje rozwiązanie w komentarzach lub wyślij je na mój mail [email protected]
8. Flip matrix
Komponent Flip matrix działa dobrze tylko z dwuwymiarową macierzą. W przypadku większej ilości gałęzi wyskoczy nam błąd. Do bardziej zaawansowanych struktur danych path mapper nadaje się idealnie. Możesz mieć tyle ścieżek, ile chcesz i możesz łatwo przełączać się między nimi.
Podsumowanie mapowania ścieżki w strukturze drzewa danych Grasshopper
Komponent Path Mapper umożliwia reorganizację struktury gałęzi poprzez zmianę nazwy oryginalnej ścieżki gałęzi i indeksowanie elementów do nowej ścieżki docelowej.
Istnieje jednak jedna wielka wada używania tego komponentu. Jeśli nastąpi jakakolwiek zmiana w drzewie źródłowym, komponent przestanie działać. Każda operacja uproszczenia drzewa lub też jego rozbudowanie zablokuje nam ten komponent. Dlatego musisz być bardzo precyzyjny we wszystkich zmianach w skrypcie i mieć świadomość struktury danych.
Jaka jest Twoja opinia o Path Mapperze? Używasz go do pracy ze skomplikowanymi strukturami drzew?
Napisz w komentarzu poniżej, jak pracujesz ze strukturami drzewa danych w Grasshopperze.
Masz jakieś pytania odnośnie Grasshoppera albo Rhino?
Napisz do mnie [email protected]
Zawsze odpowiadam !!
Sprawdź więcej moich porad w Grasshopperze:
5 trików w Grasshopperze na pozbycie się potwora spaghetti
5 trików w Grasshopperze usprawniających współpracę5
Jak używać masek w Grasshopperze?
Jeśli chcesz uzyskać więcej informacji o Grasshopper ze i nauczyć się modelowania parametrycznego, pobierz bezpłatny przewodnik – Pobierz bezpłatnie