Od zasad projektowych do działającego narzędzia w Revicie, wpis gościnny Andreya Kechina na BIM Corner

Od zasad projektowych do działającego narzędzia w Revicie dzięki AI: Automatyzacja z Codex

Rysunki elewacji muszą pokazywać poziomy stropów, wysokości otworów i istotne wysokości dachu, zawsze w ten sam sposób. Gdy model się zmienia, te liczby też muszą się zmienić.

Tworzę własne narzędzia do Revita z pomocą Codex, agenta AI do pisania kodu, na podstawie zasad rysunkowych, których używam jako projektant. To narzędzie wstawia opisy wysokości na elewacjach.

Najtrudniejsze było określenie, co oznacza każda liczba i jak polecenie ma się zachować po zmianie. Potem przetestowałem narzędzie sześć razy w Revicie. Trzy testy spełniły kryteria. Trzy tylko częściowo i to one pokazują decyzje, które jako projektant nadal muszę podejmować sam.

W tym artykule zobaczysz:

  • Jak ustaliłem, skąd pochodzi każda liczba
  • Jak przygotowałem testy, które nie mogły na siebie wpływać
  • Dlaczego poprawny pomiar nadal nie dał opisu na rysunku
  • Cztery kontrole, które możesz zastosować w każdej automatyzacji w Revicie, napisanej z AI lub bez

Jak korzystałem z Codex i co nadal decydowałem sam

Zapisane rozmowy z czasu tworzenia narzędzia pokazują kilka praktycznych problemów. W sierpniu zgłaszałem okna wybierane z innych elewacji, błędne wysokości, problemy z poziomem odniesienia i stare opisy, które zostawały po kolejnym uruchomieniu.

Te obserwacje pomogły doprecyzować wymagania. Przypominają mi też, dlaczego wiarygodnie wyglądający rysunek albo komunikat o udanym zakończeniu nie dowodzą, że automatyzacja działa poprawnie.

Pomiar, jego wybór i jego umieszczenie na rysunku wymagają osobnych kontroli.

Codex pomagał pisać i poprawiać narzędzie, przeglądać jego kod źródłowy i zapisaną historię zmian, prowadzić sesję testową w Revicie według moich instrukcji oraz przygotować ten artykuł. Pomógł też stworzyć osobny skrypt pomiarowy.

Testy pokazują decyzje, za które jako projektant nadal odpowiadam sam:

  • Poziom odniesienia
  • Znaczenie wysokości otworu
  • Obsługiwana geometria
  • Zasady widoczności
  • To, co wolno zastąpić przy przebudowie opisów

Krok 1: ustal, skąd pochodzi każda liczba

Obecne narzędzie przyjmuje jako zero rzędną projektową konkretnie nazwanego poziomu wykończonej podłogi pierwszej kondygnacji. Odejmuje tę wartość od każdej rzędnej źródłowej i podaje wynik w metrach z dokładnością do trzech miejsc po przecinku.

Brak wymaganego poziomu powoduje odmowę działania. Najniższy poziom w projekcie jest opisany jako teren, co pozostaje umową przyjętą w projekcie: przy piwnicy taki opis mógłby być niewłaściwy.

W modelu testowym zero wykończonej podłogi leżało na −125 mm we współrzędnych projektu, a najniższy poziom był 335 mm niżej.

Dla okien i drzwi narzędzie odczytuje rzeczywisty obrys otworu w ścianie, w której są osadzone, przez funkcję Revit API, z której korzysta też eksport do IFC. Nie zastępuje tego obrysu prostopadłościanem ograniczającym rodziny ani parametrem wysokości.

Ściana musi spełniać obsługiwane warunki dotyczące ściany i widoku. Narzędzie wysyła też promienie testowe, żeby sprawdzić, czy coś nie zasłania otworu. Jeśli promień w coś trafi, otwór jest pomijany.

Wysokości dachu pochodzą z górnych powierzchni standardowych dachów Revita o płaskiej geometrii i prostych krawędziach. Wygenerowana powłoka wykończenia nie daje rzędnej dachu, a dolna krawędź połaci na górnej powierzchni nie wyznacza spodu okapu.

Jak testowałem narzędzie, żeby jeden test nie wpływał na drugi

Testy przeprowadziłem w Revicie 2025.1 i pyRevit 6.5.3, darmowym dodatku do uruchamiania własnych skryptów Python w Revicie. Otworzyłem odizolowaną kopię modelu, bez współdzielenia (non-workshared), pod neutralną nazwą pliku.

Po pierwszym uruchomieniu polecenia zapisałem wynik jako S1. Każdy kolejny test zaczynał się od osobnej kopii pliku S1, więc zmienione okno w jednym teście nie mogło wpłynąć na inny.

