Menu

Chatbot vs AutoCAD – Testujemy kod LISP wygenerowany przez AI!

Autodesk LISP wygenerowany przez AI

Kategoria: Pomoc techniczna - Architektura, Tagi: There is no tags

Podczas pracy natknąłem się na zapytanie techniczne związane z programem AutoCAD – dotyczyło przeniesienia rożnych linii z warstwy 0 na inne warstwy. Czynność miała być wykonana automatycznie i kryterium doboru warstwy był kolor linii.


Założenia kodu AutoCAD LISP

Cały rysunek miał być stworzony na warstwie 0, a kolor linii stworzonych na rysunku był każdorazowo ręcznie zmieniany na inne kolory (żółty, czerwony i niebieski). Na początek postanowiłem sprawdzić wartości RGB narzuconych kolorów. Wystarczyło rozwinąć menu przy wybranym kolorze i wybrać opcję Więcej kolorów… .

Zmiana koloru linii w programie AutoCAD odczyt wartości kolorów w RGB

Utworzyłem na rysunku 3 dodatkowe warstwy (czerwone, niebieskie i żółte), a następnie z ciekawości postanowiłem sprawdzić jak z zadaniem poradzi sobie sztuczna inteligencja i skorzystałem z usług popularnego chatbota.


Wpisana następująca fraza (Prompt):

„AutoCAD. Na warstwie 0 znajdują się linie o różnych kolorach. Utworzono warstwę Czerwone (255,0,0), Niebieske (0,0,255) i Żółte (255,255,0). Napisz skrypt, który sprawdza kolor linii i przenosi ją na taką warstwę w jakim jest kolorze.”


Otrzymałem następujący kod:

(defun c:PrzeniesLinieNaWarstwy ()
(setq warstwa-0 (tblobjname „LAYER” „0”)) ; Wybierz warstwę 0
(setq wszystkie-linie (ssget „X” (list (cons 8 „0”) (cons 0 „LINE”)))) ; Pobierz wszystkie linie na warstwie 0
(if wszystkie-linie
(progn
(repeat (setq i (sslength wszystkie-linie)) ; Powtarzaj dla każdej linii w zestawie
(setq linia (ssname wszystkie-linie (setq i (1- i)))) ; Pobierz linię z zestawu
(setq kolor (cdr (assoc 62 (entget linia)))) ; Pobierz kolor linii
;; Sprawdź kolor i przenieś linię na odpowiednią warstwę
(cond
((= kolor 1) (entmod (subst (cons 8 „Czerwone”) (assoc 8 (entget linia)) (entget linia)))) ; Czerwone (kolor 1 = 255,0,0)
((= kolor 5) (entmod (subst (cons 8 „Niebieskie”) (assoc 8 (entget linia)) (entget linia)))) ; Niebieskie (kolor 5 = 0,0,255)
((= kolor 2) (entmod (subst (cons 8 „Żółte”) (assoc 8 (entget linia)) (entget linia)))) ; Żółte (kolor 2 = 255,255,0)
)
)
(princ „\nLinie przeniesione na odpowiednie warstwy.”)
)
(princ „\nBrak linii na warstwie 0.”)
)
(princ)
)


Wyjaśnienie i uruchomienie skryptu:

  1. Funkcja c:PrzeniesLinieNaWarstwy – funkcja AutoLISP uruchamiana komendą w AutoCADzie.
  2. Pobieranie linii z warstwy 0 – ssget tworzy zestaw wszystkich linii na warstwie „0”.
  3. Przechodzenie przez zestaw linii – repeat iteruje przez każdą linię i sprawdza jej kolor.
  4. Przenoszenie linii na odpowiednią warstwę – cond sprawdza kolor linii i przypisuje linię do odpowiedniej warstwy (przy użyciu entmod i subst).

Uwaga:

Skrypt zakłada, że warstwy „Czerwone”, „Niebieskie” i „Żółte” już istnieją.

Skrypt AutoLISP najlepiej zapisać w pliku z rozszerzeniem .lsp.

  1. Otwórz dowolny edytor tekstu, np. Notatnik.
  2. Wklej kod AutoLISP (czyli ten, który podałem powyżej).
  3. Zapisz plik z rozszerzeniem .lsp, np. PrzeniesLinieNaWarstwy.lsp.
    • Upewnij się, że wybierasz format „Wszystkie pliki” w oknie dialogowym zapisu, aby edytor nie dodał dodatkowego rozszerzenia .txt.
  4. Uruchom skrypt:
    • Po załadowaniu pliku wpisz nazwę funkcji PrzeniesLinieNaWarstwy i naciśnij Enter, aby uruchomić skrypt.

W tym momencie nadszedł czas na test!

W programie AutoCAD przeszedłem do zakładki Zarządzaj, w sekcji Aplikacje wybrałem Wczytaj aplikację i zimportowałem wcześniej utworzony plik z rozszerzeniem *.lsp .

importowanie pliku lsp do AutoCAD

Chatbot nazwał narzędzie „PRZENIESLINIENAWARSTWY”. Po zaimportowaniu pliku lsp wpisując wspomnianą nazwę ukazuje się nowe narzędzie:

uruchamianie lsp w AutoCAD

Zatwierdziłem przyciskiem enter i lsp został uruchomiony.

Chatbot poradził sobie z zadaniem bardzo dobrze, każda z linii została przeniesiona na właściwą warstwę. Co prawda we właściwościach linii kolor jest nadal wymuszony, ale nie zdefiniowałem w zadaniu aby parametr ten zmienił się na JakWarstwa. Innym rozwiązaniem byłoby skorzystanie z funkcji szybki wybór, zaznaczenie całego rysunku i wybór właściwości – kolor. Wtedy AutoCAD automatycznie zaznaczy np. wyłącznie czerwone obiekty.

Więcej informacji o funkcji szybki wybór znajdziesz w naszym inny artykule:

https://www.pccpolska.pl/funkcja-szybki-wybor-w-programie-autocad/


Autor: Jakub Piwowar | PCC Polska


No votes yet.
Please wait...