Dodatek Dynamo oferuje kilka różnych metod tworzenia węzłów niestandardowych. Węzły niestandardowe można tworzyć od podstaw, z istniejącego wykresu lub bezpośrednio w języku C#. W tej części omówimy tworzenie węzła niestandardowego w interfejsie użytkownika dodatku Dynamo z istniejącego wykresu. Ta metoda jest idealna do czyszczenia obszaru roboczego, jak również do pakowania sekwencji węzłów do ponownego użycia w innym miejscu.
Na poniższej ilustracji odwzorowujemy punkt z jednej powierzchni na drugą za pomocą współrzędnych UV. Użyjemy tej koncepcji do utworzenia panelowanej powierzchni, która odwołuje się do krzywych na płaszczyźnie XY. Utworzymy tu panele czworokątne dla naszego panelowania, ale stosując tę samą logikę, możemy utworzyć szeroką gamę paneli z odwzorowaniem UV. Jest to świetna okazja do tworzenia węzłów niestandardowych, ponieważ w ten sposób łatwiej będzie powtórzyć podobny proces na tym wykresie lub w innych procesach roboczych Dynamo.
Pobierz plik przykładowy, klikając poniższe łącze.
Pełna lista plików przykładowych znajduje się w załączniku.
Zacznijmy od utworzenia wykresu, który zagnieździmy w węźle niestandardowym. W tym przykładzie utworzymy wykres, który będzie odwzorowywać wieloboki z powierzchni bazowej na powierzchnię docelową, za pomocą współrzędnych UV. Ten proces odwzorowywania UV jest często używany, przez co jest to dobra opcja dla węzła niestandardowego. Aby uzyskać więcej informacji na temat powierzchni i przestrzeni UV, zobacz stronę Powierzchnia. Pełny wykres: UVmapping_Custom-Node.dyn z pliku .zip pobranego powyżej.
Code Block: użyj tego wiersza, aby utworzyć zakres 10 liczb od -45 do 45
45..45..#10;
Point.ByCoordinates: połącz wyjście węzła Code Block z wejściami „x” i „y” oraz ustaw skratowanie na odniesienie krzyżowe. Powinna teraz istnieć siatka punktów.
Plane.ByOriginNormal: połącz wyjście „Point” z wejściem „origin”, aby utworzyć płaszczyznę w każdym z punktów. Zostanie użyty domyślny wektor normalny (0,0,1).
Rectangle.ByWidthLength: połącz płaszczyzny z poprzedniego kroku z wejściem „plane” i użyj węzła Code Block z wartością 10 w celu określenia szerokości i długości.
Powinna teraz istnieć siatka prostokątów. Odwzorujmy te prostokąty na powierzchnię docelową za pomocą współrzędnych UV.
Polygon.Points: połącz wyjście Rectangle.ByWidthLength z poprzedniego kroku z wejściem „polygon”, aby wyodrębnić punkty narożne każdego prostokąta. Są to punkty, które odwzorujemy na powierzchnię docelową.
Rectangle.ByWidthLength: użyj węzła Code Block z wartością 100, aby określić szerokość i długość prostokąta. Będzie to obwiednia powierzchni bazowej.
Surface.ByPatch: połącz węzeł Rectangle.ByWidthLength z poprzedniego kroku z wejściem „closedCurve”, aby utworzyć powierzchnię bazową.
Surface.UVParameterAtPoint: połącz wyjście „Point” węzła Polygon.Points i wyjście „Surface” węzła Surface.ByPatch, aby zwrócić parametr UV w każdym punkcie.
Teraz gdy mamy powierzchnię bazową i zbiór współrzędnych UV, możemy zaimportować powierzchnię docelową i odwzorować punkty między powierzchniami.
File Path: wybierz ścieżkę pliku dla powierzchni, którą chcesz zaimportować. Powinien to być plik typu .SAT. Kliknij przycisk „Przeglądaj” i przejdź do pliku UVmapping_srf.sat z pliku .zip pobranego powyżej.
Geometry.ImportFromSAT: połącz ścieżkę pliku, aby zaimportować powierzchnię. W podglądzie geometrii powinna być widoczna zaimportowana powierzchnia.
UV: połącz wyjście parametru UV z węzłami UV.U i UV.V.
Surface.PointAtParameter: połącz zaimportowaną powierzchnię oraz współrzędne u i v. Na powierzchni docelowej powinna być teraz widoczna siatka punktów 3D.
Ostatnią czynnością jest użycie punktów 3D do utworzenia prostokątnych płatów powierzchni.
PolyCurve.ByPoints: połącz punkty na powierzchni, aby skonstruować krzywą PolyCurve przez punkty.
Boolean: dodaj węzeł Boolean do obszaru roboczego i połącz go z wejściem „connectLastToFirst” oraz przełącz na wartość True, aby zamknąć krzywe PolyCurve. Powinny być teraz widoczne prostokąty odwzorowane na powierzchnię.
Surface.ByPatch: połącz krzywe PolyCurve z wejściem „closedCurve”, aby skonstruować płaty powierzchni.
Teraz wybierzmy węzły do zagnieżdżenia w węźle niestandardowym, uwzględniając to, jakie powinny być wejścia i wyjścia węzła. Chcemy, aby węzeł niestandardowy był możliwie najbardziej elastyczny, by umożliwiał odwzorowanie dowolnych wieloboków, a nie tylko prostokątów.
Wybierz następujące węzły (począwszy od węzła Polygon.Points), kliknij prawym przyciskiem myszy obszar roboczy i wybierz opcję „Utwórz węzeł niestandardowy”.
W oknie dialogowym Właściwości węzła niestandardowego przypisz nazwę, opis i kategorię do węzła niestandardowego.
Nazwa: MapPolygonsToSurface
Opis: odwzoruj wielokąty z powierzchni bazowej na powierzchnię docelową
Kategoria dodatków: Geometry.Curve
Węzeł niestandardowy znacznie wyczyścił obszar roboczy. Warto zauważyć, że wejścia i wyjścia zostały nazwane na podstawie oryginalnych węzłów. Zmodyfikujmy węzeł niestandardowy, zmieniając te nazwy na bardziej opisowe.
Kliknij dwukrotnie węzeł niestandardowy, aby go edytować. Spowoduje to otwarcie obszaru roboczego z żółtym tłem reprezentującym wnętrze węzła.
Węzły Input: zmień nazwy wejść na baseSurface i targetSurface.
Węzły Output: dodaj kolejne wyjście dla odwzorowanych wieloboków.
Zapisz węzeł niestandardowy i wróć do głównego obszaru roboczego. Uwaga: węzeł MapPolygonsToSurface odzwierciedla wprowadzone zmiany.
Można również zwiększyć niezawodność węzła niestandardowego przez dodanie treści w sekcji Komentarze niestandardowe. Komentarze mogą pomóc w ustaleniu typów wejść i wyjść lub objaśnieniu funkcjonalności węzła. Komentarze pojawią się, gdy użytkownik ustawi kursor na wejściu lub wyjściu węzła niestandardowego.
Kliknij dwukrotnie węzeł niestandardowy, aby go edytować. Spowoduje to ponowne otwarcie żółtego obszaru roboczego.
Rozpocznij edycję wejściowego węzła Code Block. Aby rozpocząć komentarz, wpisz „//”, a następnie wpisz tekst komentarza. Wpisz wszelkie informacje, które mogą pomóc w objaśnieniu węzła — w tym miejscu opiszemy węzeł targetSurface.
Ustawmy również domyślną wartość dla węzła inputSurface przez ustawienie typu wejścia równego wartości. W tym miejscu ustawimy wartość domyślną na oryginalny zestaw Surface.ByPatch.
Komentarze można również stosować do wyjścia.
Edytuj tekst w wyjściowym węźle węzła Code Block. Wpisz „//”, a następnie wpisz tekst komentarza. W tym miejscu objaśnimy wyjścia Polygons i surfacePatches poprzez dodanie bardziej szczegółowego opisu.
Ustaw kursor na wejściach węzła niestandardowego, aby wyświetlić komentarze.
Po ustawieniu wartości domyślnej na inputSurface można również uruchomić definicję bez wejścia powierzchni.