Sprawdziłem, że testy nie zmieniły oryginalnego modelu ani siedmiu plików źródłowych narzędzia: ich odciski plików (hashe) pozostały takie same. W narzędziu uruchomiłem tylko etap formatowania elewacji. Testowe zmiany geometrii modelu i niezależne pomiary wykonał osobny skrypt Revit API. Zobacz Fig. 1.

Okno narzędzia w Revicie z wybranym tylko etapem elewacji, przekrojów i ogólnego układu
Fig. 1. Wybrany jest tylko etap elewacji, przekrojów i ogólnego układu (1 z 12), pełne sprawdzenie AR jest wyłączone. Na wszystkich rysunkach angielskie panele i turkusowe wskaźniki to redakcyjne tłumaczenia nałożone na oryginalne, rosyjskojęzyczne ekrany Revita, a liczby z programu są niezmienione.

Ten skrypt dał drugi, niezależny sposób pomiaru. Odczytywał wewnętrzne krawędzie otworów bezpośrednio z geometrii ściany, zamiast korzystać z procedury samego narzędzia.

Kontrole dachu odczytywały punkty na górnych powierzchniach dachów. Zapis obejmował też typy opisów, tekst, współrzędne i zapisane identyfikatory elementów.

Te kontrole działały wewnątrz Revita. Zrzuty ekranu, eksporty widoków i pełny wynik diagnostyki zapisałem razem z pomiarami.

Model testowy miał dwa nierozwiązane linki i nieaktywne przycięcie widoku, więc te testy nie obejmują geometrii z linków ani działania przy aktywnym przycięciu.

Sześć testów w skrócie:

TestCo zmieniłemWynik
T1 Pierwsze uruchomienieNic, stare opisy były już na rysunkuCzęściowo: 7 poprawnych liczb, +0,600 m pominięte z braku miejsca, żadne drzwi nie zostały przyjęte
T2 Ponowne uruchomienieNicSpełniony: te same 7 liczb, bez duplikatów
T3 Wyższe oknoJedno okno wyższe o 200 mmCzęściowo: +2,600 m odczytane poprawnie, opis nie został wstawiony
T4 Bliskie wysokościJedno z dwóch okien o tej samej górze wyższe o 100 mmCzęściowo: +2,500 m odczytane poprawnie, opis nie został wstawiony
T5 Podniesiony dachJeden dach podniesiony o 300 mmSpełniony: +4,904 i +7,116 m, strzałki się zgadzają
T6 Przesunięty symbolSymbol +2,400 m przesunięty o 1000 mm w bokSpełniony: symbol odbudowany, ręczne przesunięcie utracone

T1 i T2: pierwsze uruchomienie i powtórka bez zmian

Pierwsze uruchomienie dało siedem opisów liczbowych na elewacji wschodniej, której użyłem jako kontrolnej, w skali 1:82. Były wśród nich góra otworu na +2,400 m, dół otworu na +1,500 m oraz wartości dachu +4,604 i +6,816 m.

Wartości dachu odpowiadały niezależnie zmierzonym wysokościom 4,603564 i 6,816194 m nad zerem wykończonej podłogi. Wszystkie siedem grotów strzałek zgadzało się z przedstawianymi wysokościami w granicach zaokrąglenia.

Jednak zaakceptowany kandydat dołu otworu +0,600 m został pominięty z braku miejsca na rysunku, a na testowanych elewacjach nie przyjęto żadnego kandydata drzwi zewnętrznych.

Opisy istniały już przed uruchomieniem, więc było to przebudowanie, a nie dowód tworzenia opisów od zera w czystym modelu.

Następnie uruchomiłem polecenie ponownie, bez zmian w modelu. Usunęło opisy, które wcześniej narysowało, i narysowało je jeszcze raz: te same siedem liczb w tych samych miejscach. Nowe były tylko identyfikatory elementów Revita.

Narzędzie prowadzi listę elementów, które utworzyło w każdym widoku. Przed ponownym uruchomieniem i po nim lista miała 54 pozycje. Nie zostały żadne stare elementy, a łączna liczba elementów nie wzrosła. W praktyce dwukrotne uruchomienie polecenia nie mnoży duplikatów.

To potwierdza powtarzalność dla tego stanu wyjściowego. Nie usuwa jednak odziedziczonych pominięć i nie dowodzi, że każdy ręczny opis jest chroniony. Zobacz Fig. 2.

Elewacja wschodnia z siedmioma opisami wysokości po pierwszym uruchomieniu
Fig. 2. T1 i T2: elewacja wschodnia po pierwszym uruchomieniu, z siedmioma opisami wysokości. Dół otworu +0,600 m pominięto z braku miejsca. Ponowne uruchomienie odtworzyło ten sam układ.

