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.
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
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 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.
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ń.