Pliki źródłowe dodatku DynamoRevit są również przechowywane w witrynie DynamoDS w serwisie GitHub dla programistów, którzy mogą współtworzyć dodatek i kompilować wersje beta. Kompilowanie dodatku DynamoRevit ze źródła zazwyczaj przebiega tak samo jak w przypadku dodatku Dynamo, z wyjątkiem kilku ważnych szczegółów:
Dodatek DynamoRevit odwołuje się do zespołów dodatku Dynamo, dlatego należy go utworzyć za pomocą zgodnych pakietów NuGet. Na przykład dodatek DynamoRevit 2.x nie zostanie wczytany do dodatku Dynamo 1.3.
Dodatek DynamoRevit jest powiązany z konkretną wersją programu Revit, na przykład: gałąź dodatku DynamoRevit 2018 powinna być uruchamiana w programie Revit 2018.
W tym podręczniku używamy następujących składników:
Revit 2023
Najnowsza kompilacja dodatku DynamoRevit w gałęzi Revit2023
Najnowsza kompilacja dodatku Dynamo
Aby zapewnić pomyślną kompilację, sklonujemy i skompilujemy repozytoria dodatku Dynamo i dodatku DynamoRevit, które będą używane w tym przewodniku.
Uwaga: ręczne skompilowanie dodatku Dynamo przed rozpoczęciem kompilowania dodatku DynamoRevit jest wymagane tylko w przypadku kompilowania dodatków Dynamo 1.x i DynamoRevit 1.x — nowsze wersje repozytorium DynamoRevit używają Menedżera pakietów NuGet do obsługi zależności dodatku Dynamo wymaganych do skompilowania. Mimo że skompilowanie dodatku DynamoRevit 2.x nie wymaga ręcznego ściągnięcia (pull) dodatku Dynamo, nadal są potrzebne podstawowe biblioteki (dlls
) w innym miejscu, aby faktycznie uruchomić składnik addin
dodatku DynamoRevit — warto więc jednak ściągnąć i skompilować dodatek Dynamo. Zobacz więcej poniżej: Kompilowanie repozytorium za pomocą programu Visual Studio
Kod projektu DynamoRevit znajduje się w serwisie Github w repozytorium oddzielnym od podstawowego kodu źródłowego dodatku Dynamo. To repozytorium zawiera pliki źródłowe dla węzłów charakterystycznych dla programu Revit i dodatek programu Revit, który wczytuje dodatek Dynamo. Kompilacje dodatku DynamoRevit dla różnych wersji programu Revit (na przykład 2016, 2017 lub 2018) są zorganizowane jako gałęzie w repozytorium.
Źródło dodatku DynamoRevit znajduje się tutaj: https://github.com/DynamoDS/DynamoRevit
Klonowanie lub pobieranie repozytorium
Gałęzie dodatku DynamoRevit odnoszą się do wersji programu Revit
W procesie podobnym do ściągania (pull) repozytorium dodatku Dynamo użyjemy polecenia git clone, aby sklonować dodatek DynamoRevit i określić gałąź, która odpowiada używanej wersji programu Revit. Aby rozpocząć, otworzymy interfejs wiersza polecenia i ustawimy jako bieżący katalog, do którego mają zostać sklonowane pliki.
Polecenie cd C:\Users\username\Documents\GitHub
zmienia katalog bieżący
Zastąp ciąg
username
swoją nazwą użytkownika
Teraz możemy sklonować repozytorium do tego katalogu. Mimo że musimy określić gałąź repozytorium, po sklonowaniu możemy przejść do tej gałęzi.
Polecenie git clone https://github.com/DynamoDS/DynamoRevit.git
klonuje repozytorium ze zdalnego adresu URL i domyślnie przełącza do głównej gałęzi.
Po zakończeniu klonowania repozytorium zmień katalog bieżący na folder repozytorium i przełącz na gałąź odpowiadającą zainstalowanej wersji programu Revit. W tym przykładzie używamy programu Revit RC2.13.1_Revit2023. Wszystkie gałęzie zdalne można wyświetlić na stronie serwisu Github w menu rozwijanym Branch (Gałąź).
Polecenie cd C:\Users\username\Documents\GitHub\DynamoRevit
zmienia katalog na DynamoRevit.
Polecenie git checkout RC2.13.1_Revit2023
ustawia bieżącą gałąź RC2.13.1_Revit2023
.
Polecenie git branch
sprawdza, w której gałęzi pracujemy, i wyświetla inne istniejące lokalnie.
Gałąź z gwiazdką jest obecnie wyrejestrowana. Wyświetlana jest gałąź
Revit2018
, ponieważ wcześniej ją wyrejestrowano, więc istnieje ona lokalnie.
Ważne jest wybranie właściwej gałęzi repozytorium, aby zapewnić, że podczas kompilowania projektu w programie Visual Studio będzie on odwoływał się do zespołów we właściwej wersji katalogu instalacyjnego programu Revit, w szczególności do plików RevitAPI.dll
i RevitAPIUI.dll
.
Przed skompilowaniem repozytorium musimy przywrócić pakiety NuGet za pomocą pliku restorepackages.bat
znajdującego się w folderze src
. Ten plik bat wykorzystuje Menedżera pakietów nuget do ściągnięcia (pull) skompilowanych plików binarnych podstawowych elementów dodatku Dynamo wymaganych przez dodatek DynamoRevit. Można również zdecydować się na skompilowanie ich ręcznie, ale tylko w przypadku wprowadzania zmian w dodatku DynamoRevit, a nie w elementach podstawowych dodatku Dynamo. Dzięki temu można szybciej rozpocząć pracę. Ten plik należy uruchomić z uprawnieniami administratora.
Kliknij prawym przyciskiem myszy plik
restorepackages.bat
i wybierz polecenieRun as administrator
Jeśli pakiety zostaną pomyślnie przywrócone, do folderu src
zostanie dodany folder packages
z najnowszymi pakietami beta NuGet.
Najnowsze pakiety NuGet dodatku Dynamo w wersji beta
Po przywróceniu pakietów otwórz plik rozwiązania programu Visual Studio DynamoRevit.All.sln
w folderze src
i skompiluj rozwiązanie. Kompilacja może początkowo mieć problemy ze znalezieniem pliku AssemblySharedInfo.cs
. W takim przypadku ponowne uruchomienie kompilacji rozwiąże ten problem.
Wybierz opcję
Build > Build Solution
Sprawdź, czy kompilacja została zakończona pomyślnie w oknie danych wyjściowych. Komunikat powinien wyglądać tak:
===== Build: 13 succeeded, 0 failed, 0 up-to-date, 0 skipped =====
.
Program Revit wymaga pliku dodatku w celu rozpoznania dodatku DynamoRevit. Instalator tworzy go automatycznie. W trakcie opracowywania musimy ręcznie utworzyć plik dodatku, który wskazuje kompilację dodatku DynamoRevit, której chcemy użyć, a konkretnie zespół DynamoRevitDS.dll
. Musimy również wskazać dodatkowi DynamoRevit kompilację dodatku Dynamo.
Utwórz plik Dynamo.addin
w folderze dodatku programu Revit znajdującym się w katalogu C:\ProgramData\Autodesk\Revit\Addins\2023
. Zainstalowano już wersję dodatku DynamoRevit, dlatego wystarczy edytować istniejący plik, aby wskazać nową kompilację.
Określ ścieżkę pliku DynamoRevitDS.dll
wewnątrz tagu <Assembly>...</Assembly>
.
Ewentualnie można skonfigurować w dodatku wczytywanie selektora wersji zamiast określonego zespołu.
Ustaw ścieżkę pliku w tagu <Assembly>...</Assembly>
na DynamoRevitVersionSelector.dll
Tag <FullClassName>...</FullClassName>
określa klasę, której wystąpienie należy utworzyć na podstawie zespołu wskazanego za pomocą powyższej ścieżki elementu Assembly. Ta klasa będzie punktem wejścia dla dodatku.
Ponadto musimy usunąć istniejący dodatek Dynamo dostarczany z programem Revit. Aby to zrobić, przejdź do folderu C:\\Program Files\Autodesk\Revit 2023\AddIns
i usuń dwa foldery zawierające dodatek Dynamo — DynamoForRevit
i DynamoPlayerForRevit
. Można je usunąć lub utworzyć ich kopię zapasową w oddzielnym folderze na wypadek późniejszej potrzeby odzyskania oryginalnego dodatku Dynamo dla programu Revit.
Drugim krokiem jest dodanie ścieżki pliku dla zespołów podstawowych dodatku Dynamo do pliku Dynamo.config
w folderze bin
dodatku DynamoRevit. Dodatek DynamoRevit wczyta je po otwarciu go w programie Revit. Ten plik konfiguracji umożliwia wskazanie dodatkowi DynamoRevit różnych wersji dodatku Dynamo na potrzeby opracowywania i testowania zmian zarówno w dodatku podstawowym, jak i w dodatku DynamoRevit.
Kod powinien wyglądać następująco:
Dodaj ścieżkę katalogu folderu bin
do części <add key/>
Tuż przed przystąpieniem do tego przewodnika sklonowaliśmy i skompilowaliśmy dodatek Dynamo, aby zapewnić jego sprawne współdziałanie z dodatkiem DynamoRevit. Ta ścieżka katalogu wskazuje tę kompilację.
Teraz po otwarciu programu Revit na karcie Zarządzaj powinien istnieć dodatek Dynamo.
Wybierz opcję
Manage
Kliknij ikonę dodatku Dynamo
Wystąpienie dodatku DynamoRevit
Jeśli pojawia się okno dialogowe błędu brakujących zespołów, prawdopodobnie występuje niezgodność między wersjami dodatku DynamoCore, przy których wykonywano kompilację, a tymi, które są wczytywane w środowisku wykonywania. Na przykład dodatek DynamoRevit z najnowszymi pakietami beta w wersji 2.0 dodatku DynamoCore nie będzie działać w przypadku uruchomienia go za pomocą dodatku bibliotek dll dodatku Dynamo 1.3. Upewnij się, że oba repozytoria są w tej samej wersji, a dodatek DynamoRevit ściąga (pull) zgodną wersję zależności nuget. Są one zdefiniowane w pliku package.json
repozytorium DynamoRevit.
W poprzedniej sekcji, Kompilowanie dodatku Dynamo ze źródła, krótko omówiono debugowanie w programie Visual Studio i sposób dołączania programu Visual Studio do procesu. Używając wyjątku w węźle Wall.ByCurveAndHeight jako przykładu, omówimy sposób dołączania do procesu, ustawiania punktów przerwania, krokowe wykonywanie kodu i używania stosu wywołań w celu określenia źródła wyjątku. Te narzędzia debugowania mają ogólne zastosowanie do procesów roboczych opracowywania rozwiązań .net i warto zapoznać się z nimi w zakresie wykraczającym poza ten podręcznik.
Dołączenie do procesu umożliwia połączenie uruchomionej aplikacji z programem Visual Studio w celu debugowania. Aby debugować zachowanie występujące w kompilacji dodatku DynamoRevit, można otworzyć pliki źródłowe dodatku DynamoRevit w programie Visual Studio i dołączyć proces Revit.exe
, który jest procesem nadrzędnym dodatku DynamoRevit. Program Visual Studio używa pliku symboli (.pbd
), aby utworzyć połączenie między zespołami wykonywanymi w dodatku DynamoRevit a kodem źródłowym.
Punkty przerwania określają wiersze w kodzie źródłowym, w których działanie aplikacji zostanie wstrzymane przed dalszym wykonywaniem. Jeśli węzeł powoduje awarię dodatku DynamoRevit lub zwracanie przez niego nieoczekiwanego wyniku, można dodać do źródła węzła punkt przerwania, aby wstrzymać proces, przejść do kodu i sprawdzić wartości zmiennych na żywo aż do znalezienia źródła problemu.
Krokowe wykonywanie kodu to przechodzenie przez źródło wiersz po wierszu. Możemy uruchamiać funkcje pojedynczo, wchodzić krokowo do wywołania funkcji lub wyskakiwać z aktualnie wykonywanej funkcji.
Stos wywołań pokazuje funkcję obecnie uruchomioną w procesie w odniesieniu do poprzednich wywołań funkcji, które wywołały tę funkcję. W programie Visual Studio jest to wyświetlane w oknie stosu wywołań. Jeśli na przykład dojdziemy do wyjątku poza kodem źródłowym, pojawi się ścieżka do kodu wywołującego w stosie wywołań.
„2,000 Things You Should Know About C#” (2000 rzeczy, które należy wiedzieć o języku C#): tu znajdziesz bardziej szczegółowe wyjaśnienie stosów wywołań
Węzeł Wall.ByCurveAndHeight zgłasza wyjątek po przekazaniu mu krzywej PolyCurve jako krzywej wejściowej (curve) i zwraca komunikat: „To BSPlineCurve Not Implemented” (Nie zaimplementowano do BSPlineCurve). Podczas debugowania możemy ustalić, dlaczego dokładnie węzeł nie akceptuje tego typu geometrii jako danych wejściowych dla parametru krzywej (curve). W tym przykładzie założono, że dodatek DynamoRevit pomyślnie skompilowano i można go uruchomić jako dodatek dla programu Revit.
Węzeł Wall.ByCurveAndHeight zgłasza wyjątek
Rozpocznij od otwarcia pliku rozwiązania DynamoRevit.All.sln
, uruchom program Revit i uruchom dodatek DynamoRevit. Następnie dołącz program Visual Studio do procesu programu Revit za pomocą okna Attach to Process
.
Program Revit i dodatek DynamoRevit muszą być uruchomione, aby były widoczne jako dostępne procesy
Otwórz okno
Attach to Process
, wybierając opcjęDebug > Attach to Process...
Ustaw opcję
Transport
na wartośćDefault
Wybierz opcję
Revit.exe
Wybierz opcję
Attach
Po dołączeniu programu Visual Studio do programu Revit otwórz kod źródłowy węzła Wall.ByCurveAndHeight w pliku Wall.cs
. Tę zawartość można znaleźć w Eksploratorze rozwiązań w części Libraries > RevitNodes > Elements
w obszarze Public static constructors
pliku. Ustaw punkt przerwania w konstruktorze typu wall, tak aby po uruchomieniu węzła w dodatku Dynamo proces został przerwany i można było krokowo wykonać poszczególne wiersze kodu. Nazwy konstruktorów typów Zero-Touch dodatku Dynamo zazwyczaj zaczynają się od By<parameters>
.
Plik klasy z konstruktorem dla węzła Wall.ByCurveAndHeight
Ustaw punkt przerwania, klikając po lewej stronie numeru wiersza lub klikając prawym przyciskiem myszy wiersz kodu i wybierając polecenie
Breakpoint > Insert Breakpoint
.
Po ustawieniu punktu przerwania należy zadbać o to, aby proces przebiegł przez funkcję Wall.ByCurveAndHeight. Funkcję można ponownie wykonać w dodatku Dynamo, ponownie łącząc przewód do jednego z portów węzła, co spowoduje ponowne uruchomienie tego węzła. W programie Visual Studio zostanie wyzwolony punkt przerwania.
Ikona punktu przerwania zmienia się po jego wyzwoleniu
Okno stosu wywołań z następną metodą
Teraz krokowo wykonuj poszczególne wiersze w konstruktorze, aż zostanie zwrócony wyjątek. Kod wyróżniony na żółto to następna instrukcja do uruchomienia.
Narzędzia do debugowania do nawigowania po kodzie
Naciśnij opcję
Step Over
, aby uruchomić wyróżniony kod, a następnie wstrzymać wykonywanie po zwróceniu przez funkcję wynikuNastępna instrukcja do uruchomienia oznaczona żółtym wyróżnieniem i strzałką
Jeśli będziemy kontynuować wykonywanie krokowe, w końcu zostanie zwrócony wyjątek, który pojawił się wcześniej w oknie dodatku DynamoRevit. W oknie stosu wywołań widać, że wyjątek został pierwotnie zwrócony z metody o nazwie Autodesk.Revit.CurveAPIUtils.CreateNurbsCurve
. Na szczęście wyjątek jest tutaj obsługiwany, więc dodatek Dynamo nie uległ awarii. Proces debugowania zapewnił kontekst dla problemu, przenosząc nas do innej metody w kodzie źródłowym.
Ponieważ nie jest to biblioteka open source, nie możemy tam wprowadzać zmian. Mamy teraz więcej informacji, więc możemy zgłosić problem z szerszym kontekstem, zgłaszając problem w serwisie GitHub, lub zaproponować obejście tego problemu, wysyłając prośbę o ściągnięcie (pull).
Po dotarciu do instrukcji powodującej wyjątek w pliku
Walls.cs
proces debugowania maksymalnie przybliża nas do problemu źródłowego w kodzie użytkownika w plikuProtoToRevitCurve.cs
.Instrukcja powodująca wyjątek w pliku
ProtoToRevitCurve.cs
W oknie stosu wywołań widać, że wyjątek pochodzi z kodu innego niż kod użytkownika
Okno podręczne z informacjami o wyjątku
Ten proces można zastosować do wszystkich plików źródłowych, z którymi pracujemy. W przypadku tworzenia biblioteki węzłów Zero-Touch dla programu Dynamo Studio można otworzyć źródło biblioteki i dołączyć proces dodatku Dynamo w celu debugowania tej biblioteki węzłów. Nawet jeśli wszystko działa doskonale, debugowanie to doskonały sposób na przeglądanie kodu i analizowanie jego działania.
Proces ten jest niemal identyczny jak w przypadku ściągania (pull) zmian dla dodatku Dynamo, ale należy upewnić się, że jest używana właściwa gałąź. Użyj polecenia git branch
w repozytorium DynamoRevit, aby sprawdzić, które gałęzie są dostępne lokalnie i które są obecnie wyrejestrowane.
Polecenie cd C:\Users\username\Documents\GitHub\DynamoRevit
ustawia repozytorium DynamoRevit jako katalog bieżący.
Polecenie git branch
sprawdza, czy używana jest właściwa gałąź, czyli RC2.13.1_Revit2023
.
Polecenie git pull origin RC2.13.1_Revit2023
ściąga zmiany z gałęzi RC2.13.1_Revit2023
zdalnej wersji oryginalnej.
Wersja oryginalna wskazuje po prostu adres URL sklonowanej wersji oryginalnej.
Najlepiej jest pilnować tego, która gałąź jest używana i z której jest ściągana (pull) zawartość, aby na przykład uniknąć ściągnięcia zmian z gałęzi
RC2.13.1_Revit2023
do wersjiRevit2018
.
Jak wspomniano w temacie Kompilowanie dodatku Dynamo ze źródła, gdy wszystko będzie gotowe do przesłania zmiany do repozytorium DynamoRevit, można utworzyć prośbę o ściągnięcie zgodnie z wytycznymi zespołu dodatku Dynamo podanymi w sekcji „Prośby o ściągnięcie (pull)”.