Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Dynamo to aplikacja do programowania wizualnego, którą można pobrać i uruchomić w samodzielnym trybie „piaskownicy” (odizolowanym) lub jako wtyczkę do innego oprogramowania, takiego jak Revit, FormIt lub Civil 3D.
Dowiedz się więcej na temat różnicy między Dynamo Core/Revit/Sandbox.
Dodatek Dynamo umożliwia pracę w procesie programowania wizualnego, w którym łączy się elementy, aby zdefiniować zależności i sekwencje działań składających się na algorytmy niestandardowe. Algorytmów można używać do tworzenia szerokiej gamy aplikacji — od przetwarzania danych po generowanie geometrii — wszystko to w czasie rzeczywistym i bez pisania jakiegokolwiek kodu (code
).
Węzły i przewody są kluczowymi komponentami dodatku Dynamo, które obsługują proces programowania wizualnego. Pomaga to w tworzeniu silnych powiązań wizualnych i systemowych między częściami projektu. Za pomocą prostego kliknięcia myszą można łatwo połączyć węzły podczas opracowywania i optymalizowania procesu roboczego projektowania.
Od programowania wizualnego do obsługi procesów projektowych po opracowywanie niestandardowych narzędzi — dodatek Dynamo stanowi nieodłączną część szerokiej gamy niezwykłych zastosowań.
Obserwuj tablicę dodatku Dynamo w działaniu w serwisie Pinterest.
Interfejs użytkownika (UI) aplikacji Dynamo jest podzielony na pięć głównych regionów. Krótko je tutaj omówimy i objaśnimy dokładniej obszar roboczy oraz bibliotekę w kolejnych sekcjach.
Menu
Pasek narzędzi
Biblioteka
Obszar roboczy
Pasek uruchamiania
Tutaj znajdują się menu podstawowych funkcji aplikacji Dynamo. Podobnie jak w większości programów systemu Windows, operacje związane z zarządzaniem plikami i dotyczące wyboru oraz edycji elementów znajdują się w dwóch pierwszych menu. Pozostałe menu są bardziej specyficzne dla dodatku Dynamo.
Ogólne informacje i ustawienia można znaleźć w menu rozwijanym aplikacji Dynamo.
Informacje — dowiedz się, jaka wersja aplikacji Dynamo jest zainstalowana na komputerze.
Umowa dotycząca gromadzenia danych o użytkowaniu — umożliwia to zaakceptowanie lub odrzucenie opcji udostępniania danych użytkownika w celu ulepszenia aplikacji Dynamo.
Preferencje — zawiera ustawienia, takie jak dokładność dziesiętna i jakość renderingu geometrii w aplikacji.
Zakończ dodatek Dynamo
Jeśli nie wiesz, co zrobić dalej, skorzystaj z menu Pomoc. Możesz odwiedzić jedną z informacyjnych witryn internetowych dotyczących aplikacji Dynamo za pośrednictwem przeglądarki internetowej.
Pierwsze kroki — krótkie wprowadzenie do korzystania z dodatku Dynamo.
Interaktywne podręczniki —
Przykłady — informacyjne pliki przykładowe.
Słownik Dynamo — zasoby z dokumentacją dla wszystkich węzłów.
Witryna Dynamo — wyświetl projekt Dynamo w serwisie GitHub.
Witryna wiki Dynamo — odwiedź witrynę wiki, aby dowiedzieć się więcej na temat opracowywania rozwiązań za pomocą interfejsu API Dynamo, obsługi bibliotek i narzędzi.
Wyświetl stronę startową — wróć do strony startowej dodatku Dynamo z poziomu dokumentu.
Zgłoś błąd — zgłoś problem w serwisie GitHub.
Pasek narzędzi Dynamo zawiera szereg przycisków umożliwiających szybki dostęp do plików oraz polecenia Cofnij [Ctrl+Z] i Ponów [Ctrl+Y]. Po skrajnej prawej stronie znajduje się kolejny przycisk, który umożliwia wyeksportowanie migawki obszaru roboczego. Jest on wyjątkowo przydatny do tworzenia dokumentacji i udostępniania.
Biblioteka Dynamo jest kolekcją bibliotek funkcjonalnych, z których każda zawiera węzły pogrupowane według kategorii. Składa się ona z bibliotek podstawowych dodawanych podczas domyślnej instalacji aplikacji Dynamo. W miarę objaśniania korzystania z niej będziemy demonstrować, jak rozszerzyć funkcje podstawowe za pomocą węzłów niestandardowych i dodatkowych pakietów. W sekcji Biblioteka przedstawimy bardziej szczegółowe wskazówki dotyczące korzystania z niej.
W obszarze roboczym tworzymy programy wizualne. Można również zmienić odpowiednie ustawienie podglądu, aby wyświetlać tu geometrie 3D. Aby uzyskać więcej informacji, zobacz Obszar roboczy.
Tutaj uruchamia się skrypty Dynamo. Kliknij ikonę listy rozwijanej na przycisku wykonywania, aby przełączać się między trybami.
Automatycznie: uruchamia skrypt automatycznie. Zmiany są aktualizowane w czasie rzeczywistym.
Ręcznie: skrypt jest uruchamiany tylko po kliknięciu przycisku Uruchom. Ta opcja jest przydatna przy wprowadzaniu zmian w złożonym, „intensywnym” skrypcie.
Okresowy: ta opcja jest domyślnie wyszarzona. Jest dostępna tylko wtedy, gdy używany jest węzeł DateTime.Now. Wykres można skonfigurować tak, aby był uruchamiany automatycznie w określonych odstępach czasu.
Biblioteka zawiera wszystkie wczytane węzły, w tym dziesięć domyślnych kategorii węzłów dołączonych do instalacji oraz dodatkowo wczytane węzły niestandardowe lub pakiety. Węzły w bibliotece są zorganizowane hierarchicznie w obrębie bibliotek, kategorii i, w razie potrzeby, podkategorii.
Węzły podstawowe: dostarczane z instalacją domyślną.
Węzły niestandardowe: zapisz często używane procedury lub wykres specjalny jako węzły niestandardowe. Węzły niestandardowe można również udostępniać społeczności
Węzły z aplikacji Package Manager: kolekcja opublikowanych węzłów niestandardowych.
Przeglądanie tych kategorii jest najszybszym sposobem zrozumienia hierarchii tego, co można dodać do obszaru roboczego, a także najlepszym sposobem odnajdowania nowych węzłów, których wcześniej nie używano.
Przeglądaj bibliotekę, klikając poszczególne menu, aby rozwijać kategorie i ich podkategorie
Geometria to świetne menu, które doskonale nadają się do rozpoczęcia przeglądania, ponieważ zawierają największą liczbę węzłów.
Biblioteka
Kategoria
Podkategoria
Węzeł
Zapewnia to dodatkowe skategoryzowanie węzłów należących do tej samej podkategorii w zależności od tego, czy węzły tworzą dane, wykonują operacje, czy wysyłają zapytania dotyczące danych.
Umieść wskaźnik myszy na węźle, aby wyświetlić informacje bardziej szczegółowe od jego nazwy i ikony. Dzięki temu można szybko zrozumieć, do czego służy węzeł, jakich wejść wymaga i jakie będą jego dane wyjściowe.
Opis — prosty opis węzła
Ikona — większa wersja ikony w menu Biblioteka
Wejścia — nazwa, typ danych i struktura danych
Wyjścia — typ danych i struktura
Jeśli dosyć dobrze wiadomo, jaki węzeł ma zostać dodany do obszaru roboczego, wpisz w polu Wyszukaj nazwę węzła, aby wyszukać wszystkie pasujące węzły.
Wybierz, klikając węzeł, który chcesz dodać, lub naciśnij klawisz Enter, aby dodać wyróżnione węzły do środka obszaru roboczego.
Podczas wyszukiwania węzłów oprócz słów kluczowych można wpisywać hierarchię, oddzielając jej elementy kropkami w polu wyszukiwania. Można tak również robić w węzłach Code Block (w których jest używany język tekstowy dodatku Dynamo).
Hierarchia każdej biblioteki jest odzwierciedlona w nazwach węzłów dodawanych do obszaru roboczego.
Wpisanie różnych części miejsca węzła w hierarchii biblioteki w formacie library.category.nodeName
zwraca różne wyniki:
library.category.nodeName
category.nodeName
nodeName
lub keyword
Zazwyczaj nazwa węzła w obszarze roboczym jest renderowana w formacie category.nodeName
, z pewnymi ważnymi wyjątkami, szczególnie w przypadku kategorii widoków i wejść.
Należy zwrócić uwagę na podobnie nazwane węzły i na różnicę ich kategorii:
Węzły z większości bibliotek mają format kategorii
Węzły Point.ByCoordinates
i UV.ByCoordinates
mają tę samą nazwę, ale pochodzą z różnych kategorii
Istotne wyjątki to funkcje wbudowane, Core.Input, Core.View i operatory
Do podstawowej instalacji dodatku Dynamo dołączono setki węzłów — które są niezbędne do tworzenia programów wizualnych? Skupmy się na tych, które pozwalają zdefiniować parametry programu (Input), wyświetlić wyniki działania węzła (Watch) oraz zdefiniować wyjścia lub funkcjonalność za pomocą skrótu (Code Block).
Węzły Input (wejścia) są podstawowym sposobem obsługi kluczowych parametrów programu wizualnego przez użytkownika — Ciebie lub kogoś innego. Oto kilka pozycji dostępnych w bibliotece podstawowej:
Węzły Watch (obserwacyjne) są niezbędne do zarządzania danymi, które przepływają przez program wizualny. Wynik węzła można wyświetlić w podglądzie danych węzła, umieszczając wskaźnik myszy na węźle.
Przydatne jest wyświetlenie informacji w węźle Watch
Można też wyświetlić wyniki geometrii za pomocą węzła Watch3D.
Oba te elementy znajdują się w kategorii widoku w bibliotece podstawowej.
Wskazówka: czasami podgląd 3D może rozpraszać, gdy program wizualny zawiera wiele węzłów. Warto rozważyć wyczyszczenie zaznaczenia opcji Wyświetlanie podglądu tła w menu Ustawienia i użycie zamiast tego węzła Watch3D do wyświetlania podglądu geometrii.
Węzły Code Block (bloki kodu) umożliwiają definiowanie bloku kodu z wierszami oddzielonych średnikami. Może to być coś tak prostego, jak X/Y
.
Oto prosty przykład (z instrukcjami) użycia węzła Code Block w skrypcie.
Kliknij dwukrotnie, aby utworzyć węzeł Code Block
Circle.ByCenterPointRadius(x,y);
Typ
Kliknij obszar roboczy, aby wyczyścić zaznaczenie i automatycznie dodać wejścia x
i y
.
Utwórz węzły Point.ByCoordinates i Number Slider, a następnie połącz je z wejściami bloku kodu.
Wynik wykonania programu wizualnego jest pokazany jako okrąg w podglądzie 3D
Niniejszy przewodnik zawiera rozdziały opracowane na platformie Mode Lab. Te rozdziały są poświęcone podstawom, które należy opanować, aby szybko rozpocząć tworzenie własnych programów wizualnych za pomocą dodatku Dynamo. Zawarto w nich też sugestie dotyczące dalszego doskonalenia umiejętności związanych z dodatkiem Dynamo.
Ten podręcznik jest przeznaczony dla czytelników z różnych środowisk i na różnych poziomach umiejętności. Ogólne wprowadzenie dotyczące konfiguracji dodatku Dynamo, interfejsu użytkownika i kluczowych pojęć można znaleźć w poniższych sekcjach. Zalecamy, aby nowi użytkownicy zapoznali się z następującymi tematami:
Dla użytkowników, którzy chcieliby lepiej zrozumieć poszczególne elementy, takie jak określone węzły i pojęcia, omówiliśmy odpowiednie podstawy w poświęconych im rozdziałach.
Z myślą o użytkownikach chcących zobaczyć prezentację procesów roboczych dodatku Dynamo w sekcji „Przykładowe procesy robocze” uwzględniono niektóre wykresy. Aby utworzyć własne wykresy Dynamo, postępuj zgodnie z dołączonymi instrukcjami.
W kolejnych rozdziałach znajduje się więcej ćwiczeń dotyczących różnych omawianych tematów związanych z dodatkiem Dynamo. Ćwiczenia można zazwyczaj znaleźć w ostatniej sekcji każdej strony.
Dodatek Dynamo ma być narzędziem do programowania wizualnego dla projektantów, dzięki czemu pozwala tworzyć narzędzia, które korzystają z zewnętrznych bibliotek lub dowolnego produktu firmy Autodesk mającego interfejs API. Dzięki środowisku Dynamo Sandbox można tworzyć programy w tak zwanym trybie piaskownicy (izolowanym). Wciąż powstają nowe rozwiązania obejmujące dodatek Dynamo.
Kod źródłowy projektu jest typu open source, co pozwala rozszerzać jego funkcjonalność bez ograniczeń. Zajrzyj na stronę tego projektu w serwisie GitHub — przejdź do części „Works in Progress”, aby przekonać się, jak użytkownicy dostosowują dodatek Dynamo.
Przeglądaj, twórz odgałęzienia i rozpocznij rozszerzanie dodatku Dynamo stosownie do własnych potrzeb
Nowy — utwórz nowy plik .dyn
Otwórz — otwórz istniejący plik .dyn (obszar roboczy) lub .dyf (węzeł niestandardowy)
Zapisz/Zapisz jako — zapisz aktywny plik .dyn lub .dyf
Cofnij — cofnij ostatnią operację
Ponów — ponów następną operację
Eksportuj obszar roboczy jako obraz — eksportuj widoczny obszar roboczy jako plik PNG
Przeanalizujemy kategorie , pokażemy, w jaki sposób można , i zapoznamy się z niektórymi z , jakie się tam znajdują.
Create — węzły tworzenia: tworzą lub konstruują geometrię od podstaw. Np. okrąg.
Action — węzły operacji: wykonują operacje na obiekcie. Np. skalowanie okręgu.
Query — węzły zapytań: pobierają właściwość obiektu, który już istnieje. Np. pobieranie promienia okręgu.
Węzeł | Węzeł |
---|
Bloków kodu można też używać jako skrótów do definiowania wejścia liczbowego lub wywoływania funkcji innego węzła. Składnia potrzebna do tego celu jest zgodna z konwencją nazewnictwa języka tekstowego Dynamo, .
Dodatek Dynamo nie byłby tak przydatny bez silnej grupy aktywnych użytkowników i współtwórców. Przyłącz się do społeczności, obserwując , dodając swoje prace do galerii lub dyskutując na temat dodatku Dynamo na .
Ta część zawiera wprowadzenie do podstawowych węzłów dostępnych w bibliotece dodatku Dynamo, które pomogą w profesjonalnym tworzeniu własnego programu wizualnego.
Geometria do projektowania obliczeniowego: jak pracować z elementami geometrycznymi w dodatku Dynamo? Poznaj wiele sposobów tworzenia prostych lub złożonych geometrii z obiektów elementarnych.
Składniki programów: co to są „dane” i jakie są podstawowe typy, z których można korzystać w programach? Dowiedz się więcej na temat włączania operacji matematycznych i logicznych do procesu roboczego projektowania.
Projektowanie z użyciem list: jak zarządzać strukturami danych i je koordynować? Dowiedz się więcej na temat pojęcia listy i wykorzystaj ją do efektywnego zarządzania danymi projektowymi.
Słowniki w dodatku Dynamo: czym są słowniki? Dowiedz się, jak używać słowników do wyszukiwania określonych danych i wartości z istniejących wyników.
Boolean | Number |
String | Number Slider |
Directory Path | Integer Slider |
File Path |
W dodatku Dynamo węzły są obiektami, które można połączyć w celu utworzenia programu wizualnego. Każdy węzeł wykonuje operację — czasami może ona być tak prosta, jak przechowywanie liczby, ale może być bardziej skomplikowana, na przykład tworzenie lub przywoływanie geometrii.
Większość węzłów w dodatku Dynamo składa się z pięciu części. Istnieją wyjątki, takie jak węzły Input, ale budowę każdego węzła można opisać w następujący sposób:
Nazwa — nazwa węzła w konwencji nazewnictwa
Category.Name
Część główna — treść główna węzła, kliknięcie której prawym przyciskiem myszy powoduje przedstawienie opcji na poziomie całego węzła
Porty (wejściowe i wyjściowe) — gniazda dla przewodów, które dostarczają dane wejściowe do węzła, jak również wyprowadzają wyniki działania węzła
Wartość domyślna — po kliknięciu prawym przyciskiem myszy portu wejściowego: niektóre węzły mają wartości domyślne, które mogą być używane lub nie.
Ikona skratowania — wskazuje opcję skratowania określoną dla wejść zgodnej listy (więcej informacji na ten temat przedstawiono w dalszej części)
Wejścia i wyjścia węzłów są nazywane portami i działają jak gniazda dla przewodów. Dane są przekazywane do węzła przez porty po lewej stronie i wypływają z węzła po wykonaniu jego operacji po prawej stronie.
Porty oczekują, że otrzymają dane określonego typu. Na przykład podłączenie liczby, takiej jak 2,75, do portów w węźle Point By Coordinates („punkt według współrzędnych”) spowoduje utworzenie punktu. Jednak jeśli do tego samego portu zostanie podłączony ciąg „Czerwony”, spowoduje to błąd.
Wskazówka: umieść kursor na porcie, aby wyświetlić etykietę narzędzia zawierającą oczekiwany typ danych.
Etykieta portu
Etykieta narzędzia
Typ danych
Wartość domyślna
Dodatek Dynamo wskazuje stan wykonania programu wizualnego przez renderowanie węzłów w różnych schematach kolorów na podstawie stanów poszczególnych węzłów. Hierarchia stanów jest zgodna z następującą sekwencją: Błąd > Ostrzeżenie > Informacje > Podgląd.
Po ustawieniu wskaźnika myszy na nazwie lub portach albo kliknięciu ich prawym przyciskiem myszy wyświetlane są dodatkowe informacje i opcje.
Dostarczone dane wejściowe — węzeł z niebieskimi paskami pionowymi nad portami wejściowymi jest poprawnie połączony i wszystkie jego dane wejściowe są pomyślnie połączone.
Niedostarczone dane wejściowe — w przypadku węzła z czerwonym paskiem pionowym nad co najmniej jednym portem wejściowym należy połączyć wskazane dane wejściowe.
Funkcja — węzeł, który generuje funkcję i ma szary pasek pionowy nad portem wyjściowym, jest węzłem funkcji.
Wybrane — obecnie wybrane węzły mają błękitne wyróżnienie wokół obramowania.
Zablokowanie — półprzezroczysty węzeł niebieski jest zablokowany, co oznacza zawieszenie jego wykonywania
Ostrzeżenie — żółty pasek stanu pod węzłem wskazuje stan ostrzeżenia, co oznacza, że w węźle brakuje danych wejściowych lub typy danych są nieprawidłowe.
Błąd — czerwony pasek stanu poniżej węzła wskazuje, że węzeł jest w stanie błędu.
Informacja — niebieski pasek stanu pod węzłem wskazuje stan informacji; jest to oznaczenie przydatnych informacji o węzłach. Stan ten może być wyzwalany przy zbliżaniu się do maksymalnej wartości obsługiwanej przez węzeł, gdy węzeł jest używany w sposób, który może mieć wpływ na wydajność itp.
Wskazówka: na podstawie informacji z etykiety narzędzia sprawdź we wcześniejszych węzłach, czy wymagane typy danych lub struktury danych nie są błędne.
Etykieta narzędzia z ostrzeżeniem — wartość „null” lub nie można zinterpretować danych jako wartości typu Double, czyli liczby
Użyj węzła Watch, aby sprawdzić dane wejściowe
Wcześniejszy węzeł przechowuje wartość „Czerwony”, a nie liczbę
W niektórych sytuacjach może zaistnieć potrzeba zapobiegania wykonywaniu określonych węzłów w programie wizualnym. Można to zrobić przez „zablokowanie” węzła — odpowiednia opcja jest dostępna w menu kontekstowym węzła.
Zablokowanie węzła powoduje zablokowanie też węzłów znajdujących się po nim. Oznacza to, że wszystkie węzły zależne od wyniku zablokowanego węzła również zostaną zablokowane.
Przewody łączą węzły, aby utworzyć zależności i ustalić przepływ programu wizualnego. Możemy interpretować je jako przewody elektryczne, które przenoszą impulsy z jednego obiektu do następnego.
Przewód łączy port wyjściowy jednego węzła z portem wejściowym innego węzła. Ta kierunkowość określa przepływ danych w programie wizualnym.
Porty wejściowe znajdują się po lewej stronie węzłów, a porty wyjściowe — po ich prawej stronie, dlatego możemy ogólnie powiedzieć, że program przepływa od lewej strony do prawej.
Utwórz przewód, klikając lewym przyciskiem myszy port, a następnie klikając lewym przyciskiem myszy port innego węzła, aby utworzyć połączenie. W trakcie tworzenia połączenia przewód będzie wyświetlany jako kreskowany, a po pomyślnym połączeniu zostanie przyciągnięty i stanie się linią ciągłą.
Dane zawsze będą przepływać przez ten przewód z wyjścia do wejścia. Można jednak utworzyć przewód w dowolnym kierunku, jeśli chodzi o sekwencję klikania połączonych portów.
Często chcemy dostosować przepływ programu w programie wizualnym, edytując połączenia reprezentowane przez przewody. Aby edytować przewód, kliknij lewym przyciskiem myszy już połączony port wejściowy węzła. Dostępne są teraz dwie opcje:
Zmień połączenie z portem wejściowym: kliknij lewym przyciskiem myszy inny port wejściowy
Aby usunąć przewód, odciągnij przewód, a następnie kliknij lewym przyciskiem myszy obszar roboczy
Połącz ponownie wiele przewodów, używając kombinacji Shift+lewy przycisk myszy
Powiel przewód, używając kombinacji Ctrl+lewy przycisk myszy
Domyślnie podgląd wszystkich przewodów jest wyświetlany jako szare pociągnięcie. Po wybraniu węzła wszystkie łączące przewody są renderowane z tym samym wyróżnieniem w kolorze błękitnym co węzeł.
Wyróżniony przewód
Domyślny przewód
Domyślne ukrywanie przewodów
Jeśli wolisz ukryć przewody na wykresie, anuluj zaznaczenie opcji Widok > Złącza > Pokaż złącza.
To ustawienie sprawia, że będą wyświetlane tylko wybrane węzły i połączone z nimi przewody z delikatnym niebieskim wyróżnieniem.
Można również ukryć wybrany przewód, klikając prawym przyciskiem myszy wyjście węzła i wybierając opcję Ukryj przewody.
Dynamo to aktywny projekt programowania typu open source. Zapoznaj się z listą oprogramowania obsługującego dodatek Dynamo.
Dodatek Dynamo jest preinstalowany z oprogramowaniem, takim jak na przykład Revit3D, FormIt, Civil3D itp.
Aby uzyskać więcej informacji na temat korzystania z dodatku Dynamo z określonym oprogramowaniem, zalecamy zapoznanie się z następującymi sekcjami:
Jeśli chcesz używać dodatku Dynamo jako samodzielnej aplikacji. Czytaj dalej, aby uzyskać wskazówki dotyczące pobierania wersji Sandbox.
Aplikacja Dynamo jest dostępna w witrynie Dynamo. Na stronie pobierania są dostępne wersje oficjalne, wcześniejsze oraz wstępne. Przejdź na stronę Get Dynamo (Uzyskaj aplikację Dynamo) i kliknij opcję Download (Pobierz), aby uzyskać oficjalną wydaną wersję.
Jeśli szukasz wersji poprzednich lub eksperymentalnych („bleeding edge”), wszystkie wersje można znaleźć w dolnej sekcji na tej samej stronie.
W wersjach eksperymentalnych („bleeding edge”) mogą być dostępne niektóre nowe i eksperymentalne funkcje, które nie zostały jeszcze w pełni przetestowane, dlatego mogą być niestabilne. Korzystając z takiej wersji, możesz wykryć błędy lub problemy i pomóc nam doskonalić tę aplikację przez zgłoszenie problemów naszemu zespołowi.
Początkującym zaleca się pobranie stabilnej oficjalnej wersji.
Przed uruchomieniem pobranej wersji należy rozpakować zawartość do wybranego folderu.
Aby wykonać ten krok, pobierz i zainstaluj na komputerze program 7zip.
Kliknij prawym przyciskiem myszy plik zip i wybierz opcję Wyodrębnij wszystkie.
Wybierz miejsce docelowe, aby rozpakować wszystkie pliki.
W folderze docelowym kliknij dwukrotnie plik DynamoSandbox.exe, aby go uruchomić.
Zostanie wyświetlony ekran startowy aplikacji DynamoSandbox, jak to tutaj pokazano.
Gratulacje, konfiguracja do korzystania z aplikacji DynamoSandbox jest gotowa.
Geometria to dodatkowa funkcja w aplikacji Dynamo Sandbox dostępna tylko dla użytkowników posiadających bieżącą subskrypcję lub licencję na następujące oprogramowanie Autodesk: Revit, Robot Structural Analysis, FormIt i Civil 3D. Geometria umożliwia użytkownikom importowanie, tworzenie, edytowanie i eksportowanie geometrii z aplikacji Dynamo Sandbox.
Obszar roboczy dodatku Dynamo składa się z czterech głównych elementów.
Wszystkie aktywne karty.
Tryb podglądu
Elementy sterujące powiększania/przesuwania
Węzeł w obszarze roboczym
Po otwarciu nowego pliku zostanie domyślnie otwarty nowy główny obszar roboczy.
Można utworzyć węzeł niestandardowy i otworzyć go w obszarze roboczym węzła niestandardowego.
W każdym oknie dodatku Dynamo jest dozwolony tylko jeden główny obszar roboczy, ale na kartach może być otwartych wiele obszarów roboczych węzłów niestandardowych.
Istnieją 3 metody przełączania między różnymi podglądami:
a. Używanie ikon w prawym górnym obszarze
b. Kliknięcie prawym przyciskiem myszy w obszarze roboczym
Przełączanie się z podglądu 3D na podgląd wykresu
Przełączanie się z podglądu wykresu na podgląd 3D
c. Używanie skrótu klawiaturowego (Ctrl+B)
Do nawigacji w dowolnym obszarze roboczym można używać ikon lub myszy.
a. W trybie podglądu wykresu
Używanie ikon:
Używanie myszy:
Kliknięcie lewym przyciskiem myszy — wybranie/zaznaczenie
Kliknięcie lewym przyciskiem myszy i przeciągnięcie — prostokąt zaznaczania do wybrania wielu węzłów
Przewinięcie środkowym przyciskiem myszy w górę/w dół — powiększenie/pomniejszenie
Kliknięcie środkowym przyciskiem myszy i przeciągnięcie — przesunięcie
Kliknięcie prawym przyciskiem myszy w dowolnym miejscu obszaru rysunku — otwarcie wyszukiwania w obszarze rysunku
b. W trybie podglądu 3D
Używanie ikon:
Używanie myszy:
Przewinięcie środkowym przyciskiem myszy w górę/w dół — powiększenie/pomniejszenie
Kliknięcie środkowym przyciskiem myszy i przeciągnięcie — przesunięcie
Kliknięcie prawym przyciskiem myszy i przeciągnięcie — orbitowanie
Kliknij lewym przyciskiem myszy, aby wybrać dowolny węzeł.
Aby wybrać wiele węzłów, kliknij i przeciągnij w celu utworzenia prostokąta zaznaczania.
Ten indeks zawiera dodatkowe informacje o wszystkich węzłach zawartych w tym elementarzu, a także o pozostałych składnikach, które mogą być przydatne. Podano w nim tylko część z około 500 węzłów dostępnych w programie Dynamo.
**Innymi słowy: jeśli utworzysz długość szerokości prostopadłościanu (na osi X) równą 10 i przekształcisz go, stosując układ współrzędnych z 2-krotnym skalowaniem na osi X, szerokość nadal będzie wynosić 10. ASM nie pozwala wyodrębnić wierzchołków bryły w przewidywalnej kolejności, dlatego nie można określić wymiarów po przekształceniu.
Dynamo to platforma programowania wizualnego typu Open Source dla projektantów.
Witamy w przewodniku Dynamo Primer — kompleksowym podręczniku do programowania wizualnego w dodatku Autodesk Dynamo. Ten przewodnik to stale rozwijany projekt mający na celu informowanie o podstawach programowania. Tematy obejmują pracę z geometrią obliczeniową, wzorce postępowania dotyczące projektowania opartego na regułach, interdyscyplinarne zastosowania programowania oraz inne kwestie związane z platformą Dynamo.
Olbrzymie możliwości dodatku Dynamo ujawniają się w wielu różnych działaniach związanych z projektowaniem. Dodatek Dynamo zapewnia coraz więcej łatwych sposobów rozpoczynania pracy:
Zapoznaj się z programowaniem wizualnym jako osoba zupełnie początkująca
Połącz procesy robocze w różnych programach
Nawiąż kontakt z aktywną społecznością użytkowników, współtwórców i programistów
Współtwórz platformę typu open source, aby pomóc ją doskonalić
W obliczu tych wspaniałych działań i możliwości dotyczących pracy z dodatkiem Dynamo potrzebny jest tego samego kalibru dokument — przewodnik Dynamo Primer.
Nieustannie ulepszamy dodatek Dynamo, więc niektóre funkcje mogą wyglądać inaczej, niż pokazano w tym przewodniku Primer. Jednak wszystkie zmiany funkcjonalności zostaną poprawnie przedstawione.
Przewodnik Dynamo Primer jest projektem typu open source. Dokładamy starań, aby dostarczać wysokiej jakości zawartość, i doceniamy wszelkie przekazywane nam opinie. Jeśli chcesz zgłosić jakikolwiek problem, opublikuj go na naszej stronie problemów w serwisie GitHub: https://github.com/DynamoDS/DynamoPrimer/issues
Jeśli chcesz wziąć udział w opracowywaniu nowej sekcji, pomóc w edycji lub w inny sposób współtworzyć ten projekt, zapoznaj się z repozytorium w serwisie GitHub, aby rozpocząć: https://github.com/DynamoDS/DynamoPrimer.
Przewodnik Dynamo Primer to projekt typu open source zainicjowany przez Matta Jezyka i zespół programistów dodatku Dynamo w firmie Autodesk.
Napisanie pierwszej wersji tego przewodnika Primer zlecono Mode Lab. Dziękujemy im za wszystkie starania mające na celu ustanowienie tego cennego zasobu.
Aktualizację przewodnika Primer w celu odzwierciedlenia zmian w dodatku Dynamo 2.0 zlecono Johnowi Piersonowi z Parallax Team.
Aktualizację przewodnika Primer w celu odzwierciedlenia zmian w dodatku Dynamo 2.13 zlecono Matterlab.
Aktualizację przewodnika Primer w celu odzwierciedlenia zmian w dodatku Dynamo 2.17 zlecono Archilizer.
Aktualizację przewodnika Primer o treści związane z dodatkiem Dynamo for Civil 3D zlecono Wood Rodgers.
Specjalne podziękowania kierujemy do Iana Keougha za rozpoczęcie i prowadzenie projektu Dynamo.
Dziękujemy Mattowi Jezykowi, Ianowi Keoughowi, Zachowi Kronowi, Racel Amour i Colinowi McCrone'owi za entuzjastyczną współpracę i możliwość wzięcia udziału w szerokiej gamie projektów dodatku Dynamo.
Dynamo Najbardziej aktualną stabilną wersję dodatku Dynamo można znaleźć w witrynach przedstawionych poniżej.
http://dynamobim.com/download/ lub http://dynamobuilds.com
DynamoBIM — najlepsze źródło dodatkowych informacji, treści edukacyjnych oraz forów to witryna DynamoBIM.
http://dynamobim.org
Dynamo GitHub — Dynamo to projekt typu open source w serwisie GitHub. Aby wziąć w nim udział, odwiedź stronę DynamoDS.
https://github.com/DynamoDS/Dynamo
Kontakt — poinformuj nas o problemach związanych z tym dokumentem.
Dynamo@autodesk.com
Copyright 2023 Autodesk
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
Dodatek Dynamo, który na początku służył po prostu do modelowania informacji o budynku w programie Revit, to obecnie dojrzałe rozwiązanie pełniące wiele funkcji. Stanowi on przede wszystkim platformę umożliwiającą projektantom analizowanie programowania wizualnego, rozwiązywanie problemów i tworzenie własnych narzędzi. Zacznijmy naszą przygodę z dodatkiem Dynamo od ustanowienia pewnego kontekstu — co to jest i jak rozpocząć korzystanie z niego?
Dodatek Dynamo, jako środowisko programowania wizualnego, umożliwia określenie sposobu, w jaki dane są przetwarzane. Dane są liczbami lub tekstem, ale także geometrią. Geometria — nazywana czasami geometrią obliczeniową — jest w ujęciu komputerowym danymi, za pomocą których można tworzyć piękne, zawiłe lub sterowane wydajnością modele. Aby móc to robić, należy zrozumieć szczegóły poszczególnych typów geometrii, których można używać.
Geometria to język projektowania. Kiedy rdzeń środowiska lub języka programowania ma jądro geometryczne, daje to olbrzymie możliwości w zakresie projektowania precyzyjnych i wydajnych modeli, automatyzacji procedur projektowania oraz generowania iteracji projektowych za pomocą algorytmów.
Zrozumienie typów geometrii i pozwala na nawigację w kolekcji Węzły geometrii dostępnej w bibliotece. Węzły geometrii są uporządkowane alfabetycznie (nie hierarchicznie) — tutaj są one wyświetlane podobnie do ich układu w interfejsie dodatku Dynamo.
Ponadto tworzenie modeli w dodatku Dynamo i łączenie podglądu elementów widocznych w podglądzie tła z przepływem danych na wykresie powinno stawać się w miarę upływu czasu bardziej intuicyjne.
Zwróć uwagę na zakładany układ współrzędnych renderowany przez siatkę i kolorowe osie
Wybrane węzły spowodują renderowanie odpowiedniej geometrii (jeśli dany węzeł tworzy geometrię) w tle w kolorze wyróżnienia
Pobierz plik przykładowy, klikając poniższe łącze.
Pełna lista plików przykładowych znajduje się w załączniku.
Geometria, definiowana tradycyjnie, stanowi analizę kształtu, rozmiaru, względnego położenia figur i właściwości przestrzeni. Ta dziedzina ma bogatą historię obejmującą tysiące lat. Wraz z nadejściem i popularyzacją komputerów zyskaliśmy potężne narzędzie do definiowania, badania i generowania geometrii. Obecnie obliczenie wyniku złożonych interakcji geometrycznych jest tak łatwe, że nawet nie zauważamy, gdy to robimy.
Aby przekonać się, jak zróżnicowana i złożona może być geometria tworzona za pomocą komputera, szybko wyszukaj w Internecie królika Stanford — model kanoniczny używany do testowania algorytmów.
Zrozumienie geometrii w kontekście algorytmów, obliczeń i złożoności może wydawać się prawdziwym wyzwaniem. Istnieje jednak kilka kluczowych i stosunkowo prostych zasad stanowiących podstawy do rozpoczęcia tworzenia bardziej zaawansowanych aplikacji:
Geometria to dane — zarówno dla komputera, jak i dla dodatku Dynamo królik nie różni się zbytnio od liczby.
Geometria bazuje na abstrakcji — zasadniczo elementy geometryczne są opisywane przez liczby, zależności i wzory w ramach danego przestrzennego układu współrzędnych
Geometria ma hierarchię — punkty łączą się, tworząc linie, linie stykają się ze sobą, tworząc powierzchnie itd.
Geometria jednocześnie opisuje część i całość — kiedy mamy daną krzywą, jest to zarówno kształt, jak i wszystkie możliwe punkty wzdłuż niej
W praktyce zasady te oznaczają, że musimy mieć świadomość tego, z czym pracujemy (jaki to typ geometrii, jak został utworzony itd.), aby móc płynnie składać, rozkładać i ponownie składać różne geometrie, opracowując bardziej złożone modele.
Przyjrzyjmy się zależności między abstrakcyjnym a hierarchicznym opisem geometrii. Ponieważ te dwie koncepcje są powiązane, ale nie zawsze są od razu oczywiste, już zaraz po rozpoczęciu tworzenia bardziej złożonych procesów roboczych lub modeli można natrafić na problemy związane z pojęciami. Na początek użyjmy wymiarowości jako łatwego deskryptora „przedmiotów”, które modelujemy. Liczba wymiarów wymaganych do opisania kształtu daje nam pogląd na hierarchiczne uporządkowanie geometrii.
Punkt (definiowany przez współrzędne) nie ma wymiarów — to tylko liczby opisujące poszczególne współrzędne
Linia (definiowana przez dwa punkty) ma jeden wymiar — po linii można podróżować do przodu (kierunek dodatni) lub do tyłu (kierunek ujemny)
Płaszczyzna (zdefiniowana przez dwie linie) ma dwa wymiary — można po niej podróżować bardziej w lewo lub bardziej w prawo
Prostopadłościan (zdefiniowany przez dwie płaszczyzny) ma trzy wymiary — można zdefiniować położenie względem góry lub dołu
Wymiarowość jest wygodnym sposobem rozpoczęcia kategoryzowania geometrii, ale niekoniecznie jest najlepszym rozwiązaniem. W końcu nie modelujemy tylko za pomocą punktów, linii, płaszczyzn i prostopadłościanów — co jeśli chcemy użyć czegoś zakrzywionego? Ponadto istnieje cała inna kategoria typów geometrycznych, które są całkowicie abstrakcyjne. Oznacza to, że definiują one właściwości, takie jak orientacja, objętość lub zależności między częściami. Nie możemy dosłownie uchwycić wektora, więc jak zdefiniować go względem tego, co widzimy w przestrzeni? Bardziej szczegółowa kategoryzacja hierarchii geometrycznej powinna uwzględniać różnicę między typami abstrakcyjnymi („pomocniczymi”), które można pogrupować według tego, co pomagają osiągnąć, a typami, które pomagają opisać kształt elementów modelu.
Tworzenie modeli w dodatku Dynamo nie ogranicza się do tego, co można wygenerować za pomocą węzłów. Poniżej przedstawiono kilka najważniejszych sposobów, w jakie można przenieść proces na następny poziom za pomocą geometrii:
Dodatek Dynamo umożliwia importowanie plików — spróbuj użyć pliku CSV dla chmur punktów lub pliku SAT w celu dołączenia powierzchni
W przypadku pracy z programem Revit można odwoływać się do elementów programu Revit, aby używać ich w dodatku Dynamo
jest zdefiniowany przez tylko jedną wartość lub tylko kilka wartości nazywanych współrzędnymi. Liczba wartości współrzędnych potrzebnych do zdefiniowania punktu zależy od układu współrzędnych lub kontekstu, w którym się on znajduje.
Najczęściej używany typ punktu w dodatku Dynamo istnieje w trójwymiarowym globalnym układzie współrzędnych i ma trzy współrzędne [X,Y,Z] (w dodatku Dynamo jest to punkt 3D).
Punkt 2D w dodatku Dynamo ma dwie współrzędne [X,Y].
Parametry dla krzywych i powierzchni są ciągłe i rozciągają się poza krawędź danej geometrii. Ponieważ kształty definiujące przestrzeń parametryczną znajdują się w trójwymiarowym globalnym układzie współrzędnych, zawsze można przekształcić współrzędną parametryczną we współrzędną „globalną”. Na przykład punkt [0,2, 0,5] na powierzchni jest taki sam jak punkt [1,8, 2,0, 4,1] we współrzędnych globalnych.
Punkt w zakładanych współrzędnych globalnych XYZ
Punkt względem danego układu współrzędnych (walcowego)
Punkt jako współrzędne UV na powierzchni
Pobierz plik przykładowy, klikając poniższe łącze.
Pełna lista plików przykładowych znajduje się w załączniku.
Jeśli geometria jest językiem modelu, punkty są alfabetem. Punkty są podstawą tworzenia całej geometrii — do utworzenia krzywej potrzebne są co najmniej dwa punkty, do utworzenia wieloboku lub powierzchni siatki potrzebne są co najmniej trzy punkty itd. Zdefiniowanie położenia, kolejności i relacji między punktami (np. funkcji sinus) umożliwia zdefiniowanie geometrii wyższego rzędu, takich jak elementy rozpoznawane przez użytkownika jako okręgi lub krzywe.
Okrąg na podstawie funkcji
x=r*cos(t)
iy=r*sin(t)
Krzywa sinusoidalna na podstawie funkcji
x=(t)
iy=r*sin(t)
Punkty mogą również występować w dwuwymiarowym układzie współrzędnych. Konwencja wskazuje różne notacje literowe w zależności od tego, z którym typem przestrzeni pracujemy — możemy używać [X,Y] na płaszczyźnie lub [U,V] na powierzchni.
Punkt w euklidesowym układzie współrzędnych: [X,Y,Z]
Punkt w układzie współrzędnych z parametrem krzywej: [t]
Punkt w układzie współrzędnych z parametrami powierzchni: [U,V]
jest reprezentacją wielkości i kierunku. Można go interpretować jako strzałkę zmierzającą w określonym kierunku z daną prędkością. Jest to kluczowy element modeli w dodatku Dynamo. Ponieważ należą one do kategorii abstrakcyjnych „elementów pomocniczych”, gdy utworzymy wektor, nie zobaczymy niczego w podglądzie tła.
Można użyć linii jako symbolu zastępczego dla podglądu wektora.
Pobierz plik przykładowy, klikając poniższe łącze.
Pełna lista plików przykładowych znajduje się w załączniku.
Chociaż płaszczyzny są abstrakcyjne, mają początek, więc można je umieścić w przestrzeni.
W dodatku Dynamo płaszczyzny są renderowane w podglądzie tła.
Pobierz plik przykładowy, klikając poniższe łącze.
Pełna lista plików przykładowych znajduje się w załączniku.
Chociaż układy współrzędnych są abstrakcyjne, mają początek, więc można je umieścić w przestrzeni.
W dodatku Dynamo układy współrzędnych są renderowane w podglądzie tła jako punkt (początek) oraz linie definiujące osie (oś X jest czerwona, oś Y — zielona, a oś Z — niebieska, zgodnie z konwencją).
Pobierz plik przykładowy, klikając poniższe łącze.
Pełna lista plików przykładowych znajduje się w załączniku.
Wektory, płaszczyzny i układy współrzędnych tworzą podstawową grupę abstrakcyjnych typów geometrii. Pomagają definiować położenie, orientację i kontekst przestrzenny dla innych typów geometrii, które opisują kształty. Jeśli stwierdzam, że jestem w Nowym Jorku przy 42-tej ulicy oraz Broadwayu (układ współrzędnych), stoję na poziomie ulicy (płaszczyzna) i patrzę na północ (wektor), używam tych „elementów pomocniczych”, by określić, gdzie jestem. To samo dotyczy produktu takiego jak etui telefonu czy drapacza chmur — potrzebujemy tego kontekstu do opracowania modelu.
Wektor jest wielkością geometryczną opisującą kierunek i wartość. Wektory są abstrakcyjne. To znaczy, że reprezentują wielkość, a nie element geometryczny. Wektory można łatwo pomylić z punktami, ponieważ i jedne, i drugie zawierają listę wartości. Istnieje jednak zasadnicza różnica: punkty opisują położenie w danym układzie współrzędnych, natomiast wektory opisują względną różnicę w pozycji, która odpowiada pojęciu „kierunku”.
Jeśli pojęcie względnej różnicy jest niejasne, o wektorze AB można myśleć w ten sposób: „stoję w punkcie A, patrząc w kierunku punktu B”. Kierunek, stąd (A) dotąd (B), jest wektorem.
Dalsze rozbicie wektorów na ich części przy użyciu tej samej notacji AB:
Punkt początkowy wektora nosi nazwę punktu zaczepienia.
**Punkt końcowy **wektora nazywamy wierzchołkiem lub zwrotem.
Wektor AB nie jest taki sam jak wektor BA, który wskazuje w przeciwnym kierunku.
Z wektorów i ich abstrakcyjnej definicji można się pośmiać, oglądając klasyczną komedię „Czy leci z nami pilot?”:
Zrozumiałem, zrozumiałem. Jaki jest nasz wektor, Victor?
Płaszczyzny to dwuwymiarowe abstrakcyjne „elementy pomocnicze”. Mówiąc konkretniej, płaszczyzny są „płaskie” i rozciągają się w dwóch kierunkach w nieskończoność. Zazwyczaj są one renderowane jako mniejsze prostokąty w pobliżu ich początku.
W tym momencie zapewne myślisz sobie: „Chwileczkę! Początek? Brzmi to jak układ współrzędnych... Taki jak używany do modelowania w oprogramowaniu CAD”!
I masz rację. Większość programów do modelowania wykorzystuje płaszczyzny konstrukcyjne lub „poziomy” do definiowania lokalnego kontekstu dwuwymiarowego, w którym odbywa się szkicowanie. Bardziej znajomo mogą brzmieć określenia XY, XZ, YZ — lub — północ, południowy wschód czy rzut. Wszystkie one to płaszczyzny definiujące nieskończony „płaski” kontekst. Płaszczyzny nie mają głębokości, ale również pomagają w opisie kierunku —
Jeśli pojęcie płaszczyzny jest już dla nas jasne, zrozumienie układów współrzędnych jest już o krok od tego. Płaszczyzna ma te same części co układ współrzędnych pod warunkiem, że mamy na myśli standardowy układ współrzędnych — „euklidesowy” lub „XYZ”.
Istnieją jednak inne, alternatywne układy współrzędnych, takie jak walcowy lub sferyczny. Jak zostanie to przedstawione w kolejnych sekcjach, układy współrzędnych można również stosować do innych typów geometrii w celu zdefiniowania położenia w ramach takiej geometrii.
Dodawanie alternatywnych układów współrzędnych — walcowego, sferycznego
Podgląd wyłączony — szary pasek stanu pod węzłem oraz ikona oka wskazują, że podgląd geometrii dla węzła jest wyłączony.
Jeśli program wizualny zawiera ostrzeżenie lub błędy, dodatek Dynamo dostarczy dodatkowe informacje na temat problemu. Każdy żółty węzeł ma również etykietę narzędzia nad nazwą. Ustaw wskaźnik myszy na ikonie etykiety narzędzia ostrzeżenia lub błędu , aby ją rozwinąć.
Aby rozpocząć korzystanie z niego, uruchom go z poziomu panelu paska narzędzi. W zależności od używanego oprogramowania ikona uruchamiania zazwyczaj znajduje się w obszarze Menu > karta Zarządzaj. Kliknij ikonę dodatku Dynamo , aby go uruchomić.
Podgląd wykresu
Podgląd 3D
Dopasuj do okna
Powiększ
Pomniejsz
Przesuń widok
Dopasuj do okna
Powiększ
Pomniejsz
Przesuń widok
Orbita
Zapoznaj się z , aby dowiedzieć się, czego można się nauczyć z tego przewodnika Primer.
*Uwaga: od programu Revit 2020 dodatek Dynamo jest dostarczany z wersjami programu Revit, dzięki czemu ręczna instalacja nie jest wymagana. Więcej informacji można znaleźć w tym .
Menedżer pakietów Dynamo udostępnia dodatkowe funkcje dla rozszerzonych operacji i typów geometrii — sprawdź pakiet
jest powierzchnią dwuwymiarową. Można ją interpretować jako płaską powierzchnię, która rozciąga się w nieskończoność. Każda płaszczyzna ma początek, kierunek X, kierunek Y i kierunek Z (w górę).
jest układem określającym położenie punktów lub innych elementów geometrycznych. Na poniższym rysunku wyjaśniono, jak to wygląda w dodatku Dynamo i co reprezentuje każdy kolor.
TWORZENIE |
Color.ByARGB Tworzy kolor według składowych: alfa (alpha), czerwony (red), zielony (green) i niebieski (blue). |
Zakres kolorów Pobiera kolor z gradientu między kolorem początkowym i końcowym. |
DZIAŁANIA |
Color.Brightness Pobiera wartość jasności tego koloru. |
Color.Components Wyświetla listę składowych koloru w następującej kolejności: alfa, czerwony, zielony, niebieski. |
Color.Saturation Pobiera wartość nasycenia tego koloru. |
Color.Hue Pobiera wartość barwy tego koloru. |
ZAPYTANIE |
Color.Alpha Znajduje składową alfa koloru, od 0 do 255. |
Color.Blue Znajduje niebieską składową koloru, od 0 do 255. |
Color.Green Znajduje zieloną składową koloru, od 0 do 255. |
Color.Red Znajduje czerwoną składową koloru, od 0 do 255. |
TWORZENIE |
GeometryColor.ByGeometryColor Wyświetla geometrię za pomocą koloru. |
DZIAŁANIA |
View.Watch Wizualizuje dane wyjściowe węzła. |
View.Watch 3D Wyświetla dynamiczny podgląd geometrii. |
DZIAŁANIA |
Boolean Wybór między true i false. |
Code Block Umożliwia bezpośrednie utworzenie kodu DesignScript. |
Directory Path Umożliwia wybranie katalogu w systemie, aby pobrać jego ścieżkę. |
File Path Umożliwia wybranie pliku w systemie, aby pobrać jego nazwę |
Integer Slider Suwak, który generuje wartości całkowite. |
Liczba Tworzy liczbę. |
Number Slider Suwak pozwalający uzyskać wartości liczbowe. |
Ciąg znaków Tworzy ciąg. |
Object.IsNull Określa, czy podany obiekt ma wartość null. |
TWORZENIE |
List.Create Tworzy nową listę z określonych danych wejściowych. |
List.Combine Stosuje kombinator do każdego elementu w dwóch sekwencjach. |
Number Range Tworzy sekwencję liczb w określonym zakresie |
Number Sequence Tworzy sekwencję liczb. |
DZIAŁANIA |
List.Chop Dzieli listę na zestaw list, z których każdy zawiera zadaną liczbę elementów. |
List.Count Zwraca liczbę elementów przechowywanych w danej liście. |
List.Flatten Zrównuje zagnieżdżony wykaz list o określoną wartość. |
List.FilterByBoolMask Filtruje sekwencję, sprawdzając odpowiadające indeksy w osobnej liście wartości logicznych. |
List.GetItemAtIndex Pobiera element z danej listy, który znajduje się w określonym indeksie. |
List.Map Stosuje funkcję do wszystkich elementów listy, generując z wyników nową listę. |
List.Reverse Tworzy nową listę zawierającą elementy z danej listy, ale w odwrotnej kolejności. |
List.ReplaceItemAtIndex Zastępuje element z danej listy, który znajduje się w określonym indeksie. |
List.ShiftIndices Przesuwa indeksy na liście w prawo o podaną wartość. |
List.TakeEveryNthItem Pobiera elementy z danej listy w indeksach, które są wielokrotnością danej wartości, po uwzględnieniu podanego odsunięcia. |
List.Transpose Zamienia wiersze z kolumnami na liście list. Jeśli niektóre wiersze są krótsze niż inne, w tablicy wynikowej są wstawiane wartości null jako elementy zastępcze, tak aby zawsze uzyskać prostokąt. |
DZIAŁANIA |
If Instrukcja warunkowa. Sprawdza wartość logiczną danych wejściowych przekazanych do sprawdzenia. Jeśli dane wejściowe są prawdziwe, generuje wartość wyjściową true. W przeciwnym razie generuje wartość wyjściową false. |
DZIAŁANIA |
Math.Cos Oblicza cosinus kąta. |
Math.DegreesToRadians Konwertuje wartość kąta w stopniach na wartość w radianach. |
Math.Pow Podnosi liczbę do określonej potęgi. |
Math.RadiansToDegrees Konwertuje wartość kąta w radianach na wartość w stopniach. |
Math.RemapRange Dostosowuje zakres listy liczb, zachowując współczynnik rozkładu. |
Math.Sin Oblicza sinus kąta. |
Wzór Oblicza wartość wzoru matematycznego. Korzysta z funkcji NCalc. Zobacz sekcję http://ncalc.codeplex.com |
Mapowanie Przypisuje wartość do zakresu danych wejściowych. |
DZIAŁANIA |
String.Concat Łączy wiele ciągów w jeden. |
String.Contains Określa, czy dany ciąg zawiera dany podciąg. |
String.Join Łączy wiele ciągów w jeden, wstawiając podany separator między poszczególnymi ciągami. |
String.Split Dzieli pojedynczy ciąg na listę ciągów, z podziałami wyznaczanymi przez podane ciągi — separatory. |
String.ToNumber Konwertuje ciąg na liczbę całkowitą lub zmiennoprzecinkową o podwójnej dokładności. |
TWORZENIE |
Circle.ByCenterPointRadius Tworzy okrąg ze środkiem i promieniem wejściowym w płaszczyźnie globalnej XY, ze współrzędną globalną Z jako normalną. |
Circle.ByPlaneRadius Tworzy okrąg ze środkiem w początku płaszczyzny wejściowej (głównym), leżący w płaszczyźnie wejściowej, o podanym promieniu. |
TWORZENIE |
CoordinateSystem.ByOrigin Tworzy układ współrzędnych z początkiem w punkcie wejściowym, z osiami X i Y ustawionymi jako osie X i Y GUW. |
CoordinateSystem.ByCyclindricalCoordinates Tworzy układ współrzędnych o określonych parametrach współrzędnych walcowych względem określonego układu współrzędnych. |
TWORZENIE |
Cuboid.ByLengths Utwórz prostopadłościan wyśrodkowany na początku GUW, z określoną szerokością, długością i wysokością. |
Cuboid.ByLengths (origin) Utwórz prostopadłościan wyśrodkowany w punkcie wejściowym, z określoną szerokością, długością i wysokością. |
Cuboid.ByLengths (coordinateSystem) Utwórz prostopadłościan wyśrodkowany na początku GUW, z określoną szerokością, długością i wysokością. |
Cuboid.ByCorners Utwórz prostopadłościan łączący punkt niski z punktem wysokim. |
Cuboid.Length Zwraca wymiary wejściowe prostopadłościanu, NIE rzeczywiste wymiary przestrzeni globalnej**. |
Cuboid.Width Zwraca wymiary wejściowe prostopadłościanu, NIE rzeczywiste wymiary przestrzeni globalnej**. |
Cuboid.Height Zwraca wymiary wejściowe prostopadłościanu, NIE rzeczywiste wymiary przestrzeni globalnej**. |
BoundingBox.ToCuboid Pobierz ramkę ograniczającą jako prostopadłościan bryłowy |
DZIAŁANIA |
Curve.Extrude (distance) Wyciąga krzywą w kierunku wektora normalnego. |
Curve.PointAtParameter Pobiera punkt na krzywej o określonym parametrze między StartParameter() a EndParameter(). |
DZIAŁANIA |
Geometry.DistanceTo Wyznacza odległość od tej geometrii do innej. |
Geometry.Explode Rozdziela złożone (nierozdzielone) elementy na części składowe. |
Geometry.ImportFromSAT Lista zaimportowanych geometrii. |
Geometry.Rotate (basePlane) Obraca obiekt wokół początku układu współrzędnych i wektora normalnego o kąt określony w stopniach. |
Geometry.Translate Przekształca geometrię dowolnego typu o podaną odległość w podanym kierunku. |
TWORZENIE |
Line.ByBestFitThroughPoints Tworzy linię najdokładniej przybliżającą do wykresu punktowego punktów. |
Line.ByStartPointDirectionLength Tworzy linię prostą, zaczynając od punktu początkowego i wydłużając w kierunku wektora o określoną długość. |
Line.ByStartPointEndPoint Tworzy linię prostą między dwoma punktami wejściowymi. |
Line.ByTangency Tworzy linię styczną do krzywej wejściowej, umieszczoną w punkcie parametru krzywej wejściowej. |
ZAPYTANIE |
Line.Direction Kierunek krzywej. |
Tworzenie |
NurbsCurve.ByControlPoints Tworzy obiekt BSplineCurve przy użyciu jawnie podanych punktów sterujących. |
NurbsCurve.ByPoints Tworzy obiekt BSplineCurve przez interpolację między punktami. |
Tworzenie |
NurbsSurface.ByControlPoints Tworzy powierzchnię NURBS przy użyciu jawnie podanych punktów sterujących oraz kątów U i V podanych w stopniach. |
NurbsSurface.ByPoints Tworzy powierzchnię NURBS przy użyciu interpolacji podanych punktów oraz kątów U i V podanych w stopniach. Powierzchnia wynikowa przecina wszystkie te punkty. |
TWORZENIE |
Plane.ByOriginNormal Tworzy płaszczyznę wyśrodkowaną w punkcie głównym i mającą wejściowy wektor normalny. |
Plane.XY Tworzy płaszczyznę w globalnej płaszczyźnie XY. |
TWORZENIE |
Point.ByCartesianCoordinates Tworzy punkt w podanym układzie współrzędnych z trzema współrzędnymi kartezjańskimi. |
Point.ByCoordinates (2d) Tworzy punkt na płaszczyźnie XY zadanej przez dwie współrzędne kartezjańskie. Składnik Z wynosi 0. |
Point.ByCoordinates (3d) Tworzy punkt na podstawie trzech współrzędnych kartezjańskich. |
Point.Origin Pobiera punkt początku układu współrzędnych (0,0,0). |
DZIAŁANIA |
Point.Add Dodaje wektor do punktu. Działa podobnie do Translate (Vector). |
ZAPYTANIE |
Point.X Pobiera składową X punktu. |
Point.Y Pobiera składową Y punktu. |
Point.Z Pobiera składową Z punktu. |
TWORZENIE |
Polycurve.ByPoints Tworzy krzywą złożoną z sekwencji linii łączących punkty. Aby powstała krzywa zamknięta, ostatni punkt powinien być w tym samym miejscu co punkt początkowy. |
TWORZENIE |
Rectangle.ByWidthLength (Plane) Tworzy prostokąt ze środkiem w głównym punkcie na płaszczyźnie wejściowej, o szerokości wejściowej (długość osi X) i długości (długość osi Y). |
TWORZENIE |
Sphere.ByCenterPointRadius Tworzy bryłę sferyczną ze środkiem w punkcie wejściowym, o podanym promieniu. |
TWORZENIE |
Surface.ByLoft Tworzy powierzchnię przez wyciągnięcie między krzywymi wejściowymi przekroju poprzecznego. |
Surface.ByPatch Tworzy powierzchnię przez wypełnienie wnętrza zamkniętej obwiedni określonej przez krzywe wejściowe. |
DZIAŁANIA |
Surface.Offset Odsuwa powierzchnię w kierunku normalnej powierzchni o określoną odległość. |
Surface.PointAtParameter Zwraca punkt dla określonych parametrów U i V. |
Surface.Thicken Pogrubia powierzchnię w celu utworzenia bryły, wyciągając w kierunku normalnych powierzchni po obu stronach powierzchni. |
TWORZENIE |
UV.ByCoordinates Tworzy UV z dwóch wartości podwojonych. |
TWORZENIE |
Vector.ByCoordinates Tworzy wektor z trzech współrzędnych euklidesowych. |
Vector.XAxis Pobiera kanoniczny wektor osi X (1,0,0). |
Vector.YAxis Pobiera kanoniczny wektor osi Y (0,1,0). |
Vector.ZAxis Pobiera kanoniczny wektor osi Z (0,0,1). |
DZIAŁANIA |
Vector.Normalized Pobiera znormalizowaną wersję wektora. |
TWORZENIE |
CoordinateSystem.ByOrigin Tworzy układ współrzędnych z początkiem w punkcie wejściowym, z osiami X i Y ustawionymi jako osie X i Y GUW. |
CoordinateSystem.ByCyclindricalCoordinates Tworzy układ współrzędnych o określonych parametrach współrzędnych walcowych względem określonego układu współrzędnych. |
+ Dodawanie |
- Odejmowanie |
* Mnożenie |
/ Dzielenie |
% Dzielenie modulo. Oblicza resztę z dzielenia pierwszej wartości wejściowej przez drugą. |
< Mniejsze niż |
> Większe niż |
== Test równości między dwiema wartościami. |
W dziedzinie modelowania obliczeniowego siatki są jedną z najbardziej rozpowszechnionych form reprezentowania geometrii 3D. Geometria siatki jest zazwyczaj zbudowana z kolekcji czworokątów lub trójkątów. Może ona być uproszczoną i elastyczną alternatywą dla pracy z obiektami NURBS. Siatki są używane we wszystkich zastosowaniach — od renderowania i wizualizacji po cyfrowe wytwarzanie i drukowanie 3D.
Dodatek Dynamo definiuje siatki za pomocą struktury danych wierzchołek-powierzchnia. Na najbardziej podstawowym poziomie struktura ta stanowi po prostu zbiór punktów, które są pogrupowane w wieloboki. Punkty siatki są nazywane wierzchołkami, natomiast wieloboki podobne do powierzchni nazywane są powierzchniami.
Aby utworzyć siatkę, potrzebna jest lista wierzchołków i system grupowania tych wierzchołków w powierzchnie zwany grupą indeksów.
Lista wierzchołków
Lista grup indeksów do zdefiniowania powierzchni
Możliwości tworzenia siatki w dodatku Dynamo można rozszerzyć, instalując pakiet Mesh Toolkit. Zestaw Dynamo Mesh Toolkit zawiera narzędzia do importowania siatek z zewnętrznych formatów plików, tworzenia siatki z obiektów geometrii Dynamo oraz ręcznego tworzenia siatek na podstawie wierzchołków i indeksów.
Ta biblioteka zawiera również narzędzia do modyfikowania siatek, naprawiania siatek i wyodrębniania warstw poziomych do użycia w produkcji.
Odwiedź stronę analiz przypadków pakietu Mesh Toolkit, aby zapoznać się z przykładem korzystania z tego pakietu.
Siatka jest zbiorem czworokątów i trójkątów reprezentujących geometrię powierzchni lub bryły. Podobnie jak w przypadku brył, struktura obiektu siatki zawiera wierzchołki, krawędzie i powierzchnie. Istnieją dodatkowe właściwości, dzięki którym siatki są niepowtarzalne, jak na przykład normalne.
Wierzchołki siatki
Krawędzie siatki *Krawędzie z tylko jedną przylegającą powierzchnią są nazywane „nagimi”. Pozostałe krawędzie są „obleczone”
Powierzchnie siatki
Wierzchołki siatki są po prostu listą punktów. Indeks wierzchołków jest bardzo ważny podczas tworzenia siatki oraz uzyskiwania informacji o strukturze siatki. Dla każdego wierzchołka istnieje również odpowiadająca mu normalna wierzchołka (wektor), która opisuje średni kierunek dołączonych powierzchni i pomaga zrozumieć orientację „do wewnątrz” i „na zewnątrz” siatki.
Wierzchołki
Normalne wierzchołków
Powierzchnia stanowi uporządkowaną listę trzech lub czterech wierzchołków. Reprezentacja „powierzchni” siatki jest więc wnioskowana na podstawie położenia indeksowanych wierzchołków. Mamy już listę wierzchołków tworzących siatkę, więc zamiast udostępniać pojedyncze punkty w celu zdefiniowania powierzchni, wystarczy użyć indeksu wierzchołków. Dzięki temu możemy użyć tego samego wierzchołka w więcej niż jednej powierzchni.
Czworokątna powierzchnia utworzona z indeksami 0, 1, 2 i 3
Trójkątna powierzchnia utworzona z indeksami 1, 4 i 2 Uwaga: grupy indeksów mogą być przesunięte w kolejności — o ile kolejność jest ustawiona w kierunku przeciwnym do ruchu wskazówek zegara, powierzchnia zostanie zdefiniowana poprawnie
Czym różni się geometria siatki od geometrii NURBS? Kiedy można użyć jednej zamiast drugiej?
W poprzednim rozdziale pokazano, że powierzchnie NURBS są definiowane przez serię krzywych NURBS biegnących w dwóch kierunkach. Kierunki te są oznaczone jako U
i V
. Umożliwiają parametryzowanie powierzchni NURBS zgodnie z domeną powierzchni dwuwymiarowej. Same krzywe są przechowywane w postaci równań w komputerze, dzięki czemu wynikowe powierzchnie mogą być obliczane z dowolnym stopniem dokładności. Łączenie wielu powierzchni NURBS może być jednak trudne. Połączenie dwóch powierzchni NURBS spowoduje utworzenie polipowierzchni, w której różne przekroje geometrii będą miały różne parametry UV i definicje krzywych.
Powierzchnia
Krzywa izoparametryczna
Punkt kontrolny powierzchni
Wielobok kontrolny powierzchni
Punkt izoparametryczny
Ramka powierzchni
Siatka
Naga krawędź
Sieć siatki
Krawędzie siatki
Normalna wierzchołka
Powierzchnia siatki/Normalna powierzchni siatki
Natomiast siatki składają się z określonej liczby dokładnie zdefiniowanych wierzchołków i powierzchni. Sieć wierzchołków nie może być ogólnie zdefiniowana przez proste współrzędne UV
, a ponieważ liczba powierzchni jest określona, stopień dokładności jest wbudowany w siatkę. Można go zmienić tylko przez uściślenie siatki i dodanie większej liczby powierzchni. Brak opisów matematycznych pozwala na elastyczniejszą obsługę złożonych geometrii za pomocą jednej siatki.
Inną ważną różnicą jest zakres, w jakim zmiana lokalna w geometrii siatki lub NURBS wpływa na całą formę. Przesunięcie jednego wierzchołka siatki ma wpływ tylko na powierzchnie, które przylegają do tego wierzchołka. W powierzchniach NURBS stopień wpływu jest bardziej skomplikowany i zależy od stopnia powierzchni, jak również od wag i węzłów punktów kontrolnych. Jednak przesunięcie pojedynczego punktu kontrolnego w powierzchni NURBS powoduje gładsze, bardziej rozległe zmiany w geometrii.
Powierzchnia NURBS — przesunięcie punktu kontrolnego ma wpływ, który rozciąga się na całą powierzchnię kształtu
Geometria siatki — przesunięcie wierzchołka ma wpływ tylko na sąsiednie elementy
Jedną z analogii, która może być pomocna, jest porównanie obrazu wektorowego (składającego się z linii i krzywych) z obrazem rastrowym (składającym się z poszczególnych pikseli). Po powiększeniu obrazu wektorowego krzywe pozostają wyraźne i przejrzyste. Natomiast powiększenie obrazu rastrowego powoduje, że poszczególne piksele stają się większe. W tej analogii powierzchnie NURBS odpowiadają obrazowi wektorowemu, ponieważ istnieje gładka zależność matematyczna. Natomiast siatka zachowuje się podobnie do obrazu rastrowego z ustawioną rozdzielczością.
Gdy będziemy już gotowi, aby bardziej szczegółowo zająć się tworzeniem programów wizualnych, będziemy potrzebować lepszego zrozumienia używanych składników. W tym rozdziale przedstawiono podstawowe pojęcia dotyczące danych — czyli tego, co przepływa przez przewody programu dodatku Dynamo.
Krzywe są pierwszym z opisanych typów danych geometrycznych, które mają bardziej znany zestaw właściwości opisujących kształt: jak bardzo są zakrzywione lub proste? Jak są długie lub krótkie? Należy też pamiętać, że punkty są nadal blokami konstrukcyjnymi służącymi do definiowania dowolnego elementu — od linii do splajnu oraz wszystkich typów krzywych.
Linia
Polilinia
Łuk
Okrąg
Elipsa
Krzywa NURBS
Krzywa PolyCurve
NURBS to model używany do dokładnego przedstawiania krzywych i powierzchni. Krzywa sinusoidalna w dodatku Dynamo utworzona za pomocą dwóch różnych metod tworzenia krzywych NURBS w celu porównania wyników.
Węzeł NurbsCurve.ByControlPoints używa listy punktów jako punktów kontrolnych
Węzeł NurbsCurve.ByPoints rysuje krzywą przechodzącą przez listę punktów
Pobierz plik przykładowy, klikając poniższe łącze.
Pełna lista plików przykładowych znajduje się w załączniku.
Termin Krzywa obejmuje zazwyczaj wszystkie różne kształty zakrzywione (nawet jeśli są proste). Krzywa jako taka to nadrzędna kategoryzacja wszystkich tych typów kształtów — linii, okręgów, splajnów itp. Określając to bardziej technicznie: krzywa opisuje każdy możliwy punkt, który można znaleźć przez wprowadzenie „t” do kolekcji funkcji — od funkcji prostych (x = -1.26*t, y = t
) po funkcje wymagające przeprowadzenia złożonych obliczeń. Niezależnie od tego, z jakiego rodzaju krzywą pracujemy, ten parametr o nazwie „t” jest właściwością, którą można ocenić. Ponadto niezależnie od wyglądu kształtu wszystkie krzywe mają także punkt początkowy i punkt końcowy, które zbiegają się z minimalnymi i maksymalnymi wartościami „t” użytymi do utworzenia krzywej. Pomaga to również zrozumieć jej kierunkowość.
Ważne: dodatek Dynamo zakłada, że domena wartości „t” dla krzywej jest rozumiana jako 0,0 do 1,0.
Wszystkie krzywe posiadają również wiele właściwości lub cech, których można używać do ich opisania lub analizy. Gdy odległość między punktem początkowym a końcowym wynosi zero, krzywa jest „zamknięta”. Ponadto każda krzywa ma wiele punktów kontrolnych, a jeśli wszystkie te punkty znajdują się w tej samej płaszczyźnie, krzywa jest „płaska”. Niektóre właściwości mają zastosowanie do całej krzywej, natomiast inne mają zastosowanie tylko do określonych punktów wzdłuż krzywej. Na przykład płaskość stanowi właściwość globalną, a wektor styczny dla danej wartości „t” stanowi właściwość lokalną.
Linie są najprostszą postacią krzywych. Mogą nie wyglądać na zakrzywione, ale w rzeczywistości są krzywymi — bez krzywizny. Istnieje kilka różnych sposobów tworzenia linii. Najbardziej intuicyjna to pociągnięcie jej od punktu A do punktu B. Kształt linii AB zostanie narysowany między punktami, z matematycznego punktu widzenia będzie się ona rozciągać w nieskończoność w obu kierunkach.
Po połączeniu dwóch linii uzyskujemy polilinię. Tutaj mamy prostą reprezentację punktu kontrolnego. Edycja dowolnego z tych punktów spowoduje zmianę kształtu polilinii. Jeśli polilinia jest zamknięta, mamy do czynienia z wielobokiem. Jeśli długości krawędzi wieloboku są równe, określamy go jako regularny.
Wraz ze wzrostem złożoności funkcji parametrycznych definiujących kształt możemy pójść o krok dalej od linii, aby utworzyć łuk, okrąg, łuk eliptyczny lub elipsę, opisując jeden lub dwa promienie. Różnice między łukiem a okręgiem lub elipsą polegają tylko na tym, czy kształt jest zamknięty.
NURBS (niejednorodne wymierne splajny podstawowe) to reprezentacje matematyczne, które mogą dokładnie modelować dowolne kształty — od prostej dwuwymiarowej linii, okręgu, łuku lub prostokąta po najbardziej złożoną trójwymiarową swobodną krzywą organiczną. Ze względu na swoją elastyczność (stosunkowo niewiele punktów kontrolnych, a przy tym gładką interpolację opartą na ustawieniach stopni) i precyzję (związanie przez solidną matematykę) modele NURBS mogą być używane w każdym procesie: od ilustracji i animacji po produkcję.
Stopień: stopień krzywej określa zakres wpływu, jaki punkty kontrolne mają na krzywą; im większy stopień, tym większy ten zakres. Stopień jest dodatnią liczbę całkowitą. Liczba ta wynosi zazwyczaj 1, 2, 3 lub 5, ale może być dowolną dodatnią liczbą całkowitą. Linie NURBS i polilinie mają zazwyczaj stopień 1, a większość krzywych swobodnych ma stopień 3 lub 5.
Punkty kontrolne: punkty kontrolne to lista punktów o długości co najmniej stopnień+1. Jedną z najprostszych metod zmiany kształtu krzywej NURBS jest przesunięcie jej punktów kontrolnych.
Waga: punkty kontrolne mają skojarzoną liczbę zwaną wagą. Wagi są zazwyczaj liczbami dodatnimi. Gdy wszystkie punkty kontrolne krzywej mają tę samą wagę (zwykle 1), krzywa jest nazywana niewymierną. W przeciwnym razie krzywa jest nazywana wymierną. Większość krzywych NURBS jest niewymiernych.
Węzły: węzły są listą liczb (stopień+N-1), gdzie N jest liczbą punktów kontrolnych. Węzły są używane razem z wagami do sterowania wpływem punktów kontrolnych na wynikową krzywą. Jeden z nich służy do tworzenia punktów podziału w niektórych punktach krzywej.
Stopień = 1
Stopień = 2
Stopień = 3
Należy zauważyć, że im większa wartość stopnia, tym więcej punktów kontrolnych jest używanych do interpolacji wynikowej krzywej.
Dane są niezbędnym elementem programów. Podróżują przez przewody, trafiając na wejścia węzłów, w których są przetwarzane i przekształcane do nowej postaci — danych wyjściowych. Przeanalizujmy definicję danych, ich strukturę i rozpocznijmy korzystanie z nich w dodatku Dynamo.
Dane to zestaw wartości zmiennych jakościowych lub ilościowych. Najprostszą formą danych są liczby, takie jak 0
, 3.14
lub 17
. Jednak dane mogą być wielu innych typów, jak na przykład zmienna reprezentująca zmieniające się liczby (height
), znaki (myName
), geometria (Circle
) lub lista elementów danych (1,2,3,5,8,13,...
).
W dodatku Dynamo dodaje się/przekazuje się dane do portów wejściowych węzłów — można mieć dane bez operacji, ale aby przetworzyć operacje reprezentowane przez węzły, dane są niezbędne. Po dodaniu węzła do obszaru roboczego, jeśli nie ma on żadnych wejść, wynik będzie funkcją, a nie wynikiem samej operacji.
Proste dane
Pomyślne wykonanie danych i operacji (węzeł A)
Operacja (węzeł A) bez danych wejściowych zwraca funkcję ogólną
Uwaga: typ 'null'
„null” reprezentuje brak danych. Chociaż jest to pojęcie abstrakcyjne, często można się z nim spotkać podczas pracy z programowaniem wizualnym. Jeśli operacja nie utworzy poprawnego wyniku, węzeł zwróci wartość null.
Testowanie pod kątem wartości null i usuwanie ich ze struktury danych jest kluczową częścią tworzenia skutecznych programów.
Programowanie wizualne umożliwia bardzo szybkie generowanie dużej ilości danych, co może wymagać metod zarządzania ich hierarchią. Taka właśnie jest rola struktur danych, schematów organizacyjnych, w których przechowujemy dane. Specyfika struktur danych i sposób ich używania zależą od konkretnego języka programowania.
W dodatku Dynamo dodajemy hierarchię do danych za pomocą list. Przeanalizujemy to szczegółowo w kolejnych rozdziałach, ale na początek możemy po prostu stwierdzić, że:
Lista reprezentuje kolekcję elementów umieszczonych w jednej strukturze danych:
Mam pięć palców (elementy) dłoni (lista).
Na mojej ulicy (lista) jest dziesięć domów (elementy).
Węzeł Number Sequence definiuje listę liczb za pomocą wejść start, amount i step. Za pomocą tych węzłów utworzyliśmy dwie oddzielne listy dziesięciu liczb, jedna z nich obejmuje liczby 100–109, a druga — 0–9.
Węzeł List.GetItemAtIndex wybiera element z listy o określonym indeksie. W przypadku wybrania indeksu 0 pobieramy pierwszy element z listy (w tym przypadku 100).
Stosując ten sam proces do drugiej listy, otrzymujemy wartość 0, czyli pierwszy element na liście.
Teraz scalamy dwie listy w jedną, używając węzła List.Create. Warto zauważyć, że węzeł tworzy listę list. Powoduje to zmianę struktury danych.
Teraz gdy ponownie użyjemy węzła List.GetItemAtIndex z indeksem 0, pobierzemy pierwszą listę na liście list. Oznacza to, że lista jest traktowana jak element — stanowi to pewną różnicę w porównaniu z innymi językami skryptowymi. W kolejnych rozdziałach bardziej szczegółowo zajmiemy się manipulowaniem listami i strukturami danych.
Kluczowe pojęcie hierarchii danych w dodatku Dynamo, które należy zrozumieć: w odniesieniu do struktury danych listy są traktowane jak elementy. Innymi słowy, analizując strukturę danych, dodatek Dynamo stosuje proces „od góry do dołu”. Co to oznacza? Przeanalizujmy to na przykładzie.
Pobierz plik przykładowy, klikając poniższe łącze.
Pełna lista plików przykładowych znajduje się w załączniku.
W pierwszym przykładzie złożymy walec z powłoką, stosując hierarchię geometrii opisaną w tej sekcji.
1. Dodaj węzeł Point.ByCoordinates. Po dodaniu węzła do obszaru rysunku widać punkt w początku siatki podglądu dodatku Dynamo. Domyślne wartości wejść x, y i z to 0,0, co daje punkt w tym położeniu.
2. Plane.ByOriginNormal — następny krok w hierarchii geometrii to płaszczyzna. Istnieje kilka sposobów skonstruowania płaszczyzny — użyjemy dla wejścia pozycji origin i normal. Origin (początek) to węzeł punktu utworzony w poprzednim kroku.
Vector.ZAxis — jest to wektor jednostkowy w kierunku z. Warto zwrócić uwagę, że nie ma wejść, tylko wektor o wartości [0,0,1]. Użyjemy go jako wejścia normal dla węzła Plane.ByOriginNormal. Pozwala to uzyskać prostokątną płaszczyznę w podglądzie dodatku Dynamo.
3. Circle.ByPlaneRadius — dodając następny etap w hierarchii, tworzymy teraz krzywą z płaszczyzny w poprzednim kroku. Po utworzeniu podłączenia do węzła uzyskujemy okrąg w początku. Domyślna wartość promienia (radius) węzła wynosi 1.
4. Curve.Extrude — teraz dodamy temu elementowi wyrazu, nadając mu głębię i dodając trzeci wymiar. Ten węzeł tworzy powierzchnię z krzywej poprzez jej wyciągnięcie. Domyślna odległość w węźle wynosi 1, a w rzutni powinien być widoczny walec.
5. Surface.Thicken — ten węzeł umożliwia uzyskanie zamkniętej bryły przez odsunięcie powierzchni o określoną odległość i zamknięcie formy. Domyślna wartość grubości wynosi 1, a w rzutni widoczny jest walec z powłoką, zgodny z tymi wartościami.
6. Number Slider — zamiast używać domyślnych wartości dla wszystkich tych wejść, dodajmy do modelu kontrolę parametryczną.
Domain Edit — po dodaniu do obszaru rysunku węzła Number Slider kliknij daszek w lewym górnym rogu, aby wyświetlić opcje domeny.
Min/Max/Step — zmień wartości min, max i step na odpowiednio 0, 2 i 0,01. Umożliwia to sterowanie wielkością całkowitej geometrii.
7. Węzły Number Slider — we wszystkich domyślnych wejściach skopiujmy i wklejmy kilka razy ten suwak liczby (wybierz suwak, naciśnij klawisze Ctrl+C, a następnie klawisze Ctrl+V), tak aby wszystkie wejścia z domyślnymi wartościami miały zamiast nich suwaki. Niektóre z wartości suwaka muszą być większe od zera, aby definicja działała (na przykład potrzebna jest głębokość wyciągnięcia w celu pogrubienia powierzchni).
8. Za pomocą tych suwaków utworzyliśmy teraz parametryczny walec z powłoką. Spróbuj zmieniać niektóre z tych parametrów i obserwuj, jak geometria jest aktualizowana dynamicznie w rzutni dodatku Dynamo.
Węzły Number Slider — w ramach kontynuacji dodaliśmy wiele suwaków do obszaru rysunku i musimy oczyścić interfejs właśnie utworzonego narzędzia. Kliknij prawym przyciskiem myszy jeden suwak, wybierz polecenie „Zmień nazwę” i zmień nazwę każdego suwaka na odpowiednią dla danego parametru (thickness — „grubość”, Radius — „promień”, Height — „wysokość” itp.).
9. W tym momencie mamy już utworzony wspaniały walec z pogrubieniem. Obecnie jest to jeden obiekt. Przyjrzyjmy się temu, jak utworzyć szyk walców pozostających dynamicznie połączonych. W tym celu utworzymy listę walców, zamiast pracować z pojedynczym elementem.
Dodawanie (+) — naszym celem jest dodanie wiersza walców obok utworzonego walca. Aby dodać jeden walec przylegający do bieżącego, musimy uwzględnić zarówno promień walca, jak i grubość jego powłoki. Uzyskamy tę liczbę przez dodanie dwóch wartości suwaków.
10. Ten krok jest trudniejszy, więc przeanalizujmy go powoli: celem końcowym jest utworzenie listy liczb definiujących położenie każdego walca w wierszu.
a. Mnożenie — najpierw pomnożymy wartość z poprzedniego kroku przez 2. Wartość z poprzedniego kroku reprezentuje promień. Chcemy przesunąć walec o pełną średnicę.
b. Number Sequence — za pomocą tego węzła tworzymy szyk liczb. Pierwsze wejście to węzeł mnożenia (multiplication) z poprzedniego kroku skierowany do wartości step. Wartość start można ustawić na 0,0 za pomocą węzła number.
c. Integer Slider — w przypadku wartości amount połączymy suwak liczby całkowitej. Określi to liczbę utworzonych walców.
d. Output — na tej liście znajduje się przesunięcie każdego walca w szyku i jest ona parametrycznie sterowana przez oryginalne suwaki.
11. Ten krok jest prosty — podłącz sekwencję zdefiniowaną w poprzednim kroku do wejścia x oryginalnego węzła Point.ByCoordinates. Spowoduje to zastąpienie suwaka pointX, który można usunąć. Teraz widzimy szyk walców w rzutni (upewnij się, że suwak liczby całkowitej ma wartość większą niż 0).
12. Łańcuch cylindrów jest nadal dynamicznie połączony ze wszystkimi suwakami. Zmieniaj wartości poszczególnych suwaków i obserwuj aktualizację definicji.
Powierzchni używa się w modelu do reprezentowania obiektów, które widzimy w trójwymiarowym świecie. Chociaż krzywe nie zawsze są płaskie, mogą być na przykład trójwymiarowe, definiowana przez nie przestrzeń jest zawsze związana z jednym wymiarem. Powierzchnie dają nam kolejny wymiar oraz zbiór dodatkowych właściwości, które możemy wykorzystać w ramach innych operacji modelowania.
Zaimportuj i oszacuj powierzchnię przy danym parametrze w dodatku Dynamo, aby zobaczyć, jakie informacje możemy wyodrębnić.
Surface.PointAtParameter — zwraca punkt przy danej współrzędnej UV
Surface.NormalAtParameter — zwraca wektor normalny przy danej współrzędnej UV
Surface.GetIsoline — zwraca krzywą izoparametryczną przy danej współrzędnej U lub V (zwróć uwagę na wejście isoDirection).
Pobierz pliki przykładowe, klikając poniższe łącze.
Pełna lista plików przykładowych znajduje się w załączniku.
Powierzchnia stanowi kształt matematyczny zdefiniowany przez funkcję i dwa parametry. Zamiast t
używanego w przypadku krzywych używa się U
i V
, aby opisać odpowiednią przestrzeń parametrów. Oznacza to, że mamy więcej danych geometrycznych, z których można korzystać podczas pracy z tym typem geometrii. Na przykład krzywe mają wektory styczne i płaszczyzny normalne (które mogą obracać się lub skręcać wzdłuż długości krzywej), natomiast powierzchnie mają wektory normalne i płaszczyzny styczne, które są spójne z ich orientacją.
Powierzchnia
Krzywa izometryczna U
Krzywa izometryczna V
Współrzędna UV
Płaszczyzna prostopadła
Wektor normalny
Domena powierzchni: domena powierzchni jest zdefiniowana jako zakres parametrów (U,V), które dają w wyniku punkt trójwymiarowy na tej powierzchni. Domena w każdym wymiarze (U lub V) jest zazwyczaj określana jako dwie liczby (od min. U do maks. U) i (od min. V do maks. V).
Mimo że kształt powierzchni może nie wyglądać „prostokątnie” i może ona mieć lokalnie ściślejszy lub luźniejszy zestaw krzywych izometrycznych, „przestrzeń”definiowana przez jej domenę zawsze jest dwuwymiarowa. W dodatku Dynamo zawsze zakłada się, że powierzchnie mają domeny zdefiniowane przez minimum o wartości 0,0 i maksimum o wartości 1,0 w obu kierunkach U i V. Powierzchnie płaskie lub przycięte mogą mieć inne domeny.
Krzywa izometryczna (lub krzywa izoparametryczna): krzywa zdefiniowana przez stałą wartość U lub V na powierzchni i domenę wartości dla odpowiedniego kierunku U lub V.
Współrzędna UV: punkt w przestrzeni parametrów UV zdefiniowany przez U, V, a czasem W.
Płaszczyzna prostopadła: płaszczyzna, która jest prostopadła do obu krzywych izometrycznych U i V przy danej współrzędnej UV.
Wektor normalny: wektor definiujący kierunek „w górę” względem płaszczyzny prostopadłej.
Powierzchnie NURBS są bardzo podobne do krzywych NURBS. Powierzchnie NURBS można traktować jako siatkę krzywych NURBS, które biegną w dwóch kierunkach. Kształt powierzchni NURBS jest definiowany przez wiele punktów kontrolnych i stopień tej powierzchni w kierunkach U i V. Te same algorytmy służą do obliczania kształtu, normalnych, stycznych, krzywizn i innych właściwości za pomocą punktów kontrolnych, wag i stopnia.
W przypadku powierzchni NURBS istnieją dwa kierunki oznaczone geometrią, ponieważ powierzchnie NURBS są (niezależnie od kształtu, jaki widzimy) prostokątnymi siatkami punktów kontrolnych. Mimo że te kierunki są często arbitralne względem globalnego układu współrzędnych, często używa się ich do analizy modeli lub generowania innej geometrii na podstawie danej powierzchni.
Stopień (U,V) = (3, 3)
Stopień (U,V) = (3, 1)
Stopień (U,V) = (1, 2)
Stopień (U,V) = (1, 1)
Polipowierzchnie (PolySurface) składają się z powierzchni połączonych wzdłuż krawędzi. Polipowierzchnie zapewniają więcej możliwości niż dwuwymiarowa definicja UV, ponieważ teraz można poruszać się po połączonych kształtach za pomocą ich topologii.
Chociaż „topologia” zazwyczaj opisuje to, w jaki sposób części są połączone i/lub powiązane, topologia w dodatku Dynamo jest także typem geometrii. Konkretnie jest to kategoria nadrzędna dla powierzchni, polipowierzchni i brył.
Łączenie powierzchni w ten sposób (czasem jest to nazywane płatami) pozwala tworzyć bardziej złożone kształty, jak również definiować szczegóły wzdłuż spoiny. W ten sposób można zastosować zaokrąglenie lub fazowanie do krawędzi polipowierzchni.
Jeśli chcemy tworzyć bardziej złożone modele, których nie można utworzyć z pojedynczej powierzchni, lub jeśli chcemy zdefiniować dokładną objętość, musimy teraz omówić bryły (i powierzchnie PolySurface). Nawet prosty sześcian jest wystarczająco złożony, aby wymagać sześciu powierzchni — po jednej na ścianę. Bryły zapewniają dostęp do dwóch kluczowych pojęć, które nie istnieją w przypadku powierzchni — bardziej szczegółowego opisu topologicznego (powierzchni, krawędzi, wierzchołków) i operacji logicznych.
Do modyfikowania brył można używać operacji logicznych. Użyjmy kilku operacji logicznych, by utworzyć kolczastą kulę.
Sphere.ByCenterPointRadius: utwórz bryłę bazową.
Topology.Faces, Face.SurfaceGeometry: wykonaj zapytanie dotyczące powierzchni bryły i przekształć w geometrię powierzchni — w tym przypadku sfera ma tylko jedną powierzchnię.
Cone.ByPointsRadii: utwórz stożki przy użyciu punktów na powierzchni.
Solid.UnionAll: zsumuj stożki i sferę.
Topology.Edges: wykonaj zapytanie dotyczące krawędzi nowej bryły.
Solid.Fillet: dodaj do krawędzi kolczastej kuli zaokrąglenia.
Pobierz plik przykładowy, klikając poniższe łącze.
Pełna lista plików przykładowych znajduje się w załączniku.
Operacje logiczne są złożone i ich obliczanie może być powolne. Za pomocą funkcji „blokowania” można wstrzymać wykonywanie wybranych węzłów i zależnych od nich węzłów na dalszym etapie przepływu.
1. Użyj menu kontekstowego wyświetlanego po kliknięciu prawym przyciskiem myszy, aby zablokować operację sumowania brył
2. Wybrany węzeł i wszystkie węzły na dalszym etapie przepływu będą wyświetlane w podglądzie z jasnoszarym cieniowaniem, a zależne przewody będą wyświetlane jako linie kreskowane. Także zależny podgląd geometrii będzie cieniowany. Teraz można zmienić wartości na wcześniejszym etapie przepływu bez obliczania sumy logicznej.
3. Aby odblokować węzły, kliknij prawym przyciskiem myszy i wyczyść pole wyboru Zablokuj.
4. Wszystkie zależne węzły i skojarzone podglądy geometrii zostaną zaktualizowane i wrócą do standardowego trybu podglądu.
Więcej informacji na temat blokowania węzłów można znaleźć w sekcji Węzły i przewody.
Bryły składają się z jednej lub większej liczby powierzchni, które obejmują objętość w ramach zamkniętej obwiedni definiującej kierunek „do wewnątrz” lub „na zewnątrz”. Niezależnie od tego, ile jest tych powierzchni, muszą one tworzyć „szczelną” objętość, aby można było je uważać za bryłę. Bryły można tworzyć przez połączenie powierzchni lub polipowierzchni albo za pomocą operacji, takich jak wyciągnięcie złożone, przeciągnięcie i obrót. Obiekty elementarne takie jak sfera, sześcian, stożek i walec są również bryłami. Sześcian z usuniętą co najmniej jedną powierzchnią to polipowierzchnia, która ma podobne właściwości, ale nie jest bryłą.
Płaszczyzna składa się z pojedynczej powierzchni i nie jest bryłą.
Sfera składa się z pojedynczej powierzchni, ale jest bryłą.
Stożek składa się z dwóch połączonych ze sobą powierzchni tworzących bryłę.
Walec składa się z trzech połączonych ze sobą powierzchni tworzących bryłę.
Sześcian składa się z sześciu połączonych ze sobą powierzchni tworzących bryłę.
Bryły składają się z trzech typów elementów: wierzchołków, krawędzi i ścian. Ściany to powierzchnie tworzące bryłę. Krawędziami są krzywe definiujące połączenie pomiędzy przyległymi ścianami, a wierzchołki to punkty początkowe i końcowe tych krzywych. Te elementy mogą być przywoływane za pomocą węzłów topologii.
Powierzchnie
Krawędzie
Wierzchołki
Bryły można modyfikować przez zaokrąglenie lub fazowanie ich krawędzi w celu wyeliminowania ostrych narożników i kątów. Operacja fazowania tworzy powierzchnię prostokreślną między dwiema ścianami, natomiast zaokrąglenie łączy ściany, aby zachować styczność.
Sześcian bryłowy
Sześcian z fazowaniem
Sześcian z zaokrągleniami
Operacje logiczne na bryłach są metodami łączenia dwóch lub większej liczby brył. Pojedyncza operacja logiczna oznacza właściwie wykonanie czterech operacji:
Przecięcie dwóch lub większej liczby obiektów.
Podzielenie ich w punktach przecięcia.
Usunięcie niepotrzebnych części geometrii.
Połączenie wszystkiego z powrotem.
Union (suma): usuń nakładające się części brył i połącz je w jedną bryłę.
Difference (różnica): odejmij jedną bryłę od drugiej. Bryła odejmowana jest określana jako narzędzie. Warto zauważyć, że można zamienić bryłę wskazaną jako narzędzie, aby zachować odwrotną objętość.
Intersection (przecięcie): zachowaj tylko przecinającą się objętość dwóch brył.
UnionAll: operacja sumy ze sferą i stożkami skierowanymi na zewnątrz
DifferenceAll: operacja różnicy ze sferą i stożkami skierowanymi do wewnątrz
Listy są sposobem organizowania danych. W systemie operacyjnym komputera dostępne są pliki i foldery. W dodatku Dynamo można je traktować jako odpowiednio elementy i listy. Podobnie jak w systemie operacyjnym, istnieje wiele sposobów tworzenia, modyfikowania i przywoływania danych. W tym rozdziale omówimy sposób zarządzania listami w dodatku Dynamo.
Formalnie ciąg jest sekwencją znaków reprezentujących stałą literową lub pewnego typu zmienną. Nieformalnie ciąg (string) to programistyczne określenie tekstu. Pracowaliśmy już z liczbami, zarówno z liczbami całkowitymi, jak i z liczbami dziesiętnymi, aby sterować parametrami. Tak samo możemy pracować z tekstem.
Ciągi mogą być używane w wielu zastosowaniach, w tym do definiowania parametrów niestandardowych, opisywania zestawów dokumentacji i analizowania zestawów danych tekstowych. Węzeł string (ciąg) znajduje się w kategorii Podstawowe > Kategoria wejściowa.
Przykładowe węzły powyżej są ciągami. Liczba może być przedstawiona jako ciąg, podobnie jak litera lub cały szyk tekstu.
Pobierz plik przykładowy, klikając poniższe łącze.
Pełna lista plików przykładowych znajduje się w załączniku.
Można szybko analizować duże ilości danych, stosując zapytania do ciągów. Omówimy niektóre podstawowe operacje, które przyspieszają proces roboczy i ułatwiają współdziałanie oprogramowania.
Na poniższej ilustracji przedstawiono ciąg danych pochodzących z zewnętrznego arkusza kalkulacyjnego. Ciąg reprezentuje wierzchołki prostokąta na płaszczyźnie XY. Przeanalizujmy niektóre operacje dzielenia ciągów w miniaturowym ćwiczeniu:
Separator „;” oddziela każdy wierzchołek prostokąta. Powoduje to utworzenie listy z 3 elementami dla każdego wierzchołka.
Naciśnięcie klawisza „+” w środku węzła powoduje utworzenie nowego separatora.
Dodaj ciąg „,” do obszaru rysunku i utwórz podłączenie do nowego wejścia separatora.
Wynik stanowi teraz listę dziesięciu elementów. Węzeł wykonuje dzielenie najpierw na podstawie separatora separator0, a następnie na podstawie separatora separator1.
Powyższa lista elementów może wyglądać jak liczby, ale nadal są one traktowane w dodatku Dynamo jak pojedyncze ciągi. Aby można było utworzyć punkty, ich typ danych musi zostać przekształcony z ciągu w liczbę. Jest to wykonywane za pomocą węzła String.ToNumber
Ten węzeł jest prosty. Podłącz wyniki węzła String.Split do wejścia. Wynik nie wygląda inaczej, ale typ danych to teraz number (liczba), a nie string (ciąg).
Po wykonaniu pewnych dodatkowych podstawowych operacji mamy teraz trójkąt narysowany w punkcie początkowym na podstawie oryginalnego wejścia string.
Ponieważ ciąg jest ogólnym obiektem tekstowym, zakres jego zastosowań jest szeroki. Przyjrzyjmy się niektórym istotnym operacjom w obszarze Podstawowe > Kategoria ciągu w dodatku Dynamo:
Jest to metoda łączenia dwóch ciągów w kolejności. Powoduje pobranie każdego ciągu literalnego z listy i utworzenie jednego scalonego ciągu.
Poniżej przedstawiono scalanie trzech ciągów:
Aby dodać lub odjąć ciągi w scaleniu, można kliknąć przyciski +/- w środku węzła.
Wynikiem jest jeden scalony ciąg ze spacjami i interpunkcją.
Metoda łączenia jest bardzo podobna do scalania, ale zawiera dodatkową warstwę interpunkcji.
Osoby pracujące w programie Excel prawdopodobnie miały już do czynienia z plikami CSV. Są to pliki z wartościami rozdzielonymi przecinkami. Można użyć przecinka (lub, jak w tym przypadku, dwóch kresek) jako separatora z węzłem String.Join, aby utworzyć podobną strukturę danych.
Poniższa ilustracja przedstawia łączenie dwóch ciągów:
Wejście separatora umożliwia utworzenie ciągu rozdzielającego łączone ciągi.
Zacznijmy od podstawowego podziału ciągu zwrotki. Na początku należy zauważyć, że zapis jest sformatowany za pomocą przecinków. Użyjemy tego formatu, aby rozdzielić wiersze na poszczególne elementy.
Ciąg podstawowy zostaje wklejony do węzła String.
Do oznaczenia separatora używany jest inny węzeł String. W tym przypadku używamy przecinka.
Do obszaru rysunku zostaje dodany węzeł String.Split. Zostaje on połączony z tymi dwoma ciągami.
Wynik na wyjściu to wiersze będące osobnymi elementami.
Przejdźmy teraz do interesującej części wiersza: ostatnich dwóch wierszy. Oryginalna zwrotka była jednym elementem danych. Dane te zostały rozdzielone na poszczególne elementy w pierwszym kroku. Teraz musimy wyszukać tekst, który próbujemy znaleźć. Mimo że możemy to zrobić, wybierając dwa ostatnie elementy listy, to jednak jeśli byłaby to cała książka, nie chcielibyśmy czytać wszystkiego i ręcznie wyodrębniać elementów.
Zamiast ręcznego wyszukiwania używamy węzła String.Contains, aby wyszukać zestaw znaków. Jest to podobne do wykonywania polecenia „Znajdź” w edytorze tekstu. W tym przypadku zostanie zwrócona wartość „true” lub „false”, jeśli ten ciąg podrzędny zostanie znaleziony w elemencie.
W wejściu searchFor definiujemy ciąg podrzędny, którego szukamy w zwrotce. Użyjmy węzła String z tekstem „And miles”.
Zwrócony wynik zawiera listę pozycji false i true. Użyjemy tych wartości logicznych, aby przefiltrować elementy w następnym kroku.
List.FilterByBoolMask jest węzłem, za pomocą którego wyodrębnimy pozycje odpowiadające wartościom false i true. Wyjście „in” zwraca frazy z wejściem „mask” równym „true”, a wyjście „out” — te odpowiadające wartości „false”.
Wyniki na wyjściu „in” są zgodne z oczekiwaniami, czyli zwracają dwa ostatnie wiersze zwrotki.
Chcemy teraz podkreślić powtórzenie w tej zwrotce, scalając te dwa wiersze. Przeglądając wyniki na wyjściu w poprzednim kroku, łatwo zauważyć, że na liście znajdują się dwa elementy:
Za pomocą dwóch węzłów List.GetItemAtIndex można wyodrębnić te elementy, używając wartości 0 i 1 jako wejścia indeksu.
Na wyjściu każdego z tych węzłów pojawiają się dwa ostatnie wiersze — w kolejności.
Aby scalić te dwa elementy w jeden, użyjemy węzła String.Join:
Po dodaniu węzła String.Join widać, że potrzebny jest separator.
Aby utworzyć separator, dodamy węzeł String do obszaru rysunku i wpiszemy przecinek.
Ostatnie wyjście scala dwa ostatnie elementy w jeden.
Może to wydawać się dużą ilością pracy w celu wyodrębnienia dwóch ostatnich wierszy i to prawda — operacje na ciągach często wymagają pewnych początkowych nakładów pracy na. Ale są one skalowalne i mogą być względnie łatwo stosowane do dużych zestawów danych. Podczas pracy z zastosowaniem parametrów z arkuszami kalkulacyjnymi i funkcjami współdziałania należy pamiętać o operacjach na ciągach.
Logika, a w szczególności logika warunkowa, pozwala określić operację lub zestaw operacji na podstawie testu. Przez oszacowanie testu uzyskamy wartość logiczną reprezentującą prawdę (True
) lub fałsz (False
), za pomocą której można sterować przepływem programu.
Zmienne liczbowe mogą przechowywać liczby z szerokiego zakresu. Zmienne logiczne mogą przechowywać tylko dwie wartości, nazywane Prawda lub Fałsz, Tak lub Nie albo 1 lub 0. Rzadko stosuje się operacje logiczne do wykonywania obliczeń z powodu ich ograniczonego zakresu.
Instrukcja „If” (jeśli) stanowi kluczowe pojęcie w programowaniu: „Jeśli to jest prawdą, wtedy tak się stanie, w przeciwnym razie stanie się coś innego”. Wynikowa operacja tej instrukcji zależy od wartości logicznej. Istnieje wiele sposobów definiowania instrukcji „If” w dodatku Dynamo:
Ikona | Nazwa (składnia) | Dane wejściowe | Dane wyjściowe |
---|
Przeanalizujmy krótki przykład dotyczący działania każdego z tych trzech węzłów z użyciem instrukcji warunkowej „If”.
Na tej ilustracji wartość logiczna jest ustawiona na true, co oznacza, że wynik jest ciągiem: „this is the result if true” (to jest wynik, jeśli prawda). Trzy węzły tworzące instrukcję If działają tu w ten sam sposób.
Węzły działają identycznie. Jeśli wartość logiczna zostanie zmieniona na false, wynik będzie liczbą Pi, jak to zdefiniowano w oryginalnej instrukcji If.
Pobierz plik przykładowy, klikając poniższe łącze.
Pełna lista plików przykładowych znajduje się w załączniku.
Użyjmy logiki, aby rozdzielić listę liczb na listę liczb parzystych i listę liczb nieparzystych.
a. Number Range — dodaj zakres liczb do obszaru rysunku.
b. Number — dodaj trzy number liczb do obszaru rysunku. Wartość dla każdego węzła number powinna wynosić: 0,0 dla start, 10,0 dla end i 1,0 dla step.
c. Wyjście — wynik wyjściowy to lista 11 liczb w zakresie od 0 do 10.
d. Modulo (%) — węzeł Number Range do x i 2,0 do y. Spowoduje to obliczenie reszty z dzielenia przez 2 dla każdej liczby na liście. Wynik z tej listy to lista wartości 0 i 1.
e. Test równości (==) — dodaj test równości do obszaru rysunku. Podłącz wyjście modulo do wejścia x i wartość 0,0 do wejścia y.
f. Watch — wynik testu równości jest listą wartości logicznych true i false. Są to wartości używane do oddzielenia elementów na liście. 0 (lub true) reprezentuje liczby parzyste, a 1 (lub false) reprezentuje liczby nieparzyste.
g. List.FilterByBoolMask — ten węzeł filtruje wartości na dwie różne listy w oparciu o wejściową wartość logiczną. Podłącz oryginalny węzeł Number Range do wejścia list oraz wyjście equality test do wejścia mask. Wyjście in reprezentuje wartości true, podczas gdy wyjście out reprezentuje wartości false.
h. Watch — w wyniku tego mamy teraz listę liczb parzystych i listę liczb nieparzystych. Użyliśmy operatorów logicznych do rozdzielenia list na wzory.
Bazując na logice ustanowionej w pierwszym ćwiczeniu, zastosujmy tę konfigurację do operacji modelowania.
2. Oprzemy się na poprzednim ćwiczeniu z tymi samymi węzłami. Jedyne wyjątki to (oprócz zmiany formatu):
a. Użyj węzła Sequence z tymi wartościami wejściowymi.
b. Odłączyliśmy wejście list in od węzła List.FilterByBoolMask. Na razie odłożymy te węzły na bok, ale później w tym ćwiczeniu się przydadzą.
3. Zacznijmy od utworzenia oddzielnej grupy wykresu, jak pokazano na ilustracji powyżej. Ta grupa węzłów reprezentuje równanie parametryczne definiujące krzywą liniową. Kilka uwag:
a. Pierwszy suwak Number Slider reprezentuje częstotliwość fali. Powinien mieć wartość min. 1, maks. 4 i krok 0,01.
b. Drugi Number Slider reprezentuje amplitudę fali. Powinien mieć wartość min. 0, maks. 1 i krok równy 0,01.
c. PolyCurve.ByPoints — jeśli zostanie skopiowany powyższy wykres węzłów, wynikiem będzie krzywa sinusoidalna w rzutni podglądu Dynamo.
Metoda stosowana tutaj dla wejść: użyj węzłów number dla bardziej statycznych właściwości i węzłów Number Slider dla właściwości bardziej elastycznych. Chcemy zachować oryginalny węzeł Number Range definiowany na początku tego kroku. Jednak tworzona tutaj krzywa sinusoidalna powinna mieć pewną elastyczność. Możemy przesunąć te suwaki, aby obserwować, jak aktualizowane są częstotliwość i amplituda krzywej.
4. Będziemy analizować definicję nie po kolei, więc spójrzmy na wynik końcowy, aby móc się odwoływać do tego, do czego dążymy. Pierwsze dwa kroki są wykonywane oddzielnie, chcemy je teraz połączyć. Użyjemy bazowej krzywej sinusoidalnej do sterowania położeniem komponentów zamka, a za pomocą logiki prawdy/fałszu będziemy przełączać się między małymi i większymi kostkami.
a. Math.RemapRange — za pomocą sekwencji liczb utworzonej w kroku 02 utwórzmy nową serię liczb poprzez ponowne odwzorowanie zakresu. Oryginalne liczby z zakresu od 0 do 100 z kroku 01. Te liczby mieszczą się w zakresie od 0 do 1 dla odpowiednio wejść newMin i newMax.
5. Utwórz węzeł Curve.PointAtParameter, a następnie połącz wyjście Math.RemapRange z kroku 04 jako wejście param.
W tym kroku tworzone są punkty wzdłuż krzywej. Ponownie odwzorowaliśmy liczby na wartości od 0 do 1, ponieważ wejście param szuka wartości w tym zakresie. Wartość 0 reprezentuje punkt początkowy, a wartość 1 reprezentuje punkty końcowe. Wszystkie liczby między nimi są odwzorowane na wartości z zakresu [0,1].
6. Połącz wyjście z węzła Curve.PointAtParameter z węzłem List.FilterByBoolMask, aby rozdzielić listę indeksów nieparzystych i nieparzystych.
a. List.FilterByBoolMask — podłącz węzeł Curve.PointAtParameter z poprzedniego kroku do wejścia list.
b. Watch — węzeł obserwacyjny dla in i węzeł obserwacyjny dla out pokazują, że mamy dwie listy reprezentujące indeksy parzyste i nieparzyste. Punkty te są uporządkowane w ten sam sposób na krzywej, co przedstawimy w następnym kroku.
7. Następnie użyjemy wyjścia z węzła List.FilterByBoolMask w kroku 05, aby wygenerować geometrie o rozmiarach zgodnych z indeksami.
Cuboid.ByLengths — ponownie utwórz połączenia widoczne na ilustracji powyżej, aby uzyskać zamek wzdłuż krzywej sinusoidalnej. Prostopadłościan jest tutaj tylko kostką. Definiujemy jego rozmiar na podstawie punktu krzywej w środku kostki. Logika podziału na wartości parzyste/nieparzyste powinna być teraz czytelna w modelu.
a. Lista prostopadłościanów przy indeksach parzystych.
b. Lista prostopadłościanów przy indeksach nieparzystych.
Gotowe! Właśnie zaprogramowano proces definiowania wymiarów geometrii zgodnie z operacją logiczną przedstawioną w tym ćwiczeniu.
Lista to zbiór elementów. Weźmy na przykład kiść bananów. Każdy banan jest elementem listy (czyli kiści). Łatwiej jest chwycić kiść bananów niż zbierać pojedyncze banany — i tak samo jest w przypadku grupowania elementów według zależności parametrycznych w strukturze danych.
Robiąc zakupy, wkładamy wszystkie kupione artykuły do torby. Taka torba również jest listą. Jeśli chcemy upiec chleb bananowy, potrzebujemy 3 kiści bananów (robimy dużo chleba bananowego). Torba to lista kiści bananów, a każda kiść to lista bananów. Torba jest więc listą list (dwuwymiarową), a kiść bananów jest listą (jednowymiarową).
W dodatku Dynamo dane list są uporządkowane, a pierwszy element na każdej liście ma indeks „0”. Poniżej omówiono sposób definiowania list w dodatku Dynamo oraz to, jak listy wiążą się ze sobą nawzajem.
Jedno, co może z początku wydawać się dziwne, to fakt, że pierwszy indeks listy zawsze ma wartość 0, a nie 1. Gdy zatem mówimy o pierwszym elemencie listy, oznacza to tak naprawdę element odpowiadający indeksowi 0.
Jeśli na przykład liczymy palce prawej dłoni, najprawdopodobniej ponumerujemy je od 1 do 5. Gdybyśmy jednak umieścili te palce na liście, w dodatku Dynamo otrzymałyby indeksy od 0 do 4. Chociaż początkującym programistom może się to wydawać trochę dziwne, indeksowanie od zera stanowi standardową praktykę w większości systemów obliczeniowych.
Należy pamiętać, że lista wciąż zawiera 5 elementów, po prostu korzystamy z systemu liczenia od zera. Elementy na liście nie muszą być liczbami. Mogą to być dane dowolnego typu obsługiwanego przez dodatek Dynamo, takie jak punkty, krzywe, powierzchnie, rodziny itp.
a. Indeks
b. Punkt
c. Element
Często najprostszym sposobem na sprawdzenie typu danych przechowywanych na liście jest połączenie węzła Watch z elementem wyjściowym innego węzła. Domyślnie węzeł Watch automatycznie wyświetla wszystkie indeksy po lewej stronie listy, a elementy danych po prawej stronie.
Indeksy są kluczowym elementem podczas pracy z listami.
W odniesieniu do list dane wejściowe i wyjściowe różnią się w zależności od używanego węzła Dynamo. Możemy na przykład użyć listy 5 punktów i połączyć jej elementy wyjściowe z dwoma różnymi węzłami Dynamo, PolyCurve.ByPoints i Circle.ByCenterPointRadius:
Element wejściowy points węzła PolyCurve.ByPoints wyszukuje wartości „Point[]”. Reprezentuje listę punktów.
Elementem wyjściowym węzła PolyCurve.ByPoints jest jedna krzywa PolyCurve utworzona na podstawie listy pięciu punktów.
Element wejściowy centerPoint węzła Circle.ByCenterPointRadius wymaga wartości „Point”.
Elementem wyjściowym węzła Circle.ByCenterPointRadius jest lista pięciu okręgów, których środki odpowiadają pierwotnej liście punktów.
Dane wejściowe dla węzłów PolyCurve.ByPoints i Circle.ByCenterPointRadius są takie same, ale węzeł Polycurve.ByPoints pozwala uzyskać jedną krzywą PolyCurve, a węzeł Circle.ByCenterPointRadius — 5 okręgów ze środkami w poszczególnych punktach. Jest to intuicyjnie zrozumiałe: krzywa PolyCurve jest rysowana jako łuk łączący 5 punktów, a okręgi tworzone są w każdym punkcie osobno. Co zatem dzieje się z danymi?
Po ustawieniu kursora myszy na elemencie wejściowym points węzła Polycurve.ByPoints widzimy, że wyszukuje on wartości „Point[]”. Zwróć uwagę na nawiasy na końcu. To oznacza listę punktów, a do utworzenia krzywej PolyCurve potrzebne są dane wejściowe w postaci listy. Ten węzeł będzie więc sumował każdą listę w jedną krzywą PolyCurve.
Natomiast element wejściowy centerPoint węzła Circle.ByCenterPointRadius wymaga wartości „Point”. W tym węźle wyszukiwany jest jeden punkt, czyli element, w celu zdefiniowania środka okręgu. Dlatego otrzymujemy pięć okręgów z danych wejściowych. Zrozumienie tej różnicy w danych wejściowych w dodatku Dynamo pomaga lepiej zrozumieć działanie węzłów podczas zarządzania danymi.
Dopasowywanie danych stanowi problem bez idealnego rozwiązania. Ma on miejsce, gdy węzeł ma dostęp do danych wejściowych o różnych rozmiarach. Zmiana algorytmu dopasowywania danych może prowadzić do uzyskania całkiem różnych wyników.
Wyobraź sobie węzeł służący do tworzenia odcinków między punktami (Line.ByStartPointEndPoint). Ma on dwa parametry wejściowe, określające współrzędne obu punktów:
Najprostszym sposobem jest łączenie elementów wejściowych pojedynczo, aż jeden ze strumieni się wyczerpie. Jest to tak zwany algorytm „najkrótszej listy”. Jest to domyślne działanie węzłów Dynamo:
Algorytm „najdłuższa lista” kontynuuje łączenie elementów wejściowych i ponownie używa elementów do momentu, aż wszystkie strumienie się wyczerpią:
Metoda iloczynu wektorowego służy do wykonania wszystkich możliwych połączeń:
Jak widać, istnieją różne sposoby rysowania linii między tymi zbiorami punktów. Opcje skratowania można znaleźć, klikając prawym przyciskiem myszy środek węzła i wybierając menu „Skratowanie”.
Pobierz plik przykładowy, klikając poniższe łącze.
Pełna lista plików przykładowych znajduje się w załączniku.
Aby zademonstrować poniżej operacje skratowania, użyjemy tego pliku bazowego do zdefiniowania najkrótszej listy, najdłuższej listy i iloczynu wektorowego.
Zmienimy skratowanie w węźle Point.ByCoordinates, ale nie zmienimy żadnych innych elementów na wykresie powyżej.
Wybierając opcję najkrótsza lista jako opcję skratowania (jest to również opcja domyślna), otrzymujemy podstawową linię ukośną złożoną z pięciu punktów. Pięć punktów to długość krótszej listy, a więc skratowanie według najkrótszej listy zatrzymuje się po dotarciu do końca tej listy.
Po zmianie skratowania na opcję najdłuższa lista otrzymujemy linię ukośną, która dalej przebiega pionowo. Tak samo jak na diagramie koncepcyjnym, ostatni element z listy 5 elementów będzie używany ponownie do momentu osiągnięcia długości dłuższej listy.
Po zmianie opcji skratowania na iloczyn wektorowy otrzymujemy wszystkie kombinacje wszystkich list, co daje siatkę punktów 5x10. Jest to struktura danych równoważna iloczynowi wektorowemu pokazanemu na powyższym diagramie koncepcyjnym, z tą różnicą, że dane stanowią teraz listę list. Po połączeniu w krzywą PolyCurve widzimy, że każda lista jest zdefiniowana przez wartość X, co daje rząd pionowych linii.
Jeśli najprostszą formą danych są liczby, najprostszym sposobem powiązywania tych liczb jest matematyka. Od prostych operatorów, takich jak dzielenie czy funkcje trygonometryczne, po bardziej złożone formuły — matematyka stanowi doskonały sposób na rozpoczęcie badania zależności i wzorców między liczbami.
Operatory to zestaw komponentów, w których używane są funkcje algebraiczne z dwiema wejściowymi wartościami liczbowymi dającymi jedną wartość wyjściową (dodawanie, odejmowanie, mnożenie, dzielenie itp.). Można je znaleźć w obszarze Operatory > Operacje.
Ikona | Nazwa (składnia) | Dane wejściowe | Dane wyjściowe |
---|
Pobierz plik przykładowy, klikając poniższe łącze.
Pełna lista plików przykładowych znajduje się w załączniku.
Połącz operatory i zmienne, aby utworzyć bardziej złożone zależności za pomocą formuł. Użyj suwaków, aby utworzyć formułę, którą można sterować za pomocą parametrów wejściowych.
1. Utwórz sekwencję liczb reprezentującą „t” w równaniu parametrycznym. Lista powinna być wystarczająco duża, aby można było zdefiniować spiralę.
Number Sequence: zdefiniuj sekwencję liczb w oparciu o trzy wejścia: start, amount i step.
2. W powyższym kroku utworzono listę liczb definiujących dziedzinę parametryczną. Następnie utwórz grupę węzłów reprezentujących równanie złotej spirali.
Złota spirala jest zdefiniowana jako równanie:
Poniższa ilustracja przedstawia złotą spiralę w postaci programowania wizualnego. Podczas przechodzenia przez grupę węzłów należy zwrócić uwagę na analogię pomiędzy programem wizualnym a równaniem pisemnym.
a. Number Slider: dodaj dwa suwaki liczb do obszaru rysunku. Suwaki te reprezentują zmienne a i b równania parametrycznego. Te elementy reprezentują stałą, która jest elastyczna, lub parametry, które można dostosować do żądanego wyniku.
b. Multiplication (*): węzeł mnożenia jest reprezentowany przez gwiazdkę. Użyjemy tego wielokrotnie, aby połączyć zmienne mnożenia.
c. Math.RadiansToDegrees: wartości „t” muszą zostać przekształcone w stopnie w celu ich oszacowania w funkcjach trygonometrycznych. Należy pamiętać, że podczas szacowania tych funkcji dodatek Dynamo domyślnie obsługuje wartości w stopniach.
d. Math.Pow: jako funkcja wartości „t” i liczby „e” tworzy to ciąg Fibonacciego.
e. Math.Cos i Math.Sin: te dwie funkcje trygonometryczne będą różnicować współrzędną x i współrzędną y każdego punktu parametrycznego.
f. Watch: teraz widzimy, że wynik to dwie listy — współrzędne x i y punktów użytych do wygenerowania spirali.
Point.ByCoordinates: połącz górny węzeł multiplication z wejściem „x”, a dolny — z wejściem „y”. Na ekranie pojawi się spirala parametryczna punktów.
Polycurve.ByPoints: połącz węzeł Point.ByCoordinates z poprzedniego kroku z węzłem points. Węzeł connectLastToFirst możemy pozostawić bez wejścia, ponieważ nie tworzymy krzywej zamkniętej. Spowoduje to utworzenie spirali przechodzącej przez każdy punkt zdefiniowany w poprzednim kroku.
Mamy gotową spiralę Fibonacciego. Przekształcimy to jeszcze bardziej w dwóch osobnych ćwiczeniach, tworząc kształty nautilusa i słonecznika. Są to abstrakcje systemów naturalnych, ale zapewni to dobrą reprezentację tych dwóch różnych zastosowań spirali Fibonacciego.
Circle.ByCenterPointRadius: użyjemy tutaj węzła circle z tymi samymi wejściami co w poprzednim kroku. Domyślną wartością promienia jest 1,0, dlatego natychmiast widoczne będą wyniki okręgów. Od razu staje się jasne, w jaki sposób te punkty odbiegają dalej od początku.
Number Sequence: jest to oryginalny szyk „t”. Przez połączenie tej pozycji z wartością Circle.ByCenterPointRadius środki okręgów wciąż odbiegają dalej od początku, ale promień okręgów rośnie, tworząc interesujący wykres okręgów Fibonacciego.
Jeszcze lepiej, jeśli uda Ci się przekształcić go w wykres 3D.
Punktem wyjścia będzie ten sam krok co w poprzednim ćwiczeniu: utworzenie szyku spirali punktów za pomocą węzła Point.ByCoordinates.
![](../images/5-3/2/math-part IV-01.jpg)
Następnie wykonaj te minikroki, aby wygenerować serię spiral o różnych obrotach.
a. Geometry.Rotate: dostępnych jest kilka opcji Geometry.Rotate. Należy pamiętać, aby wybrać węzeł z wejściami geometry, basePlane i degrees. Połącz węzeł Point.ByCoordinates z wejściem geometry. Kliknij prawym przyciskiem myszy ten węzeł i upewnij się, że skratowanie jest ustawione na Iloczyn wektorowy
b. Plane.XY: połącz z wejściem basePlane. Wykonamy obrót wokół początku, który ma to samo położenie co podstawa spirali.
c. Number Range: na potrzeby wartości wejściowej w stopniach utworzymy wiele obrotów. Można to zrobić szybko za pomocą węzła Number Range. Połącz to z wejściem degrees.
d. Number: aby zdefiniować zakres liczb, dodaj trzy węzły number do obszaru rysunku w kolejności pionowej. Od góry do dołu przypisz odpowiednio wartości 0,0, 360,0 i 120,0. Sterują one obrotem spirali. Zwróć uwagę na wyniki z wyjścia węzła Number Range po połączeniu trzech węzłów number z tym węzłem.
Nasz wynik zaczyna przypominać wir. Dostosuj niektóre parametry węzła Number Range i obserwuj, jak zmieniają się wyniki.
Zmień rozmiar kroku (step) węzła Number Range z 120,0 na 36,0. Zwróć uwagę, że w ten sposób powstaje więcej obrotów, co zapewnia gęstszą siatkę.
Zmień rozmiar kroku (step) węzła Number Range z 36,0 na 3,6. Daje to teraz dużo gęstszą siatkę, a kierunkowość spirali jest niejasna. W ten sposób utworzyliśmy słonecznik.
Linia składa się z zestawu punktów; każda linia ma co najmniej 2 punkty. Jednym z najpopularniejszych sposobów tworzenia linii w dodatku Dynamo jest użycie Line.ByStartPointEndPoint
w celu utworzenia linii w dodatku Dynamo.
Ikona | Nazwa/składnia | Dane wejściowe | Dane wyjściowe |
---|---|---|---|
Dzięki temu operacje logiczne na bryłach są zaawansowanym i oszczędzającym czas procesem. Istnieją trzy operacje logiczne na bryłach rozróżniające, które części geometrii zostają zachowane.
Oprócz tych trzech operacji dodatek Dynamo udostępnia też węzły Solid.DifferenceAll i Solid.UnionAll, które umożliwiają wykonywanie operacji różnicy i sumy dla wielu brył.
W tym ćwiczeniu użyjemy metod wykonywania zapytań i manipulowania ciągami w celu zdekonstruowania ostatniej zwrotki wiersza (Przystając pod lasem w śnieżny wieczór) autorstwa Roberta Frosta. Nie jest to najpraktyczniejsze zastosowanie, ale pomoże nam zrozumieć koncepcje operacji na ciągach podczas stosowania ich do czytelnych wierszy z rytmem i rymem.
Autor zdjęcia: .
Teraz zestaw węzłów z poprzedniego kroku będzie działać poprawnie, ale to sporo pracy. Aby utworzyć wydajniejszy proces roboczy, zapoznaj się z częścią w celu definiowania ciągu wyrażeń Dynamo w jednym węźle. W następnej serii kroków przeanalizujemy używanie równania parametrycznego do rysowania spirali Fibonacciego.
Mamy już powłokę nautilusa — przejdźmy do siatek parametrycznych. Użyjemy podstawowego obrotu na spirali Fibonacciego, aby utworzyć siatkę Fibonacciego, a wynik zostanie wymodelowany na wzór .
Object.IsNull
obj
bool
Jeśli (If) | test, prawda, fałsz | wynik |
Formuła (IF(x,y,z)) | x, y, z | wynik |
Code Block ((x?y:z);) | x? y, z | wynik |
Dodawanie (+) | var[]...[], var[]...[] | var[]...[] |
Odejmowanie (-) | var[]...[], var[]...[] | var[]...[] |
Mnożenie (*) | var[]...[], var[]...[] | var[]...[] |
Dzielenie (/) | var[]...[], var[]...[] | var[]...[] |
Idąc dalej, możemy dodać jeszcze więcej poziomów do hierarchii. Struktura danych może znacznie wykraczać poza dwuwymiarową listę list. Ponieważ same listy również są elementami w dodatku Dynamo, możemy tworzyć dane z dowolnie dużą liczbą wymiarów.
Można to porównać do rosyjskich matrioszek. Każdą listę można traktować jako jeden pojemnik zawierający wiele elementów. Każda lista ma określone właściwości i sama w sobie jest traktowana jako obiekt.
Zestaw matrioszek (autor zdjęcia: Zeta) to dobra analogia dla list n-wymiarowych. Każda warstwa oznacza listę, a każda lista zawiera elementy. W dodatku Dynamo każdy pojemnik może zawierać wiele pojemników (elementów listy).
Listy n-wymiarowe trudno przedstawić wizualnie, ale w tym rozdziale przygotowaliśmy kilka ćwiczeń dotyczących pracy z listami wykraczającymi poza dwa wymiary.
Odwzorowywanie to zdecydowanie najbardziej złożona część zarządzania danymi w programie Dynamo, szczególnie istotna podczas pracy ze złożonymi hierarchiami list. W poniższych ćwiczeniach pokazano, kiedy używać odwzorowywania i kombinacji podczas pracy z wielowymiarowymi danymi.
Wstępne informacje o węzłach List.Map i List.Combine można znaleźć w poprzedniej sekcji. W ostatnim ćwiczeniu użyjemy tych węzłów w złożonej strukturze danych.
Pobierz plik przykładowy, klikając poniższe łącze.
Pełna lista plików przykładowych znajduje się w załączniku.
To pierwsze z serii trzech ćwiczeń, które skupia się na artykulacji zaimportowanej geometrii. W każdej części tej serii ćwiczeń zwiększy się złożoność struktury danych.
Zacznijmy od pliku .sat w folderze plików ćwiczeniowych. Można przechwycić ten plik za pomocą węzła File Path.
Za pomocą węzła Geometry.ImportFromSAT geometria jest importowana do podglądu dodatku Dynamo jako dwie powierzchnie.
Aby uprościć to ćwiczenie, będziemy pracować z jedną z tych powierzchni.
Wybierzmy indeks 1, aby przechwycić górną powierzchnię. Służy do tego węzeł List.GetItemAtIndex.
Wyłącz podgląd geometrii w podglądzie Geometry.ImportFromSAT.
Kolejnym etapem jest podzielenie powierzchni na siatkę punktów.
1. Za pomocą węzła Code Block wstaw następujące dwa wiersze kodu:
0..1..#10;
0..1..#5;
2. W węźle Surface.PointAtParameter połącz te dwie wartości z węzła Code Block z elementami u i v. Zmień opcję skratowania tego węzła na „Iloczyn wektorowy”.
3. Wynik pokazuje strukturę danych, która jest również widoczna w podglądzie dodatku Dynamo.
Następnie użyto punktów z ostatniego kroku, aby wygenerować dziesięć krzywych wzdłuż powierzchni.
Aby zobaczyć, jak zorganizowana jest struktura danych, połączmy węzeł NurbsCurve.ByPoints z elementem wyjściowym węzła Surface.PointAtParameter.
Podgląd można na razie wyłączyć z poziomu węzła List.GetItemAtIndex, aby uzyskać bardziej czytelny wynik.
Podstawowa funkcja List.Transpose spowoduje zamianę kolumn i wierszy listy list.
Po połączeniu elementu wyjściowego węzła List.Transpose z węzłem NurbsCurve.ByPoints powstanie pięć krzywych biegnących poziomo na powierzchni.
Podgląd można wyłączyć z poziomu węzła NurbsCurve.ByPoints w poprzednim kroku, aby uzyskać ten sam wynik na obrazie.
Teraz zwiększmy złożoność. Załóżmy, że chcemy wykonać operację na krzywych utworzonych w poprzednim ćwiczeniu. Możemy na przykład powiązać te krzywe z inną powierzchnią i wykonać pomiędzy nimi wyciągnięcie. To wymaga zwrócenia większej uwagi na strukturę danych, ale podstawowa logika jest taka sama.
Rozpocznij od kroku z poprzedniego ćwiczenia, w którym wyizolowaliśmy górną powierzchnię zaimportowanej geometrii za pomocą węzła List.GetItemAtIndex.
Używając węzła Surface.Offset, odsuń tę powierzchnię o wartość 10.
Tak samo jak w poprzednim ćwiczeniu, zdefiniuj węzeł Code Block zawierający te dwa wiersze kodu:
0..1..#10;
0..1..#5;
Połącz te dane wyjściowe z dwoma węzłami Surface.PointAtParameter, każdy z opcją skratowania ustawioną na „Iloczyn wektorowy”. Jeden z tych węzłów jest połączony z pierwotną powierzchnią, a drugi z powierzchnią odsuniętą.
Wyłącz podgląd tych powierzchni.
Tak samo jak w poprzednim ćwiczeniu, połącz elementy wyjściowe z dwoma węzłami NurbsCurve.ByPoints. Wynik pokazuje krzywe odpowiadające dwóm powierzchniom.
Używając węzła List.Create, można połączyć oba zestawy krzywych w jedną listę list.
Jak widać w wyniku, otrzymaliśmy dwie listy zawierające po dziesięć elementów, odpowiadające obu połączonym zestawom krzywych NURBS.
Wykonując operację Surface.ByLoft, możemy wizualnie zinterpretować tę strukturę danych. Ten węzeł wyciąga wszystkie krzywe na każdej podliście.
Wyłącz podgląd z poziomu węzła Surface.ByLoft w poprzednim kroku.
Jak pamiętamy, używając węzła List.Transpose, zamieniamy wszystkie kolumny i wiersze. Ten węzeł umożliwia przekształcenie dwóch list po dziesięć krzywych w dziesięć list po dwie krzywe. Teraz każda krzywa NURBS jest powiązana z sąsiednią krzywą na drugiej powierzchni.
Po użyciu węzła Surface.ByLoft otrzymujemy żebrowaną strukturę.
Następnie zademonstrujemy alternatywny proces pozwalający osiągnąć ten wynik
Przed rozpoczęciem należy wyłączyć podgląd węzła Surface.ByLoft w poprzednim kroku, aby uniknąć pomyłek.
Alternatywą dla węzła List.Transpose jest użycie węzła List.Combine. Spowoduje to zastosowanie „kombinatora” do każdej podlisty.
W tym przypadku używamy węzła List.Create jako „kombinatora” w celu utworzenia listy dla każdego elementu na podlistach.
Po użyciu węzła Surface.ByLoft otrzymujemy takie same powierzchnie, jak w poprzednim kroku. W tym przypadku łatwiej jest użyć węzła Transpose, ale jeśli struktura danych jest jeszcze bardziej złożona, węzeł List.Combine będzie bardziej niezawodny.
Cofając się o kilka kroków, aby zmienić orientację krzywych w żebrowanej strukturze, należy użyć węzła List.Transpose przed połączeniem z węzłem NurbsCurve.ByPoints. Spowoduje to zamianę kolumn i wierszy, dając 5 poziomych żeber.
Teraz pójdziemy o krok dalej. W tym ćwiczeniu będziemy pracować z obiema zaimportowanymi powierzchniami, tworząc złożoną hierarchię danych. Będziemy jednak wykonywać tę samą operację z tą samą logiką.
Rozpocznij od zaimportowanego pliku z poprzedniego ćwiczenia.
Tak samo jak w poprzednim ćwiczeniu, użyj węzła Surface.Offset, aby wykonać odsunięcie o wartość 10.
Jak pokazuje wynik, przy użyciu węzła Offset utworzyliśmy dwie powierzchnie.
Tak samo jak w poprzednim ćwiczeniu, zdefiniuj węzeł Code Block zawierający te dwa wiersze kodu:
0..1..#20;
0..1..#20;
Połącz te dane wyjściowe z dwoma węzłami Surface.PointAtParameter, każdy z opcją skratowania ustawioną na „Iloczyn wektorowy”. Jeden z tych węzłów jest połączony z pierwotnymi powierzchniami, a drugi z powierzchniami odsuniętymi.
Tak samo jak w poprzednim ćwiczeniu, połącz elementy wyjściowe z dwoma węzłami NurbsCurve.ByPoints.
W danych wyjściowych węzła NurbsCurve.ByPoints widzimy, że jest to lista dwóch list, czyli bardziej złożona struktura niż w poprzednim ćwiczeniu. Dane są kategoryzowane według bazowej powierzchni, a więc dodaliśmy do struktury danych kolejny poziom.
Należy zauważyć, że sytuacja w węźle Surface.PointAtParameter się skomplikowała. Mamy już listę list list.
Przed przejściem dalej wyłącz podgląd z istniejących powierzchni.
Za pomocą węzła List.Create scalamy krzywe NURBS w jedną strukturę danych, tworząc listę list list.
Połączenie z węzłem Surface.ByLoft powoduje utworzenie nowej wersji pierwotnych powierzchni, z których każda pozostaje na osobnej liście utworzonej na podstawie początkowej struktury danych.
W poprzednim ćwiczeniu można było użyć węzła List.Transpose, aby utworzyć żebrowaną strukturę. W tym przypadku to nie zadziała. Transpozycję można stosować do listy dwuwymiarowej, a ponieważ mamy listę trójwymiarową, nie można tak łatwo „zamienić kolumn i wierszy”. Należy pamiętać, że listy to obiekty, a więc węzeł List.Transpose spowodowałby zamianę list z podlistami, ale nie zamianę krzywych NURBS na kolejnym poziomie hierarchii list.
W tym przypadku lepiej będzie działać węzeł List.Combine. Przechodząc do bardziej złożonych struktur danych, używamy węzłów List.Map i List.Combine.
Używając węzła List.Create jako „kombinatora”, tworzymy strukturę danych, która będzie lepiej przystosowana do naszego celu.
Struktura danych wymaga jeszcze transpozycji na niższym poziomie hierarchii. W tym celu użyjemy węzła List.Map. Działa on podobnie jak węzeł List.Combine, ale wymaga jednej listy wejściowej, a nie dwóch lub więcej.
Do węzła List.Map zastosujemy funkcję List.Transpose, która spowoduje zamianę kolumn i wierszy podlist na głównej liście.
Na koniec możemy wyciągnąć krzywe NURBS wraz z odpowiednią hierarchią danych, co daje żebrowaną strukturę.
Teraz dodamy głębię do tej geometrii za pomocą węzła Surface.Thicken z pokazanymi ustawieniami wejść.
Dobrze będzie dodać powierzchnię pokrywającą się z tą strukturą, dlatego dodaj kolejny węzeł Surface.ByLoft i jako wejścia użyj pierwszego wyjścia węzła NurbsCurve.ByPoints z wcześniejszego kroku.
Gdy podgląd staje się coraz mniej czytelny, wyłącz podgląd dla tych węzłów, klikając prawym przyciskiem myszy każdy z nich i anulując wybór pola podglądu („preview”), aby wyniki były czytelniejsze.
Po pogrubieniu wybranych powierzchni artykulacja jest gotowa.
Nie jest to może najwygodniejszy fotel bujany, ale zawiera dużo danych.
Na ostatnim etapie odwrócimy kierunek prążków. W poprzednim ćwiczeniu stosowaliśmy transpozycję. Tu zrobimy coś podobnego.
Ponieważ hierarchia ma jeszcze jeden poziom, należy użyć węzła List.Map z funkcją List.Transpose, aby zmienić kierunek krzywych NURBS.
Jeśli chcemy zwiększyć liczbę stopni, możemy zmienić węzeł Code Block następująco:
0..1..#20;
0..1..#30;
Pierwsza wersja fotela bujanego była bardziej elegancka, a nasz drugi model to wersja dla miłośników sportów ekstremalnych.
Dodatek Dynamo 2.0 udostępnia różne węzły słownika do wykorzystania. Obejmuje to węzły tworzenia, operacji i zapytań.
1. Węzeł Dictionary.ByKeysValues
tworzy słownik z określonymi wartościami i kluczami. (Liczba pozycji będzie zgodna z liczbą pozycji na najkrótszej liście wejściowej)
2. Węzeł Dictionary.Components
tworzy składniki słownika wejściowego. (Jest to operacja odwrotna do operacji węzła tworzenia).
3. Węzeł Dictionary.RemoveKeys
tworzy nowy obiekt słownika z usuniętymi kluczami wejściowymi.
4. Węzeł Dictionary.SetValueAtKeys
tworzy nowy słownik na podstawie wejściowych kluczy i wartości zastępujących bieżące wartości dla odpowiednich kluczy.
5. Węzeł Dictionary.ValueAtKey
zwraca wartość dla klucza wejściowego.
6. Węzeł Dictionary.Count
zwraca liczbę par wartości i kluczy w słowniku.
7. Węzeł Dictionary.Keys
zwraca aktualnie przechowywane w słowniku klucze.
8. Węzeł Dictionary.Values
zwraca aktualnie przechowywane w słowniku wartości.
Ogólnie powiązywanie danych ze słownikami stanowi świetną alternatywę dla starej metody pracy z indeksami i listami.
Dodajmy jeszcze jeden poziom do hierarchii. Jeśli weźmiemy talię kart z pierwszego przykładu i utworzymy pudełko z wieloma taliami, to pudełko reprezentuje listę talii, a każda talia reprezentuje listę kart. Tak działa lista list. Na potrzeby porównania w tej sekcji zakładamy, że ilustracja poniżej zawiera listę rolek monet, a każda rolka zawiera listę monet pensów.
Zdjęcie autorstwa Dori.
Jakie zapytania możemy utworzyć względem listy list? Umożliwia to dostęp do istniejących właściwości.
Ile jest typów monet? 2.
Jakie są wartości typów monet? 0,01 USD i 0,25 USD.
Z czego składają się monety 0,25 USD? 75% miedzi i 25% niklu.
Z czego składają się monety 0,01 USD? 97,5% cynku i 2,5% miedzi.
Jakie działania możemy wykonać na liście list? Lista list ulegnie zmianie zależnie od zadanej operacji.
Wybranie określonego stosu monet 0,25 lub 0,01 USD.
Wybranie określonej monety.
Zmiana kolejności stosów monet 0,25 i 0,01 USD.
Wymieszanie stosów.
Dodatek Dynamo zawiera węzeł odpowiadający każdej z powyższych operacji. Pracujemy na danych abstrakcyjnych, a nie obiektach fizycznych, dlatego jest potrzebny zestaw reguł dotyczących poruszania się w hierarchii danych.
W przypadku list list dane są złożone i znajdują się na wielu warstwach. Taka reprezentacja pozwala wykonywać wiele przydatnych operacji parametrycznych. W poniższych lekcjach omówimy podstawy tego systemu i jeszcze kilka operacji.
Pobierz plik przykładowy, klikając poniższe łącze.
Pełna lista plików przykładowych znajduje się w załączniku.
Najważniejsze założenie wynikające z tej sekcji jest takie, że dodatek Dynamo traktuje każdą listę jako obiekt. Taka hierarchia jest przydatna w przypadku programowania obiektowego. Zamiast wybierać elementy podrzędne przy użyciu poleceń takich jak List.GetItemAtIndex, dodatek Dynamo wybierze ten indeks na głównej liście struktury danych. Pod tym indeksem znajduje się kolejna lista. Przeanalizujemy ten mechanizm na przykładowej ilustracji:
W węźle Code Block zdefiniowaliśmy dwa zakresy:
0..2; 0..3;
Te zakresy są połączone z węzłem Point.ByCoordinates, gdzie skratowanie ustawiono na Iloczyn wektorowy. Powstaje w ten sposób siatka punktów, a na wyjściu jest generowana lista list.
Węzeł Watch wskazuje, że na każdej liście znajdują się 3 listy po 4 elementy.
W przypadku użycia węzła List.GetItemAtIndex z indeksem 0 dodatek Dynamo wybierze pierwszą listę z całą jej zawartością. Inne programy mogą wybrać pierwszy element każdej z list w strukturze danych, ale w dodatku Dynamo jest stosowana hierarchiczna obsługa danych.
Pobierz plik przykładowy, klikając poniższe łącze.
Pełna lista plików przykładowych znajduje się w załączniku.
Węzeł Flatten usuwa wszystkie poziomy ze struktury danych. Jest to przydatne, gdy hierarchia danych nie jest potrzebna w danej operacji, ale też ryzykowne, gdyż powoduje usunięcie informacji. Poniższy przykład ilustruje skutek spłaszczenia listy danych.
Wstaw wiersz kodu, aby zdefiniować zakres w węźle Code Block:
-250..-150..#4;
Połączymy węzeł Code Block z danymi wejściowymi x i y węzła Point.ByCoordinates i ustawimy skratowanie na Iloczyn wektorowy, aby usunąć siatkę punktów.
Węzeł Watch wskazuje, że powstała lista list.
Węzeł PolyCurve.ByPoints będzie odnosił się do każdej z listy i utworzy odpowiadające im krzywe złożone. W podglądzie dodatku Dynamo widać, że istnieją cztery krzywe złożone (polycurve) reprezentujące poszczególne wiersze siatki.
Wstawiając funkcję Flatten (spłaszczenia) przed węzłem krzywej złożonej, utworzyliśmy pojedynczą listę zawierającą wszystkie punkty. Węzeł PolyCurve.ByPoints odnosi się do listy, aby utworzyć jedną krzywą. Ponieważ wszystkie punkty są na liście, uzyskujemy jedną, skomplikowaną krzywą złożoną zawierającą te punkty.
Można również spłaszczyć wybrane poziomy danych. Węzeł List.Flatten pozwala zdefiniować zestaw tych poziomów danych w hierarchii, które mają zostać spłaszczone. Jest to bardzo przydatne narzędzie podczas przetwarzania złożonych struktur danych, które nie są bezpośrednio powiązane z bieżącym procesem roboczym. Oprócz tego można użyć węzła spłaszczania jako funkcji węzła List.Map. Poniżej przedstawiono więcej informacji na temat węzła List.Map.
Pobierz plik przykładowy, klikając poniższe łącze.
Pełna lista plików przykładowych znajduje się w załączniku.
Gdy model jest oparty na parametrach, czasami trzeba zmodyfikować strukturę danych istniejącej listy. Można to zrobić przy użyciu różnych węzłów, a węzeł podziału oferuje najprostszy mechanizm. Pozwala on podzielić listę na listy podrzędne o określonej liczbie elementów.
Polecenie Chop dzieli listy zależnie od długości listy wejściowej. W pewnym sensie dzielenie jest operacją odwrotną do spłaszczania: zamiast redukować strukturę danych, generuje nowe poziomy. Jest to przydatne narzędzie podczas pracy nad geometrią, tak jak na poniższym przykładzie.
Pobierz plik przykładowy, klikając poniższe łącze.
Pełna lista plików przykładowych znajduje się w załączniku.
Węzeł List.Map/Combine stosuje zadaną funkcję do listy wejściowej, ale o jeden poziom niżej w hierarchii. Kombinacje działają analogicznie do map, ale mają wiele wejść odpowiadających wejściu zadanej funkcji.
Uwaga: to ćwiczenie utworzono we wcześniejszej wersji dodatku Dynamo. Wiele funkcji węzła List.Map przestało być potrzebnych po wprowadzeniu funkcji List@Level. Więcej informacji można znaleźć w sekcji List@Level poniżej.
Na wstępie przyjrzymy się węzłowi List.Count z poprzedniej sekcji.
Węzeł List.Count liczy wszystkie elementy na liście. Użyjemy go, aby zademonstrować działanie węzła List.Map.
Wstaw dwa wiersze kodu do węzła Code Block:
-50..50..#Nx; -50..50..#Ny;
Po wpisaniu tego kodu blok będzie tworzył dwie dane wejściowe: Nx i Ny.
Korzystając z dwóch suwaków Integer Slider, zdefiniuj wartości Nx i Ny przez połączenie ich z węzłem Code Block.
Połącz poszczególne wiersze węzła Code Block odpowiednio z danymi wejściowymi X i Y węzła Point.ByCoordinates. Kliknij węzeł prawym przyciskiem myszy, wybierz opcję Skratowanie i wybierz pozycję Iloczyn wektorowy. Zostanie utworzona siatka punktów. Ustawiliśmy zakres od –50 do 50, dlatego odpowiada to domyślnej siatce dodatku Dynamo.
Węzeł Watch ujawnia utworzone punkty. Przyjrzyjmy się strukturze danych. Powstała lista list. Każda lista odpowiada wierszowi punktów siatki.
Połącz węzeł List.Count z wyjściem węzła obserwacyjnego z poprzedniego kroku.
Połącz węzeł Watch z wyjściem węzła List.Count.
Węzeł List.Count generuje wartość 5. Jest to równe zmiennej Nx zdefiniowanej w bloku kodu. Dlaczego tak jest?
Najpierw węzeł Point.ByCoordinates używa wejścia „x” jako głównej wartości wejściowej podczas tworzenia list. Gdy wartość Nx wynosi 5, a Ny wynosi 3, powstaje lista 5 list po 3 elementy.
Dodatek Dynamo traktuje listy jako obiekty, dlatego węzeł List.Count jest stosowany do listy głównej w hierarchii. Daje to wynik 5, czyli liczbę list na liście głównej.
Przy użyciu węzła List.Map przejdziemy niżej w hierarchii i wykonamy pewną funkcję na tym poziomie.
Węzeł List.Count nie ma żadnych wejść. Jest używany jako funkcja. Oznacza to, że węzeł List.Count jest stosowany do każdej z listy na niższym poziomie w hierarchii. Puste wejście węzła List.Count odpowiada liście wyjściowej węzła List.Map.
Jako wynik węzła List.Count otrzymujemy teraz listę 5 elementów, każdy o wartości 3. Odpowiada to długości poszczególnych podlist.
Uwaga: to ćwiczenie utworzono we wcześniejszej wersji dodatku Dynamo. Wiele funkcji węzła List.Combine przestało być potrzebnych po wprowadzeniu funkcji List@Level. Więcej informacji można znaleźć w sekcji List@Level poniżej.
W tym ćwiczeniu użyjemy węzła List.Combine, aby zademonstrować, jak można użyć go do zastosowania funkcji w oddzielnych listach obiektów.
Zacznij od przygotowania dwóch list punktów.
Użyj węzła Sequence, aby wygenerować 10 wartości, z których każda będzie miała przyrost 10-krokowy.
Połącz wynik z wejściem x węzła Point.ByCoordinates. Spowoduje to utworzenie listy punktów w dodatku Dynamo.
Dodaj drugi węzeł Point.ByCoordinates do obszaru roboczego, użyj tego samego wyjścia Sequence co w przypadku wejścia x, ale jako wejścia y użyj Interger Slider i ustaw jego wartość na 31 (może to być dowolna wartość, o ile nie będzie zachodzić na pierwszy zestaw punktów), tak aby 2 zestawy punktów nie nakładały się na siebie.
Następnie użyjemy węzła List.Combine, aby zastosować funkcję do obiektów na 2 osobnych listach. W tym przypadku będzie to prosta funkcja rysowania linii.
Dodaj węzeł List.Combine do obszaru roboczego i połącz 2 zestawy punktów jako wejścia list0 i list1.
Użyj Line.ByStartPointEndPoint jako funkcji wejściowej dla węzła List.Combine.
Po zakończeniu te 2 zestawy punktów są spakowane/sparowane za pomocą funkcji Line.ByStartPointEndPoint i powodują zwrócenie 10 linii w dodatku Dynamo.
Zapoznaj się z ćwiczeniem w części dotyczącej list n-wymiarowych, aby zobaczyć inny przykład użycia węzła List.Combine.
Pobierz plik przykładowy, klikając poniższe łącze.
Pełna lista plików przykładowych znajduje się w załączniku.
Funkcja List@Level jest preferowana względem węzła List.Map. Umożliwia ona bezpośrednie wybranie poziomu listy, który ma być przetwarzany — wprost na porcie wejściowym węzła. Tę funkcję można zastosować do dowolnego wejścia przychodzącego węzła, aby uzyskać dostęp do poziomów list szybciej i łatwiej niż w przypadku innych metod. Wystarczy wskazać węzłowi, który poziom listy ma być używany jako wejście, a węzeł zrobi resztę.
W tym ćwiczeniu użyjemy funkcji List@Level, aby odizolować określony poziom danych.
Zaczniemy od prostej trójwymiarowej siatki punktów.
Siatka jest tworzona przy użyciu zakresów X, Y i Z, dlatego wiemy, że struktura danych ma trzy poziomy: listy X, Y i Z.
Dane istnieją na różnych poziomach. Poziomy są wskazywane u dołu podglądu. Kolumny poziomów list odpowiadają danym na powyższych listach, co ułatwia identyfikację poziomu, który ma być przetwarzany.
Lista poziomów jest uporządkowana w odwrotnej kolejności — najniższy poziom danych na niej to zawsze poziom L1. Gwarantuje to odpowiednie działanie wykresów, nawet jeśli zostaną zmienione w przyszłości.
Aby użyć funkcji List@Level, kliknij przycisk >. W tym menu znajdują się dwa pola wyboru.
Użyj poziomów — powoduje to włączenie funkcji List@Level. Po kliknięciu tej opcji można klikać, aby wybierać poziomy list wejściowych, których ma używać węzeł. To menu pozwala szybko wypróbować różne opcje dotyczące poziomów, klikając strzałki w górę lub w dół.
Zachowaj strukturę listy — gdy ta opcja jest włączona, można zachować strukturę poziomów danych wejściowych. Czasami dane są celowo uporządkowane na podlistach. Zaznaczenie tej opcji pozwala zachować porządek list i uniknąć utraty informacji.
Dzięki prostej siatce 3D można otwierać i wizualizować strukturę list, przełączając różne poziomy list. Każda kombinacja poziomu list i indeksu zwraca inny zestaw punktów z oryginalnego zestawu 3D.
Filtr „@L2” w kodzie DesignScript umożliwia wybranie samej listy na poziomie 2. Lista na poziomie 2 z indeksem 0 zawiera tylko pierwszy zestaw punktów Y — zwracana jest siatka na płaszczyźnie XZ.
Jeśli zmienimy filtr poziomów na „L1”, uzyskamy dostęp do wszystkich danych na pierwszym poziomie list. Lista na poziomie 1 z indeksem 0 jest płaską listą z wszystkimi punktami 3D.
Filtr „L3” udostępnia tylko punkty z trzeciego poziomu list. Lista na poziomie 3 z indeksem 0 zawiera tylko pierwszy zestaw punktów Z — zwracana jest siatka na płaszczyźnie XY.
Filtr „L4” udostępnia tylko punkty z trzeciego poziomu list. Lista na poziomie 4 z indeksem 0 zawiera tylko pierwszy zestaw punktów X — zwracana jest siatka na płaszczyźnie YZ.
Choć dane z tego przykładu można uzyskać przy użyciu węzła List.Map, funkcja List@Level zdecydowanie upraszcza te interakcje, przez co ułatwia dostęp do danych węzła. Poniżej przedstawiono porównanie metod List.Map i List@Level:
Choć obie metody pozwalają uzyskać dostęp do tych samych punktów, funkcja List@Level ułatwia wybranie odpowiednich warstw danych w jednym węźle.
Aby użyć siatki punktów za pomocą węzła List.Map, trzeba użyć węzła List.GetItemAtIndex w połączeniu z węzłem List.Map. Każde przejście na niższy poziom listy wymaga użycia dodatkowego węzła List.Map. Zależnie od złożoności używanych list uzyskanie dostępu do odpowiednich informacji może wymagać dodania wielu węzłów List.Map do wykresu.
W tym przykładzie węzeł List.GetItemAtIndex połączony z węzłem List.Map zwraca ten sam zestaw punktów z tą samą strukturą list co węzeł List.GetItemAtIndex z wybraną opcją „@L3”.
Pobierz plik przykładowy, klikając poniższe łącze.
Pełna lista plików przykładowych znajduje się w załączniku.
Transpozycja jest podstawową funkcją obsługi list zawierających listy. Podobnie jak w arkuszach kalkulacyjnych, transpozycja polega na zamianie węzłów z kolumnami w strukturze danych. Zademonstrujemy to na prostej macierzy poniżej. W kolejnej sekcji przedstawimy sposób tworzenia relacji geometrycznych przy użyciu transpozycji.
Usuniemy węzły List.Count z poprzednich ćwiczeń i przeniesiemy je do geometrii, aby sprawdzić strukturę danych.
Połącz węzeł PolyCurve.ByPoints z wyjściem węzła obserwacyjnego węzła Point.ByCoordinates.
Wyjście wskazuje 5 krzywych złożonych i widzimy te krzywe w podglądzie dodatku Dynamo. Węzeł Dynamo wyszukuje listę punktów (w tym przypadku jest to lista list punktów) i tworzy z nich pojedynczą krzywą złożoną. Każda z tych list jest konwertowana na krzywą w strukturze danych.
Węzeł List.Transpose zamieni wszystkie elementy z wszystkimi listami na liście list. Choć brzmi to jak złożona operacja, działa tak samo jak transpozycja w programie Microsoft Excel: zamienia kolumny z wierszami w strukturze danych.
Wynik abstrakcyjny: Transpozycja zmieniła strukturę listy. Zamiast 5 list po 3 elementy otrzymujemy 3 listy po 5 elementów.
Wynik geometryczny: przy użyciu węzła PolyCurve.ByPoints otrzymujemy 3 krzywe złożone biegnące prostopadle do oryginalnych krzywych.
W kodzie bloku można użyć zapisu „[]”, aby utworzyć listę. Jest to szybsze i wygodniejsze niż użycie węzła List.Create. Węzeł Code Block jest bardziej szczegółowo opisany w rozdziale Węzły Code Block i DesignScript. Na poniższej ilustracji przedstawiono, jak zdefiniować w bloku kodu listę zawierającą wiele wyrażeń.
W węźle Code Block można użyć zapisu „[]”, aby szybko wybrać określone elementy ze złożonej struktury danych. Węzły Code Block są bardziej szczegółowo opisane w rozdziale Węzły Code Block i DesignScript. Na poniższej ilustracji przedstawiono, jak w bloku kodu uzyskać dostęp do listy zawierającej wiele typów danych.
Pobierz plik przykładowy, klikając poniższe łącze.
Pełna lista plików przykładowych znajduje się w załączniku.
W tym ćwiczeniu zmienimy powierzchnię przy użyciu logiki zdefiniowanej w poprzednim ćwiczeniu. Tutaj nasz cel jest intuicyjny, ale nawigacja w strukturze danych wymaga więcej uwagi. Chcemy poruszyć powierzchnią, przesuwając punkt kontrolny.
Zacznij od powyższego ciągu węzłów. Tworzymy prostą powierzchnię obejmującą domyślą siatkę dodatku Dynamo.
Przy użyciu węzła Code Block wstaw te dwa wiersze kodu i połącz blok z wejściami u i v węzła Surface.PointAtParameter:
-50..50..#3;
-50..50..#5;
Pamiętaj, aby ustawić skratowanie węzła Surface.PointAtParameter na Iloczyn wektorowy.
Węzeł Watch wskazuje, że powstały 3 listy po 5 elementów.
W tym kroku chcemy pobrać punkt środkowy utworzonej siatki. Aby to zrobić, wybierzemy środkowy punkt środkowej listy. To naprawdę proste.
Aby upewnić się, że to właściwy punkt, można też klikać w węźle Watch, aby sprawdzić, czy używamy odpowiedniego elementu.
Przy użyciu węzła Code Block napiszemy prosty kod pobierający listę list:
points[1][2];
Przy użyciu węzła Geometry.Translate przesuniemy wybrany punkt w kierunku Z o 20 jednostek.
Wybierzmy też środkowy wiersz punktów, używając węzła List.GetItemAtIndex. Uwaga: podobnie jak w poprzednim kroku, możemy pobrać elementy listy przy użyciu węzła Code Block zawierającego wiersz
points[1];
Pobraliśmy punkt środkowy i przesunęliśmy go w górę. Teraz chcemy wstawić przesunięty punkt z powrotem do struktury danych.
Najpierw chcemy zastąpić odizolowany w poprzednim kroku element listy.
Zastąpimy środkowy element przy użyciu węzła List.ReplaceItemAtIndex. Użyjemy indeksu 2, a zastępujący go element będzie połączony z przesuniętym punktem (Geometry.Translate).
W danych wyjściowych widzimy, że wprowadziliśmy przesunięty punkt jako środkowy element listy.
Mając zmodyfikowaną listę, musimy wstawić ją z powrotem do oryginalnej struktury danych: listy list.
W analogiczny sposób użyjemy węzła List.ReplaceItemAtIndex, aby wstawić naszą listę w miejsce środkowej listy.
Węzły Code Block definiujące indeks tych dwóch węzłów mają numery 1 i 2, co odpowiada oryginalnemu zapytaniu w węźle Code Block (points[1][2]).
Po wybraniu listy o indeksie 1 zobaczymy tę strukturę danych podświetloną w podglądzie dodatku Dynamo. Pomyślnie scaliliśmy przesunięty punkt z oryginalną strukturą danych.
Istnieją różne sposoby uzyskania powierzchni z tego zestawu punktów. W tym przypadku utworzymy ją przez wyciągnięcie połączonych krzywych.
Utwórz węzeł NurbsCurve.ByPoints i połącz z nim nową strukturę danych, aby utworzyć trzy krzywe NURBS.
Połącz węzeł Surface.ByLoft z wyjściem węzła NurbsCurve.ByPoints. Otrzymaliśmy zmodyfikowaną powierzchnię. Możemy zmienić oryginalną wartość Z geometrii. Użyj translacji i zobacz, jak zostanie zaktualizowana geometria.
Słownik reprezentuje zbiór danych powiązanych z innym elementem danych znanym jako klucz. Słowniki umożliwiają wyszukiwanie, usuwanie i wstawianie danych do kolekcji.
Słownik jest zasadniczo świetnym narzędziem do sprawdzania informacji.
Choć funkcje słowników były dostępne w dodatku Dynamo już od jakiegoś czasu, w dodatku Dynamo 2.0 wprowadzono nowy sposób zarządzania tym typem danych.
Obraz oryginalny za zgodą: sixtysecondrevit.com
Ustaliliśmy już, czym jest lista. Omówmy teraz operacje, które możemy na niej wykonać. Wyobraź sobie listę jako talię kart do gry. Talia jest listą, a każda karta reprezentuje element.
Autor zdjęcia: Christian Gidlöf
Jakie zapytania możemy wykonać z poziomu listy? Umożliwia to dostęp do istniejących właściwości.
Liczba kart w talii? 52.
Liczba kolorów? 4.
Materiał? Papier.
Długość? 3,5" lub 89 mm.
Szerokość? 2,5" lub 64 mm.
Jakie działania możemy wykonać na liście list? Umożliwia to zmianę listy w oparciu o daną operację.
Możemy potasować talię.
Możemy posortować talię według wartości.
Możemy posortować talię według kolorów.
Możemy podzielić talię.
Możemy rozdać karty w talii.
Możemy wybrać określoną kartę w talii.
Dla wszystkich operacji wymienionych powyżej istnieją analogiczne węzły Dynamo do pracy z listami danych ogólnych. W poniższych lekcjach przedstawiono niektóre z podstawowych operacji, które można wykonywać na listach.
Pobierz plik przykładowy, klikając poniższe łącze.
Pełna lista plików przykładowych znajduje się w załączniku.
Poniższy rysunek przedstawia wykres bazowy, na którym rysujemy linie między dwoma okręgami, aby przedstawić podstawowe operacje na listach. Przeanalizujemy sposób zarządzania danymi na liście i przedstawimy wyniki wizualne za pomocą poniższych operacji na liście.
Rozpocznij od węzła Code Block o wartości
500;
Połącz wejście x z węzłem Point.ByCoordinates.
Podłącz węzeł z poprzedniego kroku do wejścia origin węzła Plane.ByOriginNormal.
Za pomocą węzła Circle.ByPlaneRadius podłącz węzeł z poprzedniego kroku do wejścia plane.
Używając węzła Code Block, oznacz wartość
50;
dla pozycji radius. To pierwszy okrąg, który utworzymy.Za pomocą węzła Geometry.Translate przesuń okrąg w górę o 100 jednostek w kierunku Z.
Za pomocą węzła Code Block zdefiniuj zakres dziesięciu liczb z zakresu od 0 do 1 przy użyciu tego wiersza kodu:
0..1..#10;
Wstaw blok kodu z poprzedniego kroku do wejścia param dwóch węzłów Curve.PointAtParameter. Podłącz węzeł Circle.ByPlaneRadius do wejścia curve górnego węzła i węzeł Geometry.Translate do wejścia curve węzła poniżej.
Za pomocą węzła Line.ByStartPointEndPoint połącz dwa węzły Curve.PointAtParameter.
Pobierz plik przykładowy, klikając poniższe łącze.
Pełna lista plików przykładowych znajduje się w załączniku.
Węzeł List.Count jest prosty: zlicza wartości na liście i zwraca ich liczbę. Jego działanie jest nieco bardziej złożone podczas pracy z listami list, ale zilustrujemy to w późniejszych sekcjach.
Węzeł **List.Count ****** zwraca liczbę linii w węźle Line.ByStartPointEndPoint. W tym przypadku wynosi ona 10, co odpowiada liczbie punktów utworzonych z oryginalnego węzła Code Block.
Pobierz plik przykładowy, klikając poniższe łącze.
Pełna lista plików przykładowych znajduje się w załączniku.
Węzeł List.GetItemAtIndex zapewnia podstawowy sposób stosowania zapytania dotyczącego elementu listy.
Najpierw kliknij prawym przyciskiem myszy węzeł Line.ByStartPointEndPoint, aby wyłączyć jego podgląd.
Za pomocą węzła List.GetItemAtIndex wybieramy indeks „0”, czyli pierwszy element na liście linii.
Zmień wartość suwaka na od 0 do 9, aby wybrać inny element za pomocą węzła List.GetItemAtIndex.
Pobierz plik przykładowy, klikając poniższe łącze.
Pełna lista plików przykładowych znajduje się w załączniku.
Węzeł List.Reverse odwraca kolejność wszystkich elementów na liście.
Aby poprawnie zwizualizować odwróconą listę linii, utwórz więcej linii, zmieniając węzeł Code Block na
0..1..#50;
Powiel węzeł Line.ByStartPointEndPoint oraz wstaw węzeł List.Reverse między węzłem Curve.PointAtParameter i drugim węzłem Line.ByStartPointEndPoint
Użyj węzłów Watch3D, aby wyświetlić podgląd dwóch różnych wyników. Pierwszy pokazuje wynik bez odwróconej listy. Linie łączą się pionowo z sąsiednimi punktami. Natomiast odwrócona lista powoduje połączenie wszystkich punktów w kolejności odwrotnej na drugiej liście.
Pobierz plik przykładowy, klikając poniższe łącze.
Pełna lista plików przykładowych znajduje się w załączniku.
Węzeł List.ShiftIndices jest dobrym narzędziem do tworzenia skrętów lub wzorców śrubowych albo do innych podobnych manipulacji danymi. Ten węzeł przesuwa elementy na liście o podaną wartość indeksu.
W tym samym procesie, w którym występuje odwrócona lista, wstaw węzeł List.ShiftIndices do węzłów Curve.PointAtParameter i Line.ByStartPointEndPoint.
Używając węzła Code Block, określ wartość „1”, aby przesunąć listę o jeden indeks.
Zauważmy, że zmiana jest subtelna, ale wszystkie linie w dolnym węźle Watch3D przesunęły się o jeden indeks podczas łączenia się z drugim zestawem punktów.
Po zmianie wartości w węźle Code Block na większą, na przykład „30”, zauważamy znaczną różnicę w liniach ukośnych. W tym przypadku przesunięcie działa jak obiektyw aparatu, tworząc skręt w oryginalnej formie walcowej.
Pobierz plik przykładowy, klikając poniższe łącze.
Pełna lista plików przykładowych znajduje się w załączniku.
Węzeł List.FilterByBooleanMask usuwa niektóre elementy w oparciu o listę wartości logicznych lub wartości odczytywanych jako „true” lub „false”.
Aby utworzyć listę wartości odczytywanych jako „true” lub „false”, musimy wykonać nieco więcej pracy.
Używając węzła Code Block, zdefiniuj wyrażenie ze składnią:
0..List.Count(list);
. Połącz węzeł Curve.PointAtParameter z wejściem list. Przeanalizujemy tę konfiguracje dokładniej w rozdziale dotyczącym węzła Code Block, ale wiersz kodu w tym przypadku tworzy listę reprezentującą każdy indeks węzła Curve.PointAtParameter.Używając węzła %** (moduł)**, połącz wyjście węzła Code Block z wejściem x oraz wartość 4 z wejściem y. Spowoduje to zwrócenie reszty z dzielenia listy indeksów przez 4. Węzeł modułu jest bardzo przydatny podczas tworzenia szyku. Wszystkie wartości będą odczytywane jako możliwe reszty z dzielenia przez 4, czyli 0, 1, 2 i 3.
Na podstawie węzła %** (moduł)** wiemy, że wartość 0 oznacza, iż indeks jest podzielny przez 4 (0, 4, 8 itd...). Za pomocą węzła == możemy sprawdzić tę dzielność, testując tę pozycję pod kątem wartości „0”.
Węzeł Watch pokazuje tylko, że mamy wzorzec true/false, który wygląda następująco: true,false,false,false....
Używając tego wzorca true/false, utwórz połączenie z wejściem mask dwóch węzłów List.FilterByBooleanMask.
Połącz węzeł Curve.PointAtParameter z każdym wejściem list węzła List.FilterByBooleanMask.
Wyjścia węzła Filter.ByBooleanMask to „in” oraz „out”. Wyjście „in” reprezentuje wartości, które miały wartość maski „true”, a wyjście „out” — wartość maski „false”. Podłączając wyjścia „in” do wejść startPoint i endPoint węzła Line.ByStartPointEndPoint, utworzyliśmy przefiltrowaną listę linii.
Węzeł Watch3D pokazuje, że mamy mniej linii niż punktów. Wybraliśmy tylko 25% węzłów, filtrując tylko wartości true.
Kolor to doskonały typ danych do tworzenia atrakcyjnych wizualizacji, a także do przedstawiania różnic w danych wyjściowych programu wizualnego. Podczas pracy z abstrakcyjnymi danymi i różnymi liczbami czasami trudno jest dostrzec, co się zmienia i w jakim stopniu. To doskonała sytuacja do zastosowania kolorów.
Kolory w dodatku Dynamo są tworzone przy użyciu danych wejściowych ARGB. Odpowiadają one kanałom alfa, czerwonemu, zielonemu i niebieskiemu. Alfa określa przezroczystość koloru, natomiast pozostałe trzy kanały są używane jako kolory podstawowe, łączone w celu generowania całego spektrum barw.
Ikona | Nazwa (składnia) | Dane wejściowe | Dane wyjściowe |
---|---|---|---|
Kolory w poniższej tabeli umożliwiają wykonywanie zapytań o właściwości użyte do zdefiniowania koloru: alfa, czerwony, zielony i niebieski. Należy zauważyć, że węzeł Color.Components zawiera wszystkie cztery elementy wyjściowe, a więc jest zalecany do wykonywania zapytań o właściwości koloru.
Ikona | Nazwa (składnia) | Dane wejściowe | Dane wyjściowe |
---|---|---|---|
Kolory w poniższej tabeli odpowiadają przestrzeni kolorów HSB. Podział koloru na barwę, nasycenie i jasność jest bardziej intuicyjny pod względem interpretacji kolorów: jaki to kolor? Jak bardzo jest intensywny? Jak bardzo jest jasny lub ciemny? To właśnie podział na barwę, nasycenie i jasność.
Ikona | Nazwa (składnia) | Dane wejściowe | Dane wyjściowe |
---|---|---|---|
Węzeł Color Range jest podobny do węzła Remap Range z #part-ii-from-logic-to-geometryćwiczenia: ponownie odwzorowuje listę liczb w innej dziedzinie. Zamiast jednak odwzorowywać je w dziedzinie liczb, odwzorowuje je jako gradient kolorów na podstawie liczb wejściowych z zakresu od 0 do 1.
Ten węzeł działa dobrze, ale osiągnięcie właściwego efektu za pierwszym razem może być trudne. Najlepszym sposobem na poznanie gradientu kolorów jest przetestowanie go przez interakcję. Wykonamy szybkie ćwiczenie, aby poznać sposób konfigurowania gradientu, w którym kolory wyjściowe odpowiadają liczbom.
Zdefiniuj trzy kolory: za pomocą węzła Code Block zdefiniuj kolory red, green i blue (czerwony, zielony i niebieski), podłączając odpowiednie kombinacje wartości 0 i 255.
Utwórz listę: scal trzy kolory w jedną listę.
Zdefiniuj indeksy: utwórz listę, aby zdefiniować położenie uchwytów każdego koloru (w zakresie od 0 do 1). Zwróć uwagę na wartość 0,75 dla koloru zielonego. Spowoduje to umieszczenie koloru zielonego w 3/4 linii poziomej gradientu na suwaku zakresu kolorów.
Węzeł Code Block: wartości wejściowe (z zakresu od 0 do 1) do przekształcenia na kolory.
Węzeł Display.ByGeometry umożliwia pokolorowanie geometrii w rzutni dodatku Dynamo. To umożliwia rozdzielanie różnych typów geometrii, przedstawianie koncepcji parametrycznych, czy definiowanie legendy analizy na potrzeby symulacji. Elementy wejściowe są proste: „geometry” i „color”. Aby utworzyć gradient taki, jak na powyższym rysunku, należy połączyć element wejściowy „color” z węzłem Color Range.
Węzeł Display.BySurfaceColors umożliwia odwzorowywanie danych na powierzchni za pomocą koloru. Ta funkcja wprowadza wiele ciekawych możliwości wizualizacji danych uzyskanych metodą analizy dyskretnej, na przykład światła słonecznego, energii i bliskości. Stosowanie koloru do powierzchni w dodatku Dynamo przebiega podobnie do stosowania tekstury do materiału w innych środowiskach CAD. W krótkim ćwiczeniu poniżej pokazano, jak używać tego narzędzia.
Pobierz plik przykładowy, klikając poniższe łącze.
Pełna lista plików przykładowych znajduje się w załączniku.
W tym ćwiczeniu skupiono się na parametrycznym sterowaniu kolorem równolegle do geometrii. Geometria to podstawowa helisa, zdefiniowana poniżej przy użyciu węzła Code Block. To szybki i łatwy sposób tworzenia funkcji parametrycznej. Ponieważ skupiamy się na kolorze (a nie na geometrii), używamy bloku kodu, aby sprawnie utworzyć helisę bez nadmiernego zajmowania obszaru rysunku. Będziemy używać bloków kodu częściej, gdy przejdziemy do bardziej zaawansowanych zagadnień.
Węzeł Code Block: zdefiniuj dwa węzły Code Block, używając powyższych formuł. To szybka metoda parametrycznego tworzenia spirali.
Węzeł Point.ByCoordinates: połącz trzy elementy wyjściowe z węzła Code Block ze współrzędnymi tego węzła.
Teraz widzimy szyk punktów tworzących helisę. Kolejnym etapem jest utworzenie krzywej przechodzącej przez te punkty, aby można było zwizualizować helisę.
Węzeł PolyCurve.ByPoints: połącz element wyjściowy węzła Point.ByCoordinates z elementem wejściowym points tego węzła. Otrzymujemy krzywą o kształcie helisy.
Węzeł Curve.PointAtParameter: połącz element wyjściowy węzła PolyCurve.ByPoints z elementem wejściowym curve. Celem tego kroku jest utworzenie parametrycznego punktu przyciągania, który przesuwa się wzdłuż krzywej. Ponieważ punkt na krzywej jest obliczany na podstawie parametru, należy wprowadzić wartość param z zakresu od 0 do 1.
Węzeł Number Slider: po dodaniu do obszaru rysunku zmień wartość min na 0,0, wartość max na 1,0, a wartość step na 0,01. Połącz element wyjściowy suwaka z elementem wejściowym param węzła Curve.PointAtParameter. Teraz widzimy punkt na helisie, któremu odpowiada wartość procentowa na suwaku (0 w punkcie początkowym, 1 w punkcie końcowym).
Po utworzeniu punktu odniesienia możemy porównać odległość punktu odniesienia od punktów pierwotnie definiujących helisę. Wartość odległości będzie określać zarówno geometrię, jak i kolor.
Węzeł Geometry.DistanceTo: połącz element wyjściowy węzła Curve.PointAtParameter z elementem input. Połącz węzeł Point.ByCoordinates z wejściem geometry.
Węzeł Watch: wynik pokazuje listę odległości każdego punktu na helisie od punktu odniesienia na krzywej.
Kolejnym etapem jest sterowanie parametrami za pomocą listy odległości punktów na helisie od punktu odniesienia. Tych wartości odległości użyjemy do zdefiniowania promieni szeregu sfer wzdłuż krzywej. Aby zachować odpowiednie rozmiary sfer, należy ponownie odwzorować wartości odległości.
Węzeł Math.RemapRange: połącz element wyjściowy węzła Geometry.DistanceTo z elementem wejściowym „numbers”.
Węzeł Code Block: połącz blok kodu zawierający wartość 0,01 z elementem wejściowym newMin, a blok kodu zawierający wartość 1 z elementem wejściowym newMax.
Węzeł Watch: połącz element wyjściowy węzła Math.RemapRange z jednym węzłem, a element wyjściowy węzła Geometry.DistanceTo z drugim. Porównaj wyniki.
W tym kroku ponownie odwzorowano listę odległości w mniejszym zakresie. Wartości newMin i newMax można dowolnie edytować. Wartości zostaną ponownie odwzorowane i będą miały ten sam współczynnik rozkładu w całej dziedzinie.
Węzeł Sphere.ByCenterPointRadius: połącz element wyjściowy węzła Math.RemapRange z elementem wejściowym radius, a pierwotny element wyjściowy węzła Point.ByCoordinates z elementem wejściowym centerPoint.
Zmień wartość na suwaku i obserwuj, jak zmienia się rozmiar sfer. Otrzymaliśmy uchwyt parametryczny
Rozmiar sfer przedstawia szyk parametryczny zdefiniowany przez punkt odniesienia na krzywej. Użyjemy teraz tej samej koncepcji, której użyliśmy do określenia promienia sfer, aby sterować ich kolorem.
Węzeł Color Range: dodaj do obszaru rysunku. Po ustawieniu kursora na elemencie wejściowym value zobaczymy, że wymagane są liczby z zakresu od 0 do 1. Należy ponownie odwzorować liczby wyjściowe z węzła Geometry.DistanceTo, aby były zgodne z tą dziedziną.
Węzeł Sphere.ByCenterPointRadius: tymczasowo wyłączymy podgląd tego węzła (kliknij prawym przyciskiem myszy > Podgląd)
Węzeł Math.RemapRange: ten proces powinien być już znajomy. Połącz element wyjściowy węzła Geometry.DistanceTo z elementem wejściowym „numbers”.
Węzeł Code Block: podobnie jak wcześniej utwórz wartość 0 dla elementu wejściowego newMin i wartość 1 dla elementu wejściowego newMax. W tym przypadku możemy zdefiniować dwie wartości wyjściowe z jednego bloku kodu.
Węzeł Color Range: połącz element wyjściowy węzła Math.RemapRange z elementem wejściowym value.
Węzeł Color.ByARGB: to za jego pomocą utworzymy dwa kolory. Choć to rozwiązanie może wydawać się nieporęczne, jest identyczne z używaniem kolorów RGB w innym programie, z tym że po prostu stosujemy tu programowanie wizualne.
Węzeł Code Block: utwórz dwie wartości, 0 i 255. Połącz te dwie wartości wyjściowe z dwoma elementami wejściowymi węzła Color.ByARGB zgodnie z powyższą ilustracją (lub wybierz swoje dwa ulubione kolory).
Węzeł Color Range: element wejściowy colors wymaga listy kolorów. Musimy utworzyć tę listę z dwóch kolorów utworzonych w poprzednim kroku.
Węzeł List.Create: scal dwa kolory w jedną listę. Połącz wynik z elementem wejściowym colors węzła Color Range.
Węzeł Display.ByGeometryColor: połącz węzeł Sphere.ByCenterPointRadius z elementem wejściowym geometry, a węzeł Color Range z elementem wejściowym color. Otrzymaliśmy płynny gradient w całej dziedzinie krzywej.
Jeśli zmienimy wcześniej zdefiniowaną wartość za pomocą węzła Number Slider, kolory i rozmiary zostaną zaktualizowane. W tym przypadku kolor i promień są bezpośrednio powiązane: otrzymaliśmy wizualne połączenie między dwoma parametrami.
Pobierz plik przykładowy, klikając poniższe łącze.
Pełna lista plików przykładowych znajduje się w załączniku.
Najpierw należy utworzyć powierzchnię (lub odniesienie do niej), która będzie używana jako dane wejściowe dla węzła Display.BySurfaceColors. W tym przykładzie wyciągamy powierzchnię między krzywą sinusoidalną a krzywą cosinusoidalną.
Ta grupa węzłów służy do utworzenia punktów wzdłuż osi Z, a następnie przesunięcia ich na podstawie funkcji sinus i cosinus. Następnie dwie listy punktów zostaną użyte do wygenerowania krzywych NURBS.
Węzeł Surface.ByLoft: wygeneruj interpolowaną powierzchnię między listą krzywych NURBS.
Węzeł File Path: wybierz plik obrazu, z którego na dalszym etapie będą próbkowane dane pikseli.
Użyj węzła File.FromPath, aby przekonwertować ścieżkę pliku na plik, a następnie przekaż go do węzła Image.ReadFromFile, aby utworzyć obraz wyjściowy na potrzeby próbkowania.
Węzeł Image.Pixels: wprowadź obraz i podaj liczbę próbek, która będzie używana w wymiarach x i y obrazu.
Węzeł Slider: podaj wartości liczby próbek dla węzła Image.Pixels.
Węzeł Display.BySurfaceColors: odwzoruj szyk wartości kolorów na powierzchni, odpowiednio wzdłuż osi X i Y.
Podgląd powierzchni wyjściowej w powiększeniu, z rozdzielczością 400x300 próbek.
W dodatku Dynamo 2.0 wprowadzono oddzielenie typu danych słownika od typu danych listy. Ta modyfikacja może spowodować istotne zmiany w sposobie tworzenia i pracy z danymi w procesach roboczych. Przed wersją 2.0 słowniki i listy stanowiły jeden typ danych. W skrócie: listy były w rzeczywistości słownikami z kluczami w formie liczb całkowitych.
Słownik jest typem danych składającym się z kolekcji par wartości i kluczy, przy czym każdy klucz jest niepowtarzalny w danej kolekcji. Słownik nie jest uporządkowany i zasadniczo można „wyszukiwać elementy”, używając klucza zamiast wartości indeksu — jak w przypadku listy. W dodatku Dynamo 2.0 klucze mogą być tylko ciągami.
Lista jest typem danych składającym się z kolekcji uporządkowanych wartości. W dodatku Dynamo indeksy listy są liczbami całkowitymi.
Rozdzielenie słowników od list sprawia, że słowniki stają się pierwszoligowym narzędziem, którego można używać do szybkiego i łatwego przechowywania i wyszukiwania wartości bez konieczności zapamiętywania wartości indeksu ani utrzymywania ścisłej struktury listy w całym procesie roboczym. Podczas testowania u użytkowników dostrzegliśmy znaczne zmniejszenie rozmiaru wykresu, gdy używano słowników zamiast kilku węzłów GetItemAtIndex
.
Wprowadzono zmiany w składni w zakresie inicjalizacji słowników i list w węzłach Code Block oraz pracy z nimi.
W przypadku słowników używana jest następująca składnia: {key:value}
Listy mają następującą składnię [value,value,value]
W bibliotece wprowadzono nowe węzły, aby ułatwić tworzenie i modyfikowanie słowników oraz stosowanie do nich zapytań.
Listy tworzone w węzłach Code Block w wersji 1.x będą automatycznie migrowane po wczytaniu skryptu do nowej składni listy, w której są używane nawiasy kwadratowe [ ]
zamiast nawiasów klamrowych { }
\
W informatyce słowniki — tak jak listy — to kolekcje obiektów. Listy mają określony porządek, natomiast słowniki są kolekcjami nieuporządkowanymi. Nie są one zależne od sekwencji liczby (indeksów). Wykorzystuje się w nich klucze.
Na poniższej ilustracji pokazano potencjalny przypadek zastosowania słownika. Często słowniki są używane do powiązania dwóch fragmentów danych, które mogą nie mieć bezpośredniej korelacji. W naszym przypadku połączymy hiszpańską wersję słowa z angielską do późniejszego wyszukania.
Utwórz słownik, aby powiązać te dwa elementy danych.
Pobierz wartość związaną z podanym kluczem.
Węzły niestandardowe są tworzone przez zagnieżdżanie innych węzłów i węzłów niestandardowych wewnątrz „węzła niestandardowego Dynamo”, który można traktować koncepcyjnie jako kontener. Gdy ten węzeł kontenera zostaje wykonany na wykresie, wykonywana jest cała jego zawartość, co umożliwia ponowne używanie i udostępnianie przydatnego połączenia węzłów.
Jeśli na wykresie znajduje się wiele kopii węzła niestandardowego, można zaktualizować je wszystkie, edytując podstawowy węzeł niestandardowy. Umożliwia to płynną aktualizację wykresu przez dostosowanie rozwiązania do zmian, które mogą wystąpić w procesie roboczym lub w projekcie.
Prawdopodobnie największą zaletą węzłów niestandardowych jest możliwość ich udostępniania. Jeśli „użytkownik zaawansowany” utworzy złożony wykres Dynamo i przekaże go projektantowi, który jest nowym użytkownikiem dodatku Dynamo, może on uprościć ten wykres do elementów najistotniejszych dla interakcji projektowych. Węzeł niestandardowy można otworzyć w celu edycji wewnętrznego wykresu, zachowując przy tym prostotę „kontenera”. Dzięki tej procedurze węzły niestandardowe umożliwiają użytkownikom dodatku Dynamo projektowanie wykresów, które będą przejrzyste i intuicyjne.
W dodatku Dynamo można tworzyć węzły niestandardowe na wiele sposobów. W przykładach w tym rozdziale utworzymy węzły niestandardowe bezpośrednio za pomocą interfejsu użytkownika dodatku Dynamo. Programista interesujący się formatowaniem C# lub Zero-Touch może skorzystać z tej strony na stronie wiki dodatku Dynamo, aby zapoznać się z bardziej szczegółowym omówieniem.
Przejdźmy do środowiska węzłów niestandardowych i utwórzmy prosty węzeł, aby obliczyć wartość procentową. Środowisko węzłów niestandardowych różni się od środowiska wykresu Dynamo, ale obsługuje się je zasadniczo tak samo. Utwórzmy więc pierwszy węzeł niestandardowy.
Aby utworzyć węzeł niestandardowy od podstaw, uruchom dodatek Dynamo i wybierz opcję Węzeł niestandardowy lub naciśnij kombinację klawiszy Ctrl+Shift+N w obszarze rysunku.
W oknie dialogowym Właściwości węzła niestandardowego przypisz nazwę, opis i kategorię.
Nazwa: Percentage
Opis: oblicza procent (ang. percentage) jednej wartości względem innej.
Kategoria: Math.Functions
Spowoduje to otwarcie obszaru rysunku z żółtym tłem, co oznacza, że użytkownik pracuje w węźle niestandardowym. W tym obszarze rysunku użytkownik ma dostęp do wszystkich podstawowych węzłów Dynamo oraz do węzłów Input i Output, które opisują dane wpływające do węzła niestandardowego i wypływające z niego. Można je znaleźć w obszarze Input (Dane wejściowe)>Basic (Podstawowe).
Węzły Input: węzły wejściowe tworzą porty wejściowe w węźle niestandardowym. Składnia węzła wejściowego to: nazwa_węzła_wejściowego : datatype = wartość_domyślna (opcjonalnie).
Węzły Output: podobnie jak w przypadku węzłów wejściowych te węzły tworzą porty wyjściowe w węźle niestandardowym. Rozważ dodanie komentarza niestandardowego (Custom Comment) do portów wejściowych i wyjściowych, aby poinformować o typach danych wejściowych i wyjściowych. Więcej szczegółów znajduje się w sekcji Tworzenie węzłów niestandardowych.
Ten węzeł niestandardowy można zapisać jako plik .dyf (w przeciwieństwie do standardowego pliku .dyn), który zostanie automatycznie dodany do bieżącej sesji i przyszłych sesji. Ten węzeł niestandardowy można znaleźć w bibliotece w sekcji dodatków.
Teraz po utworzeniu pierwszego węzła niestandardowego w kolejnych sekcjach dokładniej omówimy funkcje węzłów niestandardowych i to, jak publikuje się ogólne procesy robocze. W kolejnej sekcji przyjrzymy się opracowywaniu węzła niestandardowego, który przenosi geometrię z jednej powierzchni do drugiej.
Czy kiedykolwiek zdarzyło Ci się wyszukiwać coś w programie Revit za pomocą zawartych w nim danych?
W takim przypadku zwykle robi się to jak w poniższym przykładzie.
Na poniższej ilustracji zbieramy wszystkie pomieszczenia w modelu programu Revit, uzyskujemy indeks żądanego pomieszczenia (według numeru pomieszczenia), a następnie pobieramy pomieszczenie o danym indeksie.
Zbierz wszystkie pomieszczenia w modelu.
Numer pomieszczenia do znalezienia.
Pobierz numer pomieszczenia i znajdź indeks, w którym się ono znajduje.
Uzyskaj pomieszczenie o określonym indeksie.
Pobierz plik przykładowy, klikając poniższe łącze.
Pełna lista plików przykładowych znajduje się w załączniku.
Teraz odtwórzmy ten pomysł, używając słowników. Najpierw musimy zebrać wszystkie pomieszczenia w modelu programu Revit.
Wybieramy kategorię programu Revit, z którą chcemy pracować (w tym przypadku pracujemy z pomieszczeniami).
Zlecamy dodatkowi Dynamo zebranie wszystkich tych elementów.
Następnie musimy zdecydować, jakich kluczy użyjemy do wyszukiwania tych danych. (Informacje na temat kluczy można znaleźć w sekcji Co to jest słownik?).
Dane, których użyjemy, to numer pomieszczenia.
Teraz utworzymy słownik z danymi kluczami i elementami.
Węzeł Dictionary.ByKeysValues utworzy słownik na podstawie odpowiednich danych wejściowych.
Keys
muszą być ciągami, avalues
mogą być różnymi typami obiektów.
Na koniec możemy pobrać pomieszczenie ze słownika za pomocą jego numeru.
String
będzie kluczem, który jest używany do wyszukania obiektu w słowniku.Teraz węzeł Dictionary.ValueAtKey pobierze obiekt ze słownika.
Używając tej samej logiki słowników, można także tworzyć słowniki ze zgrupowanymi obiektami. Jeśli chcemy wyszukać wszystkie pomieszczenia na danym poziomie, możemy zmienić powyższy wykres w następujący sposób.
Zamiast używać jako klucza numeru pomieszczenia, możemy teraz użyć wartości parametru (w tym przypadku użyjemy poziomu).
Teraz możemy pogrupować pomieszczenia według poziomu, na którym się znajdują.
Po pogrupowaniu elementów według poziomów możemy używać wspólnych (niepowtarzalnych) kluczy jako kluczy w słowniku, a list pomieszczeń jako elementów.
Na koniec, korzystając z poziomów w modelu programu Revit, możemy sprawdzić w słowniku, które pomieszczenia znajdują się na danym poziomie. Węzeł
Dictionary.ValueAtKey
pobierze nazwę poziomu i zwróci obiekty pomieszczeń na tym poziomie.
Możliwości zastosowań słowników są naprawdę nieograniczone. Już sama możliwość powiązywania danych BIM w programie Revit z elementem zapewnia wiele różnych przypadków zastosowań.
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.
Od razu po zainstalowaniu dodatku Dynamo udostępnia on wiele gotowych funkcji w bibliotece węzłów. Węzły i pakiety niestandardowe są doskonałym sposobem na jeszcze większe rozszerzenie zastosowania dodatku Dynamo — na przykład do obsługi często używanych procedur lub specjalnego wykresu, który ma zostać udostępniony społeczności.
W dodatku Dynamo 2.0 wprowadzono nie tylko wcześniej omówione węzły dotyczące słowników — wprowadzono w nim również nowe związane z nimi funkcje w blokach kodów.
Można używać składni podobnej do poniższej lub reprezentacji węzłów opartej na języku DesignScript.
Ponieważ słownik jest typem obiektu w dodatku Dynamo, można na nim wykonywać następujące operacje.
Obsługa tego rodzaju interakcji staje się szczególnie przydatna w przypadku kojarzenia danych programu Revit z ciągami. Następnie przyjrzymy się niektórym przypadkom zastosowań związanym z programem Revit.
Właśnie utworzyliśmy węzeł niestandardowy i zastosowaliśmy go do określonego procesu na wykresie Dynamo. Ten węzeł podoba nam się tak bardzo, że chcemy pozostawić go w naszej bibliotece dodatku Dynamo, aby odwoływać się do niego na innych wykresach. Aby to zrobić, opublikujemy ten węzeł lokalnie. Jest to proces podobny do publikowania pakietu, który bardziej szczegółowo omówimy w następnym rozdziale.
Węzeł opublikowany lokalnie będzie dostępny w bibliotece dodatku Dynamo po otwarciu nowej sesji. Jeśli nie opublikujemy węzła, w folderze wykresu Dynamo, który odwołuje się do węzła niestandardowego, musi również znajdować się ten węzeł niestandardowy (lub węzeł niestandardowy musi zostać zaimportowany do dodatku Dynamo za pomocą polecenia Plik > Importuj bibliotekę).
Pakiety i węzły niestandardowe można publikować w środowisku Dynamo Sandbox w wersji 2.17 lub nowszej, o ile nie mają one zależności od nadrzędnego interfejsu API. W starszych wersjach publikowanie pakietów i węzłów niestandardowych jest włączone tylko w dodatku Dynamo dla programu Revit i dodatku Dynamo dla programu Civil 3D.
Pobierz plik przykładowy, klikając poniższe łącze.
Pełna lista plików przykładowych znajduje się w załączniku.
Kontynuujmy pracę z węzłem niestandardowym, który utworzyliśmy w poprzedniej sekcji. Po otwarciu węzła niestandardowego PointsToSurface widać wykres w Edytorze węzłów niestandardowych dodatku Dynamo. Węzeł niestandardowy można również otworzyć, klikając go dwukrotnie w Edytorze wykresu Dynamo.
Aby opublikować węzeł niestandardowy lokalnie, wystarczy kliknąć prawym przyciskiem myszy obszar rysunku i wybrać opcję „Opublikuj ten węzeł niestandardowy...”
Podaj odpowiednie informacje (podobnie, jak to zrobiono na ilustracji powyżej) i wybierz opcję „Opublikuj lokalnie”. Należy zwrócić uwagę, że pole Grupa definiuje element główny dostępny w menu dodatku Dynamo.
Wybierz folder, w którym będą przechowywane wszystkie węzły niestandardowe publikowane lokalnie. Ten folder będzie sprawdzany przy każdym wczytywaniu dodatku Dynamo, dlatego upewnij się, że jest to folder trwały. Przejdź do tego folderu i wybierz opcję „Wybierz folder”. Węzeł Dynamo jest teraz opublikowany lokalnie i będzie dostępny w bibliotece dodatku Dynamo po każdym wczytaniu programu.
Aby sprawdzić położenie folderu węzłów niestandardowych, przejdź do obszaru Dynamo > Preferencje > Ustawienia pakietów > Ścieżki do węzłów i pakietów
W tym oknie jest widoczna lista ścieżek.
Ścieżka Documents\DynamoCustomNodes... odnosi się do położenia węzłów niestandardowych, które zostały opublikowane lokalnie.
Ścieżka AppData\Roaming\Dynamo... odnosi się do domyślnego położenia pakietów dodatku Dynamo instalowanych online.
Można przenieść ścieżkę folderu lokalnego w dół listy, klikając strzałkę skierowaną w dół po lewej stronie nazwy ścieżki. Folder na początku listy stanowi domyślną ścieżkę do instalacji pakietów. Dlatego jeśli domyślna ścieżka instalacji pakietów Dynamo zostanie zachowana jako folder domyślny, pakiety online będą oddzielone od węzłów opublikowanych lokalnie.
Zmieniliśmy kolejność nazw ścieżek, aby lokalizacją instalacji pakietu była domyślna ścieżka dodatku Dynamo.
Po przejściu do tego folderu lokalnego oryginalny węzeł niestandardowy znajdziemy w folderze „.dyf” — ta nazwa stanowi rozszerzenie pliku węzła niestandardowego dodatku Dynamo (Dynamo Custom Node). Możemy edytować plik w tym folderze, a węzeł zostanie zaktualizowany w interfejsie użytkownika. Możemy także dodać więcej węzłów do głównego folderu DynamoCustomNode, a dodatek Dynamo doda je do biblioteki po ponownym uruchomieniu.
Dodatek Dynamo będzie teraz za każdym razem wczytywany z elementem „PointsToSurface” w grupie „DynamoPrimer” w bibliotece dodatku Dynamo.
Dodatek Dynamo udostępnia wiele funkcji gotowych do użycia oraz obszerną bibliotekę pakietów, które mogą znacznie zwiększyć możliwości dodatku. Pakiet jest zbiorem węzłów niestandardowych lub dodatkowych funkcji. Dynamo Package Manager to portal dla społeczności umożliwiający pobranie dowolnego pakietu, który został opublikowany online. Te zestawy narzędzi zostały opracowane przez strony trzecie w celu rozszerzenia podstawowej funkcjonalności dodatku Dynamo i są dostępne dla wszystkich. Są gotowe do pobrania przez kliknięcie przycisku.
Projekt open-source, taki jak dodatek Dynamo, rozwija się dzięki takiemu zaangażowaniu społeczności. Dzięki zaangażowanym programistom zewnętrznym dodatek Dynamo może rozszerzyć zasięg na procesy robocze w różnych branżach. Z tego powodu zespół dodatku Dynamo podjął skoncentrowane wysiłki w celu usprawnienia opracowywania i publikowania pakietów (zostanie to omówione bardziej szczegółowo w kolejnych sekcjach).
Najprostszym sposobem instalacji pakietu jest użycie opcji menu Pakiety w interfejsie dodatku Dynamo. Przejdźmy od razu do rzeczy i zainstalujmy pakiet teraz. W tym szybkim przykładzie zainstalujemy popularny pakiet umożliwiający tworzenie paneli czworokątnych na siatce.
W dodatku Dynamo przejdź do obszaru Pakiety > Menedżer pakietów.
Na pasku wyszukiwania wyszukaj frazę „quads from rectangular grid”. Po kilku chwilach powinny pojawić się wszystkie pakiety zgodne z tym zapytaniem. Wybierzmy pierwszy pakiet z pasującą nazwą.
Kliknij przycisk Zainstaluj, aby dodać ten pakiet do biblioteki, a następnie zaakceptuj potwierdzenie. Gotowe.
Zwróć uwagę, że w bibliotece Dynamo pojawiła się kolejna grupa o nazwie „buildz”. Ta nazwa odnosi się do programisty pakietu, a węzeł niestandardowy zostaje umieszczony w tej grupie. Możemy od razu zacząć z niego korzystać.
Użyj węzła Code Block, aby szybko zdefiniować prostokątną siatkę, zapisać wynik w węźle Polygon.ByPoints, a następnie użyj węzła Surface.ByPatch, aby wyświetlić listę właśnie utworzonych prostokątnych paneli.
W powyższym przykładzie skupiono się na pakiecie z jednym węzłem niestandardowym, ale ten sam proces jest używany do pobierania pakietów z kilkoma węzłami niestandardowymi i plikami danych pomocniczych. Zademonstrujmy to teraz z wszechstronniejszym pakietem: Dynamo Unfold.
Tak jak w przykładzie powyżej, rozpocznij od wybrania opcji Pakiety > Menedżer pakietów.
Tym razem poszukamy jednego słowa, „DynamoUnfold”. Po wyświetleniu pakietów pobierz je, klikając przycisk Zainstaluj, aby dodać składniki Dynamo Unfold do biblioteki Dynamo.
W bibliotece Dynamo dostępna jest grupa DynamoUnfold z wieloma kategoriami i węzłami niestandardowymi.
Spójrzmy teraz na strukturę plików pakietu.
Najpierw przejdź do obszaru Pakiety > Menedżer pakietów > Zainstalowane pakiety.
Następnie kliknij opcję Pokaż katalog główny, aby otworzyć folder główny dla tego pakietu.
Spowoduje to przejście do katalogu głównego pakietu. Zwróć uwagę, że mamy 3 foldery i plik.
Folder bin zawiera pliki .dll. Ten pakiet Dynamo został opracowany przy użyciu narzędzia Zero-Touch, więc węzły niestandardowe są przechowywane w tym folderze.
Folder dyf zawiera węzły niestandardowe. Ten pakiet nie został opracowany przy użyciu węzłów niestandardowych Dynamo, dlatego ten folder jest w przypadku tego pakietu pusty.
Ten dodatkowy folder zawiera wszystkie dodatkowe pliki, w tym pliki przykładowe.
Plik pkg jest podstawowym plikiem tekstowym definiującym ustawienia pakietu. Na razie możemy to zignorować.
Po otwarciu folderu „extra” zostaje wyświetlona seria plików przykładowych, które zostały pobrane wraz z instalacją. Nie wszystkie pakiety zawierają pliki przykładowe, ale jeśli są one częścią pakietu, można je znaleźć tutaj.
Otwórzmy plik „SphereUnfold”.
Po otwarciu pliku i naciśnięciu przycisku „Uruchom” w solwerze dostępna jest rozwinięta sfera. Pliki przykładowe są przydatne do nauki pracy z nowym pakietem Dynamo.
W Menedżerze pakietów można odszukiwać pakiety, korzystając z opcji sortowania i filtrowania na karcie Wyszukaj pakiety. Dostępnych jest kilka filtrów dotyczących programu nadrzędnego, statusu (nowy, nieaktualny lub z cofniętą nieaktualnością) oraz tego, czy pakiet ma zależności.
Sortując pakiety, można zidentyfikować pakiety wysoko oceniane lub najczęściej pobierane albo znaleźć pakiety z najnowszymi aktualizacjami.
Aby uzyskać dostęp do większej ilości szczegółowych informacji dotyczących danego pakietu, kliknij przycisk Wyświetl szczegóły. Spowoduje to otwarcie panelu bocznego w Menedżerze pakietów, w którym można znaleźć takie dane, jak obsługa wersji i zależności, adres URL witryny lub repozytorium, informacje o licencji itp.
Jeśli chcesz zobaczyć, gdzie przechowywane są pliki pakietu, w górnym obszarze nawigacji kliknij kolejno opcje Dynamo > Preferencje > Ustawienia pakietów > Lokalizacje plików węzłów i pakietów. Tutaj znajdziesz bieżący katalog główny.
Domyślnie pakiety są instalowane w położeniu podobnym do tej ścieżki folderu: C:/Users/[nazwa_użytkownika]/AppData/Roaming/Dynamo/[wersja dodatku Dynamo].
Społeczność dodatku Dynamo stale rośnie i ewoluuje. Przeglądając Menedżera pakietów Dynamo od czasu do czasu, znajdziesz nowe interesujące rozwiązania. W poniższych sekcjach przyjrzymy się dokładniej pakietom: od perspektywy użytkownika końcowego po perspektywę twórcy własnego pakietu Dynamo.
W poprzednich sekcjach omówiono szczegółowo skonfigurowanie pakietu MapToSurface za pomocą węzłów niestandardowych i plików przykładowych. Jak jednak opublikować pakiet, który został utworzony lokalnie? W tej analizie przypadku pokazano sposób publikowania pakietu z zestawu plików w folderze lokalnym.
Istnieje wiele sposobów na opublikowanie pakietu. Poniżej przedstawiono zalecany przez nas proces: publikowanie lokalne, opracowywanie lokalne, a następnie publikowanie online. Rozpoczniemy od folderu zawierającego wszystkie pliki w pakiecie.
Zanim przejdziemy do publikowania pakietu MapToSurface, jeśli został on zainstalowany w ramach poprzedniej lekcji, należy go odinstalować, aby nie pracować z identycznymi pakietami.
Najpierw przejdź do obszaru Pakiety > Menedżer pakietów > karty Zainstalowane pakiety > obok pozycji MapToSurface kliknij menu w postaci pionowych kropek > Usuń.
Następnie ponownie uruchom dodatek Dynamo. Po ponownym otwarciu w oknie „Zarządzaj pakietami” nie powinno już być pakietu MapToSurface. Teraz można już zacząć od początku.
Pakiety i węzły niestandardowe można publikować w środowisku Dynamo Sandbox w wersji 2.17 lub nowszej, o ile nie mają one zależności od nadrzędnego interfejsu API. W starszych wersjach publikowanie pakietów i węzłów niestandardowych jest włączone tylko w dodatku Dynamo dla programu Revit i dodatku Dynamo dla programu Civil 3D.
Pobierz plik przykładowy, klikając poniższe łącze.
Pełna lista plików przykładowych znajduje się w załączniku.
To jest pierwsze przesłanie pakietu i wszystkie pliki przykładowe i węzły niestandardowe zostały umieszczone w jednym folderze. Po przygotowaniu tego folderu można przekazać go do menedżera pakietów Dynamo.
Ten folder zawiera pięć węzłów niestandardowych (.dyf).
Ten folder zawiera także pięć przykładowych plików (.dyn) i jeden zaimportowany plik wektorowy (.svg). Te pliki będą służyły jako ćwiczenia wprowadzające, aby pokazać użytkownikowi, jak pracować z węzłami niestandardowymi.
W dodatku Dynamo najpierw kliknij kolejno opcje Pakiety > Menedżer pakietów > kartę Opublikuj nowy pakiet.
Na karcie Publikowanie pakietu wypełnij odpowiednie pola po lewej stronie okna.
Następnie dodamy pliki pakietu. Pliki można dodawać pojedynczo lub całymi folderami, wybierając opcję Dodaj katalog (1). Aby dodać pliki, które nie są plikami .dyf, należy zmienić typ pliku w oknie przeglądarki na „Wszystkie pliki(.)”. Uwaga: dodamy wszystkie pliki bez rozróżniania typów: węzły niestandardowe (.dyf) i pliki przykładów (.dyn). Po opublikowaniu pakietu dodatek Dynamo skategoryzuje te elementy.
Po wybraniu folderu MapToSurface w Menedżerze pakietów wyświetlana jest zawartość folderu. W przypadku przekazywania własnego pakietu ze złożoną strukturą folderów, gdy dodatek Dynamo nie powinien wprowadzać zmian w strukturze folderów, można włączyć przełącznik „Zachowaj strukturę folderów”. Ta opcja jest przeznaczona dla zaawansowanych użytkowników i jeśli pakiet nie jest celowo skonfigurowany w określony sposób, najlepiej wyłączyć ten przełącznik i pozwolić dodatkowi Dynamo na zorganizowanie plików zgodnie z potrzebami. Kliknij przycisk Dalej, aby kontynuować.
W tym miejscu można wyświetlić podgląd zorganizowania plików pakietu przez dodatek Dynamo przed opublikowaniem. Kliknij przycisk Zakończ, aby kontynuować.
Opublikuj, klikając przycisk „Opublikuj lokalnie” (1). Postępując zgodnie z tymi instrukcjami, należy koniecznie kliknąć przycisk „Opublikuj lokalnie”, a nie „Opublikuj online”, aby uniknąć powielenia pakietów w Menedżerze pakietów.
Po opublikowaniu węzły niestandardowe powinny być dostępne w grupie „DynamoPrimer” lub w bibliotece Dynamo.
Teraz spójrzmy na katalog główny, aby sprawdzić, w jaki sposób dodatek Dynamo sformatował utworzony właśnie pakiet. W tym celu przejdź do karty Zainstalowane pakiety > obok pozycji MapToSurface kliknij menu w postaci pionowych kropek > wybierz opcję Pokaż katalog główny.
Zwróć uwagę, że katalog główny znajduje się w lokalnym położeniu pakietu (pakiet został opublikowany lokalnie). Dodatek Dynamo aktualnie odwołuje się do tego folderu, aby odczytać węzły niestandardowe. Dlatego ważne jest, aby lokalnie opublikować katalog w trwałym położeniu folderu (czyli na przykład nie na pulpicie). Poniżej przedstawiono strukturę folderów pakietu Dynamo.
Folder bin zawiera pliki .dll utworzone za pomocą bibliotek C# lub Zero-Touch. W tym pakiecie ich nie ma, więc ten folder jest pusty dla tego przykładu.
Folder dyf zawiera węzły niestandardowe. Otwarcie tego folderu spowoduje wyświetlenie wszystkich węzłów niestandardowych (plików .dyf) dla tego pakietu.
W folderze dodatkowym („extra”) znajdują się wszystkie dodatkowe pliki. Będą to prawdopodobnie pliki dodatku Dynamo (.dyn) lub dowolne dodatkowe wymagane pliki (.svg, .xls, .jpeg, .sat itp.).
Plik pkg jest podstawowym plikiem tekstowym definiującym ustawienia pakietu. Jest to zautomatyzowane w dodatku Dynamo, ale możesz to edytować, jeśli chcesz przejść do szczegółów.
Uwaga: ten krok należy wykonać tylko w przypadku, gdy faktycznie publikuje się własny pakiet.
Gdy wszystko jest gotowe do opublikowania, w oknie Pakiety > Menedżer pakietów > Zainstalowane pakiety wybierz przycisk znajdujący się po prawej stronie pakietu, który chcesz opublikować, i wybierz opcję Opublikuj.
Jeśli aktualizujesz pakiet, który już został opublikowany, wybierz opcję „Opublikuj wersję”, a dodatek Dynamo zaktualizuje pakiet online na podstawie nowych plików w katalogu głównym tego pakietu. To wystarczy.
W trakcie aktualizowania plików w folderze głównym opublikowanego pakietu można też opublikować nową wersję pakietu, wybierając opcję „Opublikuj wersję” na karcie Moje pakiety. Jest to prosty sposób na wprowadzenie niezbędnych aktualizacji zawartości i udostępnienie ich społeczności. Polecenie Opublikuj wersję działa tylko wtedy, gdy użytkownik jest administratorem pakietu.
Dodatek Dynamo oferuje wiele węzłów podstawowych, które umożliwiają wykonywanie szerokiej gamy zadań programowania wizualnego. Czasami szybszym, bardziej eleganckim lub łatwiejszym do udostępnienia rozwiązaniem jest utworzenie własnych węzłów. Można ich ponownie używać w różnych projektach, dzięki czemu wykresy stają się czytelniejsze. Można je też przekazywać do Menedżera pakietów i udostępniać globalnej społeczności dodatku Dynamo.
Zestaw Dynamo Mesh Toolkit zawiera narzędzia do importowania siatek z zewnętrznych formatów plików, tworzenia siatki z obiektów geometrii Dynamo oraz ręcznego tworzenia siatek na podstawie wierzchołków i indeksów. Ta biblioteka zawiera również narzędzia do modyfikowania siatek, naprawiania siatek i wyodrębniania warstw poziomych do użycia w produkcji.
Zestaw narzędzi Dynamo Mesh Toolkit jest częścią nieustających badań firmy Autodesk nad siatką, więc w nadchodzących latach będzie się rozwijać. Należy spodziewać się częstego dodawania do zestawu nowych metod. Zachęcamy też do kierowania do zespołu Dynamo komentarzy, informacji o błędach i sugestii dotyczących nowych funkcji.
W dodatku Dynamo na górnym pasku menu przejdź do obszaru Pakiety > Menedżer pakietów. W polu wyszukiwania wpisz „MeshToolkit” (jedno słowo). Kliknij przycisk Zainstaluj i zaakceptuj potwierdzenia, aby rozpocząć pobieranie. To wystarczy.
Pobierz plik przykładowy, klikając poniższe łącze.
Pełna lista plików przykładowych znajduje się w załączniku.
W tym przykładzie przyjrzymy się węzłowi Intersect w zestawie Mesh Toolkit. Zaimportujemy siatkę i przetniemy ją szeregiem płaszczyzn wejściowych, aby utworzyć warstwy. Jest to punkt wyjścia do przygotowania modelu do produkcji na przecinarce laserowej, wodnej lub frezarce CNC.
Rozpocznij od otwarcia pliku Mesh-Toolkit_Intersect-Mesh.dyn w dodatku Dynamo.
File Path: odszukaj plik siatki do zaimportowania (stanford_bunny_tri.obj). Obsługiwane typy plików to .mix i .obj
Mesh.ImportFile: połącz ścieżkę pliku w celu zaimportowania siatki.
Point.ByCoordinates: utwórz punkt — będzie to środek łuku.
Arc.ByCenterPointRadiusAngle: utwórz łuk wokół punktu. Ta krzywa zostanie użyta do rozmieszczenia szeregu płaszczyzn. __ Znajdują się tu następujące ustawienia: __
radius: 40, startAngle: -90, endAngle:0
Utwórz szereg płaszczyzn zorientowanych wzdłuż łuku.
Code Block: utwórz 25 liczb z zakresu od 0 do 1.
Curve.PointAtParameter: połącz łuk z wejściem „curve” i wyjście węzła Code Block z wejściem „param”, aby wyodrębnić szereg punktów wzdłuż krzywej.
Curve.TangentAtParameter: połącz te same wejścia co w poprzednim węźle.
Plane.ByOriginNormal: połącz punkty z wejściem „origin” i wektory z wejściem „normal”, aby utworzyć szereg płaszczyzn w każdym punkcie.
Następnie użyjemy tych płaszczyzn do przecięcia siatki.
Mesh.Intersect: utwórz przecięcie płaszczyzn z zaimportowaną siatką, tworząc szereg konturów polikrzywej. Kliknij prawym przyciskiem myszy węzeł i ustaw skratowanie na najdłuższe
PolyCurve.Curves: rozbij polikrzywe na zakrzywione fragmenty.
Curve.EndPoint: wyodrębnij punkty końcowe każdej krzywej.
NurbsCurve.ByPoints: użyj punktów do utworzenia krzywej NURBS. Użyj węzła Boolean ustawionego na True, aby zamknąć krzywe.
Przed kontynuowaniem wyłącz podgląd niektórych węzłów, takich jak Mesh.ImportFile, Curve.EndPoint, Plane.ByOriginNormal i Arc.ByCenterPointRadiusAngle, aby lepiej uwidocznić wynik.
Surface.ByPatch: utwórz ścieżki powierzchni dla każdego konturu, aby utworzyć „warstwy” siatki.
Dodaj drugi zestaw warstw, aby uzyskać efekt wafla.
Można zauważyć, że operacje przecięcia są dla siatki wykonywane szybciej niż dla porównywalnej bryły. Procesy robocze, takie jak ten przedstawiony w tym ćwiczeniu, dobrze nadają się do stosowania siatek.
Po utworzeniu kilku węzłów niestandardowych kolejnym krokiem jest rozpoczęcie organizowania i publikowania ich za pomocą pakietów — to wygodny sposób przechowywania i udostępniania węzłów w społeczności dodatku Dynamo.
Dodatek Dynamo udostępnia różne sposoby tworzenia pakietu do użytku osobistego lub do udostępnienia społeczności dodatku Dynamo. W poniższej analizie przypadku omówimy sposób konfigurowania pakietu przez dekonstrukcję istniejącego. Ta analiza przypadku opiera się na lekcjach z poprzedniego rozdziału — z udostępnieniem zestawu węzłów niestandardowych do odwzorowania geometrii, za pomocą współrzędnych UV, z jednej powierzchni Dynamo na inną.
Będziemy pracować z przykładowym pakietem demonstrującym odwzorowywanie punktów UV z jednej powierzchni na inną. W sekcji tego przewodnika Primer utworzyliśmy już podstawy narzędzia. W poniższych plikach przedstawiono, w jaki sposób można wykorzystać koncepcję odwzorowywania UV i opracować zestaw narzędzi dla publikowalnej biblioteki.
Na tej ilustracji odwzorowujemy punkt z jednej powierzchni na drugą za pomocą współrzędnych UV. Pakiet jest oparty na tej koncepcji, ale z bardziej złożoną geometrią.
W poprzednim rozdziale omówiliśmy sposoby panelowania powierzchni w dodatku Dynamo na podstawie krzywych zdefiniowanych na płaszczyźnie XY. W tej analizie przypadku rozszerzono zakres tych pojęć o więcej wymiarów geometrii. Zainstalujemy ten pakiet jako wbudowany, aby zademonstrować, w jaki sposób został on opracowany. W następnej sekcji pokażemy, jak ten pakiet opublikowano.
W dodatku Dynamo kliknij kolejno opcje Pakiety > Menedżer pakietów i wyszukaj pakiet „MapToSurface” (jest to jeden wyraz). Kliknij przycisk Zainstaluj, aby rozpocząć pobieranie i dodać pakiet do biblioteki.
Po zainstalowaniu węzły niestandardowe powinny być dostępne w sekcji Dodatki > Przewodnik Dynamo Primer.
Po zainstalowaniu pakietu przeanalizujmy jego konfigurację.
Tworzony pakiet zawiera pięć węzłów niestandardowych utworzonych na potrzeby odniesienia. Poniżej przeanalizujemy funkcjonowanie poszczególnych węzłów. Niektóre węzły niestandardowe utworzone na podstawie innych węzłów niestandardowych oraz wykresy mają układ łatwo zrozumiały dla innych użytkowników.
To jest prosty pakiet z pięcioma węzłami niestandardowymi. W poniższych krokach omówiono krótko konfigurację każdego węzła niestandardowego.
Jest to podstawowy węzeł niestandardowy, na którym oparto wszystkie pozostałe węzły odwzorowania. Mówiąc prościej: węzeł odwzorowuje punkt ze współrzędnej UV powierzchni źródłowej na położenie współrzędnej UV powierzchni docelowej. Ponieważ punkty są najbardziej elementarną geometrią, z której zbudowana jest bardziej złożona geometria, za pomocą tej logiki można odwzorować geometrię 2D — a nawet geometrię 3D — z jednej powierzchni na inną.
Logika wydłużania odwzorowanych punktów z geometrii 1D do geometrii 2D została prosto przedstawiona tutaj za pomocą wieloboków. Należy zwrócić uwagę, że zagnieździliśmy węzeł „PointsToSurface” w tym węźle niestandardowym. W ten sposób można odwzorować punkty każdego wieloboku na powierzchnię, a następnie ponownie wygenerować wielobok z tych odwzorowanych punktów. Zachowując właściwą strukturę danych (listę list punktów), możemy zachować osobne wieloboki po zredukowaniu ich do zbioru punktów.
Tutaj ma zastosowanie ta sama logika co w węźle „PolygonsToSurface”. Jednak zamiast odwzorowywać punkty wieloboków, odwzorowujemy punkty kontrolne krzywej nurbs.
OffsetPointsToSurface
Ten węzeł staje się nieco bardziej złożony, ale koncepcja jest prosta: podobnie jak węzeł „PointsToSurface” węzeł ten odwzorowuje punkty z jednej powierzchni na inną. Jednak uwzględnia również punkty, które nie znajdują się na oryginalnej powierzchni źródłowej, pobiera ich odległość do najbliższego parametru UV i odwzorowuje tę odległość na wektor normalny powierzchni docelowej w odpowiedniej współrzędnej UV. Będzie to bardziej zrozumiałe podczas analizowania plików przykładowych.
Jest to prosty węzeł, który tworzy powierzchnię parametryczną do odwzorowania z siatki źródłowej na powierzchnię falistą w plikach przykładowych.
Pliki przykładowe można znaleźć w folderze głównym pakietu. Kliknij kolejno kartę Menedżer pakietów > Zainstalowane pakiety.
Obok pozycji MapToSurface kliknij menu w postaci pionowych kropek > Pokaż katalog główny
Następnie otwórz folder „extra” zawierający wszystkie pliki w pakiecie, które nie są węzłami niestandardowymi. W tym miejscu przechowywane są pliki przykładowe (jeśli istnieją) dla pakietów Dynamo. Zrzuty ekranu poniżej ilustrują koncepcje przedstawione w poszczególnych plikach przykładowych.
Za pomocą podobnego procesu roboczego w tym pliku ćwiczeniowym przedstawiono konfigurację odwzorowywania okręgów (lub wieloboków reprezentujących okręgi) między powierzchniami. Wykorzystywany jest węzeł „PolygonsToSurface”.
Ten plik przykładowy zwiększa złożoność dzięki współdziałaniu z węzłem „NurbsCrvToSurface”. Powierzchnia docelowa jest odsunięta o daną odległość, a krzywa nurbs jest odwzorowana na oryginalną powierzchnię docelową i powierzchnię odsunięcia. Z tego miejsca dwie odwzorowane krzywe są wyciągane w celu utworzenia powierzchni, która następnie zostaje pogrubiona. Ta wynikowa bryła ma pofalowanie, które jest reprezentacją wektorów normalnych powierzchni docelowej.
W tym pliku przykładowym przedstawiono sposób odwzorowania powierzchni PolySurface z zakładką z powierzchni źródłowej na powierzchnię docelową. Powierzchnie źródłowa i docelowa są prostokątną powierzchnią łączącą odpowiednio siatkę i powierzchnię obrotową.
Powierzchnia PolySurface odwzorowana z powierzchni źródłowej na powierzchnię docelową.
Ponieważ węzły niestandardowe mogą odwzorowywać różne typy krzywych, ten ostatni plik odnosi się do pliku SVG wyeksportowanego z programu Illustrator i odwzorowuje zaimportowane krzywe na powierzchnię docelową.
Przez przeanalizowanie składni pliku .svg krzywe są przekształcane z formatu .xml na krzywe PolyCurve dodatku Dynamo.
Zaimportowane krzywe są odwzorowane na powierzchnię docelową. Dzięki temu można jawnie (punkt-i-kliknięcie) projektować panelowanie w programie Illustrator, importować je do dodatku Dynamo i stosować do powierzchni docelowej.
Obok węzła DynamoUnfold wybierz menu opcji .
Innym sposobem odkrywania pakietów Dynamo jest przeglądanie witryny . Tutaj można znaleźć statystyki dotyczące pakietów i tablice wiodących autorów. Pliki pakietu można również pobrać z Menedżera pakietów Dynamo, ale robienie tego bezpośrednio z poziomu dodatku Dynamo stanowi płynniejszy proces.
W poniższym ćwiczeniu przedstawiono niektóre podstawowe operacje na siatce przeprowadzane za pomocą zestawu Mesh Toolkit. W tym ćwiczeniu przetniemy siatkę serią płaszczyzn, co w przypadku używania brył może być kosztowne z punktu widzenia obliczeń. W przeciwieństwie do bryły siatka ma stałą „rozdzielczość” i nie jest zdefiniowana matematycznie, lecz topologicznie. Tę rozdzielczość można zdefiniować na podstawie bieżącego zadania. Aby uzyskać więcej informacji na temat relacji między siatką a bryłami, zapoznaj się z rozdziałem tego przewodnika Primer. Bardziej dogłębną analizę zestawu Mesh Toolkit można znaleźć na . Przejdźmy do pakietu w ćwiczeniu poniżej.
Za pomocą tego pliku przykładowego przedstawiono, jak można wykorzystać węzeł „PointsToSurface” do panelowania powierzchni w oparciu o siatkę prostokątów. Powinno to wyglądać znajomo, ponieważ podobny proces roboczy został przedstawiony w .
Mimo że dodatek Dynamo opracowano pierwotnie z myślą o programie Revit, jego uniwersalność jako narzędzia do programowania wizualnego wykracza poza program Revit. Dodatek Dynamo jest również zintegrowany z programem Civil 3D, co umożliwia użytkownikom tworzenie zaawansowanych procedur automatyzacji projektów infrastruktury. Jest to niezwykle przydatne narzędzie do przetwarzania wszystkich zadań — od zadań typowych po najbardziej złożone procesy projektowe — co pozwala oszczędzać czas, optymalizować projekty i podejmować lepsze decyzje projektowe. Dodatek Dynamo oferuje cały pakiet węzłów zaprojektowany specjalnie dla programu Civil 3D, jak również biblioteki innych dostawców pochodzące z dobrze prosperującej społeczności.
W tym rozdziale przewodnika Primer skoncentrowano się na dodatku Dynamo for Civil 3D, ze stopniowym przejściem od podstaw do bardziej zaawansowanych tematów.
Z czasem może okazać się konieczne wyjście poza podstawy i dokładniejsze zapoznanie się z działaniem dodatku Dynamo. Strony w tej sekcji pozwalają zapoznać się z zaawansowanymi funkcjami w dodatku Dynamo for Civil 3D, dzięki którym można przenieść wykresy na wyższy poziom.
Kolor ARGB (Color.ByARGB)
A, R, G, B
color
Alpha (Color.Alpha)
color
A
Red (Color.Red)
color
R
Green (Color.Green)
color
G
Blue (Color.Blue)
color
B
Components (Color.Components)
color
A, R, G, B
Hue (Color.Hue)
color
Hue
Saturation (Color.Saturation)
color
Saturation
Brightness (Color.Brightness)
color
Brightness
Dodatek Dynamo dla programu Revit rozszerza możliwości modelowania informacji o budynku (BIM) za pomocą środowiska danych i logiki graficznego edytora algorytmów. Jego elastyczność w połączeniu z solidną bazą danych programu Revit zapewnia nową perspektywę dla modelowania BIM.
W tym rozdziale omówiono procesy robocze dodatku Dynamo dla modelowania BIM. Poszczególne sekcje są oparte głównie na ćwiczeniach, ponieważ przejście bezpośrednio do projektu jest najlepszym sposobem zapoznania się z graficznym edytorem algorytmów do modelowania informacji o budynku. Najpierw jednak omówimy początki tego programu.
Ponieważ zarówno program Revit, jak i dodatek Dynamo wciąż ewoluują, może się okazać, że używana wersja programu Revit nie jest zgodna z zainstalowaną na komputerze wersją dodatku Dynamo dla programu Revit. Poniżej opisano, które wersje dodatku Dynamo dla programu Revit są zgodne z programem Revit.
Dzięki dedykowanemu zespołowi programistów i pełnej zaangażowania społeczności ten projekt przebył długą drogę od skromnych początków.
Dodatek Dynamo został pierwotnie utworzony w celu usprawnienia procesów roboczych AEC w programie Revit. Mimo że program Revit tworzy obszerną bazę danych dla każdego projektu, uzyskanie dostępu do tych informacji przez przeciętnego użytkownika poza ograniczeniami interfejsu może być trudne. Program Revit udostępnia wszechstronny interfejs API (Application Program Interface) umożliwiający programistom zewnętrznym tworzenie narzędzi niestandardowych. Programiści używają tego interfejsu API od lat, ale tworzenie skryptów tekstowych nie jest technologią dostępną dla wszystkich. Dodatek Dynamo ma zdemokratyzować dane programu Revit za pomocą łatwego w obsłudze graficznego edytora algorytmów.
Używając podstawowych węzłów Dynamo wraz z węzłami niestandardowymi programu Revit, użytkownik może znacznie rozszerzyć parametryczne procesy robocze na potrzeby współdziałania, dokumentacji, analizy i generowania. Dzięki dodatkowi Dynamo można zautomatyzować żmudne procesy robocze i skutecznie analizować rozwiązania projektowe.
W edytorze rodziny lub projekcie programu Revit przejdź do pozycji Dodatki i kliknij opcję Dynamo*.
*Dodatek Dynamo zostanie uruchomiony tylko w pliku, w którym został otwarty.
W przypadku otwarcia dodatku Dynamo w programie Revit dostępna jest nowa kategoria o nazwie „Revit”. Jest to kompleksowy dodatek do interfejsu użytkownika, który zawiera węzły opracowane konkretnie do procesów roboczych programu Revit*.
*W razie użycia rodziny węzłów charakterystycznej dla programu Revit wykres dodatku Dynamo będzie działać tylko po otwarciu w dodatku Dynamo dla programu Revit. Jeśli na przykład wykres dodatku Dynamo dla programu Revit zostanie otwarty w dodatku Dynamo w trybie „piaskownicy” (Sandbox), będzie brakować węzłów programu Revit.
Ponieważ program Revit jest platformą zapewniającą zaawansowane zarządzanie projektem, operacje parametryczne w dodatku Dynamo mogą być skomplikowane, a ich obliczanie — powolne. Jeśli w dodatku Dynamo obliczanie węzłów trwa zbyt długo, można użyć funkcji zablokowania węzła, aby wstrzymać wykonywanie operacji programu Revit podczas tworzenia wykresu.
Więcej informacji na temat blokowania węzłów można znaleźć w sekcji Węzły i przewody.
Ponieważ dodatek Dynamo został pierwotnie utworzony dla dziedzin architektury, inżynierii i budownictwa (AEC), jego duża i stale rosnąca społeczność stanowi doskonałe źródło do nauki i zapewnia możliwości kontaktu z ekspertami w branży. Społeczność dodatku Dynamo składa się z architektów, inżynierów, programistów i projektantów pełnych pasji tworzenia i dzielenia się wynikami pracy.
Dynamo to projekt typu open source, który ciągle ewoluuje, a znaczna część jego rozwoju jest związana z programem Revit. Jeśli jesteś nowym użytkownikiem, odwiedź forum dyskusyjne i zacznij publikować pytania. Jeśli jesteś programistą i chcesz się zaangażować w rozwój dodatku Dynamo, odwiedź repozytorium w serwisie Github. Przydatnym zasobem dotyczącym bibliotek innych dostawców jest Menedżer pakietów Dynamo. Wiele z tych pakietów utworzono z myślą o architekturze, inżynierii i budownictwie. W tym rozdziale przyjrzymy się pakietom innych dostawców do panelowania.
Z dodatkiem Dynamo związany jest też aktywny blog. Przeczytaj najnowsze wpisy, aby zapoznać się z nowościami i wiadomościami.
Importowanie Zero-Touch to prosta metoda importowania bibliotek C# przez wskazanie i kliknięcie. Dodatek Dynamo odczyta publiczne metody z pliku .dll i przekonwertuje je na węzły Dynamo. Można użyć funkcji Zero-Touch, aby tworzyć własne węzły i pakiety niestandardowe, a także importować biblioteki zewnętrzne do środowiska Dynamo.
Pliki .dll
Węzły Dynamo
Za pomocą funkcji Zero-Touch można nawet zaimportować bibliotekę, która nie została opracowana dla dodatku Dynamo, i utworzyć pakiet nowych węzłów. Obecne działanie funkcji Zero-Touch pokazuje międzyplatformowy charakter projektu Dynamo.
W tej sekcji przedstawiono sposób użycia funkcji Zero-Touch w celu zaimportowania biblioteki innej firmy. Aby uzyskać informacje na temat tworzenia własnej biblioteki Zero-Touch, zobacz stronę wiki dodatku Dynamo.
Pakiety Zero-Touch stanowią dobre uzupełnienie węzłów niestandardowych zdefiniowanych przez użytkownika. W poniższej tabeli wymieniono kilka pakietów używających bibliotek C#. Aby uzyskać więcej informacji na temat pakietów, zobacz sekcję Pakiety w Załączniku.
W tej analizie przypadku pokazano, jak zaimportować zewnętrzną bibliotekę .dll AForge. AForge to rozbudowana biblioteka, która zapewnia szeroką gamę funkcji, od przetwarzania obrazu po sztuczną inteligencję. Na potrzeby poniższych ćwiczeń dotyczących przetwarzania obrazu skorzystamy z klasy Imaging w bibliotece AForge.
Najpierw należy pobrać bibliotekę AForge. Na stronie pobierania biblioteki AForge wybierz opcję [Download Installer] (Pobierz instalator) i zainstaluj bibliotekę po zakończeniu pobierania.
W dodatku Dynamo utwórz nowy plik i wybierz kolejno opcje Plik > Importuj bibliotekę...
Następnie odszukaj plik dll.
W wyskakującym okienku przejdź do folderu Release w instalacji biblioteki AForge. Prawdopodobnie będzie on się znajdował w folderze podobnym do tego: C:\Program Files (x86)\AForge.NET\Framework\Release.
AForge.Imaging.dll: w tej analizie przypadku użyjemy tylko tego pliku z biblioteki AForge. Wybierz ten plik .dll i kliknij przycisk „Otwórz”.
W dodatku Dynamo grupa węzłów AForge powinna zostać dodana do paska narzędzi Biblioteka. Teraz mamy dostęp do biblioteki przetwarzania obrazów AForge z poziomu programu wizualnego.
Pobierz plik przykładowy, klikając poniższe łącze.
Pełna lista plików przykładowych znajduje się w załączniku.
Po zaimportowaniu biblioteki można wykonać pierwsze ćwiczenie (01-EdgeDetection.dyn). Wykonamy kilka podstawowych operacji na obrazie przykładowym, aby pokazać, w jaki sposób działają filtry obrazu biblioteki AForge. Użyjemy węzła „Watch Image”, aby wyświetlić wyniki i zastosować filtry w dodatku Dynamo, podobne do tych w programie Photoshop
Aby zaimportować obraz, dodaj węzeł File Path do obszaru rysunku i wybierz plik „soapbubbles.jpg” z folderu ćwiczeń (źródło zdjęcia: flickr).
Węzeł File Path zawiera po prostu ciąg ścieżki do wybranego obrazu. Następnie należy przekształcić go w użyteczny plik obrazu w dodatku Dynamo.
Użyj opcji Plik ze ścieżki, aby przekształcić element w ścieżce pliku w obraz w środowisku Dynamo.
Połącz węzeł File Path z węzłem File.FromPath.
Aby przekształcić ten plik na obraz, należy użyć węzła Image.ReadFromFile.
Teraz zobaczmy wynik. Upuść węzeł Watch Image na obszarze rysunku i połącz go z węzłem Image.ReadFromFile. Nie użyliśmy jeszcze biblioteki AForge, ale pomyślnie zaimportowaliśmy obraz do dodatku Dynamo.
W obszarze AForge.Imaging.AForge.Imaging.Filters (w menu nawigacji) można zauważyć, że dostępna jest szeroka gama filtrów. Użyjemy teraz jednego z tych filtrów, aby zmniejszyć nasycenie obrazu na podstawie wartości progowych.
Upuść trzy suwaki na obszarze rysunku, zmień ich zakresy na 0–1, a ich wartości kroku na 0,01.
Dodaj węzeł Grayscale.Grayscale do obszaru rysunku. Jest to filtr biblioteki AForge, który stosuje filtr skali szarości do obrazu. Połącz trzy suwaki z kroku 1 z elementami „cr”, „cg” i „cb”. Ustaw wartość górnego i dolnego suwaka na 1, a wartość środkowego suwaka na 0.
Aby zastosować filtr skali szarości, należy wykonać czynność na obrazie. W tym celu użyjemy węzła BaseFilter.Apply. Połącz obraz z wejściem „image”, a węzeł Grayscale.Grayscale z wejściem „baseFilter”.
Po połączeniu z węzłem Watch Image otrzymujemy zdesaturowany obraz.
Możemy określać sposób zmniejszenia nasycenia obrazu za pomocą wartości progowych dla kolorów czerwonego, zielonego i niebieskiego. Są one definiowane przez elementy wejściowe węzła Grayscale.Grayscale. Można zauważyć, że obraz jest dość ciemny — jest to spowodowane tym, że suwak koloru zielonego jest ustawiony na wartość 0.
Ustaw wartość górnego i dolnego suwaka na 0, a wartość środkowego suwaka na 1. W ten sposób można uzyskać bardziej czytelny zdesaturowany obraz.
Użyjemy teraz zdesaturowanego obrazu i zastosujemy na nim kolejny filtr. Obraz po zmniejszeniu nasycenia jest kontrastowy, więc przetestujemy wykrywanie krawędzi.
Dodaj węzeł SobelEdgeDetector.SobelEdgeDetector do obszaru rysunku.
Połącz ten element z węzłem BaseUsingCopyPartialFilter.Apply i połącz zdesaturowany obraz z wejściem image tego węzła.
Detektor krawędzi Sobel wyróżnił krawędzie na nowym obrazie.
Po powiększeniu widać, że detektor krawędzi wyróżnił obrysy bąbelków pikselami. Biblioteka AForge zawiera narzędzia umożliwiające utworzenie geometrii dodatku Dynamo na podstawie takich wyników. Zobaczymy to w następnym ćwiczeniu.
Po przedstawieniu podstawowych informacji o przetwarzaniu obrazu możemy użyć obrazu do utworzenia geometrii dodatku Dynamo. Na podstawowym poziomie w tym ćwiczeniu chcemy uzyskać efekt „aktywnego obrysu” obrazu za pomocą biblioteki AForge i dodatku Dynamo. Aby uprościć to zadanie, wyodrębnimy prostokąty z obrazu referencyjnego, ale w bibliotece AForge dostępne są też narzędzia do bardziej złożonych operacji. Użyjemy pliku 02-RectangleCreation.dyn pobranego na potrzeby ćwiczenia.
Za pomocą węzła File Path przejdź do pliku grid.jpg w folderze ćwiczenia.
Połącz pozostałe węzły powyżej, aby wyświetlić ćwiczeniową siatkę parametryczną.
W następnym kroku chcemy odwołać się do białych kwadratów na obrazie i przekonwertować je na rzeczywistą geometrię dodatku Dynamo. Biblioteka AForge zawiera wiele wydajnych narzędzi do przetwarzania obrazów, a tutaj użyjemy szczególnie ważnego narzędzia z tej biblioteki o nazwie BlobCounter.
Dodaj węzeł BlobCounter do obszaru rysunku. Następnie potrzebny jest sposób na przetworzenie obrazu (podobnie jak w poprzednim ćwiczeniu z narzędziem BaseFilter.Apply).
Niestety węzeł „Process Image” nie jest widoczny w bibliotece Dynamo. Jest tak, ponieważ ta funkcja może nie być widoczna w kodzie źródłowym biblioteki AForge. Aby to naprawić, trzeba znaleźć obejście.
Dodaj do obszaru rysunku węzeł w języku Python i dodaj do niego następujący kod. Ten kod umożliwia zaimportowanie biblioteki AForge, a następnie przetworzenie zaimportowanego obrazu.
Połączenie elementu wyjściowego „image” z elementem wejściowym węzła Python powoduje uzyskanie wyniku AForge.Imaging.BlobCounter z węzła Python.
W następnych krokach zastosujemy pewne sposoby pokazujące znajomość interfejsu AForge Imaging API. Nie trzeba znać ich wszystkich, aby pracować z dodatkiem Dynamo. Jest to raczej pokaz pracy z zewnętrznymi bibliotekami, możliwej dzięki elastyczności środowiska Dynamo.
Połącz element wyjściowy węzła Python Script z węzłem BlobCounterBase.GetObjectRectangles. Dzięki temu obiekty na obrazie zostaną odczytane na podstawie wartości progowej, a następnie obliczone prostokąty zostaną wyodrębnione z zakresu pikseli.
Dodaj kolejny węzeł Python do obszaru rysunku, połącz go z węzłem GetObjectRectangles i wprowadź poniższy kod. Spowoduje to utworzenie uporządkowanej listy obiektów Dynamo.
Zastosuj funkcję Transpose do wyniku węzła Python z poprzedniego kroku. Spowoduje to utworzenie 4 list przedstawiających parametry X, Y, szerokość i wysokość poszczególnych prostokątów.
Za pomocą węzła Code Block uporządkujemy te dane w strukturę odpowiednią dla węzła Rectangle.ByCornerPoints (kod poniżej).
Mamy tutaj szyk prostokątów reprezentujących białe kwadraty z obrazu. Dzięki programowaniu uzyskaliśmy efekt (mniej więcej) podobny do funkcji Live Trace w programie Illustrator.
Wciąż jednak trzeba go trochę oczyścić. Po powiększeniu widzimy wiele małych, niepotrzebnych prostokątów.
Następnie napiszemy kod, aby pozbyć się niechcianych prostokątów.
Wstaw węzeł w języku Python między węzłem GetObjectRectangles a kolejnym węzłem w języku Python. Kod węzła, który znajduje się poniżej, umożliwia usunięcie wszystkich prostokątów poniżej danego rozmiaru.
Po usunięciu niepotrzebnych prostokątów dla zabawy utworzymy powierzchnię z otrzymanych prostokątów i wyciągniemy je na odległość zależną od ich wielkości.
Na koniec zmienimy element wejściowy both_sides na wartość „false”, aby uzyskać wyciągnięcie w jednym kierunku. Wystarczy zanurzyć tę bryłę w żywicy, aby powstał naprawdę niesamowity stolik.
Są to podstawowe przykłady, ale przedstawione tutaj koncepcje można przełożyć na ciekawe rzeczywiste zastosowania. Przetwarzanie obrazów można wykorzystać w bardzo wielu procesach. Jako przykłady można przytoczyć czytniki kodów kreskowych, dopasowywanie perspektywy, mapping przestrzenny i rzeczywistość rozszerzoną. Bardziej zaawansowane tematy dotyczące biblioteki AForge, używanej w tym ćwiczeniu, zostały omówione w tym artykule.
Edytowanie parametrów na potrzeby dokumentacji odbywa się zgodnie z informacjami przedstawionymi w poprzednich sekcjach. W tej części omówione zostanie edytowanie parametrów, które nie mają wpływu na właściwości geometryczne elementu, lecz pozwalają przygotować plik programu Revit do dokumentacji.
W poniższym ćwiczeniu użyjemy podstawowego odchylenia od węzła płaszczyzny, aby utworzyć arkusz programu Revit do dokumentacji. Każdy panel w konstrukcji dachu zdefiniowanej parametrycznie ma inną wartość odchylenia. Chcemy odwoływać się do zakresu wartości za pomocą koloru i zestawiając punkty adaptacyjne w celu przekazania ich konsultantowi, inżynierowi lub wykonawcy fasady.
Odchylenie od węzła płaszczyzny spowoduje obliczenie odległości, o jaką zestaw czterech punktów odbiega od najlepiej dopasowanej płaszczyzny między nimi. Jest to szybki i łatwy sposób na zbadanie możliwości realizacji projektu.
Pobierz plik przykładowy, klikając poniższe łącze.
Pełna lista plików przykładowych znajduje się w załączniku.
Rozpocznij od pliku programu Revit dla tej sekcji (lub kontynuuj pracę z plikiem z poprzedniej sekcji). Ten plik zawiera szyk paneli ETFE na dachu. W ramach tego ćwiczenia będziemy odwoływać się do tych paneli.
Dodaj węzeł Family Types do obszaru rysunku i wybierz opcję „ROOF-PANEL-4PT”.
Podłącz ten węzeł do węzła Select All Elements of Family Type, aby pobrać wszystkie elementy z programu Revit do dodatku Dynamo.
Za pomocą węzła AdaptiveComponent.Locations sprawdź położenie poszczególnych punktów adaptacyjnych dla każdego elementu.
Utwórz wielobok z tych czterech punktów za pomocą węzła Polygon.ByPoints. Zwróć uwagę, że obecnie w dodatku Dynamo jest dostępna abstrakcyjna wersja systemu panelowanego bez konieczności importowania pełnej geometrii elementu programu Revit.
Oblicz odchylenie od płaszczyzny za pomocą węzła Polygon.PlaneDeviation.
Podobnie jak w poprzednim ćwiczeniu, w celu przeprowadzenia testu ustawmy współczynnik apertury każdego panelu na podstawie jego odchylenia od płaszczyzny.
Dodaj węzeł Element.SetParameterByName do obszaru rysunku i połącz komponenty adaptacyjne z wejściem element. Węzeł Code Block z ciągiem „Aperture Ratio” połącz z wejściem parameterName.
Nie można bezpośrednio połączyć wyników odchylenia z wejściem wartości, ponieważ należy ponownie odwzorować te wartości na zakres parametrów.
Za pomocą węzła Math.RemapRange ponownie odwzoruj wartości odchylenia na domenę o zakresie od 0,15 do 0_,_45, wprowadzając
0.15; 0.45;
w węźle Code Block.Podłącz te wyniki do wejścia value węzła Element.SetParameterByName.
W programie Revit można w pewnym sensie zinterpretować zmianę apertury na całej powierzchni.
Po powiększeniu staje się jasne, że panele zamknięte przeważają bliżej narożników powierzchni. Otwarte narożniki przeważają u góry. Narożniki reprezentują obszary o większym odchyleniu, podczas gdy wypukłość ma minimalną krzywiznę, więc ma to sens.
Ustawienie współczynnika apertury nie wykazuje wyraźnie odchylenia paneli na dachu, a zmieniamy również geometrię rzeczywistego elementu. Załóżmy, że chcemy tylko zbadać odchylenie z punktu widzenia wykonalności elementów produkcyjnych. Pomocne byłoby nadanie kolorów panelom na podstawie zakresu odchylenia dla dokumentacji. Możemy to zrobić za pomocą serii kroków poniżej i w bardzo podobnym procesie do przedstawionego w krokach powyżej.
Usuń węzeł Element.SetParameterByName i jego węzły wejściowe, a następnie dodaj węzeł Element.OverrideColorInView.
Dodaj węzeł Color Range do obszaru rysunku. Następnie podłącz go do wejścia color węzła Element.OverrideColorInView. Nadal musimy połączyć wartości odchyleń z zakresem kolorów, aby utworzyć gradient.
Po ustawieniu kursora na wejściu value można zauważyć, że wartości dla tego wejścia muszą zawierać się między 0 a 1, aby można było odwzorować kolor na każdą z wartości. Musimy ponownie odwzorować wartości odchylenia na ten zakres.
Używając węzła Math.RemapRange, ponownie odwzoruj wartości odchylenia od płaszczyzny na zakres od* 0* do 1 (uwaga: można również użyć węzła „MapTo”, aby zdefiniować domenę źródłową).
Podłącz wyniki do węzła Color Range.
Zauważ, że wyjście stanowi zakres kolorów, a nie zakres liczb.
Jeśli ustawiono opcję uruchamiania ręcznego, kliknij przycisk Uruchom. Od tego momentu powinno być możliwe bezproblemowe korzystanie z opcji uruchamiania automatycznego.
W programie Revit widzimy znacznie czytelniejszy gradient, który reprezentuje odchylenie od płaszczyzny za pomocą zakresu kolorów. Jak jednak można dostosować te kolory? Minimalne wartości odchylenia są reprezentowane kolorem czerwonym, a więc odwrotnie do oczekiwań. Chcemy, aby maksymalne odchylenie miało kolor czerwony, a minimalne — kolor spokojniejszy. Wróćmy do dodatku Dynamo i poprawmy to.
Używając węzła Code Block, dodaj dwie liczby w dwóch różnych wierszach:
0;
i255;
.Utwórz kolor czerwony i niebieski, podłączając odpowiednie wartości do dwóch węzłów Color.ByARGB.
Utwórz z tych dwóch kolorów listę.
Podłącz tę listę do wejścia colors węzła Color Range i obserwuj aktualizację niestandardowego zakresu kolorów.
W programie Revit łatwiej jest teraz zrozumieć obszary maksymalnego odchylenia w narożnikach. Ten węzeł służy do nadpisywania koloru w widoku, więc dobrym rozwiązaniem jest używanie w zestawie rysunków określonych arkuszy poświęconych konkretnym typom analiz.
Po wybraniu jednego panelu ETFE w programie Revit widoczne są cztery parametry wystąpienia: XYZ1, XYZ2, XYZ3 i XYZ4. Po utworzeniu wszystkie są puste. Są to parametry tekstowe i wymagają wartości. Użyjemy dodatku Dynamo do zapisania położeń punktów adaptacyjnych dla każdego parametru. Ułatwia to współdziałanie, jeśli geometrię trzeba wysłać do inżyniera na potrzeby doradztwa w sprawie fasady.
W przykładowym arkuszu mamy duże, puste zestawienie. Parametry XYZ są współdzielone w pliku programu Revit, co pozwala dodać je do zestawienia.
Po powiększeniu widzimy, że parametry XYZ nie są jeszcze wypełnione. Pierwsze dwa parametry są obsługiwane przez program Revit.
Aby zapisać te wartości, wykonamy złożoną operację na liście. Sam wykres jest prosty, ale używane koncepcje opierają się w znacznym stopniu na odwzorowaniu listy omówionym w rozdziale poświęconym listom.
Wybierz wszystkie komponenty adaptacyjne z dwoma węzłami.
Wyodrębnij położenie każdego punktu za pomocą węzła AdaptiveComponent.Locations.
Przekształć te punkty w ciągi. Pamiętaj, że parametr jest oparty na tekście, dlatego trzeba wprowadzić poprawny typ danych.
Utwórz listę czterech ciągów definiujących parametry do zmiany: XYZ1, XYZ2, XYZ3 i XYZ4.
Podłącz tę listę do wejścia parameterName węzła Element.SetParameterByName.
Połącz węzeł Element.SetParameterByName z wejściem combinator węzła List.Combine. Połącz komponenty adaptacyjne z wejściem list1. Połącz węzeł String from Object z wejściem list2.
Tworzymy w tym miejscu odwzorowanie listy, ponieważ zapisujemy cztery wartości dla każdego elementu, co powoduje utworzenie złożonej struktury danych. Węzeł List.Combine definiuje operację o jeden krok w dół w hierarchii danych. Dlatego właśnie wejścia element i value węzła Element.SetParameterByName są pozostawione puste. Węzeł List.Combine łączy listy podrzędne na swoich wejściach z pustymi wejściami węzła Element.SetParameterByName na podstawie kolejności, w jakiej są one połączone.
Po wybraniu panelu w programie Revit widać teraz, że dla każdego parametru istnieją wartości ciągów. W rzeczywistości utworzylibyśmy prostszy format do zapisania punktu (X, Y, Z). Można to zrobić za pomocą operacji na ciągach w dodatku Dynamo, ale pominiemy to tutaj, aby nie wykraczać poza zakres niniejszego rozdziału.
Widok przykładowego zestawienia z wypełnionymi parametrami.
Każdy panel ETFE ma teraz współrzędne XYZ zapisane dla każdego punktu adaptacyjnego, co reprezentuje narożniki każdego panelu na potrzeby produkcji.
Zaawansowaną funkcją dodatku Dynamo jest możliwość edycji parametrów na poziomie parametrycznym. Na przykład algorytm generatywny lub wyniki symulacji mogą być używane do sterowania parametrami szyku elementów. W ten sposób zestaw wystąpień z tej samej rodziny może mieć niestandardowe właściwości w projekcie programu Revit.
Parametry wystąpienia definiują aperturę paneli na powierzchni dachu, od współczynnika apertury 0,1 do 0,4.
Parametry oparte na typie są stosowane do każdego elementu na powierzchni, ponieważ mają one ten sam typ rodziny. Na przykład materiał każdego panelu może być sterowany przez parametr oparty na typie.
Jeśli wcześniej skonfigurowano rodzinę programu Revit, należy pamiętać, że trzeba przypisać typ parametru (ciąg, liczbę, wymiar itp.). Podczas przypisywania parametrów z poziomu dodatku Dynamo należy używać odpowiedniego typu danych.
Dodatku Dynamo można również używać w połączeniu z wiązaniami parametrycznymi zdefiniowanymi we właściwościach rodziny programu Revit.
Jeśli chodzi o parametry w programie Revit, występują w nim parametry typu i parametry wystąpienia. Oba typy można edytować z poziomu dodatku Dynamo, ale w ćwiczeniu poniżej będziemy pracować z parametrami wystąpienia.
Po zapoznaniu się z szeroką gamą zastosowań edycji parametrów można edytować dużą liczbę elementów w programie Revit za pomocą dodatku Dynamo. Może to być kosztowna pod względem obliczeń operacja, co oznacza, że może być powolna. W przypadku edytowania dużej liczby elementów można użyć funkcji zablokowania węzła, aby wstrzymać wykonywanie operacji programu Revit podczas tworzenia wykresu. Aby uzyskać więcej informacji na temat blokowania węzłów, zobacz sekcję „Blokowanie” w rozdziale poświęconym bryłom.
Od wersji 0.8 dodatek Dynamo jest zasadniczo pozbawiony jednostek. Dzięki temu dodatek Dynamo pozostaje abstrakcyjnym środowiskiem programowania wizualnego. Węzły Dynamo, które wchodzą w interakcje z wymiarami programu Revit, będą odnosiły się do jednostek projektu programu Revit. Na przykład w razie ustawiania z poziomu dodatku Dynamo parametru długości w programie Revit ta liczba w dodatku Dynamo będzie wyrażona w domyślnych jednostkach w projekcie programu Revit. W ćwiczeniu poniżej używane są metry.
Aby szybko przekształcić jednostki, użyj węzła „Convert Between Units”. Jest to przydatne narzędzie do przekształcania jednostek długości, powierzchni i objętości na bieżąco.
Pobierz plik przykładowy, klikając poniższe łącze.
Pełna lista plików przykładowych znajduje się w załączniku.
W ćwiczeniu poniżej używane są metry.
W tym ćwiczeniu skupiono się na edycji elementów programu Revit bez wykonywania operacji geometrycznej w dodatku Dynamo. Nie importujemy tutaj geometrii dodatku Dynamo, a jedynie edytujemy parametry w projekcie programu Revit. To ćwiczenie jest podstawowe. Bardziej zaawansowani użytkownicy programu Revit powinni zwrócić uwagę na to, że choć używane są tu parametry wystąpienia bryły, ta sama logika może być stosowana do szyku elementów w celu dostosowywania ich w dużej skali. Wszystkie te operacje wykonuje się za pomocą węzła „Element.SetParameterByName”.
Rozpocznij od przykładowego pliku programu Revit dla tej sekcji. Usunięto elementy konstrukcyjne i kratownice adaptacyjne z poprzedniej sekcji. W tym ćwiczeniu skoncentrujemy się na obsłudze parametrów w programie Revit i manipulowaniu w dodatku Dynamo.
Po wybraniu budynku w obszarze Bryła w programie Revit zostanie wyświetlony szyk parametrów wystąpienia w panelu właściwości.
W dodatku Dynamo można pobrać parametry, wybierając element kierowania.
Wybierz bryłę budynku za pomocą węzła „Select Model Element”.
Za pomocą węzła „Element.Parameters” możemy stosować zapytania dotyczące wszystkich parametrów tej bryły. Obejmuje to parametry typu i wystąpienia.
Sprawdź węzeł Element. Parameters, aby znaleźć parametry docelowe. Można również wyświetlić panel właściwości z poprzedniego kroku, aby wybrać nazwy parametrów do edycji. W tym przypadku szukamy parametrów, które mają wpływ na duże przesunięcia geometryczne bryły budynku.
Wprowadzimy zmiany w elemencie programu Revit za pomocą węzła Element.SetParameterByName
Używając węzła C_ode Block,_ zdefiniuj listę parametrów, ujmując każdy z nich w cudzysłowy, aby wskazać, że są to ciągi. Można również użyć węzła List.Create z serią węzłów „string” połączonych z wieloma wejściami, ale użycie węzła Code Block jest szybsze i łatwiejsze. Należy się jednak upewnić, że ciąg jest w pełni zgodny z nazwą w programie Revit (z uwzględnieniem wielkości liter):
{"BldgWidth","BldgLength","BldgHeight", "AtriumOffset", "InsideOffset","LiftUp"};
Chcemy również wyznaczyć wartości dla każdego parametru. Dodaj do obszaru rysunku sześć węzłów Integer Slider i zmień ich nazwy na nazwy odpowiednich parametrów na liście. Ustaw też wartości każdego z tych suwaków zgodnie z powyższą ilustracją. W kolejności od góry do dołu: 62, 92, 25, 22, 8, 12
Zdefiniuj kolejny węzeł Code Block z listą o długości zgodnej z nazwami parametrów. W tym przypadku nazwiemy zmienne (bez cudzysłowów) tworzące wejścia dla węzła Code Block. Podłącz suwaki do odpowiednich wejść:
{bw,bl,bh,ao,io,lu};
Połącz węzeł Code Block z wejściem wartości „Element.SetParameterByName”*. Gdy jest zaznaczona opcja automatycznego uruchamiania, wyniki zostaną wyświetlone automatycznie.
*Ten pokaz działa z parametrami wystąpienia, ale nie z parametrami typu.
Podobnie jak w programie Revit, wiele z tych parametrów jest od siebie zależnych. Istnieją oczywiście takie kombinacje, przy których geometria może się załamać. Można rozwiązać ten problem z użyciem zdefiniowanych formuł we właściwościach parametru lub skonfigurować podobną logikę z operacjami matematycznymi w dodatku Dynamo (jest to dodatkowe wyzwanie dla osób, które chcą rozszerzyć to ćwiczenie).
Ta kombinacja nadaje bryle budynku nowy, interesujący wygląd: 100, 92, 100, 25, 13, 51
Teraz przyjrzyjmy się temu, jak można edytować fasadę przy użyciu podobnego procesu.
Skopiuj wykres i skup się na oszkleniu fasady, które będzie zawierać system kratownicowy. W tym przypadku wyodrębnimy cztery parametry:
{"DblSkin_SouthOffset","DblSkin_MidOffset","DblSkin_NorthOffset","Facade Bend Location"};
Dodatkowo utworzymy węzły Number Slider i zmienimy ich nazwy na nazwy odpowiednich parametrów. Pierwsze trzy suwaki od góry do dołu powinny zostać ponownie odwzorowane na domenę [0,10], natomiast ostatni suwak — „Facade Bend Location” — powinien zostać ponownie odwzorowany na domenę [0,1]. Te wartości, od góry do dołu, powinny zaczynać się od tych (chociaż są dowolne): 2,68, 2,64, 2,29, 0,5
Zdefiniuj nowy węzeł Code Block i połącz suwaki:
{so,mo,no,fbl};
Zmieniając suwaki w tej części wykresu, możemy znacznie wzmocnić oszklenie fasady: 9,98, 10,0, 9,71, 0,31
Poprzednio omówiliśmy edycję podstawowej bryły budynku, a teraz dokładniej poznamy współdziałanie rozwiązań Dynamo/Revit, edytując dużą liczbę elementów jednocześnie. Dostosowywanie na dużą skalę jest bardziej złożone, ponieważ struktury danych wymagają bardziej zaawansowanych operacji na listach. Podstawowe zasady dotyczące ich wykonania są jednak zasadniczo takie same. Poznajmy kilka możliwości analizy na podstawie zestawu komponentów adaptacyjnych.
Załóżmy, że utworzyliśmy zakres komponentów adaptacyjnych, a teraz chcemy edytować parametry w oparciu o położenia punktów. Te punkty mogą na przykład sterować parametrem grubości, powiązanym z powierzchnią elementu. Mogą też sterować parametrem nieprzezroczystości, powiązanym z ekspozycją na słońce w ciągu roku. Dodatek Dynamo umożliwia połączenie analiz z parametrami w kilku prostych krokach. W poniższym ćwiczeniu poznamy podstawowy wariant.
Wykonaj zapytanie o punkty adaptacyjne wybranego komponentu adaptacyjnego za pomocą węzła AdaptiveComponent.Locations. Dzięki temu możemy użyć abstrakcyjnej wersji elementu programu Revit do analizy.
Wyodrębniając położenie punktów komponentów adaptacyjnych, można wykonać wiele analiz dotyczących elementu. Komponent adaptacyjny z czterema punktami umożliwia na przykład zbadanie odchylenia danego panelu od płaszczyzny.
Użyj ponownego odwzorowania, aby odwzorować zbiór danych w zakresie parametrów. Jest to podstawowe narzędzie używane w modelu parametrycznym, a jego działanie pokazano w poniższym ćwiczeniu.
W dodatku Dynamo można użyć położenia punktów komponentów adaptacyjnych do utworzenia najlepiej dopasowanej płaszczyzny dla każdego elementu. Można również wykonać zapytanie o położenie słońca w pliku programu Revit i zbadać orientację tej płaszczyzny względem słońca w porównaniu z innymi komponentami adaptacyjnymi. Ustawimy to w poniższym ćwiczeniu, tworząc algorytmiczny dach.
Pobierz plik przykładowy, klikając poniższe łącze.
Pełna lista plików przykładowych znajduje się w załączniku.
To ćwiczenie przedstawia rozszerzenie technik omówionych w poprzedniej sekcji. W tym przypadku definiujemy powierzchnię parametryczną na podstawie elementów programu Revit, tworząc wystąpienia czteropunktowych komponentów adaptacyjnych, a następnie edytując je na podstawie orientacji względem słońca.
Najpierw wybierzemy dwie krawędzie, używając węzła „Select Edge”. Te dwie krawędzie to długie boki atrium.
Połącz te dwie krawędzie w jedną listę, używając węzła List.Create.
Utwórz powierzchnię między dwiema krawędziami za pomocą węzła Surface.ByLoft.
Używając węzła Code Block, zdefiniuj zakres od 0 do 1 z 10 wartościami w równych odstępach:
0..1..#10;
Połącz węzeł Code Block z elementami wejściowymi *u *i v węzła Surface.PointAtParameter, a węzeł Surface.ByLoft z elementem wejściowym surface. Kliknij węzeł prawym przyciskiem myszy i zmień opcję skratowania na Iloczyn wektorowy. W ten sposób na powierzchni zostanie umieszczona siatka punktów.
Ta siatka punktów posłuży jako punkty sterujące dla powierzchni zdefiniowanej parametrycznie. Chcemy wyodrębnić położenia u i v każdego z tych punktów, aby można je było wstawić do wzoru parametrycznego i zachować tę samą strukturę danych. Można to zrobić za pomocą zapytania o położenia parametrów punktów, które właśnie utworzyliśmy.
Dodaj węzeł Surface.ParameterAtPoint do obszaru rysunku i połącz elementy wejściowe tak, jak pokazano powyżej.
Wykonaj zapytanie o wartości u tych parametrów, używając węzła UV.U.
Wykonaj zapytanie o wartości v tych parametrów, używając węzła UV.V.
Wyniki zawierają odpowiednie wartości u i v dla każdego punktu powierzchni. Teraz w odpowiedniej strukturze danych istnieje zakres od 0 do 1 dla każdej wartości, więc możemy zastosować algorytm parametryczny.
Dodaj węzeł Code Block do obszaru rysunku i wprowadź kod:
Math.Sin(u*180)*Math.Sin(v*180)*w;
. Jest to funkcja parametryczna umożliwiająca utworzenie sinusoidalnego wzniesienia na podstawie płaskiej powierzchni.Umożliwia połączenie UV.U z wejściem u oraz UV.V z wejściem v.
Element wejściowy w oznacza amplitudę kształtu, dlatego należy dołączyć do niego węzeł Number Slider.
Otrzymaliśmy listę wartości zdefiniowaną przez algorytm. Użyjemy tej listy wartości, aby przesunąć punkty w górę w kierunku +Z. Używając węzła Geometry.Translate, połącz węzeł *Code Block *z elementem wejściowym zTranslation, a węzeł Surface.PointAtParameter z elementem wejściowym geometry. Nowe punkty powinny być widoczne w podglądzie dodatku Dynamo.
Na koniec utworzymy powierzchnię za pomocą węzła NurbsSurface.ByPoints, łącząc węzeł z poprzedniego kroku z elementem wejściowym „points”. Otrzymaliśmy powierzchnię parametryczną. Możesz przeciągnąć suwak, aby zobaczyć, jak wzniesienie zmniejsza się i rośnie.
Używając tej powierzchni parametrycznej, chcemy zdefiniować podział na panele w celu utworzenia szyku czteropunktowych komponentów adaptacyjnych. Dodatek Dynamo nie zawiera gotowej funkcji podziału powierzchni na panele, poszukamy więc przydatnych pakietów dodatku Dynamo w społeczności.
Przejdź do obszaru Pakiety>Wyszukaj pakiet...
Wyszukaj „LunchBox” i zainstaluj pakiet „LunchBox for Dynamo”. To bardzo pomocny zestaw narzędzi do operacji geometrycznych takich jak ta.
Po pobraniu pakietu LunchBox masz do niego pełny dostęp. Wyszukaj „Quad Grid” i wybierz węzeł „LunchBox Quad Grid By Face”. Połącz powierzchnię parametryczną z elementem wejściowym surface i ustaw podziały U oraz V na 15. W podglądzie dodatku Dynamo powinna być widoczna powierzchnia podzielona na czworokątne panele.
Jeśli chcesz sprawdzić, jak powstała, możesz kliknąć dwukrotnie węzeł Lunch Box, aby to zobaczyć.
Wróćmy do programu Revit i pokrótce omówmy komponent adaptacyjny, którego używamy. Nie wchodząc w szczegóły, jest to panel dachowy, którego wystąpienia utworzymy. Jest to czteropunktowy komponent adaptacyjny, z grubsza odzwierciedlający panel z ETFE. Wielkość otworu pośrodku określa parametr o nazwie „ApertureRatio”.
Za chwilę zostanie otworzonych wiele wystąpień geometrii w programie Revit, dlatego należy wybrać „Ręczne” rozwiązywanie w dodatku Dynamo.
Dodaj węzeł Family Types do obszaru rysunku i wybierz opcję „ROOF-PANEL-4PT”.
Dodaj węzeł AdaptiveComponent.ByPoints do obszaru rysunku i połącz element wyjściowy Panel Pts węzła „LunchBox Quad Grid by Face” z elementem wejściowym points. Połącz węzeł Family Types z elementem wejściowym familySymbol.
Kliknij przycisk Uruchom. Podczas tworzenia geometrii program Revit przez pewien czas nie będzie dostępny do pracy. Jeśli trwa to zbyt długo, zmniejsz liczbę „15” w węźle Code Block na niższą. Spowoduje to zmniejszenie liczby paneli na dachu.
Uwaga: jeśli w dodatku Dynamo obliczanie węzłów trwa zbyt długo, można użyć funkcji zablokowania węzła, aby wstrzymać wykonywanie operacji programu Revit podczas tworzenia wykresu. Aby uzyskać więcej informacji na temat blokowania węzłów, zobacz sekcję „Blokowanie” w rozdziale poświęconym bryłom.
W programie Revit otrzymaliśmy szyk paneli na dachu.
Po powiększeniu można dokładniej przyjrzeć się właściwościom powierzchni.
W dalszej części określimy wielkość otworu każdego panelu na podstawie jego ekspozycji na słońce. W programie Revit po powiększeniu i wybraniu jednego panelu na pasku właściwości widać parametr o nazwie „Aperture Ratio”. Rodzina jest ustawiona tak, aby zakres wielkości otworu wynosił w przybliżeniu od 0,05 do 0,45.
Po włączeniu ustawienia Solar Path widzimy bieżące położenie słońca w programie Revit.
Można odnieść się do tego położenia słońca za pomocą węzła SunSettings.Current.
Aby uzyskać wektor oświetlenia naturalnego, należy połączyć element SunSettings z węzłem Sunsetting.SunDirection.
Połącz element Panel Pts używany do utworzenia komponentów adaptacyjnych z węzłem Plane.ByBestFitThroughPoints, aby utworzyć przybliżoną płaszczyznę dla komponentu.
Wykonaj zapytanie o normalną tej płaszczyzny.
Użyj iloczynu skalarnego, aby obliczyć kierunek oświetlenia naturalnego. Iloczyn skalarny to formuła określająca, na ile równoległe lub przeciwrównoległe są dwa wektory. Czyli porównujemy normalną płaszczyzny każdego elementu adaptacyjnego z wektorem oświetlenia naturalnego w celu wykonania przybliżonej symulacji kierunku oświetlenia naturalnego.
Oblicz wartość bezwzględną wyniku. Dzięki temu iloczyn skalarny będzie prawidłowy także wtedy, gdy normalna płaszczyzna będzie skierowana w przeciwnym kierunku.
Kliknij przycisk Uruchom.
Iloczyn skalarny zawiera szeroki zakres liczb. Chcemy użyć ich względnego rozkładu, ale musimy umieścić te liczby w zakresie odpowiednim dla parametru „Aperture Ratio”, który chcemy edytować.
Węzeł Math.RemapRange to doskonałe narzędzie do tego celu. Umożliwia on ponowne odwzorowanie wejściowej listy w granicach dwóch wartości docelowych.
Zdefiniuj wartości docelowe 0,15 i 0,45 w węźle Code Block.
Kliknij przycisk Uruchom.
Połącz ponownie odwzorowane wartości z węzłem Element.SetParameterByName.
Połącz ciąg „Aperture Ratio” z elementem wejściowym parameterName.
Połącz komponenty adaptacyjne z elementem wejściowym element.
Kliknij przycisk Uruchom.
W programie Revit z odległości widać wpływ kierunku oświetlenia naturalnego na wielkość otworu paneli z ETFE.
Po powiększeniu widać, że panele z ETFE wystawione na słońce są bardziej zamknięte. Naszym celem jest ograniczenie przegrzewania się pod wpływem energii słonecznej. Jeśli chcemy uzyskać więcej światła poprzez wystawienie na słońce, wystarczy przełączyć dziedzinę w węźle Math.RemapRange.
Dodatek Dynamo jest elastycznym środowiskiem, zaprojektowanym do współdziałania z szeroką gamą programów, ale został pierwotnie utworzony do używania w programie Revit. Program wizualny zapewnia rozbudowane opcje modelu informacji o budynku (BIM). Dodatek Dynamo oferuje cały pakiet węzłów zaprojektowany specjalnie dla programu Revit, jak również biblioteki innych dostawców pochodzące z dobrze prosperującej społeczności AEC. W tym rozdziale omówiono podstawy korzystania z dodatku Dynamo w programie Revit.
Program Revit to środowisko bogate w dane. Daje to wiele możliwości wybierania, znacznie wykraczających poza metodę „wskaż i kliknij”. Można wykonać zapytanie do bazy danych programu Revit i dynamicznie połączyć elementy programu Revit z geometrią dodatku Dynamo podczas wykonywania operacji parametrycznych.
Biblioteka programu Revit w interfejsie użytkownika zawiera kategorię „Selection”, która umożliwia wybieranie geometrii na wiele sposobów.
Aby prawidłowo wybrać elementy programu Revit, należy w pełni rozumieć hierarchię elementów programu Revit. Chcesz wybrać wszystkie ściany w projekcie? Wybierz według kategorii. Chcesz wybrać wszystkie fotele Eamesa w holu urządzonym w stylu z połowy XX wieku? Wybierz według rodziny.
Omówimy pokrótce hierarchię programu Revit.
Pamiętasz systematykę organizmów z biologii? Królestwo, typ, gromada, rząd, rodzina, rodzaj, gatunek? Elementy programu Revit są skategoryzowane podobnie. Na poziomie podstawowym hierarchię programu Revit można podzielić na kategorie, rodziny, typy* i wystąpienia. Wystąpienie to pojedynczy element modelu (z unikatowym identyfikatorem), a kategoria definiuje ogólną grupę (na przykład „ściany” czy „stropy”). Dzięki uporządkowaniu bazy danych programu Revit w ten sposób można wybrać jeden element, a następnie wybrać wszystkie podobne elementy na podstawie określonego poziomu w hierarchii.
*Uwaga — typy w programie Revit definiuje się inaczej niż typy w programowaniu. Typ w programie Revit oznacza gałąź hierarchii, a nie „typ danych”.
Trzy poniższe ilustracje przedstawiają główne kategorie wyboru elementów programu Revit w dodatku Dynamo. To narzędzia, które można doskonale łączyć, a w kolejnych ćwiczeniach omówimy niektóre z nich.
Najprostszym sposobem bezpośredniego wybrania elementu programu Revit jest wskazanie i kliknięcie go. Można wybrać cały element modelu lub części jego topologii (na przykład ścianę lub krawędź). Pozostają one dynamicznie połączone z tym obiektem programu Revit, więc gdy w pliku programu Revit zmieni się jego położenie lub parametry, odpowiedni element dodatku Dynamo zostanie zaktualizowany na wykresie.
Menu rozwijane zawierają listę wszystkich dostępnych elementów w projekcie programu Revit. Można ich użyć, aby tworzyć odniesienia do elementów programu Revit, które niekoniecznie są widoczne w widoku. Jest to doskonałe narzędzie do wykonywania zapytań dotyczących istniejących elementów oraz tworzenia nowych w projekcie programu Revit lub edytorze rodzin.
![](../.gitbook/assets/selecting _database_navigation_with_dynamo_nodes_02.png)
Można również wybrać element programu Revit na podstawie określonych poziomów w hierarchii programu Revit. Jest to zaawansowana opcja umożliwiająca dostosowywanie dużych zestawów danych w przygotowaniu do tworzenia dokumentacji lub generacyjnego tworzenia i dostosowywania wystąpień.
Pamiętając o trzech powyższych ilustracjach, przejdźmy do ćwiczenia polegającego na wybieraniu elementów z podstawowego projektu programu Revit w przygotowaniu do zastosowań parametrycznych, które będziemy tworzyć w pozostałych sekcjach tego rozdziału.
Pobierz plik przykładowy, klikając poniższe łącze.
Pełna lista plików przykładowych znajduje się w załączniku.
Ten plik przykładowy programu Revit zawiera trzy typy elementów prostego budynku. Użyjemy tego przykładu do wybierania elementów programu Revit w kontekście hierarchii programu Revit.
Bryła budynku
Belki (ramy konstrukcyjne)
Kratownice (komponenty adaptacyjne)
Jakie wnioski można wyciągnąć z elementów aktualnie widocznych w widoku projektu programu Revit? Do jakiego poziomu hierarchii musimy dojść, aby wybrać odpowiednie elementy? To zadanie będzie oczywiście bardziej złożone podczas pracy nad dużym projektem. Dostępnych jest wiele opcji: można wybierać elementy według kategorii, poziomów, rodzin, wystąpień i tak dalej.
Ponieważ pracujemy z podstawową konfiguracją, wybierzmy bryłę budynku, wybierając opcję „Mass” z menu rozwijanego w węźle Categories. Można go znaleźć na karcie Revit>Selection.
Wynikiem kategorii Mass jest sama ta kategoria. Musimy wybrać elementy. W tym celu użyjemy węzła „All Elements of Category”.
Na tym etapie można zauważyć, że w dodatku Dynamo nie widać żadnej geometrii. Wybraliśmy element programu Revit, ale nie przekonwertowaliśmy go na geometrię dodatku Dynamo. To ważne rozróżnienie. Wybierając dużą liczbę elementów, nie chcesz wyświetlać ich wszystkich w dodatku Dynamo, ponieważ spowolniłoby to działanie programu. Dodatek Dynamo jest narzędziem umożliwiającym zarządzanie projektem programu Revit bez konieczności wykonywania operacji na geometrii. Przyjrzymy się temu w następnej sekcji tego rozdziału.
W tym przypadku pracujemy z prostą geometrią, dlatego włączymy jej podgląd w dodatku Dynamo. Obok elementu „BldgMass” w powyższym węźle Watch znajduje się zielony numer. Oznacza on identyfikator elementu i informuje, że jest to element programu Revit, a nie geometria dodatku Dynamo. Następnym krokiem jest przekształcenie tego elementu programu Revit w geometrię dodatku Dynamo.
Przy zastosowaniu węzła Element.Faces otrzymujemy listę powierzchni reprezentujących poszczególne ściany bryły programu Revit. Teraz można wyświetlić geometrię w rzutni Dynamo i odwoływać się do tych ścian w celu wykonania operacji parametrycznych.
Oto alternatywna metoda. W tym przypadku zamiast wybierać za pomocą hierarchii programu Revit („All Elements of Category”), będziemy jawnie wybierać geometrię w programie Revit.
W węźle „Select Model Element” kliknij przycisk „select”(lub „change”). W rzutni programu Revit wybierz żądany element. W tym przypadku wybieramy bryłę budynku.
Zamiast węzła Element.Faces można użyć węzła Element.Geometry, aby wybrać całą bryłę jako jedną geometrię. Spowoduje to wybranie całej geometrii zawartej w tej bryle.
Używając węzła Geometry.Explode, można ponownie otrzymać listę powierzchni. Te dwa węzły działają tak samo jak węzeł Element.Faces, ale oferują alternatywne opcje wybierania geometrii elementu programu Revit.
Za pomocą podstawowych operacji listy można utworzyć zapytanie o interesującą nas ścianę.
Najpierw wyprowadź wybrane elementy z wcześniejszego węzła Element.Faces.
Następnie w węźle List.Count widzimy, że pracujemy z 23 powierzchniami w ramach bryły.
Zgodnie z tą liczbą zmieniamy maksymalną wartość w węźle *Integer Slider *na 22.
W węźle List.GetItemAtIndex wprowadzamy listy oraz łączymy węzeł *Integer Slider *z elementem index. Na suwaku zmieniamy wybrany element, zatrzymując się po przejściu do indeksu 9 i wyizolowaniu głównej fasady z kratownicami.
Poprzedni krok był mało wydajny. Możemy to zrobić znacznie szybciej, korzystając z węzła „Select face”. Dzięki temu można wyizolować ścianę, która sama nie jest elementem w projekcie programu Revit. Wykonujemy takie samo działanie jak w przypadku węzła „Select Model Element”, z tym że wybieramy powierzchnię, a nie cały element.
Załóżmy, że chcemy wyizolować główne ściany fasadowe budynku. W tym celu można użyć węzła „Select Faces”. Kliknij przycisk „Select”, a następnie wybierz cztery główne fasady w programie Revit.
Po wybraniu czterech ścian pamiętaj, aby kliknąć przycisk „Finish” w programie Revit.
Ściany zostały teraz zaimportowane do dodatku Dynamo jako powierzchnie.
Spójrzmy teraz na belki nad atrium.
Za pomocą węzła „Select Model Element” wybierz jedną z belek.
Połącz element belki z węzłem Element.Geometry, aby wyświetlić belkę w rzutni dodatku Dynamo.
Można powiększyć geometrię za pomocą węzła Watch3D (jeśli belka nie jest widoczna w widoku 3D, kliknij prawym przyciskiem myszy i wybierz polecenie „Dopasuj do okna”).
Częste pytanie w procesach roboczych Revit/Dynamo brzmi: jak wybrać jeden element i otrzymać wszystkie podobne elementy? Ponieważ wybrany element programu Revit zawiera wszystkie informacje o hierarchii, można użyć zapytania o typ rodziny i wybrać wszystkie elementy tego typu.
Połącz element belki z węzłem Element.ElementType.
W węźle Watch widać, że wynik to teraz symbol rodziny, a nie element programu Revit.
Element.ElementType to proste zapytanie, więc możemy równie łatwo użyć bloku kodu z poleceniem
x.ElementType;
, aby uzyskać takie same wyniki.
Aby wybrać pozostałe belki, należy użyć węzła „All Elements of Family Type”.
W węźle Watch widać, że wybraliśmy pięć elementów programu Revit.
Można również przekonwertować wszystkie pięć elementów na geometrię dodatku Dynamo.
A co jeśli mamy 500 belek? Konwertowanie wszystkich tych elementów na geometrię dodatku Dynamo trwałoby bardzo długo. Jeśli w dodatku Dynamo obliczanie węzłów trwa zbyt długo, można użyć funkcji zablokowania węzła, aby wstrzymać wykonywanie operacji programu Revit podczas tworzenia wykresu. Aby uzyskać więcej informacji na temat blokowania węzłów, zobacz sekcję „Blokowanie” w rozdziale poświęconym bryłom.
Czy importując 500 belek, potrzebujemy wszystkich powierzchni do wykonania zamierzonej operacji parametrycznej? Czy możemy wyodrębnić podstawowe informacje z belek i wykonać zadania generacyjne z użyciem podstawowej geometrii? To pytanie, które będziemy mieć na uwadze w dalszej części tego rozdziału. Przyjrzyjmy się na przykład układowi kratownic.
Używając tego samego wykresu węzłów, wybierz element kratownicy zamiast elementu belki. Przed wykonaniem tej czynności usuń węzeł Element.Geometry z poprzedniego kroku.
Następnie możemy wyodrębnić niektóre podstawowe informacje z typu rodziny kratownic.
W węźle Watch widać, że otrzymaliśmy listę komponentów adaptacyjnych wybranych z programu Revit. Chcemy wyodrębnić podstawowe informacje, dlatego zaczniemy od punktów adaptacyjnych.
Połącz węzeł „All Elements of Family Type” z węzłem „AdaptiveComponent.Location”. Otrzymamy listę list, z których każda zawiera trzy punkty reprezentujące położenie punktów adaptacyjnych.
Po połączeniu z węzłem „Polygon.ByPoints” otrzymamy krzywą PolyCurve. Widać to w rzutni dodatku Dynamo. Za pomocą tej metody zwizualizowaliśmy geometrię jednego elementu i wyabstrahowaliśmy geometrię pozostałych elementów (których może być więcej niż w tym przykładzie).
Wskazówka: po kliknięciu zielonego numeru elementu programu Revit w dodatku Dynamo ten element zostanie powiększony w rzutni programu Revit.
Po zapoznaniu się z ogólnymi informacjami przejdźmy do konkretów i zbudujmy pierwszy wykres dodatku Dynamo w programie Civil 3D.
Jest to prosty przykład, za pomocą którego zademonstrujemy podstawowe funkcje dodatku Dynamo. Zaleca się, aby wykonywać te czynności w nowym pustym dokumencie programu Civil 3D.
Najpierw należy otworzyć pusty dokument w programie Civil 3D. Po otwarciu go przejdź do karty Zarządzaj na wstążce programu Civil 3D i wyszukaj panel Programowanie wizualne.
Kliknij przycisk Dynamo. Spowoduje to uruchomienie dodatku Dynamo w osobnym oknie.
Jaka jest różnica między dodatkiem Dynamo a Odtwarzaczem Dynamo?
Dodatek Dynamo to narzędzie używane do tworzenia i uruchamiania wykresów. Odtwarzacz Dynamo to prosty mechanizm do uruchamiania wykresów bez konieczności otwierania ich w dodatku Dynamo.
Przejdź do sekcji Odtwarzacz Dynamo (Dynamo Player), aby wypróbować tę funkcję.
Po otwarciu dodatku Dynamo zostanie wyświetlony ekran startowy. Kliknij przycisk Nowy, aby otworzyć pusty obszar roboczy.
Co z przykładami?
Dodatek Dynamo for Civil 3D zawiera kilka wstępnie utworzonych wykresów, z których można czerpać pomysły na korzystanie z dodatku Dynamo. Zalecamy przyjrzenie się nim w dogodnym momencie, a także zapoznanie się z sekcją Przykładowe procesy robocze w tym przewodniku Primer.
Powinien być teraz widoczny pusty obszar roboczy. Przyjrzyjmy się dodatkowi Dynamo w działaniu. Oto nasz cel:
Dosyć proste, prawda? Ale zanim zaczniemy, musimy omówić kilka podstawowych kwestii.
Podstawowe elementy wykresu Dynamo są nazywane węzłami. Węzeł jest jak mała maszyna — przekazujesz do niego dane, a on wykonuje na nich jakąś pracę i zwraca wyniki. Dodatek Dynamo for Civil 3D zawiera bibliotekę węzłów, które można ze sobą łączyć za pomocą przewodów w celu utworzenia wykresu umożliwiającego wykonywanie większej liczby operacji i zapewniającego lepsze wyniki, niż mógłby zwrócić samodzielny węzeł.
Co jeśli nigdy wcześniej nie zdarzyło mi się korzystać z dodatku Dynamo?
Część z tych informacji może być dla Ciebie całkiem nowa, ale nie ma powodu do obaw. W tych sekcjach znajdziesz pomoc.
Interfejs użytkownika Węzły i przewody Podstawowe węzły i pojęcia
Utwórzmy wykres. Oto lista wszystkich węzłów, których będziemy potrzebować.
Te węzły można znaleźć, wpisując ich nazwy na pasku wyszukiwania w bibliotece lub klikając prawym przyciskiem myszy w dowolnym miejscu w obszarze rysunku i wyszukując je w tym miejscu.
Skąd wiadomo, których węzłów użyć i gdzie je znaleźć?
Węzły w bibliotece są pogrupowane w logiczne kategorie w zależności od tego, do czego służą. Bardziej szczegółową prezentację można znaleźć w sekcji Biblioteka węzłów.
Oto jak powinien wyglądać ostateczny wykres.
Podsumujmy to, co tutaj zrobiliśmy:
Wybraliśmy dokument do pracy. W tym przypadku (tak jak w wielu innych przypadkach) chcemy pracować w aktywnym dokumencie w programie Civil 3D.
Zdefiniowaliśmy blok docelowy, w którym ma zostać utworzony obiekt tekstowy (w tym przypadku obszar modelu — Model Space).
Użyliśmy węzła String, aby określić, na której warstwie powinien zostać umieszczony tekst.
Utworzyliśmy punkt za pomocą węzła Point.ByCoordinates, aby zdefiniować położenie, w którym ma zostać umieszczony tekst.
Zdefiniowaliśmy współrzędne X i Y punktu wstawienia tekstu za pomocą dwóch węzłów Number Slider.
Użyliśmy innego węzła String do zdefiniowania zawartości obiektu tekstowego (Text).
Na koniec utworzyliśmy obiekt tekstowy.
Przyjrzyjmy się wynikom tego nowego wykresu.
W programie Civil 3D upewnij się, że wybrana jest karta Model. Powinien zostać wyświetlony nowy obiekt tekstowy utworzony przez dodatek Dynamo.
Jeśli nie widzisz tekstu, może być konieczne uruchomienie polecenia ZOOM -> EXTENTS w celu powiększenia do odpowiedniego miejsca.
Świetnie! Teraz wprowadzimy pewne aktualizacje w tekście.
Wróć do wykresu Dynamo i zmień kilka wartości wejściowych, takich jak ciąg tekstowy, współrzędne punktu wstawienia itp. Tekst powinien zostać automatycznie zaktualizowany w programie Civil 3D. Zauważ też, że po odłączeniu jednego z portów wejściowych tekst zostanie usunięty. Po ponownym podłączeniu wszystkiego tekst zostanie utworzony ponownie.
Dlaczego dodatek Dynamo nie wstawia nowego obiektu tekstowego przy każdym uruchomieniu wykresu?
Domyślnie dodatek Dynamo „zapamiętuje” utworzone przez siebie obiekty. Jeśli zmienisz wartości wejściowe węzłów, obiekty w programie Civil 3D zostaną zaktualizowane, zamiast utworzenia nowych obiektów. Więcej informacji na temat tego zachowania można znaleźć w sekcji Wiązanie obiektów.
Przedstawiono tu zaledwie mały przykład tego, co można zrobić za pomocą dodatku Dynamo for Civil 3D. Czytaj dalej, aby dowiedzieć się więcej!
Dodatek Dynamo for Civil 3D zapewnia inżynierom i projektantom pracującym nad projektami infrastruktury lądowej paradygmat programowania wizualnego. Dodatek Dynamo można traktować jako swego rodzaju cyfrowe narzędzie uniwersalne dla użytkowników programu Civil 3D — niezależnie od tego, jakie zadanie należy wykonać, dodatek ten zawiera odpowiednie do tego narzędzie. Intuicyjny interfejs umożliwia tworzenie zaawansowanych i konfigurowalnych procedur bez konieczności pisania nawet jednego wiersza kodu. Nie musisz być programistą, aby korzystać z dodatku Dynamo, ale musisz potrafić myśleć logicznie jak programista. Ten rozdział, w połączeniu z innymi rozdziałami w przewodniku Primer, pomoże Ci w rozwijaniu umiejętności logicznych, dzięki którym będziesz w stanie sprostać każdemu zadaniu, stosując podejście zgodne z projektowaniem obliczeniowym.
Dodatek Dynamo wprowadzono po raz pierwszy w programie Civil 3D 2020 i od tego czasu dodatek ten nieustannie ewoluuje. Początkowo był on instalowany oddzielnie za pomocą aktualizacji oprogramowania. Teraz jest on dostarczany ze wszystkimi wersjami programu Civil 3D. W zależności od używanej wersji programu Civil 3D interfejs dodatku Dynamo może wyglądać nieco inaczej niż w przykładach przedstawionych w tym rozdziale. Jest to spowodowane znacznymi zmianami interfejsu wprowadzonymi w programie Civil 3D 2023.
Najbardziej aktualne informacje na temat rozwoju dodatku Dynamo można znaleźć w blogu poświęconym dodatkowi Dynamo. W poniższej tabeli podsumowano najważniejsze etapy rozwoju dodatku Dynamo for Civil 3D.
Projekt inżynierski typowego osiedla mieszkaniowego obejmuje pracę z kilkoma instalacjami podziemnymi, takimi jak kanalizacja sanitarna, kanalizacja burzowa, doprowadzenie wody pitnej itp. W tym przykładzie pokazano, jak za pomocą dodatku Dynamo można narysować doprowadzenia usług komunalnych z systemu dystrybucji do danej działki. Zwykle każda działka wymaga połączenia z usługami komunalnymi, co powoduje, że opracowanie wszystkich doprowadzeń usług jest żmudnym procesem. Dodatek Dynamo może przyspieszyć ten proces dzięki automatycznemu rysowaniu niezbędnej geometrii z wysoką dokładnością, jak również udostępnianiu elastycznych danych wejściowych, które można dostosować do standardów agencji lokalnej.
Zastosowanie węzła Select Object na potrzeby wprowadzania danych przez użytkownika
Praca z układami współrzędnych
Używanie operacji geometrycznych, takich jak Geometry.DistanceTo i Geometry.ClosestPointTo
Tworzenie odniesień do bloków
Sterowanie ustawieniami wiązań obiektów
Ten wykres będzie działać w programie Civil 3D 2020 i w nowszych wersjach.
Najpierw pobierz pliki przykładów poniżej, a następnie otwórz plik DWG i wykres dodatku Dynamo.
Poniżej przedstawiono przegląd logiki na tym wykresie.
Pobieranie geometrii krzywej dla systemu dystrybucji
Pobieranie geometrii krzywej dla linii działki wybranej przez użytkownika z odwróceniem w razie potrzeby
Generowanie punktów wstawiania dla mierników
Pobieranie najbliższych położeniom mierników punktów na systemie dystrybucji
Tworzenie odniesień do bloków i linii w obszarze modelu
Zacznijmy!
Pierwszym krokiem jest pobranie do dodatku Dynamo geometrii systemu dystrybucji. Zamiast wybierać pojedyncze linie lub polilinie, pobierzemy wszystkie obiekty na określonej warstwie i połączymy je w krzywą PolyCurve dodatku Dynamo.
Jeśli pierwszy raz masz do czynienia z geometrią krzywej dodatku Dynamo, skorzystaj z sekcji Krzywe.
Następnie musimy pobrać do dodatku Dynamo geometrię wybranej linii działki, aby można było z nią pracować. Właściwym narzędziem do tego zadania jest węzeł Select Object, który umożliwia użytkownikowi wykresu wybranie określonego obiektu w programie Civil 3D.
Musimy również dodać obsługę potencjalnego problemu. Linia działki ma punkt początkowy i punkt końcowy, co oznacza, że ma kierunek. Aby wykres mógł dawać spójne wyniki, wszystkie linie działki muszą mieć spójny kierunek. Warunek ten można uwzględnić bezpośrednio w logice wykresu, co zwiększy niezawodność wykresu.
Pobierz punkt początkowy i punkt końcowy linii działki.
Zmierz odległość od każdego punktu do systemu dystrybucji, a następnie określ, która odległość jest większa.
Żądanym wynikiem jest sytuacja, w której to punkt początkowy linii znajduje się najbliżej systemu dystrybucji. Jeśli tak nie jest, kierunek linii działki zostanie odwrócony. W przeciwnym razie po prostu zwracamy oryginalną linię działki.
Nadszedł czas, aby dowiedzieć się, gdzie zostaną umieszczone liczniki. Zazwyczaj położenie jest określane przez wymagania agencji lokalnej, dlatego wprowadzimy tylko wartości wejściowe, które można zmienić, aby odpowiadały różnym warunkom. Użyjemy układu współrzędnych wzdłuż linii działki jako odniesienia przy tworzeniu punktów. Ułatwi to zdefiniowanie odsunięć względem linii działki, bez względu na jej orientację.
Jeśli pierwszy raz masz do czynienia z układami współrzędnych, skorzystaj z sekcji Wektor, płaszczyzna i układ współrzędnych.
Teraz musimy pobrać najbliższe położeniom mierników punkty na systemie dystrybucji. Pozwoli to narysować połączenia usług w obszarze modelu, tak aby były zawsze prostopadłe do systemu dystrybucji. Idealnym rozwiązaniem jest węzeł Geometry.ClosestPointTo.
To krzywa PolyCurve systemu dystrybucji
To punkty wstawiania mierników
Ostatnią czynnością jest utworzenie obiektów w obszarze modelu. Użyjemy wygenerowanych wcześniej punktów wstawiania, aby utworzyć odniesienia do bloków, a następnie użyjemy punktów na systemie dystrybucji, aby narysować linie do połączeń usług.
Po uruchomieniu wykresu powinny być widoczne nowe odniesienia do bloków i linie połączeń usług w obszarze modelu. Zmień niektóre dane wejściowe i obserwuj, jak wszystko jest aktualizowane automatycznie.
Można zauważyć, że po umieszczeniu obiektów dla jednej linii działki wybranie innej linii działki powoduje „przesunięcie” obiektów.
Jest to domyślne zachowanie dodatku Dynamo, które jest bardzo przydatne w wielu przypadkach. Jednak może okazać się konieczne sekwencyjne umieszczenie kilku połączeń usług i wymuszenie, aby dodatek Dynamo utworzył nowe obiekty za każdym uruchomieniem, zamiast modyfikować oryginalne. Można sterować tym zachowaniem, zmieniając ustawienia wiązania obiektów.
Aby uzyskać więcej informacji, skorzystaj z sekcji Wiązanie obiektów.
Zmiana tego ustawienia spowoduje, że dodatek Dynamo będzie „zapominać” obiekty tworzone w poszczególnych uruchomieniach. Oto przykład uruchomienia wykresu z wyłączonym wiązaniem obiektów za pomocą Odtwarzacza Dynamo.
Jeśli nie znasz jeszcze Odtwarzacza Dynamo Player, skorzystaj z sekcji Odtwarzacz Dynamo (Dynamo Player).
Oto kilka pomysłów na rozszerzenie możliwości tego wykresu.
Umieść wiele połączeń usług jednocześnie, zamiast zaznaczać każdą linię działki.
Dopasuj dane wejściowe, aby zamiast mierników wody umieszczać odejścia czyszczące.
Dodaj przełącznik, aby umożliwić umieszczenie pojedynczego połączenia usług po określonej stronie linii działki zamiast po obu stronach.
Drogi, tory kolejowe, teren, usługi komunalne, pomiary, GIS...
Infrastruktura lądowa to wszystkie te elementy i wiele innych! W tej sekcji zawarto kilka praktycznych i istotnych przykładowych wykresów, które pomogą Ci rozwinąć umiejętności związane z dodatkiem Dynamo i uwolnić potencjał dodatku Dynamo for Civil 3D. Każdy wykres jest uzupełniony o szczegółowe opisy logiki, której użyto do jego utworzenia, dzięki czemu można go nie tylko używać, ale też analizować.
Ponadto przykłady te zawierają sprawdzone najlepsze praktyki dotyczące tworzenia niezawodnych wykresów. Podczas pracy z tymi przykładami zachęcamy do zapoznania się z sekcją , w której znajdziesz więcej pomysłów na tworzenie zaawansowanych, elastycznych i łatwych w konserwacji wykresów.
Podczas dodawania rur i konstrukcji do sieci rurociągów program Civil 3D używa szablonu do automatycznego przypisywania nazw. Jest to zwykle wystarczające podczas wstępnego umieszczania. Jednak w miarę rozwoju projektu nazwy będą musiały ulec zmianie. Ponadto może być wymaganych wiele różnych wzorów nazewnictwa, na przykład nadawanie konstrukcjom w rurociągu nazw sekwencyjnych od konstrukcji najdalszej w kolejności lub stosowanie wzoru nazewnictwa zgodnego ze schematem danych agencji lokalnej. W tym przykładzie pokazano, jak za pomocą dodatku Dynamo można definiować dowolnego typu strategię nazewnictwa, która ma być stosowana spójnie.
Praca z ramkami ograniczającymi
Filtrowanie danych za pomocą węzła List.FilterByBoolMask
Sortowanie danych za pomocą węzła List.SortByKey
Generowanie i modyfikowanie ciągów tekstowych
Ten wykres będzie działać w programie Civil 3D 2020 i w nowszych wersjach.
Najpierw pobierz pliki przykładów poniżej, a następnie otwórz plik DWG i wykres dodatku Dynamo.
Poniżej przedstawiono przegląd logiki na tym wykresie.
Wybieranie konstrukcji na podstawie warstwy
Pobieranie lokalizacji konstrukcji
Filtrowanie konstrukcji na podstawie odsunięć, a następnie sortowanie ich na podstawie pikiet
Generowanie nowych nazw
Zmienianie nazw konstrukcji
Zacznijmy!
Najpierw musimy wybrać wszystkie konstrukcje, z którymi będziemy pracować. W tym celu wystarczy wybrać wszystkie obiekty na określonej warstwie, co oznacza, że można wybrać konstrukcje z różnych sieci rurociągów (przy założeniu, że mają one tę samą warstwę).
Ten węzeł gwarantuje, że nie zostaną przypadkowo pobrane żadne niepożądane typy obiektów, które mogą mieć tę samą warstwę co konstrukcje.
Mamy już konstrukcje. Teraz musimy ustalić ich położenia w przestrzeni, tak aby można było je sortować według lokalizacji. W tym celu skorzystamy z ramek ograniczających poszczególnych obiektów. Ramka ograniczająca obiektu to ramka o minimalnym rozmiarze, która w pełni zawiera geometryczne zakresy obiektu. Obliczając środek ramki ograniczającej, otrzymujemy całkiem dobre przybliżenie punktu wstawiania konstrukcji.
Za pomocą tych punktów ustalimy pikiety i odsunięcia konstrukcji względem wybranej linii trasowania.
Tutaj zaczyna się robić trochę trudniej. Na tym etapie mamy dużą listę wszystkich konstrukcji na określonej warstwie i wybraliśmy linię trasowania, wzdłuż której mają być sortowane. Problem w tym, że na liście mogą znajdować się konstrukcje, których nazw nie chcemy zmieniać. Mogą one na przykład nie być częścią interesującego nas segmentu.
Wybrana linia trasowania
Konstrukcje, których nazwy chcemy zmienić
Konstrukcje, które powinny zostać pominięte
Dlatego musimy przefiltrować listę konstrukcji, aby nie uwzględniać tych, które mają odsunięcie od linii trasowania większe niż określone. Najlepiej zrobić to za pomocą węzła List.FilterByBoolMask. Po przefiltrowaniu listy konstrukcji użyjemy węzła List.SortByKey, aby posortować je według wartości pikiet.
Sprawdzanie, czy odsunięcie konstrukcji jest mniejsze niż wartość progowa
Zastąpienie wszelkich wartości null wartością false
Filtrowanie listy konstrukcji i pikiet
Sortowanie konstrukcji według pikiet
Ostatnią czynnością, którą musimy wykonać, jest utworzenie nowych nazw konstrukcji. Użyjemy formatu <alignment name>-STRC-<number>
. Dodano tu jeszcze kilka węzłów, aby w razie potrzeby uzupełnić liczby o dodatkowe zera (np. „01” zamiast „1”).
Wreszcie przechodzimy do zmieniania nazw konstrukcji.
Oto przykład uruchomienia wykresu za pomocą Odtwarzacza Dynamo.
Przydatne może być wykorzystanie podglądu tła 3D dodatku Dynamo do wizualizacji pośrednich danych wyjściowych wykresu zamiast tylko wyniku końcowego. Jednym z prostych rozwiązań jest wyświetlenie ramek ograniczających dla konstrukcji. Ponadto ten konkretny zestaw danych zawiera korytarz w dokumencie, dlatego można przenieść geometrię linii charakterystycznych korytarza do dodatku Dynamo, aby zapewnić kontekst dla lokalizacji konstrukcji w przestrzeni. Jeśli wykres zostanie użyty z zestawem danych bez żadnych korytarzy, węzły te po prostu nie wykonają żadnych działań.
Teraz możemy lepiej zrozumieć, jak działa proces filtrowania konstrukcji na podstawie odsunięć.
Oto kilka pomysłów na rozszerzenie możliwości tego wykresu.
Zmień nazwy konstrukcji na podstawie ich najbliższych linii trasowania, zamiast wybierać określoną linię trasowania.
Zmień nazwy rur, a nie tylko konstrukcji.
Ustaw warstwy konstrukcji na podstawie ich segmentów.
Wcześniej wspomniano, że węzły są podstawowymi elementami wykresu Dynamo i są zorganizowane w logiczne grupy w bibliotece. W dodatku Dynamo for Civil 3D w bibliotece znajdują się dwie kategorie (czyli półki), które zawierają węzły przeznaczone do pracy z obiektami programów AutoCAD i Civil 3D, takimi jak linie trasowania, profile, korytarze, odniesienia do bloków itp. Pozostała część biblioteki zawiera węzły, które są bardziej ogólne i są spójne we wszystkich „odmianach” dodatku Dynamo (takich jak dodatek Dynamo dla programu Revit, Dynamo Sandbox itp.).
Aby uzyskać więcej informacji na temat organizacji węzłów w podstawowej bibliotece dodatku Dynamo, skorzystaj z sekcji .
Węzły przeznaczone specjalnie do pracy z obiektami programów AutoCAD i Civil 3D
Węzły ogólnego przeznaczenia
Węzły z pakietów innych producentów, które można zainstalować oddzielnie
W przypadku używania węzłów z półek programów AutoCAD i Civil 3D dany wykres dodatku Dynamo będzie działał tylko w dodatku Dynamo for Civil 3D. Jeśli wykres dodatku Dynamo for Civil 3D zostanie otwarty w innym miejscu (na przykład w dodatku Dynamo dla programu Revit), węzły te zostaną oznaczone ostrzeżeniami i nie będą uruchamiane.
Dlaczego istnieją dwie oddzielne półki dla programów AutoCAD i Civil 3D?
Ta organizacja pozwala odróżnić węzły dla natywnych obiektów programu AutoCAD (takich jak linie, polilinie, odniesienia do bloków itp.) od węzłów dla obiektów programu Civil 3D (jak linie trasowania, korytarze, powierzchnie itp.). Z technicznego punktu widzenia programy AutoCAD i Civil 3D to dwa oddzielne komponenty: program AutoCAD jest aplikacją bazową, a program Civil 3D jest produktem na niej opartym.
Podczas pracy z węzłami programów AutoCAD i Civil 3D ważne jest pełne zrozumienie hierarchii obiektów na poszczególnych półkach. Pamiętasz systematykę organizmów z biologii? Królestwo, typ, gromada, rząd, rodzina, rodzaj, gatunek? Obiekty programów AutoCAD i Civil 3D są skategoryzowane w podobny sposób. Przeanalizujmy kilka przykładów, aby to wyjaśnić.
Użyjmy jako przykładu linii trasowania.
Załóżmy, że chcemy zmienić nazwę linii trasowania. W związku z tym następnym dodawanym węzłem będzie węzeł CivilObject.SetName.
Na początku może to wydawać się nieintuicyjne. Czym jest obiekt programu Civil, CivilObject, i dlaczego w bibliotece nie ma węzła Alignment.SetName? Odpowiedź jest związana z pojęciami wielokrotnego wykorzystania i prostoty. Jeśli się nad tym zastanowić, proces zmiany nazwy obiektu programu Civil 3D jest taki sam niezależnie od tego, czy obiekt jest linią trasowania, korytarzem, profilem, czy czymś innym. Dlatego zamiast powtarzających się węzłów, które zasadniczo działają tak samo (np. Alignment.SetName, Corridor.SetName, Profile.SetName itp.), najlepszym rozwiązaniem jest opakowanie tej funkcjonalności w pojedynczy węzeł. Do tego właśnie służy węzeł CivilObject.SetName.
Można też spojrzeć na tę kwestię pod kątem relacji. Linia trasowania i korytarz to typy obiektów programu Civil, podobnie jak jabłko i gruszka to typy owoców. Węzły obiektów programu Civil mają zastosowanie do dowolnego typu obiektu programu Civil, tak jak w przypadku obieraczki, za pomocą której można obrać zarówno jabłko, jak i gruszkę. Gdybyśmy używali osobnej obieraczki to każdego rodzaju owoców, w kuchni panowałby straszny bałagan. W tym sensie biblioteka węzłów Dynamo przypomina kuchnię.
Pójdźmy o krok dalej. Załóżmy, że chcemy zmienić warstwę linii trasowania. Służy do tego węzeł Object.SetLayer.
Dlaczego nie ma węzła o nazwie CivilObject.SetLayer? Mają tutaj zastosowanie te same zasady wielokrotnego wykorzystania i prostoty, które omówiliśmy wcześniej. Właściwość warstwa jest wspólna dla wszystkich obiektów w programie AutoCAD, które można rysować lub wstawiać, takich jak linia, polilinia, tekst, odniesienie do bloku itp. Obiekty programu Civil 3D, takie jak linie trasowania i korytarze, należą do tej samej kategorii, dlatego każdy węzeł, który ma zastosowanie do obiektu, może być też używany z dowolnym obiektem programu Civil.
Dodatek Dynamo for Civil 3D zawiera bardzo wydajny mechanizm „zapamiętywania” obiektów tworzonych przez poszczególne węzły. Ten mechanizm jest nazywany wiązaniem obiektów i umożliwia wykresowi Dynamo generowanie spójnych wyników przy każdym jego uruchomieniu w tym samym dokumencie. Jest to bardzo pożądane w wielu sytuacjach, ale w pewnych innych sytuacjach użytkownik może chcieć mieć większą kontrolę nad zachowaniem dodatku Dynamo. W tej sekcji opisano działanie wiązania obiektów i sposoby jego wykorzystywania.
Rozważmy ten wykres, który tworzy okrąg w obszarze modelu na bieżącej warstwie.
Zwróćmy uwagę, co się dzieje, gdy promień zostanie zmieniony.
To jest wiązanie obiektów w działaniu. Domyślnym zachowaniem dodatku Dynamo jest zmodyfikowanie promienia okręgu, a nie utworzenie nowego okręgu przy każdej zmianie danych wejściowych promienia. Dzieje się tak, ponieważ węzeł Object.ByGeometry „pamięta”, że utworzył ten konkretny okrąg przy każdym uruchomieniu wykresu. Ponadto dodatek Dynamo zapisze te informacje, tak aby po następnym otwarciu dokumentu programu Civil 3D i uruchomieniu wykresu dodatek zachowywał się dokładnie tak samo.
Przyjrzyjmy się przykładowi, w którym można zmienić domyślne zachowanie dodatku Dynamo w zakresie wiązania obiektów. Załóżmy, że chcemy utworzyć wykres, w którym w środku okręgu jest umieszczany tekst. Celem tego wykresu jest możliwość wielokrotnego uruchamiania go i za każdym razem umieszczania nowego tekstu w wybranym okręgu. Oto jak może wyglądać wykres.
Jednak faktyczne działanie po wybraniu innego okręgu wygląda tak.
Po wprowadzeniu tej zmiany otrzymujemy zachowanie, o które chodziło.
Dodatek Dynamo for Civil 3D umożliwia modyfikowanie domyślnego zachowania wiązania obiektów za pomocą ustawień Przechowywanie danych powiązania w menu dodatku Dynamo.
Należy pamiętać, że opcje przechowywania danych powiązania są dostępne w programie Civil 3D 2022.1 i w nowszych wersjach.
Wszystkie opcje są domyślnie włączone. Poniżej podsumowano funkcje poszczególnych opcji.
Gdy ta opcja jest włączona, dodatek Dynamo „zapomina” o obiektach, które utworzył podczas ostatniego uruchomienia wykresu. Wykres może być więc uruchamiany na dowolnym rysunku w dowolnej sytuacji i za każdym razem utworzy nowe obiekty.
Zastosowanie
Używaj tej opcji, aby dodatek Dynamo „zapominał” o tym, co robił w poprzednich uruchomieniach, i za każdym razem tworzył nowe obiekty.
Ta opcja oznacza, że metadane wiązania obiektów są serializowane do wykresu (pliku .dyn) podczas jego zapisywania. Jeśli wykres zostanie zamknięty/ponownie otwarty i uruchomiony na tym samym rysunku, wszystko powinno działać tak samo, jak działało ostatnio. Jeśli wykres zostanie uruchomiony na innym rysunku, dane powiązania zostaną usunięte z wykresu i zostaną utworzone nowe obiekty. Oznacza to, że po otwarciu oryginalnego rysunku i ponownym uruchomieniu wykresu oprócz starych obiektów zostaną utworzone nowe obiekty.
Zastosowanie
Używaj tej opcji, aby dodatek Dynamo „pamiętał” obiekty, które utworzył podczas ostatniego uruchomienia na określonym rysunku.
Ta opcja jest najodpowiedniejsza w sytuacjach, gdy możliwe jest zachowanie relacji 1:1 między konkretnym rysunkiem a wykresem Dynamo. W przypadku wykresów przeznaczonych do uruchamiania na wielu rysunkach lepsze są opcje 1 i 3.
Ta opcja działa podobnie do opcji 2, ale w tym przypadku dane wiązania obiektów są serializowane na rysunku, a nie na wykresie (w pliku .dyn). Jeśli wykres zostanie zamknięty/ponownie otwarty i uruchomiony na tym samym rysunku, wszystko powinno działać tak samo, jak działało ostatnio. Jeśli wykres zostanie uruchomiony na innym rysunku, dane powiązania nadal będą zachowane na oryginalnym rysunku, ponieważ są zapisywane w rysunku, a nie w wykresie.
Zastosowanie
Używaj tej opcji, aby móc użyć tego samego wykresu na wielu rysunkach i aby dodatek Dynamo „pamiętał”, co robił na każdym z nich.
Po pierwsze: ta opcja nie ma wpływu na interakcje wykresu z rysunkiem w przypadku uruchamiania wykresu za pomocą głównego interfejsu dodatku Dynamo. Ta opcja ma zastosowanie tylko w przypadku, gdy wykres jest uruchamiany za pomocą Odtwarzacza Dynamo.
Jeśli wykres zostanie uruchomiony za pomocą interfejsu głównego dodatku Dynamo, a następnie zostanie zamknięty i uruchomiony za pomocą Odtwarzacza Dynamo, obok obiektów utworzonych wcześniej zostaną utworzone nowe obiekty. Jednak po jednokrotnym wykonaniu wykresu przez Odtwarzacz Dynamo dane wiązania obiektów zostaną zserializowane do rysunku. Jeśli więc wykres jest uruchamiany wielokrotnie za pomocą Odtwarzacza Dynamo, zamiast tworzenia obiektów, zostają zaktualizowane istniejące obiekty. Jeśli wykres zostanie uruchomiony za pomocą Odtwarzacza Dynamo na innym rysunku, dane powiązania nadal będą zachowane na oryginalnym rysunku, ponieważ są zapisywane w rysunku, a nie w wykresie.
Zastosowanie
Używaj tej opcji, aby móc uruchamiać wykres za pomocą Odtwarzacza Dynamo na wielu rysunkach i aby dodatek Dynamo „pamiętał”, co robił na każdym z nich
Odtwarzacz Dynamo umożliwia uproszczone uruchamianie wykresów Dynamo w programie Civil 3D. Po utworzeniu wykresów do używania Odtwarzacza i uruchamiania wykresów nie jest wymagana wiedza specjalistyczna dotycząca dodatku Dynamo. Ułatwia to udostępnianie wykresów innym osobom, które mogą nie być zainteresowane analizowaniem szczegółów węzłów i przewodów.
Aby uzyskać więcej informacji na temat Odtwarzacza Dynamo w programie Civil 3D, zapoznaj się z dokumentacją dostarczoną w witrynie .
Opracowywanie obwiedni kinematycznych do weryfikacji prześwitu jest ważną częścią projektów kolejowych. Za pomocą dodatku Dynamo można generować bryły dla obwiedni, zamiast tworzyć złożone podzespoły korytarzy i zarządzać nimi w celu wykonania tego zadania.
Praca z liniami charakterystycznymi korytarza
Przekształcanie geometrii między układami współrzędnych
Tworzenie brył przez wyciągnięcie
Kontrolowanie zachowania węzłów za pomocą ustawień skratowania
Ten wykres będzie działać w programie Civil 3D 2020 i w nowszych wersjach.
Najpierw pobierz pliki przykładów poniżej, a następnie otwórz plik DWG i wykres dodatku Dynamo.
Poniżej przedstawiono przegląd logiki na tym wykresie.
Pobieranie linii charakterystycznych z określonej linii bazowej korytarza
Generowanie układów współrzędnych wzdłuż linii charakterystycznej korytarza w żądanych odstępach
Przekształcanie geometrii bloku profilu do układów współrzędnych
Wyciąganie bryły między profilami
Tworzenie brył w programie Civil 3D
Zacznijmy!
Pierwszym krokiem jest pobranie danych korytarza. Wybierzemy model korytarza na podstawie jego nazwy, pobierzemy określoną linię bazową w korytarzu, a następnie pobierzemy linię charakterystyczną w linii bazowej na podstawie kodu punktu.
Teraz wygenerujemy układy współrzędnych wzdłuż linii charakterystycznych korytarza między daną pikietą początkową a końcową. Te układy współrzędnych zostaną użyte do wyrównania geometrii bloku profilu pojazdu względem korytarza.
Zwróć uwagę na małą pozycję XXX w prawym dolnym rogu węzła. Oznacza to, że ustawienia skratowania węzła skonfigurowano jako Iloczyn wektorowy, co jest niezbędne do generowania układów współrzędnych przy tych samych wartościach pikiet dla obu linii charakterystycznych.
Teraz musimy w jakiś sposób utworzyć szyk profili pojazdów wzdłuż linii charakterystycznych. Przekształcimy geometrię z definicji bloku profilu pojazdu za pomocą węzła Geometry.Transform. Zwizualizowanie tej koncepcji jest trudne, więc zanim przyjrzymy się węzłom, przeanalizujmy grafikę pokazującą, co się stanie.
Zasadniczo pobieramy geometrię dodatku Dynamo z pojedynczej definicji bloku i przesuwamy/obracamy ją podczas tworzenia szyku wzdłuż linii charakterystycznej. Świetnie! Oto jak wygląda sekwencja węzłów.
Tutaj następuje pobranie definicji bloku z dokumentu.
Te węzły pobierają geometrię dodatku Dynamo obiektów w bloku.
Te węzły zasadniczo definiują układ współrzędnych, z którego przekształcana jest geometria.
Ten węzeł wykonuje rzeczywistą pracę nad przekształceniem geometrii.
Zwróć uwagę na najdłuższe skratowanie w tym węźle.
Oto co uzyskamy w dodatku Dynamo.
Dobra wiadomość! Najcięższą pracę mamy już za sobą. Teraz wystarczy wygenerować bryły między profilami. Można to łatwo zrobić za pomocą węzła Solid.ByLoft.
Oto wynik. Pamiętaj, że są to bryły dodatku Dynamo — nadal trzeba je utworzyć w programie Civil 3D.
Ostatnią czynnością jest wyprowadzenie wygenerowanych brył do obszaru modelu. Nadamy im również kolor, który ułatwi ich oglądanie.
Oto przykład uruchomienia wykresu za pomocą Odtwarzacza Dynamo.
Oto kilka pomysłów na rozszerzenie możliwości tego wykresu.
Dodaj możliwość używania różnych zakresów pikiet oddzielnie dla poszczególnych torów.
Podziel bryły na mniejsze segmenty, które można analizować indywidualnie pod kątem kolizji.
Sprawdź, czy bryły obwiedni przecinają się z obiektami i pokoloruj te, w przypadku których występują kolizje.
Jednym z wielu doskonałych przykładów zastosowań dodatku Dynamo jest dynamiczne umieszczanie odrębnych obiektów wzdłuż modelu korytarza. Często obiekty muszą być umieszczane w miejscach niezależnych od wstawionych zespołów wzdłuż korytarza, co jest bardzo żmudnym zadaniem w przypadku wykonywania ręcznego. Gdy zmienia się geometria pozioma lub pionowa korytarza, wprowadzana jest znaczna ilość poprawek.
Odczytywanie danych z pliku zewnętrznego (w tym przypadku programu Excel)
Organizowanie danych w słownikach
Sterowanie położeniem/skalą/obrotem za pomocą układów współrzędnych
Umieszczanie odniesień do bloków
Wizualizowanie geometrii w dodatku Dynamo
Ten wykres będzie działać w programie Civil 3D 2020 i w nowszych wersjach.
Najpierw pobierz pliki przykładów poniżej, a następnie otwórz plik DWG i wykres dodatku Dynamo.
Najlepiej jest, jeśli plik programu Excel jest zapisany w tym samym katalogu co wykres dodatku Dynamo.
Poniżej przedstawiono przegląd logiki na tym wykresie.
Odczytywanie pliku programu Excel i importowanie danych do dodatku Dynamo
Pobieranie linii charakterystycznych z określonej linii bazowej korytarza
Generowanie układów współrzędnych wzdłuż linii charakterystycznej korytarza w żądanych pikietach
Umieszczanie odniesień do bloków w obszarze modelu za pomocą układów współrzędnych
Zacznijmy!
W tym przykładowym wykresie użyjemy pliku programu Excel do przechowywania danych, za pomocą których dodatek Dynamo umieści odniesienia do bloków słupów oświetleniowych. Tabela wygląda tak.
Odczytanie danych z pliku zewnętrznego (np. pliku programu Excel) za pomocą dodatku Dynamo jest doskonałą strategią, zwłaszcza gdy dane muszą być współdzielone z innymi członkami zespołu.
Dane programu Excel są importowane do dodatku Dynamo w ten sposób.
Mamy już dane. Teraz musimy je podzielić według kolumn (Corridor, Baseline, PointCode itp.), aby móc wykorzystać je w pozostałej części wykresu. Typowym sposobem wykonania tej operacji jest użycie węzła List.GetItemAtIndex i określenie numeru indeksu każdej odpowiedniej kolumny. Na przykład kolumna Corridor ma indeks 0, kolumna Baseline ma indeks 1 itd.
Wygląda to dobrze, prawda? Jednak z tym podejściem wiąże się potencjalny problem. Co jeśli w przyszłości kolejność kolumn w pliku Excel ulegnie zmianie? Lub jeśli między dwiema kolumnami zostanie dodana nowa kolumna? Wykres nie będzie wtedy działał poprawnie i będzie wymagał aktualizacji. Wykres można zabezpieczyć przed przyszłymi zmianami, umieszczając dane w słowniku, Dictionary, z nagłówkami kolumn programu Excel jako kluczami, keys, i pozostałymi danymi jako wartościami, values.
Dzięki temu wykres jest bardziej niezawodny, ponieważ umożliwia elastyczne zmienianie kolejności kolumn w programie Excel. Dopóki nagłówki kolumn pozostają takie same, dane można po prostu pobrać ze słownika za pomocą jego klucza, key, czyli nagłówka kolumny, co jest naszym kolejnym krokiem.
Dane programu Excel są już zaimportowane i gotowe do użycia. Zacznijmy używać ich do pobierania informacji z programu Civil 3D na temat modeli korytarzy.
Wybierz model korytarza na podstawie jego nazwy.
Pobierz określoną linię bazową (Baseline) w korytarzu.
Pobierz linię charakterystyczną w linii bazowej na podstawie jej kodu punktu.
Teraz wygenerujemy układy współrzędnych wzdłuż linii charakterystycznych korytarza przy wartościach pikiet określonych w pliku programu Excel. Te układy współrzędnych posłużą do zdefiniowania położenia, obrotu i skali odniesień do bloków słupów oświetleniowych.
Zwróć uwagę, że zastosowano tu węzeł Code Block do obracania układów współrzędnych w zależności od tego, po której stronie linii bazowej się one znajdują. Można to też zrealizować za pomocą sekwencji kilku węzłów, ale jest to dobry przykład sytuacji, w której łatwiej jest po prostu napisać kod.
Już prawie gotowe! Mamy wszystkie informacje, których potrzebujemy, aby móc umieścić odniesienia do bloków. Pierwszą czynnością jest pobranie definicji bloków, których użyjemy, za pomocą kolumny BlockName w pliku programu Excel.
Na tym etapie ostatnim krokiem jest utworzenie odniesień do bloków.
Po uruchomieniu wykresu powinny być widoczne nowe odniesienia do bloków w obszarze modelu wzdłuż korytarza. Oto najlepsza część — jeśli ustawiono automatyczny tryb wykonywania wykresu, to po edytowaniu pliku programu Excel odniesienia do bloków zostaną zaktualizowane automatycznie.
Oto przykład uruchomienia wykresu za pomocą Odtwarzacza Dynamo.
Pomocne może być zwizualizowanie geometrii korytarza w dodatku Dynamo w celu zapewnienia kontekstu. Ten konkretny model zawiera już wyodrębnione bryły korytarza w obszarze modelu, więc przenieśmy je do dodatku Dynamo.
Jest jednak coś jeszcze, co musimy rozważyć. Bryły są stosunkowo „ciężkimi” typami geometrii, co oznacza, że ta operacja spowolni działanie wykresu. Przydałby się prosty sposób wyboru, czy chcemy wyświetlać bryły, czy nie. Oczywistym rozwiązaniem jest odłączenie węzła Corridor.GetSolids, ale spowoduje to wyświetlenie ostrzeżeń dla wszystkich węzłów znajdujących się za nim, co nie jest eleganckie. Jest to sytuacja, w której naprawdę przydaje się węzeł ScopeIf.
Zwróć uwagę, że węzeł Object.Geometry ma szary pasek na dole. Oznacza to, że podgląd węzła jest wyłączony (dostępny po kliknięciu węzła prawym przyciskiem myszy), co pozwala na uniknięcie „konkurowania” z inną geometrią o priorytet wyświetlania w podglądzie tła w węźle GeometryColor.ByGeometryColor.
Węzeł ScopeIf zasadniczo umożliwia selektywne uruchamianie całej gałęzi węzłów. Jeśli wartość wejściowa test ma wartość fałsz (false), nie zostanie uruchomiony żaden węzeł połączony z węzłem ScopeIf.
Oto wynik w podglądzie tła dodatku Dynamo.
Oto kilka pomysłów na rozszerzenie możliwości tego wykresu.
Dodaj do pliku programu Excel kolumnę obrotu, rotation, i za jej pomocą steruj obrotem układów współrzędnych.
Dodaj do pliku programu Excel odsunięcia poziome lub pionowe, tak aby słupy oświetleniowe mogły w razie potrzeby odbiegać od linii charakterystycznej korytarza.
Zamiast używać pliku programu Excel z wartościami pikiet, wygeneruj wartości pikiet bezpośrednio w dodatku Dynamo, używając pikiety początkowej i typowego odstępu.
Praca z punktami COGO i grupami punktów w programie Civil 3D jest podstawowym elementem wielu procesów realizowanych od pola do zakończenia. Dodatek Dynamo naprawdę sprawdza się w przypadku konieczności zarządzania danymi. W tym przykładzie zademonstrujemy jeden potencjalny przypadek zastosowania.
Praca z listami
Grupowanie podobnych obiektów za pomocą węzła List.GroupByKey
Wyświetlanie niestandardowych danych wyjściowych w Odtwarzaczu Dynamo
Ten wykres będzie działać w programie Civil 3D 2020 i w nowszych wersjach.
Najpierw pobierz pliki przykładów poniżej, a następnie otwórz plik DWG i wykres dodatku Dynamo.
Poniżej przedstawiono przegląd logiki na tym wykresie.
Pobieranie wszystkich punktów COGO w dokumencie
Grupowanie punktów COGO na podstawie opisu
Tworzenie grup punktów
Wyprowadzanie danych z podsumowaniem do Odtwarzacza Dynamo
Zacznijmy!
Pierwszym krokiem jest pobranie wszystkich grup punktów w dokumencie, a następnie pobranie wszystkich punktów COGO w każdej grupie. Dzięki temu otrzymamy listę zagnieżdżoną lub „listę list”, z którą łatwiej będzie pracować później, jeśli spłaszczymy wszystko do pojedynczej listy za pomocą węzła List.Flatten.
Mamy już wszystkie punkty COGO. Teraz musimy rozdzielić je na grupy na podstawie ich opisów. Właśnie do tego służy węzeł List.GroupByKey. Zasadniczo grupuje on wszystkie elementy o tym samym kluczu.
Najcięższą pracę mamy już za sobą. Ostatnią czynnością jest utworzenie nowych grup punktów programu Civil 3D na podstawie zgrupowanych punktów COGO.
Po uruchomieniu wykresu w podglądzie tła dodatku Dynamo niczego nie ma, ponieważ nie pracujemy z żadną geometrią. Dlatego jedynym sposobem sprawdzenia, czy wykres jest wykonywany poprawnie, jest sprawdzenie obszaru narzędzi lub podglądów danych wyjściowych węzłów. Jeśli jednak wykres zostanie uruchomiony za pomocą Odtwarzacza Dynamo, można przekazać więcej informacji na temat wyników wykresu, drukując podsumowanie utworzonych grup punktów. Wystarczy kliknąć prawym przyciskiem myszy węzeł i skonfigurować dla niego ustawienie Is Output (Dane wyjściowe). W tym przypadku użyjemy węzła Watch o zmienionej nazwie, aby wyświetlić wyniki.
Oto przykład uruchomienia wykresu za pomocą Odtwarzacza Dynamo.
Oto kilka pomysłów na rozszerzenie możliwości tego wykresu.
Zmodyfikuj grupowanie punktów tak, aby było oparte na pełnym opisie, a nie na opisie nieprzetworzonym.
Grupuj punkty na podstawie innych wybranych wstępnie zdefiniowanych kategorii (na przykład „Ground shots”, „Monuments” itp.)
Automatycznie twórz powierzchnie TIN dla punktów w niektórych grupach.
Dodatek Dynamo daje niezwykłe możliwości jako narzędzie do . Można jednak pominąć węzły i przewody, aby pisać kod w postaci tekstowej. Można to zrobić na dwa sposoby:
Pisanie kodu DesignScript za pomocą węzła Code Block
Pisanie kodu Python za pomocą węzła Python
W tej sekcji omówiono używanie języka Python w środowisku programu Civil 3D w celu wykorzystywania interfejsów API .NET programów AutoCAD i Civil 3D.
Aby uzyskać bardziej ogólne informacje na temat używania języka Python w dodatku Dynamo, skorzystaj z sekcji .
Dla programów AutoCAD i Civil 3D jest dostępnych po kilka interfejsów API, które umożliwiają programistom rozszerzanie produktu podstawowego o funkcje niestandardowe. W kontekście dodatku Dynamo istotne są interfejsy API kodu zarządzanego .NET. Poniższe łącza prowadzą do informacji niezbędnych do zrozumienia struktury tych interfejsów API i sposobu ich działania.
Podczas zapoznawania się z tą sekcją możesz zetknąć się z pewnymi nowymi dla Ciebie pojęciami, takimi jak bazy danych, transakcje, metody, właściwości itp. Wiele z tych pojęć należy do podstaw pracy z interfejsami API .NET i nie są one charakterystyczne ani dla dodatku Dynamo, ani dla języka Python. Szczegółowe omówienie tych elementów wykracza poza zakres tej sekcji przewodnika Primer, dlatego zaleca się częste korzystanie z informacji, do których prowadzą powyższe łącza.
Podczas pierwszej edycji nowego węzła w języku Python jest on wstępnie wypełniany kodem-szablonem, aby przyspieszyć rozpoczęcie pracy. Oto podział szablonu z objaśnieniami dotyczącymi każdego bloku.
Importuje moduły
sys
iclr
, które są niezbędne do poprawnego działania interpretera języka Python. W szczególności modułclr
umożliwia traktowanie przestrzeni nazw .NET jako pakietów Python.Wczytuje standardowe zespoły (np. pliki DLL) do pracy z interfejsami API kodu zarządzanego .NET dla programów AutoCAD i Civil 3D.
Dodaje odniesienia do standardowych przestrzeni nazw programów AutoCAD i Civil 3D. Są one równoważne z dyrektywami
using
lubImports
odpowiednio w języku C# i w języku VB.NET.Dostęp do portów wejściowych węzła można uzyskać za pomocą wstępnie zdefiniowanej listy o nazwie
IN
. Dostęp do danych w określonym porcie można uzyskać, używając numeru indeksu, na przykładdataInFirstPort = IN[0]
.Pobiera aktywny dokument i edytor.
Blokuje dokument i inicjuje transakcję bazy danych.
W tym miejscu należy umieścić większość kodu logiki skryptu.
Usuń oznaczenie komentarza tego wiersza, aby zatwierdzić transakcję po zakończeniu głównej pracy.
Aby zapisać dane wyjściowe węzła, należy przypisać je do zmiennej
OUT
na końcu skryptu.
Chcesz wprowadzić dostosowania?
Domyślny szablon w języku Python można zmodyfikować, edytując plik PythonTemplate.py
znajdujący się w folderze C:\ProgramData\Autodesk\C3D <version>\Dynamo
.
Przeanalizujmy przykład, aby zademonstrować niektóre z najważniejszych pojęć dotyczących pisania skryptów w języku Python w dodatku Dynamo for Civil 3D.
Poniżej przedstawiono przykładowe pliki, z których można korzystać w trakcie tego ćwiczenia.
Poniżej przedstawiono przegląd logiki na tym wykresie.
Zapoznaj się z dokumentacją interfejsu API programu Civil 3D
Wybranie wszystkich zlewni w dokumencie na podstawie nazwy warstwy
„Odpakowanie” obiektów Dynamo, aby uzyskać dostęp do wewnętrznych składników interfejsu API programu Civil 3D
Utworzenie punktów dodatku Dynamo na podstawie punktów programu AutoCAD
Utworzenie krzywych PolyCurve z punktów
Zacznijmy!
Teraz możemy zacząć tworzyć logikę wykresu. Pierwszą czynnością, którą należy wykonać, jest pobranie listy wszystkich zlewni w dokumencie. Dostępne są węzły do obsługi tej operacji, więc nie trzeba uwzględniać jej w skrypcie w języku Python. Używanie węzłów zapewnia lepszą przejrzystość dla innych osób czytających wykres (w przeciwieństwie do używania dużej ilości kodu w skrypcie w języku Python) i pozwala skupić się w kodzie w języku Python na jednej rzeczy: zwróceniu punktów obwiedni zlewni.
Warto zwrócić uwagę, że wyjście z węzła All Objects on Layer jest listą obiektów programu Civil (CivilObject). Jest to spowodowane tym, że dodatek Dynamo for Civil 3D nie zawiera obecnie żadnych węzłów do pracy ze zlewniami. Dlatego właśnie należy uzyskać dostęp do interfejsu API za pośrednictwem języka Python.
Ogólnie bezpieczniej jest uzyskać identyfikator obiektu za pomocą właściwości InternalObjectId
, a następnie uzyskać dostęp do opakowanego obiektu w transakcji. Wynika to z tego, że właściwość InternalDBObject
zwraca obiekt DBObject programu AutoCAD, który nie jest w stanie zapisywalnym.
Oto pełny skrypt w języku Python, który wykonuje operacje polegające na uzyskaniu dostępu do wewnętrznych obiektów zlewni i pobraniu ich punktów obwiedni. Wyróżnione wiersze to te zmodyfikowane lub dodane w domyślnym kodzie-szablonie.
Klikaj podkreślony tekst w skrypcie, aby uzyskać wyjaśnienia dotyczące poszczególnych wierszy.
Ogólnie najlepszą praktyką jest umieszczenie większości kodu logiki skryptu wewnątrz transakcji. Zapewnia to bezpieczny dostęp do obiektów, które są odczytywane/zapisywane przez skrypt. W wielu przypadkach pominięcie transakcji może spowodować błąd krytyczny.
Na tym etapie skrypt w języku Python powinien zwrócić listę punktów dodatku Dynamo, które można wyświetlić w podglądzie w tle. Ostatnią czynnością jest utworzenie krzywych PolyCurve na podstawie punktów. Warto zauważyć, że można to również zrobić bezpośrednio w skrypcie w języku Python. Jednak celowo umieściliśmy tę operację poza skryptem w węźle, aby była bardziej widoczna. Oto ostateczny wykres.
Oto ostateczna geometria dodatku Dynamo.
Zanim zakończymy tę część, omówmy jeszcze jedną kwestię. W zależności od używanej wersji programu Civil 3D węzeł w języku Python może być skonfigurowany w określony sposób. W programach Civil 3D 2020 i 2021 dodatek Dynamo używał narzędzia o nazwie IronPython do przenoszenia danych między obiektami .NET a skryptami w języku Python. Jednak w programie Civil 3D 2022 dodatek Dynamo używa standardowego natywnego interpretera języka Python (znanego jako CPython), w którym jest używany język Python 3. Korzyści płynące z przejścia na nowy model obejmują dostęp do popularnych nowoczesnych bibliotek i nowych funkcji platformy, niezbędne poprawki konserwacyjne i poprawki zabezpieczeń.
Ten wiersz pobiera określoną potrzebną klasę z biblioteki geometrii dodatku Dynamo. Uwaga: określono tutaj import Point as DynPoint
zamiast import *
, ponieważ ta druga opcja spowodowałaby kolizje nazw.
Tutaj dokładnie określamy, który port wejściowy zawiera dane, jakie mają być używane, zamiast domyślnych IN
, które odnoszą się do całej listy wszystkich danych wejściowych.
Ten przewodnik Primer to zaledwie początek przygody z dodatkiem Dynamo for Civil 3D. Dobrze prosperująca społeczność użytkowników dodatku Dynamo to prawdziwa kopalnia wiedzy. Zapoznaj się z niektórymi z tych zasobów, aby dowiedzieć się więcej.
Bloki kodu zapewniają głęboki wgląd w język DesignScript, czyli język programowania stanowiący rdzeń dodatku Dynamo. Język DesignScript, stworzony od podstaw do obsługi badawczych przepływów roboczych procesów projektowych, jest czytelny i zwięzły oraz zapewnia natychmiastową informację zwrotną dla małych fragmentów kodu, ale umożliwia też skalowanie do dużych i złożonych interakcji. Język DesignScript stanowi też fundament mechanizmu sterującego większością zaplecza dodatku Dynamo. Fakt, że prawie wszystkie funkcje dostępne w węzłach i interakcjach dodatku Dynamo mają relację „jeden do jednego” z językiem skryptów, zapewnia niepowtarzalne możliwości płynnego przechodzenia między interakcjami opartymi na węzłach a stosowaniem skryptów.
W przypadku użytkowników początkujących węzły mogą być automatycznie przekształcane w składnię tekstową, co pomaga w nauce języka DesignScript, a także po prostu zmniejsza rozmiar większych części wykresów. Do tego celu służy proces o nazwie „Konwersja węzłów na kod”, który jest szczegółowo opisany w . Bardziej doświadczeni użytkownicy mogą używać bloków kodu do tworzenia własnych połączeń istniejących funkcji oraz samodzielnie utworzonych relacji za pomocą wielu standardowych paradygmatów kodowania. Zarówno początkujący, jak i zaawansowani użytkownicy znajdą wiele przydatnych skrótów i fragmentów kodu, które przyspieszają pracę nad projektami. Chociaż termin „blok kodu” może wywoływać nieco niepokoju u użytkowników, którzy nie są programistami, jest to łatwe w obsłudze i niezawodne narzędzie. Początkujący użytkownik może efektywnie używać bloku kodu przy minimalnym kodowaniu, a zaawansowany użytkownik może tworzyć definicje skryptowe, które będą przywoływane w innych miejscach definicji dodatku Dynamo.
W skrócie: bloki kodu są interfejsem skryptów tekstowych w środowisku skryptów wizualnych. Mogą one być używane jako liczby, ciągi, formuły i inne typy danych. Funkcję bloku kodu zaprojektowano dla dodatku Dynamo, więc można definiować w bloku kodu dowolne zmienne, które będą automatycznie dodawane do wejść węzła:
Bloki kodu pozwalają użytkownikowi elastycznie decydować, w jaki sposób będą określane dane wejściowe. Oto kilka różnych sposobów na ustawienie podstawowego punktu o współrzędnych (10, 5, 0):
Po poznaniu większej liczby dostępnych funkcji w bibliotece użytkownik może nawet stwierdzić, że wpisanie „Point.ByCoordinates” jest szybsze niż wyszukanie odpowiedniego węzła w bibliotece. Na przykład po wpisaniu „Point.” w dodatku Dynamo zostanie wyświetlona lista funkcji, które można zastosować do punktu. Dzięki temu tworzenie skryptów jest bardziej intuicyjne. Pomaga to też w nauce stosowania funkcji w dodatku Dynamo.
Blok kodu (Code Block) można znaleźć w sekcji Podstawowe > Dane wejściowe > Operacje > Code Block. Jeszcze szybciej: wystarczy kliknąć dwukrotnie obszar rysunku, a zostanie wyświetlony blok kodu. Ten węzeł jest używany tak często, że przypisano do niego funkcję dwukrotnego kliknięcia.
Bloki kodu są również elastyczne pod względem typów danych. Użytkownik może szybko definiować liczby, ciągi i formuły, a blok kodu zapewni żądane wyniki.
Na poniższej ilustracji pokazano „stary” i nieco pracochłonny sposób realizacji zadania: użytkownik wyszukuje węzeł w interfejsie, dodaje go do obszaru rysunku, a następnie wprowadza dane. Za pomocą bloku kodu użytkownik może kliknąć dwukrotnie obszar rysunku, aby pojawił się węzeł, i wpisać właściwy typ danych za pomocą podstawowej składni.
Number, String i Formula to trzy przykłady węzłów Dynamo, które są najprawdopodobniej przestarzałe w porównaniu z węzłem Code Block.
Rozwiązanie tradycyjne
Węzły Code Block
Wersja programu Revit | Pierwsza stabilna wersja dodatku Dynamo | Ostatnia obsługiwana wersja dodatku Dynamo dla programu Revit |
---|---|---|
Utworzenie wykresu Dynamo, który będzie wstawiał tekst do obszaru modelu.
Misja wykonana!
Wersja programu Civil 3D | Wersja dodatku Dynamo | Uwagi |
---|---|---|
Umieszczenie odniesień do bloków wodomierzy w określonych odsunięciach od linii działki i narysowanie linii dla każdego połączenia usług prostopadłego do głównego systemu dystrybucji.
Misja wykonana!
Zmiana nazw konstrukcji sieci rurociągów w kolejności opartej na pikietażu linii trasowania.
Jeśli nie zdarzyło Ci się jeszcze pracować z listami, skorzystaj z sekcji .
Jeśli nie znasz jeszcze Odtwarzacza Dynamo Player, skorzystaj z sekcji .
Misja wykonana!
Wygląda na to, że wraz z każdym uruchomieniem wykresu tekst zostaje usunięty i ponownie utworzony. W rzeczywistości położenie tekstu jest modyfikowane w zależności od wybranego okręgu. To ten sam tekst — tylko w innym miejscu. Aby za każdym razem tworzyć nowy tekst, należy zmodyfikować ustawienia wiązania obiektów dodatku Dynamo, tak aby nie były zachowywane żadne dane powiązań (patrz poniżej).
Jeśli nie znasz jeszcze Odtwarzacza Dynamo Player, skorzystaj z sekcji .
Wygenerowanie za pomocą bloku profilu pojazdu brył 3D obwiedni prześwitu wzdłuż korytarza.
Jeśli pierwszy raz masz do czynienia z układami współrzędnych, skorzystaj z sekcji .
Jeśli pierwszy raz masz do czynienia ze skratowaniem węzłów, skorzystaj z sekcji .
Jeśli nie znasz jeszcze Odtwarzacza Dynamo Player, skorzystaj z sekcji .
Misja wykonana!
Umieszczenie odniesień do bloków słupów oświetleniowych wzdłuż korytarza w wartościach pikiet określonych w pliku programu Excel.
Jeśli pierwszy raz masz do czynienia ze słownikami, skorzystaj z sekcji .
Jeśli pierwszy raz masz do czynienia z układami współrzędnych, skorzystaj z sekcji .
Jeśli pierwszy raz masz do czynienia z węzłami Code Block, skorzystaj z sekcji .
Więcej informacji na temat trybów wykonywania wykresów można znaleźć w sekcji .
Jeśli nie znasz jeszcze Odtwarzacza Dynamo Player, skorzystaj z sekcji .
Misja wykonana!
Utworzenie grupy punktów dla każdego niepowtarzalnego opisu punktu COGO.
Jeśli nie zdarzyło Ci się jeszcze pracować z listami, skorzystaj z sekcji .
Jeśli nie znasz jeszcze Odtwarzacza Dynamo Player, skorzystaj z sekcji .
Misja wykonana!
Pobieranie geometrii obwiedni wszystkich zlewni na rysunku.
Przed rozpoczęciem tworzenia wykresu i pisania kodu warto zapoznać się z dokumentacją interfejsu API programu Civil 3D i dowiedzieć się, co udostępnia ten interfejs API. W tym przypadku istnieje , która zwraca punkty obwiedni zlewni. Ta właściwość zwraca obiekt Point3dCollection
, którego dodatek Dynamo nie jest w stanie domyślnie obsługiwać. Oznacza to, że nie można utworzyć krzywej PolyCurve z obiektu Point3dCollection
, więc konieczne będzie przekształcenie wszystkiego w punkty dodatku Dynamo. Więcej informacji na ten temat podamy w dalszej części.
Zanim przejdziemy dalej, musimy krótko odnieść się do ważnego pojęcia. W sekcji omówiono powiązania obiektów i obiektów programu Civil (CivilObject). Bardziej szczegółowo można powiedzieć, że obiekt Dynamo jest opakowaniem dla elementu programu AutoCAD. Podobnie obiekt programu Civil w dodatku Dynamo (CivilObject) jest opakowaniem dla elementu programu Civil 3D. Można „odpakować” obiekt, uzyskując dostęp do jego właściwości InternalDBObject
lub InternalObjectId
.
Typ dodatku Dynamo | Opakowania |
---|
Misja wykonana!
Więcej informacji na temat tego przejścia i uaktualniania starszych skryptów można znaleźć w . Aby nadal używać mechanizmu IronPython, wystarczy zainstalować pakiet DynamoIronPython2.7 za pomocą Menedżera pakietów Dynamo.
2013
2014
2015
2016
2017
2018
2019
2020+
2.1.0 — program Revit od wersji 2020 zawiera teraz dodatek Dynamo, który jest aktualizowany razem z programem Revit.
Nie dotyczy
2024.1
2.18
2024
2.17
Aktualizacja interfejsu użytkownika Odtwarzacza Dynamo
2023.2
2.15
2023
2.13
Aktualizacja interfejsu użytkownika dodatku Dynamo
2022.1
2.12
Dodano ustawienia przechowywania danych wiązania obiektów
Nowe węzły do sterowania wiązaniem obiektów
2022
2.10
Uwzględnienie w instalacji głównej programu Civil 3D
Przejście z IronPython na Python.NET
2021
2,5
2020.2
2,4
2020 Update 2
2,4
Dodano nowe węzły
2020.1
2,2
2020
2,1
Wersja początkowa
Obiekt Autodesk.AutoCAD.DynamoNodes.Object | Element Autodesk.AutoCAD.DatabaseServices.Entity |
CivilObject Autodesk.Civil.DynamoNodes.CivilObject | Element Autodesk.Civil.DatabaseServices.Entity |
W tej części przedstawiono serię lekcji poświęconych tworzeniu geometrii za pomocą języka DesignScript. Aby je przerobić, kopiuj kolejno przykładowy kod DesignScript do bloków kodu Dynamo.
Logo/obraz
pomieszczenia
Zaprezentowaliśmy, jak używać skryptów w języku Python w dodatku Dynamo. Przyjrzyjmy się teraz połączeniu bibliotek programu Revit w środowisku skryptowym. Za pomocą czterech pierwszych wierszy bloku kodu poniżej zaimportowaliśmy węzły podstawowe dodatku Dynamo i standardowe elementy języka Python. Aby zaimportować węzły programu Revit, elementy programu Revit oraz menedżera dokumentów programu Revit, wystarczy tylko dodać kilka innych wierszy:
Zapewnia to dostęp do interfejsu API programu Revit i obsługę skryptów niestandardowych dla dowolnego zadania programu Revit. Połączenie programowania wizualnego z obsługą skryptów z użyciem interfejsu API programu Revit znacznie usprawnia współpracę i opracowywanie narzędzi. Na przykład menedżer BIM i projektant schematów mogą współpracować na tym samym wykresem. W ramach tej współpracy mogą poprawić projekt i realizację modelu.
Zadaniem projektu Dynamo jest poszerzenie zakresu wdrożeń na platformach. W miarę dodawania do wykazu dodatku Dynamo kolejnych programów użytkownicy uzyskują dostęp do interfejsów API dla konkretnych platform ze środowiska obsługi skryptów w języku Python. Mimo że w tej sekcji analizujemy program Revit, przewidujemy przygotowanie w przyszłości kolejnych rozdziałów, które będą zawierać kompleksowe samouczki dotyczące tworzenia skryptów na innych platformach. Ponadto dostępnych jest teraz wiele bibliotek IronPython, które można importować do dodatku Dynamo.
Poniższe przykłady ilustrują sposoby implementowania operacji specyficznych dla programu Revit z dodatku Dynamo za pomocą języka Python. Aby zapoznać się z bardziej szczegółowym omówieniem powiązania języka Python z dodatkiem Dynamo i programem Revit, zobacz stronę wiki dodatku Dynamo. Innym przydatnym zasobem dla języka Python i programu Revit jest projekt Revit Python Shell.
Utwórz nowy projekt programu Revit.
Pobierz plik przykładowy, klikając poniższe łącze.
Pełna lista plików przykładowych znajduje się w załączniku.
W tych ćwiczeniach omówimy podstawowe skrypty w języku Python w dodatku Dynamo dla programu Revit. W tym ćwiczeniu zostanie omówione postępowanie z plikami i elementami programu Revit oraz komunikacja między programem Revit i dodatkiem Dynamo.
Jest to oczywista metoda pobierania pozycji doc, uiapp i app pliku programu Revit połączonego z sesją dodatku Dynamo. Programiści, którzy już wcześniej pracowali w interfejsie API programu Revit, mogą zauważyć te elementy na liście obserwowanych. Jeśli te elementy nie wyglądają znajomo, nie ma problemu. W ćwiczeniach poniżej będziemy korzystać z innych przykładów.
W ten sposób importujemy usługi programu Revit i pobieramy dane dokumentów w dodatku Dynamo.
Przyjrzyj się węzłowi Python w dodatku Dynamo. Można również skorzystać z kodu z poniższego materiału:
Pobierz plik przykładowy, klikając poniższe łącze.
Pełna lista plików przykładowych znajduje się w załączniku.
W tym ćwiczeniu utworzymy prostą krzywą modelu w programie Revit za pomocą węzła Dynamo w języku Python.
Rozpocznij od utworzenia nowej rodziny brył koncepcyjnych w programie Revit.
Otwórz folder Conceptual Mass i użyj pliku szablonu Metric Mass.rft.
W programie Revit użyj skrótu klawiaturowego un
, aby wywołać ustawienia jednostki projektu, a następnie zmień jednostkę długości na metry.
Uruchom dodatek Dynamo i utwórz zestaw węzłów na ilustracji poniżej. Najpierw utworzymy dwa punkty odniesienia w programie Revit z węzłów Dynamo.
Utwórz węzeł Code Block i nadaj mu wartość
"0;"
Podłącz tę wartość do węzła ReferencePoint.ByCoordinates dla wejść X, Y i Z.
Utwórz trzy suwaki o zakresach od -100 do 100 i kroku o wartości 1.
Połącz każdy suwak z węzłem ReferencePoint.ByCoordinates.
Dodaj węzeł Python do obszaru roboczego, kliknij przycisk „+” na węźle, aby dodać kolejne wejście, i podłącz dwa punkty odniesienia do każdego wejścia. Otwórz węzeł Python.
Przyjrzyj się węzłowi Python w dodatku Dynamo. Pełny kod podano poniżej.
System.Array: program Revit wymaga jako wejścia szyku systemowego (a nie listy języka Python). To jeden więcej wiersz kodu, ale zwracanie uwagi na typy argumentów ułatwia programowanie w języku Python w programie Revit.
W dodatku Dynamo utworzyliśmy za pomocą języka Python dwa punkty odniesienia z łączącą je linią. W następnym ćwiczeniu rozwiniemy to.
Pobierz plik przykładowy, klikając poniższe łącze.
Pełna lista plików przykładowych znajduje się w załączniku.
To ćwiczenie jest proste, ale pozwala wyjaśnić tematy łączenia danych i geometrii z programu Revit do dodatku Dynamo i odwrotnie. Zacznijmy od otwarcia pliku Revit-StructuralFraming.rvt. Po jego otwarciu uruchom dodatek Dynamo i otwórz plik Revit-StructuralFraming.dyn.
Ten plik programu Revit jest tak prosty, jak to tylko możliwe. Dwie krzywe odniesienia: jedna narysowana na poziomie 1, a druga na poziomie 2. Chcemy umieścić te krzywe w dodatku Dynamo i utrzymać aktywne połączenie.
W tym pliku znajduje się zestaw węzłów podłączonych do pięciu wejść węzła w języku Python.
Wybierz węzły elementów modelu: naciśnij przycisk wyboru dla każdego z nich i wybierz odpowiednią krzywą w programie Revit.
Code Block: za pomocą składni
0..1..#x;
, połącz suwak liczby całkowitej o zakresie od 0 do 20 z wejściem x. Ta opcja określa liczbę belek do narysowania między dwiema krzywymi.Typy ram konstrukcyjnych: z menu rozwijanego wybierzemy domyślną belkę W12x26.
Poziomy: wybierz „Poziom 1”.
Ten kod Python jest nieco gęściejszy, ale komentarze znajdujące się w kodzie oddają to, co się dzieje w tym procesie
W programie Revit mamy szyk belek obejmujący dwie krzywe jako elementy konstrukcyjne. Uwaga: nie jest to realistyczny przykład — elementy konstrukcyjne są używane jako przykład dla natywnych wystąpień programu Revit utworzonych z dodatku Dynamo.
Również w dodatku Dynamo można wyświetlić wyniki. Belki w węźle Watch3D odnoszą się do geometrii przywołanej z elementów programu Revit.
Warto zauważyć, że mamy ciągły proces przekształcania danych ze środowiska programu Revit do środowiska dodatku Dynamo. Podsumowując: oto przebieg tego procesu:
Wybierz element programu Revit
Przekształć element programu Revit w krzywą Dynamo
Podziel krzywą Dynamo na serię punktów Dynamo
Użyj punktów Dynamo między dwiema krzywymi, aby utworzyć linie Dynamo
Utwórz belki programu Revit przez odniesienie do linii Dynamo
Wygeneruj wyjściowe powierzchnie Dynamo przez zastosowanie zapytania do geometrii belek programu Revit
Może to wydawać się nieco skomplikowane, ale skrypt sprawia, że wystarczy edytować krzywą w programie Revit i ponownie uruchomić solwer (chociaż może być konieczne usunięcie poprzednich belek). Jest to spowodowane faktem, że umieszczamy belki za pomocą języka Python, przez co przerywamy powiązanie węzłów OOTB.
Po zaktualizowaniu krzywych odniesienia w programie Revit uzyskuje się nowy szyk belek.
W dodatku Dynamo można utworzyć tablicę elementów programu Revit z zachowaniem pełnej kontroli parametrycznej. Węzły programu Revit w dodatku Dynamo umożliwiają importowanie elementów z geometrii ogólnych do kategorii określonych typów (takich jak ściany czy stropy). W tej sekcji skoncentrujemy się na importowaniu elementów o elastycznych parametrach przy użyciu komponentów adaptacyjnych.
Komponent adaptacyjny to elastyczna kategoria rodzin, która jest przydatna do generowania elementów. Podczas tworzenia wystąpienia można utworzyć element złożony geometrycznie, który zależy od podstawowej lokalizacji punktów adaptacyjnych.
Poniżej przedstawiono przykład komponentu adaptacyjnego o trzech punktach w edytorze rodzin. Zostanie wygenerowana kratownica zależna od położenia poszczególnych punktów adaptacyjnych. W poniższym ćwiczeniu użyjemy tego komponentu, aby wygenerować serię kratownic wzdłuż fasady.
Komponent adaptacyjny stanowi dobry przykład wzorców postępowania w zakresie zgodności operacyjnej. Możemy utworzyć tablicę komponentów adaptacyjnych, definiując podstawowe punkty adaptacyjne. Następnie wystarczy przesłać te proste dane do innych programów, aby zawrzeć w nich całą geometrię. Na podobnych zasadach działa importowanie i eksportowanie w przypadku programów takich jak Excel.
Załóżmy, że doradca zajmujący się fasadą pyta o lokalizację kratownic, ale nie musi przetwarzać ich całej geometrii. Podczas przygotowań do produkcji doradca może sprawdzić lokalizację punktów adaptacyjnych, aby wygenerować geometrię w programie takim jak Inventor.
W poniższym przykładzie przygotujemy proces roboczy, który umożliwi uzyskanie dostępu do wszystkich tych danych podczas opracowywania definicji na potrzeby tworzenia elementów w programie Revit. Taki proces roboczy płynnie łączy etapy koncepcyjne, dokumentacji i produkcji. Proces jest inteligentny i efektywny, co gwarantuje spójność operacyjną.
W pierwszym ćwiczeniu poniżej omówimy sposób, w jaki dodatek Dynamo odnosi się do danych na potrzeby tworzenia elementów programu Revit. Aby wygenerować wiele komponentów adaptacyjnych, zdefiniujemy listę list, na której każda lista ma trzy punkty reprezentujące komponent adaptacyjny. Będziemy z tego korzystać podczas zarządzania strukturami danych w dodatku Dynamo.
Inną metodą importowania geometrii parametrycznej z dodatku Dynamo do programu Revit jest zastosowanie kształtów bezpośrednich. Element kształtu bezpośredniego i powiązane z nim klasy umożliwiają przechowywanie w dokumencie programu Revit kształtów geometrycznych, które utworzono w innym oprogramowaniu. Taka geometria może obejmować bryły zamknięte i siatki. Kształty bezpośrednie są przede wszystkim przeznaczone do importowania kształtów z innych formatów danych, takich jak IFC lub STEP, które nie zawierają informacji wystarczających do utworzenia kompletnego elementu programu Revit. Podobnie jak w przypadku procesu roboczego związanego z plikami IFC i STEP, kształty bezpośrednie dobrze działają w przypadku importowania geometrii utworzonych w dodatku Dynamo jako rzeczywistych elementów projektów do programu Revit.
W drugim ćwiczeniu omówimy importowanie geometrii z dodatku Dynamo jako kształtu bezpośredniego (DirectShape) do projektu programu Revit. Przy użyciu tej metody możemy przypisać kategorię, materiał i nazwę do importowanej geometrii — zachowując przy tym połączenie parametryczne z wykresem w programie Dynamo.
Pobierz plik przykładowy, klikając poniższe łącze.
Pełna lista plików przykładowych znajduje się w załączniku.
Jeśli zaczniemy tę sekcję przy użyciu przykładowego pliku lub będziemy kontynuować pracę z plikiem programu Revit z poprzedniej sekcji, otrzymamy tę samą bryłę w programie Revit.
Tak wygląda plik po otwarciu.
To jest system kratownic utworzony w dodatku Dynamo i połączony inteligentnie z bryłą programu Revit.
Użyliśmy węzłów „Select Model Element” i „Select Face”, a teraz wykonamy kolejny krok w hierarchii geometrii: użyjemy węzła „Select Edge”. Gdy moduł obliczeń dodatku Dynamo jest ustawiony do pracy automatycznej, wykres jest w sposób ciągły aktualizowany o zmiany wprowadzone w pliku programu Revit. Wybrana krawędź jest dynamicznie powiązana z topologią elementu programu Revit. O ile topologia* nie ulegnie zmianie, połączenie między programem Revit a dodatkiem Dynamo pozostanie aktywne.
Wybierz skrajną górną krzywą przeszklonej fasady. Biegnie ona przez całą długość budynku. W przypadku problemów z wybraniem krawędzi pamiętaj, aby ustalić zaznaczenie w programie Revit przez ustawienie wskaźnika na krawędzi i naciskanie klawisza Tab do momentu podświetlenia właściwej krawędzi.
Przy użyciu dwóch węzłów „Select Edge” wybierz każdą z krawędzi odpowiadających ścięciu na środku fasady.
Zrób to samo w przypadku dolnych krawędzi fasady w programie Revit.
Węzły Watch wskazują, że powstały linie w dodatku Dynamo. Są one automatycznie konwertowane na geometrię dodatku Dynamo, gdyż same krawędzie nie są elementami programu Revit. Te krzywe stanowią odniesienia, przy użyciu których utworzymy wystąpienia kratownic adaptacyjnych wzdłuż fasady.
*Aby zachować spójność topologii, odnosimy się do modelu, do którego nie dodano dodatkowych powierzchni ani krawędzi. Choć parametry mogą zmienić jego kształt, jego podstawowa konstrukcja nie ulega zmianie.
Najpierw musimy połączyć krzywe i scalić je w jedną listę. W ten sposób zgrupujemy krzywe, aby wykonywać operacje na geometrii.
Utwórz listę dwóch krzywych na środku fasady.
Połącz te krzywe w krzywą złożoną, łącząc komponent List.Create z węzłem Polycurve.ByJoinedCurves.
Utwórz listę dwóch krzywych na dole fasady.
Połącz te krzywe w krzywą złożoną, łącząc komponent List.Create z węzłem Polycurve.ByJoinedCurves.
Na koniec połącz trzy krzywe główne (linię i dwie krzywe złożone) w jedną listę.
Chcemy wykorzystać krzywą górną, która jest linią i reprezentuje całą długość fasady. Utworzymy wzdłuż tej linii płaszczyzny przecinające się z zestawem krzywych zgrupowanych na liście.
W węźle Code Block zdefiniuj zakres, używając składni:
0..1..#numberOfTrusses;
Połącz węzeł Integer Slider z wejściem węzła Code Block. Oczywiście odpowiada on liczbie kratownic. Od suwaka zależy liczba elementów w zakresie od *0 *do 1.
Połącz węzeł Code Block z wejściem param (parametr) węzła „Curve.PlaneAtParameter” i połącz górną krawędź z wejściem curve. Uzyskamy w ten sposób dziesięć płaszczyzn równomiernie rozłożonych wzdłuż całej fasady.
Płaszczyzna jest abstrakcyjną częścią geometrii, która reprezentuje nieskończoną przestrzeń dwuwymiarową. Płaszczyzny ułatwią nam tworzenie warstwic i przecięć potrzebnych w tym kroku.
Przy użyciu węzła Geometry.Intersect (ustaw opcję skratowania na iloczyn wektorowy) połącz węzeł Curve.PlaneAtParameter z wejściem entity węzła Geometry.Intersect. Połącz główny węzeł List.Create z wejściem geometry (geometria). W rzutni dodatku Dynamo widać teraz punkty reprezentujące przecięcia poszczególnych krzywych ze zdefiniowanymi płaszczyznami.
Dane wyjściowe stanowią listę list list. To zbyt wiele list na nasze potrzeby. Chcemy częściowo spłaszczyć tę strukturę. Musimy przejść o krok w dół na liście i spłaszczyć wynik. Aby to zrobić, użyjemy operacji List.Map, którą omówiono w rozdziale tego przewodnika Primer dotyczącym list.
Połącz węzeł Geometry.Intersect z wejściem listy węzła List.Map.
Połącz węzeł Flatten z wejściem f(x) węzła List.Map. W wyniku otrzymamy trzy listy, z których każda zawiera tyle elementów, ile jest kratownic.
Musimy zmienić te dane. Aby utworzyć wystąpienie kratownicy, potrzebna jest taka sama liczba punktów adaptacyjnych, jaką zdefiniowano w rodzinie. To jest komponent adaptacyjny o trzech punktach, dlatego zamiast trzech list po 10 elementów (liczba kratownic) potrzebujemy 10 list po trzy elementy. W ten sposób możemy utworzyć 10 komponentów adaptacyjnych.
Połącz węzeł List.Map z węzłem List.Transpose. Teraz otrzymaliśmy oczekiwane dane wyjściowe.
Aby sprawdzić, czy dane są prawidłowe, dodaj węzeł Polygon.ByPoints do obszaru projektowania i porównaj wartości z podglądem dodatku Dynamo.
Komponenty adaptacyjne umieścimy w tablicy w taki sam sposób jak podczas tworzenia wielokątów.
Dodaj do obszaru projektowania węzeł AdaptiveComponent.ByPoints i połącz węzeł List.Transpose z jego wejściem points (punkty).
Przy użyciu węzła Family Types wybierz rodzinę „AdaptiveTruss” i połącz ją z wejściem FamilyType węzła AdaptiveComponent.ByPoints.
W programie Revit powstało dziesięć kratownic równomiernie rozłożonych wzdłuż fasady.
Aby wypróbować możliwości wykresu, zwiększymy liczbę kratownic (numberOfTrusses) do 30 przy użyciu suwaka. Powstaje wiele kratownic. Nie jest to realistyczne, ale wiemy, że działa połączenie parametryczne. Po zweryfikowaniu ustaw wartość numberOfTrusses na 15.
Jako ostatni test wybierzemy bryłę w programie Revit i zmienimy parametry wystąpienia, aby zmodyfikować kształt budynku i sprawdzić, czy kratownice za nim podążają. Aby aktualizacja była widoczna, ten wykres dodatku Dynamo musi być widoczny. Jego zamknięcie powoduje zerwanie połączenia.
Pobierz plik przykładowy, klikając poniższe łącze.
Pełna lista plików przykładowych znajduje się w załączniku.
Zacznij od otwarcia pliku przykładowego do tej lekcji: ARCH-DirectShape-BaseFile.rvt.
W widoku 3D widać bryłę budynku z poprzedniej lekcji.
Wzdłuż krawędzi atrium istnieje jedna krzywa odniesienia. Użyjemy jej jako odniesienia w dodatku Dynamo.
Wzdłuż przeciwnej krawędzi atrium znajduje się kolejna krzywa odniesienia. Również jej użyjemy w dodatku Dynamo.
Aby uzyskać odniesienie do tej geometrii w dodatku Dynamo, dla każdego elementu z programu Revit użyjemy węzła Select Model Element. Wybierz bryłę w programie Revit i zaimportuj geometrię do dodatku Dynamo przy użyciu węzła Element.Faces. Bryła powinna teraz być widoczna w podglądzie dodatku Dynamo.
Zaimportuj krzywą odniesienia do dodatku Dynamo, używając węzłów Select Model Element i CurveElement.Curve.
Zaimportuj drugą krzywą odniesienia do dodatku Dynamo, używając węzłów Select Model Element i CurveElement.Curve.
Oddalenie widoku wykresu przykładowego i przesunięcie w prawo pozwoli zobaczyć grupę węzłów. Są to operacje geometryczne, które generują konstrukcję kratownic dachu widoczną w podglądzie programu Dynamo. Te węzły działają w oparciu o funkcję konwersji węzłów na kod omówioną w sekcji dotyczącej węzłów Code Block w tym przewodniku Primer.
Struktura zależy od trzech głównych parametrów: przesunięcia po przekątnej, ugięcia i promienia.
Powiększ wykres i przyjrzyj się jego parametrom. Możemy je dostosować, aby uzyskać różnorodną geometrię.
Po upuszczeniu na obszar projektowania węzła DirectShape.ByGeometry widzimy, że ma on cztery wejścia: geometry, category, material i name (geometria, kategoria, materiał i nazwa).
Geometria to bryła utworzona w części wykresu dotyczącej generowania geometrii.
Wejście kategorii można wybrać przy użyciu węzła rozwijanego Categories. W tym przypadku będzie to „Ramy konstrukcyjne”.
Wejście materiału można wybrać przy użyciu tablicy węzłów powyżej. W tym przypadku wystarczy ustawić opcję Domyślne.
Po uruchomieniu dodatku Dynamo wróciliśmy do programu Revit i zaimportowaliśmy geometrię do stropu naszego projektu. To jest element ramy konstrukcyjnej, a nie model ogólny. Połączenie parametryczne z dodatkiem Dynamo pozostaje zachowane.
W bloku kodu można tworzyć funkcje, a następnie można je ponownie wywoływać w innym miejscu w definicji dodatku Dynamo. Powoduje to utworzenie innej warstwy sterującej w pliku parametrycznym. Można to postrzegać jako wersję tekstową węzła niestandardowego. W tym przypadku „nadrzędny” blok kodu jest łatwo dostępny i może być umieszczony w dowolnym miejscu na wykresie. Nie są potrzebne żadne przewody.
Pierwszy wiersz zawiera słowo kluczowe „def”, następnie nazwę funkcji, a następnie nazwy danych wejściowych w nawiasach. Klamry definiują treść funkcji. Wartość jest zwracana za pomocą instrukcji „return =”. Bloki kodu, które definiują funkcję, nie mają portów wejściowych ani wyjściowych, ponieważ są wywoływane z innych bloków kodu.
Wywołaj funkcję w innym bloku kodu w tym samym pliku przez podanie nazwy i takiej samej liczby argumentów. Działa to tak jak w przypadku gotowych węzłów w bibliotece.
Pobierz plik przykładowy, klikając poniższe łącze.
Pełna lista plików przykładowych znajduje się w załączniku.
W tym ćwiczeniu zostanie utworzona ogólna definicja, która utworzy sfery z wejściowej listy punktów. Promień tych sfer zależy od właściwości Z każdego punktu.
Zacznijmy od przedziału liczbowego dziesięciu wartości z zakresu od 0 do 100. Podłącz je do węzłów Point.ByCoordinates, aby utworzyć linię przekątną.
Utwórz węzeł Code Block i wprowadź naszą definicję.
Użyj następujących wierszy kodu:
inputPt to nazwa, którą nadaliśmy reprezentacji punktów sterujących funkcją. Na razie funkcja niczego nie robi, ale w kolejnych krokach ją skonstruujemy.
Dodając elementy do funkcji Code Block, umieścimy komentarz i zmienną sphereRadius, która wysyła zapytanie o położenie Z każdego punktu. Pamiętaj, że inputPt.Z nie wymaga nawiasów jak metoda. Jest to zapytanie o właściwości istniejącego elementu, dlatego żadne dane wejściowe nie są konieczne:
Teraz przypomnijmy sobie funkcję, którą utworzyliśmy w innym węźle Code Block. Jeśli dwukrotnie klikniemy obszar roboczy, aby utworzyć nowy węzeł Code Block, i wpiszemy sphereB, dodatek Dynamo zasugeruje zdefiniowaną przez nas wcześniej funkcję sphereByZ. Funkcja została dodana do biblioteki intellisense. To przydatne.
Teraz wywołamy tę funkcję i utworzymy zmienną o nazwie Pt, aby podłączyć punkty utworzone w poprzednich krokach:
Wszystkie wyjścia mają wartości null. Dlaczego tak jest? W definicji funkcji obliczamy zmienną sphereRadius, ale nie zdefiniowaliśmy, co funkcja powinna zwracać na wyjściu. Możemy to naprawić w następnym kroku.
Ważnym krokiem jest zdefiniowanie wyjścia funkcji przez dodanie wiersza
return = sphereRadius;
do funkcji sphereByZ.Teraz na wyjściu węzła Code Block pojawiają się współrzędne Z każdego punktu.
Teraz utworzymy właściwe sfery, edytując funkcję nadrzędną.
Najpierw zdefiniujemy sferę za pomocą wiersza kodu:
sphere=Sphere.ByCenterPointRadius(inputPt,sphereRadius);
Następnie zmienimy zwracaną wartość na sphere zamiast sphereRadius:
return = sphere;
To pozwoli nam uzyskać kilka gigantycznych sfer w podglądzie Dynamo.
1. Aby zwiększyć rozmiar tych sfer, zaktualizuj wartość sphereRadius dodając dzielnik:
sphereRadius = inputPt.Z/20;
Teraz możemy dostrzec osobne sfery i zrozumieć związek między wartością promienia a wartością Z.
W węźle Point.ByCoordinates tworzymy siatkę punktów, zmieniając skratowanie z Shortest List na Cross Product. Funkcja sphereByZ nadal w pełni działa, dlatego wszystkie punkty tworzą sfery z promieniami na podstawie wartości Z.
Aby przetestować rozwiązanie, podłączymy oryginalną listę liczb do wejść X węzła Point.ByCoordinates. Mamy teraz sześcian sfer.
Uwaga: jeśli obliczenia na komputerze trwają długo, spróbuj zmienić #10 na wartość typu #5.
Pamiętaj, że utworzona przez nas funkcja sphereByZ to funkcja ogólna, więc możemy przywołać helisę z wcześniejszej lekcji i zastosować do niej tę funkcję.
Ostatni krok: sterowanie współczynnikiem promienia za pomocą parametru zdefiniowanego przez użytkownika. Aby to zrobić, należy utworzyć nowe wejście dla tej funkcji, a także zastąpić dzielnik 20 parametrem.
Zaktualizuj definicję funkcji sphereByZ do postaci:
Zaktualizuj podrzędne węzły Code Block, dodając do wejścia zmienną ratio:
sphereByZ(Pt,ratio);
. Podłącz suwak do nowo utworzonego wejścia węzła Code Block i zmieniaj rozmiar promieni na podstawie współczynnika promienia.
W nazwach węzłów w dodatku Dynamo można zauważyć wspólną cechę: w każdym węźle używana jest składnia „.” bez spacji. Jest tak dlatego, że tekst znajdujący się na górze każdego węzła odzwierciedla rzeczywistą składnię skryptów, a znak „.” (lub notacja kropkowa) oddziela element od metod, które możemy wywołać. W ten sposób można łatwo przekształcać skrypty wizualne w skrypty tekstowe.
Omawiając notację kropkową przez analogię, zobaczmy, co możemy zrobić z parametrycznym jabłkiem w dodatku Dynamo. Poniżej przedstawiono kilka metod, które zastosujemy do jabłka, zanim zdecydujemy się je zjeść. (Uwaga: to nie są rzeczywiste metody dodatku Dynamo):
Czytelne dla człowieka | Notacja kropkowa | Wynik |
---|---|---|
Można się nie zgodzić, ale wyniki w powyższej tabeli wskazują, że to bardzo smaczne jabłko. Możemy zastosować do niego funkcję Apple.eat() (Jabłko.zjeść).
Pamiętając o porównaniu z jabłkiem, przyjrzyjmy się węzłowi Point.ByCoordinates i zobaczmy, jak można utworzyć punkt za pomocą węzła Code Block.
Składnia Point.ByCoordinates(0,10);
w węźle Code Block daje taki sam wynik jak węzeł Point.ByCoordinates w dodatku Dynamo, z tą różnicą, że umożliwia utworzenie punktu za pomocą jednego węzła. Jest to bardziej wydajne niż łączenie oddzielnego węzła ze współrzędnymi „X” i „Y”.
Używając polecenia Point.ByCoordinates w węźle Code Block, określamy dane wejściowe w takiej samej kolejności jak w gotowym węźle: (X,Y).
Można wywołać dowolny zwykły węzeł w bibliotece za pomocą węzła Code Block, o ile nie jest to specjalny węzeł interfejsu użytkownika, pełniący szczególną funkcję w interfejsie użytkownika. Można na przykład wywołać węzeł Circle.ByCenterPointRadius, ale wywołanie węzła Watch 3D nie miałoby sensu.
Zwykłe węzły (stanowiące większość biblioteki) należą do trzech ogólnych typów. Warto zauważyć, że biblioteka jest uporządkowana zgodnie z tymi kategoriami. Metody, czyli węzły, tych trzech typów są traktowane inaczej po wywołaniu w bloku kodu.
Create — umożliwiają utworzenie (lub konstruowanie) elementu.
Action — umożliwiają wykonywanie operacji na elementach.
Query — umożliwiają pobranie właściwości istniejącego elementu.
Kategoria „Create” umożliwia tworzenie geometrii od podstaw. Wprowadzamy wartości w bloku kodu od lewej do prawej. Te dane wejściowe mają taką samą kolejność, jak elementy wejściowe węzła uporządkowane od góry do dołu.
Porównując węzeł Line.ByStartPointEndPoint i odpowiadającą mu składnię w węźle Code Block, otrzymujemy te same wyniki.
Określa operację wykonywaną na obiekcie danego typu. W dodatku Dynamo do wykonywania operacji na obiekcie używana jest notacja kropkowa, wspólna dla wielu języków kodowania. Po wpisaniu obiektu wpisz kropkę, a następnie nazwę operacji. Dane wejściowe metod typu Action są umieszczane w nawiasach, podobnie jak w przypadku metod typu Create, z tym że nie trzeba określać pierwszego elementu wejściowego widocznego w odpowiednim węźle. Zamiast tego należy określić element, na którym wykonywana jest operacja:
Węzeł Point.Add stanowi węzeł typu Action, dlatego składnia nieco się różni.
Dane wejściowe to (1) point (punkt) i (2) vektor (wektor), który ma być do niego dodany. W węźle Code Block nazwaliśmy ten punkt (obiekt) „pt”. Aby dodać wektor o nazwie „vec” do punktu „pt”, należy napisać pt.Add(vec), czyli: obiekt, kropka, operacja. Operacja Add ma tylko jeden element wejściowy, czyli wszystkie elementy wejściowe węzła Point.Add z wyjątkiem pierwszego. Pierwszym elementem wejściowym węzła Point.Add jest sam punkt.
Metody typu Query pobierają właściwość obiektu. Ponieważ sam obiekt jest elementem wejściowym, nie trzeba określać żadnych danych wejściowych. Nie są wymagane nawiasy.
Skratowanie w przypadku węzłów i bloków kodu nieco się różni. W przypadku węzłów użytkownik klika prawym przyciskiem myszy węzeł i wybiera opcję skratowania, którą chce zastosować. W bloku kodu użytkownik ma znacznie większą kontrolę nad strukturą danych. W krótkiej składni metody w węźle Code Block wykorzystuje się prowadnice replikacji do określenia, w jaki sposób połączyć w pary kilka jednowymiarowych list. Numery w nawiasach ostrych „<>” definiują hierarchię wynikowej listy zagnieżdżonej: <1>,<2>,<3> i tak dalej.
W tym przykładzie użyjemy krótkiej składni do zdefiniowania dwóch zakresów (więcej informacji na temat krótkiej składni przedstawiono w następnej sekcji tego rozdziału). Krótko mówiąc:
0..1;
odpowiada{0,1}
, a-3..-7
odpowiada{-3,-4,-5,-6,-7}
. W wyniku tej operacji zostaną zwrócone listy 2 wartości x i 5 wartości y. Jeśli nie użyjemy prowadnic replikacji z tymi niedopasowanymi listami, otrzymamy listę dwóch punktów, ponieważ tyle wynosi długość najkrótszej listy. Za pomocą prowadnic replikacji można znaleźć wszystkie możliwe kombinacje 2 i 5 współrzędnych (czyli iloczyn wektorowy).Użycie składni Point.ByCoordinates
(x_vals<1>,y_vals<2>);
umożliwia uzyskanie dwóch list, z których każda zawiera pięć elementów.Użycie składni Point.ByCoordinates
(x_vals<2>,y_vals<1>);
umożliwia uzyskanie pięciu list, z których każda zawiera dwa elementy.
Przy tym zapisie możemy także określić, która lista będzie dominująca: 2 listy po 5 elementów czy 5 list po 2 elementy. W tym przykładzie zmiana kolejności prowadnic replikacji powoduje, że wynikiem jest lista wierszy punktów lub lista kolumn punktów w siatce.
Chociaż przyzwyczajenie się do metod bloków kodu może wymagać trochę wysiłku, w dodatku Dynamo dostępna jest funkcja konwersji węzłów na kod, która to ułatwia. Aby użyć tej funkcji, wybierz szyk węzłów na wykresie dodatku Dynamo, kliknij prawym przyciskiem myszy obszar rysunku i wybierz opcję „Węzeł do kodowania”. Dodatek Dynamo połączy te węzły w blok kodu zawierający wszystkie dane wejściowe i wyjściowe. To nie tylko doskonałe narzędzie do poznawania bloków kodu, ale też sposób na uzyskanie bardziej wydajnych i parametrycznych wykresów dodatku Dynamo. Poniższe ćwiczenie wymaga użycia konwersji węzłów na kod, więc nie przegap tego.
Pobierz plik przykładowy, klikając poniższe łącze.
Pełna lista plików przykładowych znajduje się w załączniku.
Aby pokazać możliwości bloków kodu, przekształcimy istniejącą definicję pola atraktorowego w formę bloków kodu. Praca z istniejącą definicją pokazuje powiązania między blokiem kodu a skryptami wizualnymi i ułatwia naukę składni języka DesignScript.
Rozpocznij od odtworzenia definicji z powyższego rysunku (lub otwarcia pliku przykładowego).
Zwróć uwagę, że skratowanie węzła Point.ByCoordinates zostało ustawione na iloczyn wektorowy.
Każdy punkt na siatce jest przesunięty w górę w kierunku Z na podstawie odległości od punktu odniesienia.
Po odtworzeniu i pogrubieniu powierzchni w geometrii powstaje wypukłość zależna od odległości od punktu odniesienia.
Najpierw zdefiniujmy punkt odniesienia: Point.ByCoordinates
(x,y,0);
Użyjemy tej samej składni Point.ByCoordinates jak ta widoczna w górnej części węzła tworzącego punkt odniesienia.Zmienne x i y są wstawione do węzła Code Block, dzięki czemu można je dynamicznie aktualizować za pomocą suwaków.
Dodaj suwaki do wejść węzła Code Block mające zakres od –50 do 50. W ten sposób można objąć cały obszar domyślnej siatki dodatku Dynamo.
W drugim wierszu węzła Code Block zdefiniujemy skrót, który zastąpi węzeł sekwencji liczb:
coordsXY = (-50..50..#11);
Więcej informacji na ten temat podamy w następnej sekcji. Na razie wystarczy zauważyć, że ten skrót odpowiada węzłowi Number Sequence w skrypcie wizualnym.
Teraz chcemy utworzyć siatkę punktów na podstawie sekwencji coordsXY. W tym celu chcemy użyć składni Point.ByCoordinates, ale musimy też utworzyć iloczyn wektorowy listy w taki sam sposób, jak w skrypcie wizualnym. W tym celu należy wpisać wiersz:
gridPts = Point.ByCoordinates(coordsXY<1>,coordsXY<2>,0);
Nawiasy ostre oznaczają odniesienie do iloczynu wektorowego.W węźle Watch 3D widać, że na siatce dodatku Dynamo znajduje się siatka punktów.
Teraz trudniejsza część: chcemy przesunąć siatkę punktów w górę na podstawie ich odległości od punktu odniesienia. Najpierw nazwiemy nowy zestaw punktów transPts. Ponieważ przekształcenie jest operacją na istniejącym elemencie, zamiast
Geometry.Translate...
użyjemygridPts.Translate
.Odczytując węzeł na obszarze rysunku, widzimy, że zawiera on trzy elementy wejściowe. Geometria do przekształcenia jest już zadeklarowana, ponieważ wykonujemy operację na tym elemencie (za pomocą składni gridPts.Translate). Pozostałe dwie wartości wejściowe, direction i distance, wstawimy w nawiasach funkcji.
Kierunek jest łatwy do ustawienia — użyjemy składni
Vector.ZAxis()
do przesunięcia w pionie.Należy też obliczyć odległość między punktem odniesienia a każdym punktem siatki, dlatego wykonamy operację dotyczącą punktu odniesienia w ten sam sposób:
refPt.DistanceTo(gridPts)
Ostatni wiersz kodu pozwala uzyskać przekształcone punkty:
transPts=gridPts.Translate(Vector.ZAxis(),refPt.DistanceTo(gridPts));
Otrzymaliśmy siatkę punktów ze strukturą danych odpowiednią do utworzenia powierzchni NURBS. Konstruujemy powierzchnię, używając składni
srf = NurbsSurface.ByControlPoints(transPts);
Na koniec dodamy do powierzchni głębię, tworząc bryłę przy użyciu składni
solid = srf.Thicken(5);
W tym przypadku pogrubiliśmy powierzchnię o 5 jednostek w kodzie, ale zawsze możemy zadeklarować tę wartość jako zmienną (na przykład o nazwie thickness) i określać ją suwakiem.
Funkcja konwersji węzłów na kod umożliwia zautomatyzowanie całego ćwiczenia, które właśnie wykonaliśmy, jednym kliknięciem przycisku. Jest to nie tylko wydajny sposób tworzenia niestandardowych definicji i bloków kodu wielokrotnego użytku, ale również naprawdę przydatne narzędzie do nauki tworzenia skryptów w dodatku Dynamo:
Rozpocznij od istniejącego skryptu wizualnego z kroku 1. ćwiczenia. Wybierz wszystkie węzły, kliknij prawym przyciskiem myszy obszar rysunku i wybierz polecenie „Węzeł do kodowania”. To wystarczy.
W dodatku Dynamo została automatycznie utworzona tekstowa wersja wykresu graficznego, wraz ze skratowaniem i innymi elementami. Przetestuj tę funkcję na własnych skryptach wizualnych i wykorzystaj możliwości bloków kodu.
W węźle Code Block dostępnych jest kilka podstawowych metod o krótkiej składni, które znacznie ułatwiają zarządzanie danymi. Podstawy zostały szczegółowo omówione poniżej. Wyjaśniamy też, jak za pomocą tej krótkiej składni można tworzyć dane i stosować do nich zapytania.
Metoda definiowania zakresów i sekwencji może zostać zredukowana do krótkiej składni. Poniższa ilustracja przedstawia składnię „..”, która umożliwia definiowanie listy danych liczbowych za pomocą bloku kodu. Po zaznajomieniu się z tą notacją tworzenie danych liczbowych jest bardzo wydajnym procesem:
W tym przykładzie zakres liczb zostaje zastąpiony podstawową składnią węzła Code Block definiującą
beginning..end..step-size;
. Liczbowo będzie to:0..10..1;
Warto zauważyć, że składnia
0..10..1;
odpowiada0..10;
Wielkość kroku równa 1 jest domyślną wartością w krótkiej składni. Dlatego0..10;
daje sekwencję od 0 do 10 o kroku 1.Przykład Sequence jest podobny, ale do ustawienia 15 wartości na liście używamy znaku „#” zamiast listy do 15. W tym przypadku definiujemy:
beginning..#ofSteps..step-size:
Rzeczywista składnia dla tej sekwencji to0..#15..2
Używając znaku „#” z poprzedniego kroku, umieścimy go teraz w części „rozmiar-kroku” składni. Teraz mamy zakres liczb (Number Range) od początku „beginning” do końca „end” z ustalonym rozmiarem kroku „step-size”, co powoduje równomierne rozmieszczenie wartości między dwoma punktami:
beginning..end..#ofSteps
Tworzenie zakresów zaawansowanych pozwala na łatwe korzystanie z listy list. W poniższych przykładach wyodrębniamy zmienną z notacji zakresu głównego i tworzymy inny zakres tej listy.
1. Tworząc zakresy zagnieżdżone, porównaj notację z „#” z notacją bez tego znaku. Zastosowanie ma ta sama logika co w zakresach podstawowych, choć rozwiązanie jest nieco bardziej złożone.
2. Możemy zdefiniować zakres podrzędny w dowolnym miejscu w zakresie głównym i możemy też używać dwóch zakresów podrzędnych.
3. Sterując wartością „końca” w zakresie, tworzymy więcej zakresów o różnych długościach.
W ramach ćwiczenia logicznego porównaj dwie wersje krótkiej składni i spróbuj przeanalizować, w jaki sposób zakresy podrzędne i notacja # wpływają na wynik na wyjściu.
Poza tworzeniem list za pomocą krótkiej składni możemy również tworzyć listy na bieżąco. Te listy mogą zawierać szeroki zakres typów elementów i można stosować do nich zapytania (należy pamiętać, że listy to także obiekty). Podsumowując: blok kodu pozwala tworzyć listy i stosować zapytania o elementy z listy za pomocą nawiasów kwadratowych:
1. Szybko twórz listy za pomocą ciągów i stosuj do nich zapytania, korzystając z indeksu elementu.
2. Twórz listy ze zmiennymi i stosuj do nich zapytania za pomocą notacji krótkiej składni zakresu.
Zarządzanie z listami zagnieżdżonymi jest podobnym procesem. Pamiętaj o kolejności listy i o korzystaniu z wielu zestawów nawiasów kwadratowych:
1. Zdefiniuj listę list.
2. Zastosuj zapytanie do listy za pomocą notacji z jedną parą nawiasów kwadratowych.
3. Zastosuj zapytanie do elementu za pomocą notacji z dwiema parami nawiasów kwadratowych.
Pobierz plik przykładowy, klikając poniższe łącze.
Pełna lista plików przykładowych znajduje się w załączniku.
W tym ćwiczeniu przećwiczymy nowe umiejętności dotyczące krótkiej składni, aby utworzyć „jajowatą” powierzchnię zdefiniowaną przez zakresy i formuły. W trakcie ćwiczenia zwróć uwagę na to, w jaki sposób używane są blok kodu i istniejące węzły Dynamo: blok kodu jest używany do złożonej obsługi danych, natomiast węzły Dynamo są rozmieszczone wizualnie w celu zapewnienia czytelności definicji.
Rozpocznij od utworzenia powierzchni przez połączenie powyższych węzłów. Zamiast używać węzła number do zdefiniowania szerokości i długości, kliknij dwukrotnie obszar rysunku i wpisz 100;
w bloku kodu.
Zdefiniuj zakres od 0 do 1 z 50 podziałami, wpisując
0..1..#50
w węźle Code Block.Połącz ten zakres z węzłem Surface.PointAtParameter, który pobiera wartości u i v z zakresu od 0 do 1 na powierzchni. Pamiętaj, aby zmienić skratowanie na Iloczyn wektorowy, klikając prawym przyciskiem myszy węzeł Surface.PointAtParameter.
W tym kroku użyjemy pierwszej funkcji do przesunięcia siatki punktów w górę na osi Z. Ta siatka będzie sterować generowaną powierzchnią na podstawie funkcji źródłowej. Dodaj nowe węzły, jak pokazano na ilustracji poniżej
Zamiast używać węzła formuły, użyjemy węzła Code Block z wierszem:
(0..Math.Sin(x*360)..#50)*5;
. Krótkie objaśnienie: definiujemy zakres z formułą w jego wnętrzu. Ta formuła jest funkcją sinus. Funkcja sinus przyjmuje w dodatku Dynamo dane wejściowe w stopniach, więc aby uzyskać pełny kształt funkcji sinus, należy przemnożyć wartości x (jest to wejście zakresu od 0 do 1) przez 360. Następnie chcemy uzyskać taką samą liczbę podziałów, ile jest punktów siatki sterującej dla każdego wiersza, dlatego zdefiniujemy pięćdziesiąt podziałów podrzędnych za pomocą instrukcji #50. Na koniec: mnożnik 5 po prostu zwiększa amplitudę przekształcenia, dzięki czemu możemy zobaczyć efekt w podglądzie Dynamo.
Mimo że poprzedni węzeł Code Block działał dobrze, nie był całkowicie parametryczny. Chcemy dynamicznie sterować jego parametrami, dlatego zastąpimy wiersz z poprzedniego kroku wierszem
(0..Math.Sin(x*360*cycles)..#List.Count(x))*amp;
. Daje to możliwość zdefiniowania tych wartości na podstawie wejść.
Zmieniając suwaki (w zakresie od 0 do 10), otrzymujemy interesujące wyniki.
Transponując zakres liczb, odwrócimy kierunek fali kurtynowej:
transposeList = List.Transpose(sineList);
Po dodaniu wartości sineList i transposeList uzyskujemy zniekształconą „jajowatą” powierzchnię:
eggShellList = sineList+transposeList;
Zmienimy wartości suwaków określone poniżej, aby zmniejszyć zniekształcenia tworzone przez ten algorytm.
Na koniec zastosujmy zapytania do wyodrębnionych części danych za pomocą węzła Code Block. Aby ponownie wygenerować powierzchnię za pomocą określonego zakresu punktów, dodaj węzeł Code Block powyżej między węzłami Geometry.Translate i NurbsSurface.ByPoints. Będzie on zawierać wiersz tekstu: sineStrips[0..15..1];
. Spowoduje to wybranie pierwszych 16 wierszy punktów (spośród 50). Po ponownym utworzeniu powierzchni widać, że wygenerowaliśmy wyodrębnioną część siatki punktów.
W ostatnim kroku, aby uczynić ten węzeł Code Block bardziej parametrycznym, będziemy sterować zapytaniem za pomocą suwaka o zakresie od 0 do 1. W tym celu dodamy ten wiersz kodu:
sineStrips[0..((List.Count(sineStrips)-1)*u)];
. Może to wydawać się skomplikowane, ale ten wiersz kodu pozwala szybko przeskalować długość listy do mnożnika z zakresu od 0 do 1.
Wartość 0.53
na suwaku powoduje utworzenie powierzchni tuż za punktem środkowym siatki.
Zgodnie z oczekiwaniami wartość 1
na suwaku tworzy powierzchnię z pełnej siatki punktów.
Przyglądając się wykresowi wizualnemu, możemy wyróżnić bloki kodu i przejrzeć ich poszczególne funkcje.
1. Pierwszy węzeł Code Block zastępuje węzeł Numer.
2. Drugi węzeł Code Block zastępuje węzeł Number Range.
3. Trzeci węzeł Code Block zastępuje węzeł Formula (jak również węzły List.Transpose, List.Count i Number Range).
4. Czwarty węzeł Code Block stosuje zapytania do listy list, zastępując węzeł List.GetItemAtIndex.
Blok kodu jest wyjątkową funkcją w dodatku Dynamo, która dynamicznie łączy środowisko programowania wizualnego ze środowiskiem tekstowym. Blok kodu zapewnia dostęp do wszystkich węzłów Dynamo i umożliwia zdefiniowanie całego wykresu w jednym węźle. Ten rozdział należy przeczytać uważnie, ponieważ blok kodu jest podstawowym składnikiem dodatku Dynamo.
Dodatek Dynamo umożliwia tworzenie różnych złożonych form geometrycznych, ale geometryczne obiekty elementarne tworzą podstawę każdego projektu obliczeniowego: są wyrażone bezpośrednio w ostatecznej postaci projektowej lub służą jako rusztowanie, z których generowana jest bardziej złożona geometria.
Obiekt CoordinateSystem, choć nie jest właściwym fragmentem geometrii, jest ważnym narzędziem do tworzenia geometrii. Obiekt CoordinateSystem śledzi zarówno przekształcenia położenia i geometryczne, takie jak obrót, pion i skalowanie.
Utworzenie obiektu CoordinateSystem wyśrodkowanego w punkcie x = 0, y = 0 i z = 0 bez rotacji, skalowania ani przekształceń pionowych wymaga po prostu wywołania konstruktora tożsamości:
Obiekty CoordinateSystem z transformacjami geometrycznymi wykraczają poza zakres tego rozdziału, choć warto wspomnieć, że inny konstruktor umożliwia utworzenie układu współrzędnych w określonym punkcie: CoordinateSystem.ByOriginVectors:
Najprostszym geometrycznym obiektem elementarnym jest punkt (Point), reprezentujący położenie zero-wymiarowe w przestrzeni trójwymiarowej. Jak wspomniano wcześniej, istnieje kilka sposobów utworzenia punktu w konkretnym układzie współrzędnych: Point.ByCoordinates tworzy punkt o określonych współrzędnych x, y i z; Point.ByCartesianCoordinates tworzy punkt z określonymi współrzędnymi x, y i z w określonym układzie współrzędnych; Point.ByCylindricalCoordinates tworzy punkt leżący na walcu o danych promieniu, kącie obrotu i wysokości; a Point.BySphericalCoordinates tworzy punkt leżący na sferze o danych promieniu i dwóch kątach obrotu.
W tym przykładzie przedstawiono punkty utworzone w różnych układach współrzędnych:
Kolejnym obiektem elementarnym wyższego wymiaru w dodatku Dynamo jest segment linii reprezentujący nieskończoną liczbę punktów między dwoma punktami końcowymi. Linie można tworzyć przez jawne określenie dwóch punktów obwiedni za pomocą konstruktora Line.ByStartPointEndPoint lub przez określenie punktu początkowego, kierunku i długości w tym kierunku: Line.ByStartPointDirectionLength.
Dodatek Dynamo zawiera obiekty reprezentujące najbardziej podstawowe typy geometrycznych obiektów elementarnych w trzech wymiarach: prostopadłościany, tworzone za pomocą Cuboid.ByLengths; stożki tworzone za pomocą Cone.ByPointsRadius i Cone.ByPointsRadii; walce tworzone za pomocą Cylinder.ByRadiusHeight; oraz sfery tworzone za pomocą Sphere.ByCenterPointRadius.
Najprostszym obiektem geometrycznym w standardowej bibliotece geometrii dodatku Dynamo jest punkt. Cała geometria jest tworzona za pomocą specjalnych funkcji zwanych konstruktorami, które zwracają nowe wystąpienia danego typu geometrii. W dodatku Dynamo konstruktory zaczynają się od nazwy typu obiektu, w tym przypadku Point (punkt), a następnie podawana jest metoda konstrukcji. Aby utworzyć trójwymiarowy punkt określony przez współrzędne kartezjańskie x, y i z, użyj konstruktora ByCoordinates („na podstawie współrzędnych”):
Konstruktory w dodatku Dynamo są zazwyczaj oznaczone prefiksem „By”. Wywołanie takiej funkcji zwraca nowo utworzony obiekt danego typu. Nowo utworzony obiekt jest przechowywany w zmiennej o nazwie podanej po lewej stronie znaku równości.
Większość obiektów ma wiele różnych konstruktorów. Można na przykład użyć konstruktora BySphericalCoordinates, aby utworzyć punkt leżący na sferze, określony przez promień sfery, kąt pierwszego obrotu i kąt drugiego obrotu (określone w stopniach):
Punkty mogą być używane do tworzenia geometrii wyższych wymiarów, np. linii. Za pomocą konstruktora ByStartPointEndPoint można utworzyć obiekt linii między dwoma punktami:
Podobnie linie mogą być używane do tworzenia geometrii powierzchni wyższych wymiarów, na przykład za pomocą konstruktora Loft, który wykorzystuje szereg linii lub krzywych i interpoluje między nimi powierzchnię.
Także powierzchnie mogą być używane do tworzenia geometrii brył wyższych wymiarów, na przykład przez pogrubienie powierzchni o określoną odległość. Do wielu obiektów są dołączone funkcje zwane metodami, które umożliwiają programistom wykonywanie poleceń na tych konkretnych obiektach. Wspólne dla wszystkich elementów geometrii są metody Translate i Rotate, które odpowiednio przekształcają (przesuwają) i obracają geometrię o określoną wartość. Powierzchnie mają metodę Thicken, która pobiera pojedyncze dane wejściowe: liczbę określającą nową grubość powierzchni.
Polecenia Intersection mogą wyodrębniać geometrię niższych wymiarów z obiektów wyższych wymiarów. Ta wyodrębniona geometria niższych wymiarów może stanowić podstawę dla geometrii wyższych wymiarów w cyklicznym procesie tworzenia, wyodrębniania i ponownego tworzenia geometrii. W tym przykładzie używamy wygenerowanej bryły do utworzenia powierzchni, a następnie używamy tej powierzchni do utworzenia krzywej.
W projektach obliczeniowych krzywe i powierzchnie są często używane jako rusztowanie źródłowe do konstruowania kolejnej geometrii. Aby ta wczesna geometria mogła być używana jako fundament późniejszej geometrii, skrypt musi być w stanie wyodrębnić cechy, takie jak położenie i orientacja, z całej powierzchni obiektu. Zarówno krzywe, jak i powierzchnie obsługują to wyodrębnianie. Nazywa się to parametryzacją.
Wszystkie punkty na krzywej można uznać za mające niepowtarzalny parametr z zakresu od 0 do 1. Jeśli chcemy utworzyć krzywą NurbsCurve w oparciu o kilka punktów kontrolnych lub punktów interpolowanych, pierwszy punkt miałby parametr 0, a ostatni punkt — parametr 1. Nie można wcześniej ustalić, jaką dokładnie wartość ma parametr dowolnego z punktów pośrednich, co może wydawać się ograniczeniem, ale jest to nieco równoważone przez szereg funkcji narzędziowych. Powierzchnie mają podobną parametryzację jak krzywe, ale mają dwa parametry zamiast jednego: u i v. Jeśli zechcemy utworzyć powierzchnię z następującymi punktami:
p1 ma parametry u = 0 v = 0, natomiast p9 ma parametry u = 1 v = 1.
Parametryzacja nie jest szczególnie przydatna podczas określania punktów używanych do generowania krzywych. Jej głównym zastosowaniem jest określenie położeń punktów pośrednich generowanych przez konstruktory krzywych NurbsCurve i powierzchni NurbsSurface.
Krzywe mają metodę PointAtParameter, która przyjmuje pojedynczy argument podwójny z zakresu od 0 do 1 i zwraca obiekt punktu o tym parametrze. Na przykład ten skrypt wyszukuje punkty o parametrach 0, 0,1, 0,2, 0,3, 0,4, 0,5, 0,6, 0,7, 0,8, 0,9 i 1:
Podobnie w przypadku powierzchni istnieje metoda PointAtParameter, która pobiera dwa argumenty — parametry u i v generowanego punktu.
Wyodrębnianie poszczególnych punktów na krzywej i powierzchni może być przydatne, ale skrypty często wymagają znajomości konkretnych cech geometrycznych przy danym parametrze, na przykład określających, w jakim kierunku skierowana jest krzywa lub powierzchnia. Metoda CoordinateSystemAtParameter umożliwia nie tylko znalezienie położenia, ale również zorientowanego obiektu CoordinateSystem przy danym parametrze krzywej lub powierzchni. Na przykład poniższy skrypt wyodrębnia zorientowane obiekty CoordinateSystem wzdłuż obróconej powierzchni i używa orientacji obiektów CoordinateSystem do generowania linii, które są przylegające prostopadle do powierzchni:
Jak wspomniano wcześniej, parametryzacja nie zawsze jest jednorodna na całej długości krzywej lub powierzchni, co oznacza, że parametr 0,5 nie zawsze odpowiada punktowi środkowemu, a 0,25 nie zawsze odpowiada punktowi w jednej czwartej odległości wzdłuż krzywej lub powierzchni. Aby można było obejść to ograniczenie, krzywe mają dodatkowy zestaw poleceń parametryzacji, które umożliwiają znalezienie punktu na określonych długościach wzdłuż krzywej.
Wiele z dotychczasowych przykładów koncentrowało się na konstruowaniu geometrii wyższych wymiarów z obiektów niższych wymiarów. Metody przecięcia umożliwiają generowanie obiektów niższych wymiarów za pomocą geometrii wyższych wymiarów, natomiast polecenia ucinania i ucinania selektywnego umożliwiają skryptowi znaczne modyfikowanie form geometrycznych po ich utworzeniu.
Metoda Intersect jest zdefiniowana dla wszystkich elementów geometrii w dodatku Dynamo, co oznacza, że teoretycznie każdy element geometrii może zostać przecięty za pomocą dowolnego innego elementu geometrii. Naturalnie niektóre przecięcia są bez znaczenia, na przykład przecięcia z punktami, ponieważ obiekt wynikowy będzie zawsze punktem wejściowym. Pozostałe możliwe kombinacje przecięć między obiektami zostały przedstawione w poniższym zestawieniu. W poniższej tabeli przedstawiono wyniki różnych operacji przecięcia:
Poniższy bardzo prosty przykład przedstawia przecięcie płaszczyzny z powierzchnią NurbsSurface. To przecięcie generuje szyk NurbsCurve, który może być używany jak każdy inny obiekt NurbsCurve.
Metoda Trim jest bardzo podobna do metody Intersect pod tym względem, że jest zdefiniowana dla niemal każdego elementu geometrii. Jednak dla metody Trim istnieje znacznie więcej ograniczeń niż dla metody Intersect.
W przypadku metod Trim warto pamiętać o wymaganiu punktu „wyboru”, określającego, która geometria zostanie odrzucona, a które elementy zostaną zachowane. Dodatek Dynamo znajduje i odrzuca uciętą geometrię najbliżej wybranego punktu.
Niektóre obiekty geometrii mogą być tworzone przez jawne podanie współrzędnych x, y i z w przestrzeni trójwymiarowej. Jednak częściej geometria jest przesuwana do jej położenia końcowego za pomocą transformacji geometrycznych samego obiektu lub jego źródłowego obiektu CoordinateSystem.
Najprostszą transformacją geometryczną jest przekształcenie, które przesuwa obiekt o określoną liczbę jednostek w kierunkach x, y i z.
Mimo że wszystkie obiekty w dodatku Dynamo mogą być przekształcane przez dołączenie metody .Translate do końca nazwy obiektu, bardziej złożone transformacje wymagają przekształcenia obiektu z jednego źródłowego obiektu CoordinateSystem do nowego. Aby na przykład obrócić obiekt o 45 stopni wokół osi x, przekształcilibyśmy obiekt z jego istniejącego obiektu CoordinateSystem bez obrotu do obiektu CoordinateSystem, który został obrócony o 45 stopni wokół osi x za pomocą metody .Transform:
Poza przekształcaniem i obróceniem obiekty CoordinateSystem można również tworzyć skalowane i ścięte. Obiekt CoordinateSystem może być skalowany za pomocą metody .Scale:
Ścięte obiekty CoordinateSystem tworzy się przez przekazanie wektorów nieortogonalnych do konstruktora CoordinateSystem.
Skalowanie i ścinanie to względnie bardziej skomplikowane transformacje geometryczne niż obrót i przekształcenie, więc nie każdy obiekt Dynamo może je przejść. W poniższej tabeli przedstawiono ogólnie, które obiekty Dynamo mogą mieć niejednorodnie skalowane obiekty CoordinateSystem i ścięte obiekty CoordinateSystem.
Metody Intersect, Trim i SelectTrim są używane przede wszystkim na geometriach niższych wymiarów, takich jak punkty, krzywe i powierzchnie. Natomiast geometria brył ma dodatkowy zestaw metod do modyfikowania postaci po jej utworzeniu, zarówno przez odjęcie materiału w sposób podobny do zastosowania metody Trim, jak i przez połączenie elementów w celu utworzenia większej części.
Metoda Union pobiera dwa obiekty brył i tworzy pojedynczy obiekt bryły z przestrzeni objętej tymi dwoma obiektami. Przestrzeń wspólna między obiektami jest łączona w postać końcową. W tym przykładzie kula i prostopadłościan łączą się w pojedynczy kształt bryły złożonej z kuli i sześcianu:
Metoda Difference, podobnie jak metoda Trim, odejmuje zawartość bryły wejściowej od bryły bazowej. W tym przykładzie tworzymy małe wcięcie w sferze:
Metoda Intersect zwraca bryłę wspólną między dwiema bryłami wejściowymi. W poniższym przykładzie metodę Difference zmieniono na metodę Intersect, a wynikowa bryła to brakująca wcześniej wycięta pustka:
Dwuwymiarowym odpowiednikiem krzywej NurbsCurve jest powierzchnia NurbsSurface. Tak jak krzywą NurbsCurve o dowolnym kształcie powierzchnię NurbsSurface można skonstruować za pomocą dwóch podstawowych metod: wstawienie zestawu punktów bazowych i interpolacja przestrzeni między nimi w dodatku Dynamo oraz jawne określenie punktów kontrolnych powierzchni. Podobnie jak krzywe swobodne powierzchnie interpolowane są przydatne, gdy projektant dokładnie wie, jaki kształt musi przyjąć powierzchnia, lub jeśli projekt wymaga, aby powierzchnia przechodziła przez określone punkty. Z drugiej strony powierzchnie utworzone przez punkty kontrolne mogą być bardziej użyteczne w projektach z analizą różnych poziomów wygładzania.
Aby utworzyć powierzchnię interpolowaną, wystarczy wygenerować dwuwymiarową kolekcję punktów przybliżających kształt powierzchni. Kolekcja musi być prostokątna, czyli nieposzarpana. Metoda NurbsSurface.ByPoints tworzy powierzchnię z tych punktów.
Swobodne powierzchnie NurbsSurface można również tworzyć przez określenie źródłowych punktów kontrolnych powierzchni. Podobnie jak w przypadku krzywych NurbsCurve punkty kontrolne reprezentują czworokątną siatkę z prostymi segmentami, które w zależności od stopnia powierzchni są wygładzane do końcowej postaci powierzchni. Aby utworzyć powierzchnię NurbsSurface za pomocą punktów kontrolnych, należy przekazać dwa dodatkowe parametry dla metody NurbsSurface.ByPoints, wskazując stopnie krzywych źródłowych w obu kierunkach powierzchni.
Można zwiększyć stopień powierzchni NurbsSurface, aby zmienić wynikową geometrię powierzchni:
Powierzchnie mogą być tworzone nie tylko przez interpolację między punktami z zestawu wejściowego — mogą one być też tworzone przez interpolację między zestawem krzywych bazowych. Jest to nazywane wyciągnięciem złożonym. Krzywa wyciągnięta jest tworzona za pomocą konstruktora Surface.ByLoft z kolekcją krzywych wejściowych jako jedynym parametrem.
Powierzchnie obrotu są dodatkowym typem powierzchni tworzonym przez przeciągnięcie krzywej bazowej wokół osi środkowej. Jeśli powierzchnie interpolowane są dwuwymiarowym odpowiednikiem krzywych interpolowanych, powierzchnie obrotu są dwuwymiarowym odpowiednikiem okręgów i łuków.
Powierzchnie obrotu są określone przez krzywą bazową reprezentującą „krawędź” powierzchni; początek osi, punkt bazowy powierzchni; kierunek osi, „główny” kierunek środkowy; kąt początkowy przeciągnięcia; kąt końcowy przeciągnięcia. Są one używane jako dane wejściowe konstruktora Surface.Revolve.
W dodatku Dynamo 2.0 można określić domyślny szablon (.py extension)
, który ma być używany podczas otwierania okna języka Python po raz pierwszy. Od dawna proszono o dodanie tej funkcji, ponieważ przyspiesza ona korzystanie z języka Python w dodatku Dynamo. Dzięki możliwości użycia szablonu można przygotować domyślny import gotowy do użycia, gdy chcemy utworzyć skrypt niestandardowy w języku Python.
Położenie tego szablonu to APPDATA
dla instalacji dodatku Dynamo.
Zwykle jest to ścieżka ( %appdata%\Dynamo\Dynamo Core\{version}\ )
.
Aby korzystać z tej funkcji, należy dodać następujący wiersz w pliku DynamoSettings.xml
. (Edytuj w Notatniku)
Część <PythonTemplateFilePath />
można po prostu zastąpić następującą treścią:
Uwaga: zastąp element CURRENTUSER nazwą użytkownika
Następnie musimy utworzyć szablon z funkcjami, które mają być wbudowane. W tym przypadku osadźmy powiązane z programem Revit importy i niektóre inne typowe elementy podczas pracy z programem Revit.
Można rozpocząć od pustego dokumentu Notatnika i wkleić do niego następujący kod:
Po zakończeniu zapisz ten plik jako PythonTemplate.py
w lokalizacji APPDATA
.
_P_o zdefiniowaniu szablonu w języku Python dodatek Dynamo będzie go szukać po każdym umieszczeniu węzła w języku Python. Jeśli go nie znajdzie, okno będzie wyglądać jak domyślne okno języka Python.
Jeśli szablon w języku Python zostanie znaleziony (np. nasz szablon dotyczący programu Revit), zostaną wyświetlone wszystkie domyślne wbudowane elementy.
Dodatkowe informacje dotyczące tego wspaniałego dodatku (którego autorem jest Radu Gidei) można znaleźć tutaj. https://github.com/DynamoDS/Dynamo/pull/8122
Poniższe skrypty w języku Python generują szyki punktów dla kilku przykładów. Powinny zostać wklejone do węzła skryptu w języku Python w następujący sposób:
python_points_1
python_points_2
python_points_3
python_points_4
python_points_5
Język Python to powszechnie używany język programowania, którego popularność ma wiele wspólnego z jego stylem składni. Jest wysoce czytelny, co sprawia, że łatwiej jest się go nauczyć niż wielu innych języków. Język Python obsługuje moduły i pakiety. Można go osadzać w istniejących aplikacjach. Aby uzyskać informacje na temat rozpoczynania korzystania z języka Python, skorzystaj z zasobu (Pierwsze kroki) na stronie .
Przed tym rozdziałem w tym elementarzu omówiono sposób korzystania z zaawansowanych funkcji skryptów wizualnych dostępnych w dodatku Dynamo. Zrozumienie tego systemu jest ważnym wstępem do pracy nad niezawodnymi programami wizualnymi. Kiedy programy wizualne są używane w środowisku produkcyjnym, udostępniane współpracownikom oraz badane w celu usunięcia błędów lub zbadania ich ograniczeń, powstają dodatkowe problemy wymagające rozwiązania. Jeśli opracowany program będzie używany przez inne osoby lub zamierzasz go otworzyć za kilka miesięcy, jego układ graficzny i logika muszą być od razu czytelne. Dodatek Dynamo zawiera szereg narzędzi ułatwiających obsługę złożonych programów. W tym rozdziale wyjaśniono, kiedy należy ich używać.
Podczas pracy w programie Dynamo i testowania pomysłów wykres może szybko przybrać duży rozmiar. Choć uzyskanie działającego programu jest ważne, należy też pamiętać, że powinien on być możliwie prosty. Dzięki temu wykres będzie działać szybciej, w bardziej przewidywalny sposób, a przyszli użytkownicy łatwiej zrozumieją jego logikę. Poniżej opisano kilka metod poprawiania czytelności logiki wykresu.
Grupy umożliwiają tworzenie części o oddzielnych funkcjach podczas pracy nad programem.
Grupy umożliwiają przenoszenie dużych części programów z zachowaniem podziału na moduły i rozkładu.
Można zmienić kolor grupy, aby wyróżnić grupy realizujące różne działania (obsługujące dane wejściowe lub funkcje).
Grupy pozwalają rozpocząć porządkowanie wykresu w celu usprawnienia pracy nad węzłami niestandardowymi.
Kolory w tym programie wskazują przeznaczenie poszczególnych grup. Ta strategia pozwala wprowadzić hierarchię opracowywanych standardów graficznych (szablonów).
Grupa funkcji (niebieskie)
Grupa danych wejściowych (pomarańczowe)
Grupa skryptów (zielone)
Czasami przy użyciu węzła Code Block można szybko wpisać numer lub metodę węzła, zamiast wyszukiwać tę informację (Point.ByCoordinates, Number, String, Formula).
Węzły Code Block są przydatne, gdy trzeba zdefiniować funkcje niestandardowe w skrypcie DesignScript w celu ograniczenia liczby węzłów wykresu.
Bloki 1 i 2 realizują tę samą funkcję. Szybciej jest napisać kilka wierszy kodu niż wyszukiwać i dodawać poszczególne węzły. Blok kodu jest też krótszy.
Kod DesignScript w bloku kodu
Równoważny program w węzłach
Aby zmniejszyć złożoność wykresu, można przekonwertować węzły na kod. Kolekcja prostych węzłów zostanie przekształcona w jeden węzeł Code Block z odpowiadającym im kodem DesignScript.
Konwersja węzłów na kod pozwala** skondensować kod z zachowaniem czytelności programu**
Poniżej wymieniono zalety konwersji węzłów na kod:
Kod można łatwo skondensować w jeden komponent, który nadal jest dostępny do edycji.
Pozwala uprościć znaczną część wykresu.
Jest przydatna, gdy powstający miniprogram nie będzie często edytowany.
Ułatwia integrowanie elementów innych bloków kodu, na przykład funkcji.
Poniżej wymieniono wady konwersji węzłów na kod:
Nazwy ogólne pogarszają czytelność wykresu.
Utrudnia innym użytkownikom zrozumienie wykresu.
Nie można łatwo przywrócić wersji wizualnej programu.
Istniejący program
Blok kodu utworzony przez konwersję węzłów na kod
Funkcja List@Level umożliwia ograniczenie złożoności wykresu przez zastąpienie węzłów List.Map i List.Combine, które mogą zajmować dużo miejsca na obszarze projektowania.
Funkcja List@Level oferuje** szybszą metodę tworzenia logiki węzłów niż węzły List.Map/List.Combine**. Umożliwia ona uzyskiwanie dostępu do danych na każdym poziomie listy wprost z poziomu portu wejściowego węzła.
Można zweryfikować, ile wartości True z których list zwraca funkcja BoundingBox.Contains, aktywując funkcję List@Level dla wejścia „list” (lista) modułu CountTrue. Funkcja List@Level pozwala użytkownikowi określić, z jakiego poziomu danych wejściowych są pobierane dane. Korzystanie z funkcji List@Level jest elastyczne, efektywne i zalecane jako metoda skuteczniejsza niż stosowanie węzłów List.Map i List.Combine.
Liczenie wartości True na poziomie 2 listy
Liczenie wartości True na poziomie 3 listy
Oprócz uproszczenia i poprawienia efektywności wykresu należy pamiętać o jego czytelności graficznej. Choć staramy się, aby wykres był intuicyjny w oparciu o grupy logiczne, relacje między węzłami mogą nie być oczywiste. Czasami dodanie prostej notatki w grupie lub zmiana nazwy suwaka pozwala wyeliminować nieporozumienia, jakie powstają podczas przeglądania wykresu. Poniżej omówiono kilka sposobów zachowywania spójności graficznej w obrębie wykresu i pomiędzy wykresami.
Aby ograniczyć nakłady pracy po zakończeniu tworzenia wykresu, warto zadbać o czytelność układu węzłów przez ich częste wyrównywanie podczas tworzenia wykresu.
Jeśli inne osoby będą pracowały nad tym samym wykresem, należy zagwarantować płynny przepływ połączeń między węzłami przed dostarczeniem wykresu.
Aby w prosty sposób wyrównać wykres, można użyć funkcji Wyczyść układ węzłów, która robi to automatycznie (choć mniej dokładnie niż człowiek).
Nieuporządkowany wykres
Wyrównany wykres
Zmieniając nazwy danych wejściowych, można poprawić czytelność wykresu, szczególnie jeśli elementy połączone z wejściami znajdują się poza ekranem.
Należy ostrożnie podchodzić do zmian nazw węzłów innych niż wejściowe. Zamiast tego można utworzyć węzeł niestandardowy ze zbioru węzłów i zmienić jego nazwę. Pozwoli to wskazać, że ten węzeł zawiera coś innego.
Dane wejściowe modyfikacji powierzchni
Dane wejściowe parametrów architektonicznych
Dane wejściowe skryptu symulacji odwadniania
Aby zmienić nazwę węzła, kliknij ją prawym przyciskiem myszy i wybierz opcję „Zmień nazwę węzła”.
Dodaj notatkę, jeśli część wykresu wymaga wyjaśnienia prostym językiem, a węzeł tego nie wyraża.
Dodaj notatkę, jeśli zbiór lub grupa węzłów zawiera wiele elementów lub osiąga taką złożoność, że utrudnia szybkie zrozumienie programu.
Notatka opisująca część programu, która zwraca pierwotne odległości przekształcenia
Notatka opisująca kod odwzorowujący te wartości na falę sinusoidalną
Węzły obserwacyjne (Watch) i podglądy pozwalają podczas tworzenia programu** weryfikować, że ważne dane wyjściowe są zwracane zgodnie z oczekiwaniami**
Węzły Watch umożliwiają porównywanie:
pierwotnych odległości przekształcenia,
wartości przekazywanych przez równanie sinusoidy.
Jest bardzo prawdopodobne, że kiedyś inna osoba otworzy nasz program, nawet jeśli pracujemy niezależnie. Powinno wtedy być możliwe szybkie zrozumienie wymagań i wyników programu na podstawie jego wejść i wyjść. Jest to szczególnie istotne podczas programowania węzła niestandardowego, który zostanie udostępniony w społeczności Dynamo do użytku w cudzych programach. Te procedury pozwalają tworzyć niezawodne, gotowe do ponownego użycia programy i węzły.
Aby zagwarantować czytelność i skalowalność programu, należy używać jak najmniejszej liczby wejść i wyjść.
O ile to możliwe, należy rozważyć strukturę logiczną i opracować ogólną logikę algorytmu przed dodaniem jakichkolwiek węzłów w obszarze projektowania. Podczas opracowywania ogólnego algorytmu należy sprawdzić, które wejścia i wyjścia będą stosowane w skryptach.
Jeśli wykres powinien zawierać pewne opcje lub warunki, szybki dostęp do nich zapewniają ustawienia wstępne.
Ustawienia wstępne pozwalają też ograniczyć złożoność wykresu przez buforowanie określonych wartości suwaków, gdy czas działania wykresu jest długi.
Użyj węzła niestandardowego, jeśli program można umieścić w pojedynczym kontenerze.
Użyj węzła niestandardowego, jeśli część wykresu będzie często używana ponownie w innych programach.
Użyj węzła niestandardowego, jeśli pewne funkcje mają być udostępniane w społeczności Dynamo.
Umieszczenie całego programu przekształcającego punkty w węźle niestandardowym pozwala uzyskać niezawodny, unikalny i przenośny program, który jest o wiele łatwiejszy do zrozumienia. Odpowiednio nazwane porty wejściowe pomagają użytkownikom w zrozumieniu sposobu użycia węzła. Warto dodać opisy i podać wymagane typy poszczególnych wejść.
Istniejący program punktu przyciągania
Węzeł niestandardowy zawierający ten program — PointGrid
Tworząc szablony, można budować standardy graficzne obejmujące wszystkie wykresy. Spójność wizualna ułatwia współpracownikom zrozumienie wykresu.
W ramach szablonu można ustalić standardowe kolory i rozmiary czcionek grup, które ułatwiają klasyfikację typów procesów roboczych i działań na danych.
Tworząc szablon, można nawet określić standardowe etykiety, kolory lub różnice stylów między procesami roboczymi (dostępnymi dla użytkownika) a wewnętrznymi na wykresie.
Interfejs programu (elementy dostępne dla użytkownika) — nazwa projektu, suwaki danych wejściowych i importowana geometria.
Elementy wewnętrzne programu.
Kategorie kolorów grup (projekt ogólny, dane wejściowe, skrypty Python, importowana geometria).
Pobierz plik przykładowy, klikając poniższe łącze.
Pełna lista plików przykładowych znajduje się w załączniku.
Ustaliliśmy kilka wzorców postępowania, które teraz zastosujemy do utworzonego naprędce programu. Choć program poprawnie generuje dach, jego wykres jest równie złożony jak myśli autora. Nie jest w żaden sposób uporządkowany i nie zawiera opisu sposobu użycia. Stosując wzorce postępowania, uporządkujemy, opiszemy i przeanalizujemy ten program, tak aby inni użytkownicy wiedzieli, jak z niego korzystać.
Program działa, ale jego wykres nie jest uporządkowany.
Zaczniemy od określenia, jakie są dane i jaką geometrię zwraca program.
Zrozumienie najważniejszych zmian w danych jest kluczowe w celu ustalenia podziałów logicznych (podziału na moduły). Spróbuj zbadać resztę programu przy użyciu węzłów obserwacyjnych, aby ustalić podział na grupy przed kolejnym krokiem.
Ten węzeł Code Block zawierający równanie matematyczne wygląda na istotny element programu. Węzeł Watch wskazuje, że zwraca on listę odległości przekształcenia.
Przeznaczenie tego obszaru nie jest oczywiste. Rozkład wartości True na poziomie listy L2 uzyskanym z funkcji BoundingBox.Contains oraz użycie funkcji List.FilterByBoolMask wskazują, że próbkujemy część siatki punktów.
Teraz wiemy, co robią podstawowe części programu. Umieścimy je w grupach.
Grupy pomagają użytkownikom wizualnie odróżniać części programu.
Importowanie modelu 3D
Przekształcanie siatki punktów przy użyciu równania sinusoidy
Próbkowanie części siatki punktów
Tworzenie architektonicznej powierzchni dachu
Tworzenie szklanej ściany osłonowej
Po ustaleniu grup rozmieścimy węzły tak, aby wykres zawierał ciągły przepływ działań.
Ciągłość wizualna ułatwia użytkownikowi zrozumienie przepływu programu i domniemanych relacji między węzłami.
Program będzie czytelniejszy, gdy dodamy kolejną warstwę ulepszeń graficznych. Dodaj notatki, aby opisać działanie danej części programu. Nadaj niestandardowe nazwy danym wejściowym. Przypisz kolory różnym typom grup.
Te ulepszenia graficzne powiedzą użytkownikom więcej o działaniu programu. Różne kolory grup ułatwiają odróżnianie danych wejściowych od funkcji.
Notatki
Opisowe nazwy danych wejściowych
Zanim przystąpimy do kondensowania programu, musimy wybrać strategiczną lokalizację, w której zostanie wstawiony skrypt Python symulujący odwadnianie. Podłącz dane wyjściowe pierwszej skalowanej powierzchni dachu do odpowiedniego wejścia skryptu.
Podjęliśmy decyzję, że skrypt zostanie zintegrowany z programem w tym miejscu, tak aby symulację odwadniania było można uruchamiać na oryginalnej, pojedynczej powierzchni dachu. Ta powierzchnia nie jest objęta podglądem, ale dzięki temu nie musimy wybierać górnej powierzchni z fazowanej polipowierzchni.
Geometria źródłowa danych wejściowych skryptu
Węzeł Python
Suwaki danych wejściowych
Przełącznik wł./wył.
Teraz mamy potrzebne informacje, więc możemy uprościć wykres.
Skondensowanie kodu przy użyciu konwersji węzłów na kod i węzłów niestandardowych pozwoliło znacznie zmniejszyć rozmiar wykresu. Grupy generujące powierzchnię dachu i ściany zostały przekonwertowane na kod, ponieważ są specyficzne dla tego programu. Grupa przekształcenia punktów jest zawarta w węźle niestandardowym, gdyż może zostać użyta w innym programie. W pliku przykładowym utwórz własny węzeł niestandardowy z grupy przekształcenia punktów.
Węzeł niestandardowy, który będzie zawierał grupę „Przekształcenie siatki punktów”
Konwersja węzłów na kod w celu skondensowania grup „Tworzenie architektonicznej powierzchni dachu i ściany osłonowej”
W ostatnim kroku utwórz ustawienia wstępne przykładowych form dachu.
Przede wszystkim od tych danych wejściowych zależy forma dachu. Dzięki nim użytkownicy rozumieją potencjał programu.
Nasz program z widokami przy dwóch ustawieniach wstępnych.
Wzory odwodnienia dachu udostępniają użytkownikom widok analityczny poszczególnych ustawień wstępnych.
Skrypty tekstowe opracowywane środowisku wizualnym pozwalają na korzystanie z zaawansowanych, wizualnych powiązań przy użyciu języków DesignScript, Python i ZeroTouch (C#). Można dzięki nim udostępniać elementy takie jak suwaki danych wejściowych, umieszczać całe złożone operacje w skryptach DesignScript, a także korzystać z zaawansowanych narzędzi i bibliotek Python oraz C# — wszystko to w tym samym obszarze roboczym. Efektywne stosowanie tych strategii umożliwia dostosowywanie, poprawianie czytelności i zwiększanie wydajności programu. Poniżej zebrano wskazówki, które pomagają w pracy nad skryptami wizualnymi i tekstowymi.
Skrypty tekstowe pozwalają tworzyć relacje o wyższej złożoności niż programowanie wizualne, choć obie techniki mają wiele podobnych funkcji. Dzieje się tak, ponieważ węzły to w praktyce wstępnie spakowany kod. Prawdopodobnie można napisać cały program Dynamo w języku DesignScript lub Python. Stosujemy jednak skrypty wizualne, ponieważ interfejs oparty na węzłach i połączeniach między nimi pozwala w intuicyjny, graficzny sposób prezentować przepływ informacji. Wiedza o tym, kiedy skrypty tekstowe dają więcej możliwości niż wizualne, jest bardzo przydatna — ułatwia podjęcie decyzji, czy warto zrezygnować z intuicyjnej wizualizacji połączonych węzłów. Poniższe wskazówki pomagają określić, kiedy użyć skryptu i który język wybrać.
Zastosowania skryptów tekstowych:
Pętle
Rekursja
Dostęp do bibliotek zewnętrznych
Wybór języka:
Podczas tworzenia skryptów w dodatku Dynamo, który jako środowisko jest oparty na parametrach, warto stosować konstrukcje kodu dostosowane do platformy węzłów i połączeń, na której kod będzie działać. Węzeł zawierający skrypt tekstowy należy traktować jako każdy inny węzeł programu — obiekt zawierający określone wejścia, funkcję i oczekiwane dane wyjściowe. W ten sposób kod znajdujący się w węźle od początku zawiera kilka zmiennych, które może przetwarzać. Tak powstaje czysty system parametryczny. Poniższe wskazówki ułatwiają integrację kodu z programem wizualnym.
Identyfikacja zmiennych zewnętrznych:
Postaraj się określić parametry związane z danym problemem projektowym, aby utworzyć model bezpośrednio oparty na tych danych.
Zanim napiszesz kod, zidentyfikuj te zmienne:
Minimalny zestaw danych wejściowych
Zamierzone dane wyjściowe
Stałe
Wiele zmiennych jest znanych przed przystąpieniem do pisania kodu.
Powierzchnia, na której będziemy symulować opady deszczu.
Żądana liczba kropli deszczu (agentów).
Odległość, jaką mają przebywać krople deszczu.
Przełącznik między zejściem najbardziej stromą ścieżką a trawersem po powierzchni.
Węzeł Python zawierający odpowiednią liczbę wejść.
Blok kodu powodujący, że zwracane krzywe są niebieskie.
Projektowanie relacji wewnętrznych:
Parametry (zmienne) można edytować, aby zmienić te informacje lub wynik równania albo dane wyjściowe systemu.
Gdy elementy skryptu mają związek logiczny, warto zdefiniować je jako wzajemnie zależne funkcje. Dzięki temu modyfikacja jednego elementu spowoduje proporcjonalną aktualizację drugiego.
Należy ograniczyć liczbę wejść, udostępniając tylko najważniejsze parametry:
Jeśli zestaw parametrów można obliczyć na podstawie innych parametrów nadrzędnych, wystarczy udostępnić same parametry nadrzędne jako wejścia skryptu. Ułatwia to korzystanie ze skryptu, gdyż upraszcza jego interfejs.
Wejścia.
Zmienne wewnętrzne skryptu.
Pętla realizująca funkcję skryptu przy użyciu tych danych i zmiennych.
Wskazówka: warto zająć się całym procesem równie uważnie jak samym rozwiązaniem.
Gdy ten sam proces można opisać w skrypcie na różne sposoby, powielone reprezentacje z czasem zaczynają się różnić, co może znacznie utrudnić konserwację i analizę kodu, a nawet doprowadzić do jego wewnętrznej sprzeczności.
Reguła DRY („don't repeat yourself" — nie powtarzaj się) zaleca, aby każdy element informacji miał w systemie pojedynczą, jednoznaczną i ustaloną reprezentację:
Poprawne stosowanie tej reguły powoduje, że wszystkie powiązane elementy skryptu zmieniają się w przewidywalny, spójny sposób, a między niepowiązanymi elementami nie powstają żadne relacje logiczne.
Wskazówka: zanim powielisz elementy skryptu (na przykład stałą w powyższym przykładzie), zastanów się, czy można zamiast tego użyć połączenia z elementem źródłowym.
Z czasem kod staje się dłuższy i bardziej złożony, a jego ogólny zarys (główny algorytm) — nieczytelny. Coraz trudniej jest też sprawdzać, co i gdzie się dzieje, wykrywać błędy, integrować inny kod czy przypisywać zadania programistyczne. Aby uniknąć tych problemów, zalecane jest pisanie kodu w modułach. Taka strategia porządkowania polega na rozdzielaniu kodu na części wykonujące różne zadania. Poniżej przedstawiono wskazówki ułatwiające zarządzanie kodem przez stosowanie modułów.
Pisanie kodu w modułach:
Moduł jest to zgrupowany kod wykonujący określone zadanie, analogicznie do węzła Dynamo w przestrzeni roboczej.
Może to obejmować wszelkie zadania, które powinny być wizualnie oddzielone od sąsiadującego kodu (funkcje, klasy, grupy danych wejściowych czy importowane biblioteki).
Pisanie kodu w modułach pozwala korzystać z intuicyjnego, wizualnego mechanizmu węzłów, a jednocześnie uzyskiwać złożone relacje dostępne tylko za pośrednictwem skryptów.
Te pętle wywołują klasę o nazwie „agent”, którą zaprogramujemy w ramach ćwiczenia.
Moduł kodu definiujący punkt początkowy każdego agenta.
Moduł kodu aktualizujący agenta.
Moduł kodu rysujący ślad do ścieżki dla agenta.
Rozpoznawanie możliwości ponownego użycia kodu:
Jeśli okaże się, że kod wykonuje te same (lub bardzo podobne) działania w kilku miejscach, warto zebrać go w funkcję, którą będzie można wywoływać.
Funkcje zarządzające sterują przepływem programu i zawierają przede wszystkim wywołania funkcji roboczych, które wykonują zadania niskiego poziomu, takie jak przenoszenie danych między konstrukcjami.
Ten przykładowy kod tworzy kule o promieniach i kolorach zależnych od wartości Z punktów środkowych.
Zawiera dwie nadrzędne robocze funkcje: jedną tworzącą kule o zadanych promieniach i jedną wyświetlającą kolory zależnie od wartości Z punktów środkowych.
Nadrzędna funkcja zarządzająca łączy obie funkcje robocze. Jej wywołanie powoduje wywołanie obu zawartych w niej funkcji.
Wyświetlanie tylko tego, co powinno być widoczne:
Interfejs modułu określa, jakie elementy są podawane i wymagane przez moduł.
Po zdefiniowaniu interfejsów między jednostkami można oddzielnie pracować nad szczegółowym projektem każdej jednostki.
Rozdzielność i możliwość zastąpienia:
Moduły nie wiedzą nic o innych i nie zależą od nich.
Ogólne sposoby podziału na moduły:
Grupowanie kodu:
Funkcje:
Klasy:
Podczas pracy nad skryptami tekstowymi w dodatku Dynamo warto w sposób ciągły sprawdzać, czy tworzony kod odpowiada oczekiwaniom. Dzięki temu nieprzewidziane problemy, takie jak błędy składni, niezgodności logiczne, niedokładne wartości czy nieprawidłowe dane wyjściowe, są szybko wykrywane i rozwiązywane — nie pozostają ukryte do samego końca pracy. Skrypty tekstowe istnieją w węzłach na obszarze projektowania, dlatego są już zintegrowane z przepływem danym programu wizualnego. Ułatwia to ciągłe monitorowanie skryptu. Wystarczy przypisać mu oczekiwane dane wyjściowe, uruchomić program i sprawdzić wyjście skryptu przy użyciu węzła obserwacyjnego (Watch). Poniższe wskazówki ułatwiają badanie skryptów podczas ich tworzenia.
Ciągłe testowanie:
Zawsze po ukończeniu pracy nad grupą funkcji:
Sprawdź ogólny zarys kodu.
Przemyśl to krytycznie. Czy współpracownik zrozumie, co ten kod robi? Czy ten kod jest potrzebny? Czy tę funkcję można wykonać wydajniej? Czy powstają niepotrzebne duplikaty lub zależności?
Wykonaj krótki test, aby sprawdzić, czy zwracane dane mają sens.
Przypisz dane, które ostatnio przetwarzał skrypt, jako wyjściowe, tak aby węzeł zawsze generował odpowiednie dane w razie aktualizacji skryptu:
Sprawdź, czy wszystkie krawędzie bryły są zwracane jako krzywe do tworzenia ramki ograniczającej.
Sprawdź, czy liczniki wejściowe są prawidłowo konwertowane na zakresy.
Sprawdź, czy układ współrzędnych został poprawnie przeniesiony i obrócony w tej pętli.
Przewidywanie przypadków brzegowych:
Podczas pracy nad skryptem podaj minimalne i maksymalne wartości danych wejściowych (leżące w ich domenie), aby sprawdzić, czy program nadal działa w warunkach ekstremalnych.
Nawet jeśli program działa w takiej sytuacji, sprawdź czy zwraca niezamierzone wartości null, puste lub zero.
Czasami tylko przypadki brzegowe pozwalają wykryć błędy wskazujące na ukryty problem w skrypcie.
Po zbadaniu, co wywołało błąd, można zdecydować, czy należy rozwiązać go wewnętrznie, czy trzeba zmienić definicję domeny parametrów w celu jego uniknięcia.
Wskazówka: zawsze należy zakładać, że użytkownik użyje wszystkich kombinacji wszystkich wartości wejściowych, do których ma dostęp. Zapobiega to przykrym niespodziankom.
Debugowanie jest to proces usuwania błędów ze skryptu. Oprócz oczywistych błędów obejmuje to problemy z wydajnością i dokładnością, a także wszelkie niezamierzone skutki działania skryptu. Czasami usunięcie błędu wymaga tylko poprawienia pisowni nazwy zmiennej, ale niekiedy trzeba zmienić całą strukturę skryptu. W sytuacji idealnej ciągłe sprawdzanie skryptu podczas pracy nad nim pozwala wcześnie wykrywać problemy. Nie daje to jednak gwarancji braku błędów. Poniżej omówiono szereg z powyższych wzorców postępowania w sposób ułatwiający systematyczne usuwanie błędów.
Używanie podglądu:
Warto sprawdzać dane zwracane w różnych miejscach kodu, przypisując je do zmiennej wyjściowej (w sposób podobny do sprawdzania możliwości programu).
Pisanie zrozumiałych komentarzy:
Debugowanie modułu kodu jest o wiele łatwiejsze, gdy jasno opisano jego zamierzony wynik.
W normalnej sytuacji generuje to nadmiar komentarzy i pustych wierszy, ale podczas debugowania warto podzielić algorytm na łatwe w obsłudze fragmenty.
Wykorzystanie kodu modułowego:
Jako źródło problemu można wskazać określone moduły.
Po wykryciu wadliwego modułu rozwiązanie problemu staje się o wiele prostsze.
Gdy trzeba zmodyfikować program, można łatwiej zmienić kod umieszczony w modułach:
Nowe lub debugowane moduły można wstawić do istniejącego programu bez ryzyka modyfikacji reszty programu.
Geometria wejściowa zwraca ramkę ograniczającą większą niż ta geometria, co widać po przypisaniu zmiennych xDist i yDist jako wyjściowych.
Krzywe krawędzi geometrii wejściowej zwracają prawidłową ramkę ograniczającą z poprawnymi odległościami xDist i yDist.
Moduł kodu wstawiony w celu rozwiązania problemu z wartościami xDist i yDist.
Pobierz plik przykładowy, klikając poniższe łącze.
Pełna lista plików przykładowych znajduje się w załączniku.
Pamiętając o wzorcach postępowania pisania skryptów tekstowych, napiszemy skrypt symulujący deszcz. Zastosowaliśmy wzorce postępowania do zdezorganizowanego programu w ramach strategii dotyczących wykresu, ale praca nad skryptami tekstowymi jest trudniejsza. Relacje logiczne zdefiniowane w skryptach tekstowych nie są tak widoczne i często są ściśle powiązane ze skomplikowanym kodem. Skrypty tekstowe oferują zaawansowane możliwości, ale wymagają też więcej uwagi w organizacji. Przyjrzymy się wszystkim krokom i zastosujemy do nich wzorce postępowania.
Nasz skrypt wprowadził powierzchnię zdeformowaną przy użyciu punktu przyciągania.
Na samym początku musimy zaimportować wymagane biblioteki dodatku Dynamo. Zapewni to globalny dostęp do funkcji dodatku Dynamo w kodzie Python.
Tutaj należy zaimportować wszystkie biblioteki, których zamierzamy użyć.
Następnie musimy zdefiniować dane wejściowe i wyjściowe skryptu, które będą widoczne jako porty wejściowe węzła. Na tych zewnętrznych danych wejściowych opiera się nasz skrypt. Dzięki nim tworzymy środowisko parametryczne.
Musimy zdefiniować dane wejściowe odpowiadające zmiennym skryptu Python i określić oczekiwane dane wyjściowe:
Powierzchnia, po której chcemy wykonać zejście.
Liczba poruszających się agentów.
Maksymalna liczba kroków, jakie mogą wykonać agenty.
Przełącznik przejścia najkrótszą ścieżką w dół powierzchni lub jej trawersowania.
Identyfikatory wejść węzła Python odpowiadające danym wejściowym skryptu (IN[0], IN[1]).
Krzywe wyjściowe, które można wyświetlić w innym kolorze.
Teraz zastosujemy metodę modularności i utworzymy treść skryptu. Symulowanie najkrótszej ścieżki w dół powierzchni z wielu punktów początkowych to złożone zadanie, które będzie wymagało wielu funkcji. Zamiast wywoływać różne funkcje w całym skrypcie, możemy podzielić kod na moduły — zebrać je w jednej klasie, naszym agencie. Poszczególne funkcje tej klasy (modułu) można wywoływać z różnymi zmiennymi. Można też użyć ich ponownie w innym skrypcie.
Musimy zdefiniować klasę, która stanowi schemat agenta mającego przechodzić po powierzchni, przy każdym kroku wybierając najbardziej stromy kierunek:
Nazwa.
Atrybuty globalne, które mają wszystkie agenty.
Atrybuty wystąpienia, które są unikalne dla każdego agenta.
Funkcja wykonywania kroku.
Funkcja katalogowania położenia każdego kroku na liście śladów.
Zainicjujemy agenty, definiując ich położenie początkowe. Teraz warto sprawdzić skrypt i upewnić się, że klasa agenta działa.
Musimy utworzyć wystąpienia wszystkich agentów, które chcemy obserwować na ich drodze w dół powierzchni, a także zdefiniować ich atrybuty początkowe:
Nowa, pusta lista śladów.
Miejsce rozpoczęcia przemieszczania na powierzchni.
Przypisaliśmy listę agentów jako wyjście, aby sprawdzić, co skrypt zwraca w tym miejscu. Jest zwracana prawidłowa liczba agentów, ale musimy jeszcze raz sprawdzić skrypt później, aby zweryfikować zwracaną geometrię.
Aktualizowanie każdego agenta przy każdym kroku. Następnie musimy wprowadzić pętlę zagnieżdżoną, która dla każdego agenta przy każdym kroku aktualizuje i rejestruje jego położenie na liście śladów. Na każdym kroku musimy też upewnić się, że agent nie osiągnął punktu powierzchni, z którego nie może wykonać następnego kroku w dół. Jeśli ten warunek jest spełniony, kończymy podróż agenta.
Teraz nasze agenty są w pełni zaktualizowane. Zwrócimy reprezentującą je geometrię. Gdy wszystkie agenty osiągną limit podróży w dół lub maksymalną liczbę kroków, utworzymy krzywą złożoną łączącą wszystkie punkty na ich liście śladów i wygenerujemy wyjście zawierające ślady krzywych złożonych.
Nasz skrypt wykrywający najbardziej strome ścieżki.
Ustawienie wstępne symulujące padanie deszczu na oryginalną powierzchnię.
Zamiast wykrywania najbardziej stromej ścieżki, agenty można przełączyć w tryb trawersowania powierzchni.
Cały skrypt tekstowy Python.
Dlaczego w środowisku programowania wizualnego Dynamo warto używać programowania tekstowego? ma wiele zalet. Umożliwia tworzenie programów bez konieczności poznawania specjalnej składni w intuicyjnym interfejsie wizualnym. Jednak program wizualny może z czasem zawierać zbyt wiele elementów i nie działać zgodnie z założeniami. Na przykład język Python oferuje znacznie więcej dostępnych metod pisania instrukcji warunkowych (jeśli/to) i zapętlania. Język Python jest zaawansowanym narzędziem, które umożliwia rozszerzenie możliwości dodatku Dynamo i zastąpienie wielu węzłów kilkoma zwięzłymi liniami kodu.
Program wizualny:
Program tekstowy:
Podobnie jak bloki kodu węzły języka Python są interfejsem skryptowym w środowisku programowania wizualnego. Węzeł Python można znaleźć w bibliotece w obszarze Skrypt>Edytor>Skrypt w języku Python.
Dwukrotne kliknięcie węzła powoduje otwarcie edytora skryptów języka Python (można również kliknąć prawym przyciskiem myszy węzeł i wybrać polecenie Edytuj). Na górze jest wyświetlany tekst wstępny, który ma ułatwić odnoszenie się do potrzebnych bibliotek. Dane wejściowe są przechowywane w szyku IN. Wartości są zwracane do dodatku Dynamo przez przypisanie ich do zmiennej OUT
Metody obejmują konstruktory, takie jak ByCoordinates, akcje, takie jak Add, oraz zapytania, takie jak współrzędne X, Y i Z.
Pobierz plik przykładowy, klikając poniższe łącze.
Pełna lista plików przykładowych znajduje się w załączniku.
W tym przykładzie napiszemy skrypt w języku Python, który tworzy wzorce z modułu bryłowego, i zmienimy go w węzeł niestandardowy. Najpierw utworzymy moduł bryłowy za pomocą węzłów Dynamo.
Rectangle.ByWidthLength: utwórz prostokąt, który będzie podstawą bryły.
Surface.ByPatch: połącz prostokąt z wejściem „closedCurve”, aby utworzyć dolną powierzchnię.
Geometry.Translate: połącz prostokąt z wejściem „geometry”, aby przesunąć go w górę, używając węzła Code Block do określenia grubości bazowej bryły.
Polygon.Points: zastosuj zapytanie do przekształconego prostokąta w celu wyodrębnienia punktów narożnych.
Geometry.Translate: użyj węzła Code Block, aby utworzyć listę czterech wartości odpowiadających czterem punktom, przekształcając jeden narożnik bryły w górę.
Polygon.ByPoints: użyj przekształconych punktów, aby odtworzyć górny wielobok.
Surface.ByPatch: połącz wielobok, aby utworzyć górną powierzchnię.
Teraz gdy mamy górną i dolną powierzchnię, wyciągnijmy między dwoma profilami, aby utworzyć boki bryły.
List.Create: połącz dolny prostokąt i górny wielobok z wejściami indeksu.
Surface.ByLoft: wyciągnij dwa profile w celu utworzenia boków bryły.
List.Create: połącz górną, boczną i dolną powierzchnię z wejściami indeksu, aby utworzyć listę powierzchni.
Solid.ByJoinedSurfaces: połącz powierzchnie, aby utworzyć moduł bryły.
Po uzyskaniu bryły upuść węzeł skryptu w języku Python w obszarze roboczym.
Aby dodać kolejne wejścia do węzła, kliknij ikonę „+” na węźle. Nazwy wejść to IN[0], IN[1] itd., aby wskazać, że reprezentują one elementy na liście.
Zacznijmy od zdefiniowania wejść i wyjść. Kliknij dwukrotnie węzeł, aby otworzyć edytor języka Python. Zmodyfikuj kod w edytorze na podstawie poniższego kodu.
Ten kod będzie bardziej przejrzysty w trakcie dalszej analizy tego ćwiczenia. Następnie należy zastanowić się, jakie informacje są wymagane, aby ułożyć moduł bryłowy w szyku. Najpierw musimy znać wymiary bryły, aby określić odległość przekształcenia. Z powodu błędu ramki ograniczającej należy użyć geometrii krzywej krawędzi, aby utworzyć ramkę ograniczającą.
Przyjrzyj się węzłowi Python w dodatku Dynamo. Zauważ, że używamy tej samej składni, która jest używana w węzłach w dodatku Dynamo. Zapoznaj się z poniższym skomentowanym kodem.
Ponieważ będziemy zarówno przekształcać, jak i obracać moduły brył, użyjmy operacji Geometry.Transform. Z węzła Geometry.Transform wynika, że będziemy potrzebować źródłowego układu współrzędnych i docelowego układu współrzędnych do przekształcenia bryły. Źródłem jest kontekstowy układ współrzędnych bryły, natomiast elementem docelowym będzie inny układ współrzędnych dla każdego modułu ustawionego w szyku. Oznacza to, że należy utworzyć pętlę przez wartości x i y, aby przekształcić układ współrzędnych za każdym razem w inny sposób.
Kliknij przycisk Uruchom, a następnie Zapisz kod. Połącz węzeł w języku Python z istniejącym skryptem w następujący sposób.
Połącz dane wyjściowe z węzła Solid.ByJoinedSurfaces z pierwszym wejściem węzła Python i użyj węzła Code Block, aby zdefiniować pozostałe wejścia.
Utwórz węzeł Topology.Edges i użyj danych wyjściowych z węzła Python jako jego danych wejściowych.
Na koniec utwórz węzeł Edge.CurveGeometry i użyj danych wyjściowych z węzła Topology.Edges jako jego danych wejściowych.
Spróbuj zmienić wartość źródłową, aby utworzyć różne wzorce. Można również zmienić parametry samego modułu bryły w celu uzyskania różnych efektów.
Teraz po utworzeniu przydatnego skryptu w języku Python zapiszemy go jako węzeł niestandardowy. Wybierz węzeł skryptu w języku Python, kliknij prawym przyciskiem myszy obszar roboczy i wybierz opcję „Utwórz węzeł niestandardowy”.
Przypisz nazwę, opis i kategorię.
Spowoduje to otwarcie nowego obszaru roboczego, w którym będzie edytowany węzeł niestandardowy.
Wejścia Input: zmień nazwy wejść na bardziej opisowe i dodaj typy danych oraz wartości domyślne.
Wyjście Output: zmień nazwę węzła danych wyjściowych
Zapisz węzeł jako plik .dyf. Węzeł niestandardowy powinien odzwierciedlać wprowadzone zmiany.
Ta część przewodnika ma postać dziennika „wzorców postępowania”. Zaprezentowano w niej kilka strategii, które dzięki doświadczeniom i badaniom, uznano za najbardziej sprzyjające wysokiej jakości parametrycznym procesom roboczym. Dla projektantów i programistów miara jakości jest przede wszystkim związana z możliwościami obsługi, niezawodnością, funkcjonalnością i wydajnością narzędzi. Choć te wzorce postępowania zaprezentowano na konkretnych przykładach skryptów wizualnych lub tekstowych, te zasady mają zastosowanie do wszystkich środowisk programowania i można na nich opierać wiele obliczeniowych procesów roboczych.
Klasa | Niejednorodnie skalowany obiekt CoordinateSystem | Ścięty obiekt CoordinateSystem |
---|---|---|
Informacje o korzystaniu z grup można znaleźć w artykule .
Informacje o korzystaniu z węzłów Code Block można znaleźć w artykule .
Informacje o konwersji węzłów na kod można znaleźć w artykule .
Sposób korzystania z funkcji List@Level omówiono w artykule .
Informacje o wyrównywaniu węzłów można znaleźć w artykule .
Informacje o sposobie dodawania notatek można znaleźć w artykule .
Podczas tworzenia skryptu wizualnego ważne jest weryfikowanie, że zwracane dane są zgodne z oczekiwaniami. Nie każdy błąd lub problem powoduje natychmiastową awarię programu. Szczególnie wartości null i zerowe mogą generować błędy dopiero w innych, zależnych węzłach. Tę strategię omówiono również w kontekście skryptów tekstowych w artykule . Poniższa procedura pozwala zagwarantować, że zawsze powstają dane zgodne z oczekiwaniami.
Informacje o korzystaniu z węzła Watch można znaleźć w .
Informacje o korzystaniu z ustawień wstępnych można znaleźć w artykule .
Informacje o korzystaniu z węzłów niestandardowych można znaleźć w artykule .
zawierają listę funkcji wszystkich bibliotek dodatku Dynamo.
„Moduły” kodu z przykładu w artykule .
Debugowanie przykładowego pliku z artykułu .
Biblioteka Autodesk.DesignScript.Geometry umożliwia używanie zapisu kropkowego podobnego do bloków kodu (Code Block). Aby uzyskać więcej informacji na temat składni dodatku Dynamo, zapoznaj się z materiałem oraz . (Aby pobrać ten dokument PDF, kliknij prawym przyciskiem myszy łącze i wybierz opcję „Zapisz łącze jako...”). Wpisanie typu geometrii, takiego jak „Point.”, spowoduje pojawienie się listy metod tworzenia punktów i stosowania do nich zapytań.
Za pomocą: punkt
Krzywa
Płaszczyzna
Powierzchnia
Bryła
Na: krzywa
Tak
Nie
Nie
Nie
Nie
Wielobok
-
Nie
Tak
Nie
Nie
Powierzchnia
-
Tak
Tak
Tak
Tak
Wypełnienie
-
-
Tak
Tak
Tak
Łuk
Nie
Nie
Krzywa NurbsCurve
Tak
Tak
Powierzchnia NurbsSurface
Nie
Nie
Okrąg
Nie
Nie
Linia
Tak
Tak
Płaszczyzna
Nie
Nie
Punkt
Tak
Tak
Wielobok
Nie
Nie
Wypełnienie
Nie
Nie
Powierzchnia
Nie
Nie
Tekst
Nie
Nie
Pętle | Rekursja | Kondensowanie węzłów | Biblioteki zewnętrzne | Krótka składnia |
DesignScript | Tak | Tak | Tak | Nie | Tak |
Python | Tak | Tak | Częściowo | Tak | Nie |
ZeroTouch (C#) | Nie | Nie | Nie | Tak | Nie |
Typ danych
Standard dodatku Dynamo
Odpowiednik w węźle Code Block
Liczby
Ciągi
Sekwencje
Zakresy (przedziały)
Pobierz element o indeksie
Tworzenie listy
Scalanie ciągów
Instrukcje warunkowe
Węzły
Odpowiednik w węźle Code Block
Uwaga
Dowolny operator (+, &&, >=, Not itp.)
+, &&, >=, ! itp.
Uwaga: „Not” staje się „!”, ale węzeł nazywa się „Not”, aby odróżnić go od „Factorial”
Wartość logiczna True
true;
Uwaga: małe litera
Wartość logiczna False
false;
Uwaga: małe litera
Jakiego koloru jest to jabłko?
Apple.color (Jabłko.kolor)
red (czerwone)
Czy to jabłko jest dojrzałe?
Apple.isRipe (Jabłko.czyDojrzałe)
true (prawda)
Ile waży to jabłko?
Apple.weight (Jabłko.waga)
6 uncji
Skąd pochodzi to jabłko?
Apple.parent (Jabłko.elementNadrzędny)
tree (drzewo)
Co tworzy to jabłko?
Apple.children (Jabłko.elementyPodrzędne)
seeds (nasiona)
Czy to jabłko jest uprawiane lokalnie?
Apple.distanceFromOrchard (Jabłko.odległośćOdSadu)
60 mil
Z:
Powierzchnia
Łuk
Płaszczyzna
Bryła
Powierzchnia
Krzywa
Punkt
Punkt, krzywa
Powierzchnia
Krzywa
Punkt
Punkt
Punkt
Krzywa
Płaszczyzna
Krzywa
Punkt
Łuk
Krzywa
Bryła
Powierzchnia
Łuk
Łuk
Wypełnienie
Ta strona informacyjna stanowi rozszerzenie wzorców postępowania omówionych w strategiach dotyczących skryptów, zapewniając więcej szczegółów na temat bibliotek kodu, etykiet i stylów. Będziemy używać języka Python, aby zilustrować poniższe koncepcje, lecz te same zasady miałyby zastosowanie w języku Python i C# (Zerotouch), ale w innej składni.
Biblioteki standardowe są zewnętrzne wobec dodatku Dynamo i są obecne w językach programowania Python i C# (Zerotouch). Dodatek Dynamo zawiera również własny zestaw bibliotek bezpośrednio odpowiadających hierarchii węzłów, umożliwiając użytkownikowi tworzenie dowolnego kodu, który może zostać utworzony za pomocą węzłów i przewodów. Poniżej przedstawiono wskazówki na temat tego, do czego każda biblioteka Dynamo zapewnia dostęp i kiedy należy używać standardowej.
Biblioteki standardowe i biblioteki Dynamo
Biblioteki standardowe z języka Python i języka C# mogą być używane do tworzenia zaawansowanych struktur danych i przepływów w środowisku dodatku Dynamo.
Biblioteki Dynamo bezpośrednio odpowiadają hierarchii węzłów w celu tworzenia geometrii i innych obiektów Dynamo.
Biblioteki Dynamo
ProtoGeometry*
Funkcjonalność: łuk, ramka ograniczająca, okrąg, stożek, układ współrzędnych, prostopadłościan, krzywa, walec, krawędź, elipsa, łuk eliptyczny, powierzchnia, geometria, helisa, grupa indeksu, linia, siatka, krzywa nurbs, powierzchnia nurbs, płaszczyzna, punkt, wielobok, prostokąt, bryła, sfera, powierzchnia, topologia, T-splajn, UV, wektor, wierzchołek.
Sposób importowania: import Autodesk.DesignScript.Geometry
``
DSCoreNodes
Funkcjonalność: kolor, zakres kolorów 2D, data i godzina, przedział czasu, IO, formuła, logika, lista, matematyka, drzewo czwórkowe, ciąg, gwint.
Sposób importowania: import DSCore
Mozaikowatość
Funkcjonalność: powłoka wypukła, Delaunay, Woronoj.
Sposób importowania: import Tessellation
DSOffice
Funkcjonalność: Excel.
Sposób importowania: import DSOffice
*Uwaga: podczas używania obiektu ProtoGeometry za pomocą języka Python lub C# tworzone są obiekty niezarządzane, które wymagają ręcznego zarządzania pamięcią — więcej informacji znajduje się w poniższej sekcji: Obiekty niezarządzane.
Podczas tworzenia skryptów ciągle wykorzystujemy identyfikatory do oznaczania takich elementów, jak zmienne, typy, funkcje i inne elementy. Poprzez ten system symbolicznej notacji podczas tworzenia algorytmów można wygodnie korzystać z informacji poprzez etykiety — zwykle składające się z sekwencji znaków. Nazewnictwo odgrywa ważną rolę w pisaniu kodu, który jest czytelny i zrozumiały dla jego twórcy i dla innych. Poniżej przedstawiono kilka wskazówek, o których należy pamiętać podczas nazywania elementów w skrypcie:
Używanie skrótów jest dozwolone, ale należy je objaśniać za pomocą komentarzy:
Unikaj nadmiarowego etykietowania:
W nazwach zmiennych używaj logiki dodatniej zamiast logiki ujemnej:
Preferuj „notację odwrotną”:
Jest sensowniejsza pod względem strukturalnym.
Do skracania zbyt długich i często powtarzanych łańcuchów powinny być używane aliasy:
Stosowanie aliasów może szybko doprowadzić do bardzo mylących i niestandardowych programów.
Używaj tylko niezbędnych słów:
„Wszystko powinno zostać tak uproszczone, jak to tylko możliwe, ale nie bardziej” — Albert Einstein
Ogólnie rzecz biorąc, istnieje więcej niż jeden sposób na zaprogramowanie praktycznie wszystkiego, a zatem „osobisty styl” tworzenia skryptów jest wynikiem niezliczonych małych decyzji podejmowanych (lub nie) w całym procesie. Jednocześnie czytelność i możliwości konserwacji kodu są bezpośrednio wynikiem jego wewnętrznej spójności, a także przestrzegania ogólnych konwencji stylistycznych. Według ogólnej zasady kod, który wygląda tak samo w dwóch miejscach, powinien także działać tak samo. Poniżej przedstawiono kilka wskazówek dotyczących pisania przejrzystego i spójnego kodu.
Konwencje nazewnictwa: (wybierz jedną z poniższych konwencji dla każdego typu elementu w kodzie i trzymaj się jej).
Zmienne, funkcje, metody, pakiety, moduły:
lower_case_with_underscores
Klasy i wyjątki:
CapWords
Metody chronione i funkcje wewnętrzne:
_single_leading_underscore(self, ...)
Metody prywatne:
__double_leading_underscore(self, ...)
Stałe:
ALL_CAPS_WITH_UNDERSCORES
Wskazówka: unikaj zmiennych jednoliterowych (szczególnie l, O, I) z wyjątkiem w bardzo krótkich blokach, kiedy ich znaczenie jest wyraźnie widoczne z bezpośredniego kontekstu.
Używaj pustych wierszy:
Otaczaj definicje funkcji i klas najwyższego poziomu dwoma pustymi wierszami.
Definicje metod wewnątrz klas są otoczone pojedynczym pustym wierszem.
Dodatkowe puste wiersze mogą być używane (sporadycznie) do oddzielenia grup powiązanych funkcji.
Unikaj zbędnych odstępów:
Bezpośrednio wewnątrz nawiasów okrągłych, kwadratowych i klamrowych:
Bezpośrednio przed przecinkiem, średnikiem lub dwukropkiem:
Bezpośrednio przed nawiasem otwierającym, który rozpoczyna listę argumentów wywołania funkcji:
Bezpośrednio przed nawiasem otwierającym, który rozpoczyna indeksowanie lub fragmentowanie:
Zawsze otaczaj te operatory binarne pojedynczym odstępem po obu stronach:
Przestrzegaj ograniczeń długości wiersza:
Nie twórz wierszy dłuższych niż około 79 znaków.
Ograniczenie wymaganej szerokości okna edytora umożliwia otwarcie kilku plików jednocześnie obok siebie i dobrze sprawdza się podczas używania narzędzi weryfikacji kodu, które prezentują dwie wersje w sąsiednich kolumnach.
Długie wiersze można dzielić na wiele wierszy, ujmując wyrażenia w nawiasy:
Unikaj oczywistych i nadmiarowych komentarzy:
Czasami mniejsza liczba komentarzy zapewnia większą czytelność kodu. Zwłaszcza jeśli wymusza to używanie znaczących nazw symboli.
Przyjęcie dobrych nawyków kodowania zmniejsza zależność od komentarzy:
Wskazówka: komentarze informują „dlaczego”, kod informuje „jak”.
Sprawdź kod typu Open Source:
Projekty typu Open Source są wynikiem wspólnych wysiłków wielu programistów. W tych projektach trzeba utrzymywać wysoki poziom czytelności kodu, aby zespół mógł jak najsprawniej współpracować. Dlatego dobrze jest przeglądać kod źródłowy tych projektów, aby obserwować, co robią ci programiści.
Popraw konwencje:
Analizuj, czy dana konwencja dobrze sprawdza się w odniesieniu do konkretnych potrzeb.
Czy nie pogarsza funkcjonalności/wydajności?
Zapoznaj się z poniższymi stronami wiki, aby uzyskać wskazówki dotyczące pisania kodu C# dla narzędzia Zerotouch i rozwijania dodatku Dynamo:
Na tej stronie wiki opisano niektóre ogólne standardy kodowania służące do dokumentowania i testowania kodu: https://github.com/DynamoDS/Dynamo/wiki/Coding-Standards
Na tej stronie wiki opisano szczegółowo standardy nazewnictwa bibliotek, kategorii, nazw węzłów, nazw portów i skrótów: https://github.com/DynamoDS/Dynamo/wiki/Naming-Standards
Obiekty niezarządzane:
W przypadku używania biblioteki geometrii dodatku Dynamo (ProtoGeometry) z języka Python lub geometrii C# utworzone obiekty nie będą zarządzane przez maszynę wirtualną, a pamięć wielu z tych obiektów będzie musiała zostać wyczyszczona ręcznie. Aby wyczyścić natywne lub niezarządzane obiekty, można użyć metody Dispose lub słowa kluczowego using. Na tej stronie wiki przedstawiono omówienie: https://github.com/DynamoDS/Dynamo/wiki/Zero-Touch-Plugin-Development#dispose--using-statement.
Wystarczy usunąć zasoby niezarządzane, które nie są zwracane w wykresie ani do których nie są zapisywane odwołania. W pozostałej części tej sekcji określamy te obiekty jako geometrię pośrednią. Przykład tej klasy obiektów można zobaczyć w poniższym przykładzie kodu. Ta funkcja singleCube w języku C# (Zerotouch) zwraca pojedynczy sześcian, ale podczas wykonywania generuje 10000 dodatkowych sześcianów. Możemy udawać, że ta druga geometria została użyta jako pewnego rodzaju pośrednia geometria konstrukcji.
Ta funkcja Zerotouch najprawdopodobniej spowoduje awarię dodatku Dynamo. Jest tak dlatego, że utworzyliśmy 10 000 brył, ale tylko jedną z nich zapisaliśmy i tę właśnie zwróciliśmy. Zamiast tego powinniśmy usunąć wszystkie sześciany pośrednie z wyjątkiem tego, który zwracamy. Nie chcemy usuwać tego, który zwracamy, ponieważ zostanie on propagowany do wykresu i będzie używany przez inne węzły.
Kod stały może wyglądać następująco:
Ogólnie rzecz biorąc, konieczność usuwania występuje tylko w przypadku takiej geometrii, jak Surfaces
, Curves
i Solids
. Jednak najlepiej jest usuwać wszystkie typy geometrii (Vectors
, Points
, CoordinateSystems
).
Praca z procesem programowania wizualnego może być bardzo wydajna i twórcza, ale przepływ programu i kluczowe dane wejściowe użytkownika mogą bardzo szybko zostać przesłonięte przez złożoność i układ obszaru roboczego. Przyjrzyjmy się niektórym wzorcom postępowania dotyczącym zarządzania programem.
Po dodaniu więcej niż kilku węzłów do obszaru roboczego może zajść potrzeba przeorganizowania układu węzłów, aby zwiększyć czytelność całości. Po wybraniu więcej niż jednego węzła i kliknięciu prawym przyciskiem myszy obszaru roboczego w oknie podręcznym zostanie wyświetlone menu Dopasuj wybór z opcjami wyrównania i dystrybucji na osiach X i Y.
Wybierz więcej niż jeden węzeł
Kliknij prawym przyciskiem myszy obszar roboczy
Użyj opcji Dopasuj wybór
Po nabraniu pewnego doświadczenia użytkownik może „odczytywać” program wizualny, przeglądając nazwy węzłów i podążając za przepływem programu. W przypadku użytkowników na wszystkich poziomach zaawansowania zaleca się również umieszczanie etykiet i opisów w prostym języku. Dodatek Dynamo zawiera przeznaczony do tego celu węzeł Notes z edytowalnym polem tekstowym. Opisy można dodawać do obszaru roboczego na dwa sposoby:
Przejdź do menu Edycja > Utwórz notatkę
Użyj skrótu klawiaturowego Ctrl+W
Po dodaniu notatki do obszaru roboczego zostanie wyświetlone pole tekstowe umożliwiające edycję tekstu w notatce. Po utworzeniu notatki można ją edytować, klikając dwukrotnie lub klikając prawym przyciskiem myszy węzeł Note.
Gdy program wizualny stanie się duży, pomocne będzie zidentyfikowanie zawartych w nim większych kroków. Można wyróżnić większe kolekcje węzłów jako grupę, aby oznaczyć je etykietą z kolorowym prostokątem w tle i tytułem. Istnieją trzy sposoby utworzenia grupy z więcej niż jednym wybranym węzłem:
Przejdź do menu Edycja > Utwórz grupę
Użyj skrótu klawiaturowego Ctrl+G
Kliknij prawym przyciskiem myszy obszar roboczy i wybierz polecenie „Utwórz grupę”
Po utworzeniu grupy można edytować jej ustawienia, takie jak tytuł i kolor.
Wskazówka: używanie zarówno notatek, jak i grup jest skutecznym sposobem opisywania pliku i zwiększania jego czytelności.
Oto przykład programu z dodanymi notatkami i grupami:
Notatka: „Parametry siatki”
Notatka: „Punkty siatki”
Grupa: „Utwórz siatkę punktów”
Grupa: „Utwórz punkt przyciągania”
Notatka: „Kalibracja wartości odległości”
Notatka: „Zmienna siatka okręgów”
Dodatek Dynamo doskonale nadaje się do rozpoczęcia przygody z kodowaniem w świecie architektury, inżynierii i budownictwa. Niektóre z tych sekcji mogą Cię zainteresować — rozpocznij przygodę z kodowaniem:
W dodatku Dynamo istnieją dwa podstawowe sposoby tworzenia krzywych o dowolnych kształtach: określanie kolekcji punktów i interpolowanie gładkiej krzywej między nimi za pomocą dodatku Dynamo oraz metoda niższego poziomu polegająca na określeniu bazowych punktów kontrolnych krzywej o określonym stopniu. Krzywe interpolowane są przydatne, gdy projektant dokładnie wie, jaką postać powinna przyjąć linia, lub gdy projekt ma specyficzne ograniczenia dotyczące tego, przez co krzywa może i nie może przechodzić. Krzywe określone za pomocą punktów kontrolnych są w istocie serią segmentów linii prostej, które algorytm wygładza do końcowej postaci krzywej. Określenie krzywej za pomocą punktów sterujących może być przydatne w przypadku badania postaci krzywych o różnych stopniach wygładzenia lub gdy wymagana jest gładka ciągłość między segmentami krzywej.
Aby utworzyć krzywą interpolowaną, wystarczy przekazać kolekcję punktów do metody NurbsCurve.ByPoints.
Wygenerowana krzywa przecina każdy z punktów wejściowych, zaczynając i kończąc odpowiednio na pierwszym i ostatnim punkcie w kolekcji. Opcjonalny parametr okresowy pozwala utworzyć krzywą okresową, która jest zamknięta. Dodatek Dynamo automatycznie wypełni brakujący segment, dlatego powielony punkt końcowy (identyczny z punktem początkowym) nie jest potrzebny.
Krzywe NurbsCurve są generowane w ten sam sposób, przy czym punkty wejściowe reprezentują punkty końcowe segmentu linii prostej, a drugi parametr, nazywany stopniem, określa wielkość i typ wygładzania krzywej.* Krzywa stopnia 1. nie ma wygładzenia; to polilinia.
Krzywa stopnia 2. zostaje wygładzona w taki sposób, że przecina i jest styczna do punktu środkowego segmentów polilinii:
Dodatek Dynamo obsługuje krzywe NURBS (niejednorodne wymierne B-splajn) do 20. stopnia, a poniższy skrypt ilustruje wpływ zwiększającego się poziomu wygładzania na kształt krzywej:
Należy zwrócić uwagę, że musi istnieć co najmniej jeden punkt kontrolny więcej, niż wynosi stopień krzywej.
Inną zaletą tworzenia krzywych przez wierzchołki kontrolne jest możliwość utrzymania styczności między poszczególnymi segmentami krzywej. Odbywa się to przez wyodrębnienie kierunku między dwoma ostatnimi punktami kontrolnymi i kontynuowanie tego kierunku z dwoma pierwszymi punktami kontrolnymi kolejnej krzywej. W poniższym przykładzie tworzone są dwie oddzielne krzywe NURBS, które mimo to są gładkie jak jedna krzywa:
*Jest to bardzo uproszczony opis geometrii krzywej NURBS. Aby uzyskać dokładniejsze i bardziej szczegółowe omówienie, skorzystaj z dokumentacji w odniesieniach: Pottmann i inni, 2007 r.
Obiekty w projektach obliczeniowych rzadko są tworzone jawnie w końcowym położeniu i formie. Najczęściej są przekształcane, obracane i umieszczane w oparciu o istniejącą geometrię. Matematyka wektorowa służy jako rodzaj geometrycznego rusztowania pozwalającego nadać geometrii kierunek i orientację, jak również do konceptualizowania ruchów w przestrzeni 3D bez reprezentacji wizualnej.
Podstawowy wektor reprezentuje położenie w przestrzeni 3D i zwykle jest uważany za punkt końcowy strzałki od położenia (0, 0, 0) do położenia grotu. Wektory mogą być tworzone za pomocą konstruktora ByCoordinates po podaniu położenia x, y i z nowo utworzonego obiektu wektora. Należy zauważyć, że obiekty wektorów nie są obiektami geometrycznymi i nie pojawiają się w oknie dodatku Dynamo. Jednak w oknie konsoli można wyświetlić informacje o nowo utworzonym lub zmodyfikowanym wektorze:
Dla obiektów wektorów zdefiniowany jest zestaw operacji matematycznych umożliwiający dodawanie, odejmowanie, mnożenie i w inny sposób przenoszenie obiektów w przestrzeni 3D, podobnie jak w przypadku przesuwania rzeczywistych liczb w przestrzeni jednowymiarowej na oznaczonej liczbami linii.
Dodawanie wektorów jest zdefiniowane jako suma składników dwóch wektorów i może być traktowane jako wektor wynikowy, jeśli dwie składowe strzałki wektorów stykają się „grotem do końcówki”. Dodawanie wektorów odbywa się za pomocą metody Add i jest przedstawione za pomocą wykresu po lewej stronie.
Podobnie dwa obiekty wektorów można od siebie odjąć za pomocą metody Substract. Odejmowanie wektorów może być traktowane jako kierunek od pierwszego wektora do drugiego wektora.
Mnożenie wektorów może być traktowane jako przesuwanie punktu końcowego wektora w jego własnym kierunku z danym współczynnikiem skalowania.
Często podczas skalowania wektora wymagane jest uzyskanie długości wynikowego wektora dokładnie równej wielkości skalowanej. Można to łatwo osiągnąć przez najpierw znormalizowanie wektora, czyli ustawienie długości wektora równej dokładnie jeden.
c nadal wskazuje w tym samym kierunku co a (1, 2, 3), ale teraz ma długość dokładnie równą 5.
Istnieją dwie dodatkowe metody w matematyce wektorowej, które nie mają wyraźnych odpowiedników w matematyce jednowymiarowej: iloczyn wektorowy i iloczyn skalarny. Iloczyn wektorowy to metoda generowania wektora, który jest prostopadły (jest pod kątem 90 stopni) do dwóch istniejących wektorów. Na przykład wynikiem iloczynu wektorowego osi x i y jest oś z, chociaż dwa wektory wejściowe nie muszą być do siebie prostopadłe. Wektor będący wynikiem iloczynu wektorowego jest obliczany za pomocą metody Cross.
Dodatkowa, choć nieco bardziej zaawansowana funkcja matematyki wektorowej, to iloczyn skalarny. Iloczyn skalarny dwóch wektorów jest liczbą rzeczywistą (nie obiektem wektora), która odnosi się do, ale nie jest dokładnie kątem między dwoma wektorami. Jedną z przydatnych właściwości iloczynu skalarnego jest to, że ma on wartość 0 wtedy i tylko wtedy, gdy mnożone wektory są prostopadłe. Iloczyn skalarny jest obliczany za pomocą metody Dot.
Pakiety dodatku Dynamo to zestawy narzędzi opracowane przez strony trzecie w celu rozszerzenia podstawowej funkcjonalności dodatku Dynamo. Są one dostępne dla wszystkich i można je pobrać kliknięciem przycisku.
Aby uzyskać więcej informacji na temat rozpoczynania pracy z pakietami, zapoznaj się z sekcją Pakiety.
Oto lista najpopularniejszych pakietów, które pozwalają przenieść wykresy dodatku Dynamo for Civil 3D na wyższy poziom.
Civil 3D Toolkit to pakiet dodatku Dynamo for Civil 3D, który zapewnia znaczne ulepszenia funkcji dodatku Dynamo dzięki obszernemu zestawowi dodatkowych węzłów.
Camber to pakiet dodatku Dynamo for Civil 3D typu open source zawierający setki węzłów do pracy z etykietami, odnośnikami zewnętrznymi (xref), skrótami do danych, stylami i innymi elementami.
CivilConnection to pakiet dodatku Dynamo dla programu Revit typu open source, który umożliwia wymianę informacji między oprogramowaniem Civil 3D, Dynamo i Revit.
Arkance Systems Nodes to pakiet dodatku Dynamo for Civil 3D zawierający wiele różnych przydatnych węzłów do pracy z wymiarami, tabelami, widokami, sterowaniem wierceniem i innymi elementami.