T3 i T4: poprawne wysokości, ale bez nowego opisu

Zmiana okna ujawniła zależność między geometrią a widocznością.

W T3 jedno okno stało się wyższe o 200 mm. Niezależna kontrola potwierdziła, że dół otworu został na +1,500 m, a góra przesunęła się z +2,400 na +2,600 m.

Polecenie odczytało te wysokości poprawnie. Ale kontrola widoczności odrzuciła zmieniony otwór, bo promień testowy trafił w istniejącą, wygenerowaną okładzinę elewacji. Opis +2,600 m nie został wstawiony.

Pozostała liczba +2,400 m nadal opisywała inne okna. Generator okładziny był poza zakresem tego testu, więc ten wynik nie dowodzi, że ponowne wygenerowanie okładziny rozwiązałoby problem. Zobacz Fig. 3.

Elewacja wschodnia po podwyższeniu jednego okna o 200 mm, bez nowego opisu +2,600 m
Fig. 3. T3: jedno okno wyższe o 200 mm. Narzędzie poprawnie odczytało nową górę (+2,600 m), ale nie wstawiło opisu, bo istniejąca okładzina elewacji zablokowała kontrolę widoczności.

T4 miał podobne ograniczenie.

Dwa otwory okienne miały początkowo wspólną górę na +2,400 m. Gdy jedno okno stało się wyższe o 100 mm, a dół jego otworu został na +0,600 m, powstała rzeczywista góra na +2,500 m, a drugie okno się nie zmieniło.

Obie wysokości pojawiły się poprawnie w tabeli diagnostycznej, ale zmienione okno znów zostało odrzucone z powodu okładziny. Rysunek nie pokazał więc dwóch osobnych opisów bliskich wysokości.

Starsza wersja kodu łączyła wysokości różniące się o mniej niż 180 mm. Obecna zasada łączy tylko wysokości, które zostałyby wydrukowane jako ta sama liczba. Ten test nie może potwierdzić umieszczania opisów według nowej zasady, bo kontrola widoczności najpierw odrzuciła jedno okno. Zobacz Fig. 4.

Dwie bliskie wysokości okien, +2,400 m i +2,500 m, drugie okno zablokowane przez okładzinę
Fig. 4. T4: dwa okna z górą na +2,400 m i +2,500 m. Obie wysokości odczytano poprawnie, ale drugie okno zablokowała okładzina, więc opis +2,500 m nie został wstawiony.

T5: dach się przesunął, a liczby razem z nim

Zmiana dachu dała przykład udanej aktualizacji.

Podniesienie jednego dachu o 300 mm przez odsunięcie od poziomu zmieniło niezależnie zmierzoną dolną krawędź i najwyższą wysokość dokładnie o tę wartość.

Przed ponownym uruchomieniem tekst nadal pokazywał +4,604 i +6,816 m. Po uruchomieniu polecenia pokazywał +4,904 i +7,116 m, a wysokości strzałek się zgadzały.

Elewacja miała teraz osiem opisów liczbowych, a trzech innych kandydatów pominięto z braku miejsca.

To potwierdza testowaną aktualizację dachu, ale pełne ponowne generowanie wykończenia dachu i dowolne kształty dachów pozostają poza tym, co testy dowiodły. Zobacz Fig. 5, Fig. 6.

Dach podniesiony o 300 mm przed ponownym uruchomieniem, opisy pokazują stare wartości
Fig. 5. T5 przed ponownym uruchomieniem: dach jest wyżej o 300 mm, ale opisy nadal pokazują +4,604 i +6,816 m, bo to zwykły tekst, a nie rzędne wysokościowe (Spot Elevations).
Opisy dachu zaktualizowane do +4,904 m i +7,116 m po ponownym uruchomieniu narzędzia
Fig. 6. T5 po ponownym uruchomieniu: opisy dachu pokazują +4,904 i +7,116 m, a strzałki zgadzają się ze zmierzonymi wysokościami. Wstawiono osiem liczb, trzech innych kandydatów pominięto z braku miejsca.

T6: ręczne poprawki wygenerowanych symboli przepadają

Symbole pokazują, dlaczego ponowne uruchomienie ma znaczenie. Każdy symbol wysokości składa się z dwóch notatek tekstowych i czterech linii detalu, z dodatkowymi liniami pomocniczymi tam, gdzie są obsługiwane. Nie są to rzędne wysokościowe Revita (Spot Elevations), które aktualizują się same razem z modelem. Zmieniają się tylko wtedy, gdy ponownie uruchomisz polecenie.

W ostatnim teście osobny skrypt przesunął wszystkie sześć części symbolu +2,400 m o 1000 mm w bok, bez zmiany modelu.

Ponowne uruchomienie usunęło stare elementy utworzone przez narzędzie i przywróciło obliczony układ. Nie zostały żadne przesunięte fragmenty.

Ręczna poprawka projektanta w wygenerowanej grafice nie przetrwa więc tej przebudowy. Zobacz Fig. 7, Fig. 8.

Symbol wysokości +2,400 m przesunięty o 1000 mm w bok
Fig. 7. T6: osobny skrypt przesunął symbol +2,400 m (A) o 1000 mm w bok. Model i przedstawiana wysokość się nie zmieniły.
Przesunięty symbol przywrócony na obliczone miejsce po ponownym uruchomieniu narzędzia
Fig. 8. T6 po ponownym uruchomieniu: symbol wrócił na obliczone miejsce. Ręczne poprawki wygenerowanych symboli nie przetrwają przebudowy.

Uwaga: polecenie zmienia więcej niż symbole wysokości

Polecenie sięga dalej niż jeden symbol. Wybrany etap obsługuje też przekroje, legendy, tła, zakończenia osi i inne układy widoków architektonicznych.

Raport z pierwszego uruchomienia odnotował też usunięcie jednego widoku 3D z arkusza tytułowego.

Uwaga: kod zawiera zasady porządkowania elewacji, które mogą usuwać standardowe rzędne wysokościowe Revita (Spot Elevations), także te wstawione ręcznie.

Na moich testowych elewacjach nie było rzędnych wysokościowych ani przed testami, ani po nich, więc nie widziałem, żeby to się stało. To ryzyko wynika z analizy kodu, a nie ze zmierzonej straty. Jeśli budujesz podobne narzędzie, sprawdź, co wolno usuwać jego krokowi porządkowania.

Co zabrać do własnej automatyzacji w Revicie

Trzy testy spełniły kryteria: powtórka bez zmian, aktualizacja dachu i odbudowany symbol.

Trzy częściowo: pierwsze uruchomienie i oba testy okien.

Polecenie nie zgłosiło błędów, ale wykluczenia i pominięcia w układzie nadal wpłynęły na wynik. Nie mam zmierzonej oszczędności czasu ani ogólnego wskaźnika niezawodności dla tego przypadku.

Testy dały mi jaśniejszy sposób pracy. Oto cztery kontrole, które możesz zastosować we własnym narzędziu:

  1. Określ źródło geometryczne. Ustal, z którego elementu i której powierzchni pochodzi każda liczba, na przykład z otworu w ścianie, a nie z prostopadłościanu ograniczającego rodziny.
  2. Czytaj diagnostykę. Poprawny pomiar wciąż może zostać odrzucony, jak w T3 i T4.
  3. Uruchamiaj ponownie po zmianach. Opisy to zwykły tekst i linie, więc same się nie aktualizują.
  4. Przeglądaj zmienione rysunki. Polecenie zmienia też inne widoki, a ręczne poprawki zostają nadpisane.

Osobista automatyzacja staje się użyteczna, gdy te decyzje są na tyle jasne, że da się je przetestować, a jej ograniczenia pozostają widoczne przy przeglądzie rysunków.

Jeśli chcesz zbudować własne narzędzie do Revita z AI, zacznij od zasad, nie od kodu. Testuj jedną zmianę naraz na kopii modelu i sprawdzaj rysunek, nie tylko komunikat o sukcesie.

Ten artykuł jest wpisem gościnnym na blogu BIM Corner, napisanym przez Andreya Kechina.

Andrey Kechin
Andrey KechinAutor artykułu
Andrey Kechin jest niezależnym projektantem budynków. Pracuje głównie w Revicie przy lekkich domach szkieletowych i tworzy małe narzędzia do automatyzacji własnej pracy projektowej.

Spodobał Ci się ten artykuł? Podziel się nim !

Dużo czasu i wysiłku poświęcamy na tworzenie wszystkich naszych artykułów i poradników. Byłoby świetnie, gdybyś poświęcił chwilę na udostępnienie tego wpisu!

Udostępnij:

Komentarze:

Autor:

Picture of BIM Corner Guest

BIM Corner Guest

Pobierz przewodnik po projektach BIM:

Po przeczytaniu tego poradnika dowiesz się:

  1. Jak BIM jest wykorzystywany przy największych projektach w Norwegii
  2. Jakie były wyzwania dla zespołu projektowego i jak zostały rozwiązane
  3. Jakie były wyzwania na budowie i jakie było nasze podejście do nich

Najnowsze wpisy: