W poprzednim artykule wprowadziliśmy podstawy programowania w AutoCAD i omówiliśmy różne interfejsy API dostępne dla użytkowników. Dziś skupimy się na LISP w AutoCAD – języku programowania, który od lat jest integralną częścią AutoCAD i pozwala na automatyzację wielu zadań oraz tworzenie własnych funkcji dostosowanych do indywidualnych potrzeb.
Czym jest AutoLISP?
AutoLISP to dialekt języka programowania Lisp, specjalnie dostosowany do pracy z AutoCAD. Umożliwia tworzenie skryptów i aplikacji, które mogą:
- Automatyzować powtarzalne zadania.
- Tworzyć złożone obiekty i struktury.
- Rozszerzać funkcjonalność AutoCAD o własne narzędzia.
Dlaczego warto używać AutoLISP?
- Zwiększenie efektywności: Automatyzacja rutynowych czynności pozwala zaoszczędzić czas i zminimalizować błędy.
- Elastyczność: Możliwość tworzenia własnych funkcji i narzędzi dostosowanych do specyficznych wymagań projektowych.
- Integracja: AutoLISP jest w pełni zintegrowany z AutoCAD, co umożliwia bezpośredni dostęp do jego funkcji i obiektów.
Pierwsze kroki z AutoLISP
Tworzenie pliku LISP
Pliki AutoLISP mają rozszerzenie .lsp
. Do ich tworzenia możesz użyć dowolnego edytora tekstu, ale zaleca się korzystanie z edytorów z podświetlaniem składni, takich jak:
- Visual Lisp Editor wbudowany w AutoCAD.
- Notepad++ z odpowiednią konfiguracją.
- Visual Studio Code z rozszerzeniami do Lisp.
Struktura podstawowego skryptu
Oto podstawowa struktura funkcji w AutoLISP:
(defun nazwa-funkcji () (princ "\nWitaj w świecie AutoLISP!") (princ) )
defun
: Służy do definiowania nowej funkcji.nazwa-funkcji
: Nazwa Twojej funkcji, pod którą będzie wywoływana w AutoCAD.princ
: Funkcja wyświetlająca tekst w wierszu poleceń.
Ładowanie i uruchamianie skryptu w AutoCAD
- Ładowanie skryptu:
- W AutoCAD wpisz polecenie
AP
lubAPPLOAD
. - W oknie dialogowym wybierz swój plik
.lsp
i kliknij Load.
- W AutoCAD wpisz polecenie
- Uruchamianie funkcji:
- Wpisz nazwę swojej funkcji w wierszu poleceń (np.
nazwa-funkcji
) i naciśnij Enter.
- Wpisz nazwę swojej funkcji w wierszu poleceń (np.
Przykładowy kod AutoLISP
Poniżej przedstawiamy przykładowy kod, który automatyzuje tworzenie prostokąta o zadanych wymiarach:
(defun c:rysuj_prostokat () (setq dlugosc (getreal "\nPodaj długość prostokąta: ")) (setq szerokosc (getreal "\nPodaj szerokość prostokąta: ")) (setq punkt-start (getpoint "\nWskaż punkt początkowy: ")) (command "RECTANG" punkt-start (list (+ (car punkt-start) dlugosc) (+ (cadr punkt-start) szerokosc)) ) (princ) )
Omówienie kodu
c:
: Prefiksc:
oznacza, że funkcja będzie dostępna jako polecenie w AutoCAD.setq
: Służy do przypisywania wartości zmiennym.getreal
igetpoint
: Funkcje do pobierania danych od użytkownika.command
: Umożliwia wywoływanie natywnych poleceń AutoCAD z poziomu AutoLISP.
Przykład działania
Przykładowe zadanie to wygenerowanie blachy węzłowej z otworami. Skrypt ma wygenerować osie, ciało blachy oraz otwory w zadanym rozstawie. Liczba otworów w poziomie i pionie powinna być zadana przez użytkownika, tak samo jak wymiary blachy i średnice otworów.
(defun c:BlachaOtwory () (prompt "\n=== Generowanie blachy z otworami ===") ;; Pobieranie danych od użytkownika (setq width (getreal "\nPodaj szerokość blachy: ")) (setq height (getreal "\nPodaj wysokość blachy: ")) (setq rows (getint "\nPodaj liczbę rzędów otworów: ")) (setq cols (getint "\nPodaj liczbę kolumn otworów: ")) (setq spacing-x (getreal "\nPodaj rozstaw otworów w poziomie: ")) (setq spacing-y (getreal "\nPodaj rozstaw otworów w pionie: ")) (setq hole-diameter (getreal "\nPodaj średnicę otworów: ")) ;; Obliczanie startowego punktu otworów według podanego wzoru (setq x1 (- (/ width 2.0) (* spacing-x (/ (1- cols) 2.0)))) (setq y1 (- (/ height 2.0) (* spacing-y (/ (1- rows) 2.0)))) ;; Pętla do generowania otworów (setq r (/ hole-diameter 2.0)) ;; Promień otworów (setq i 0) (repeat rows (setq j 0) (repeat cols (command "CIRCLE" (list (+ x1 (* j spacing-x)) (+ y1 (* i spacing-y))) r) (setq j (1+ j)) ) (setq i (1+ i)) ) (princ "\nOtwory zostały wygenerowane.") ;; Generowanie prostokąta (command "RECTANGLE" "0,0" (strcat (rtos width 2 3) "," (rtos height 2 3))) (princ "\nBlacah została wygenerowana.") ;; Rysowanie linii osiowych ;; Linia pozioma (l1) (setq l1-start (list (- (/ width 2.0)) (/ height 2.0))) (setq l1-end (list (* 3 (/ width 2.0)) (/ height 2.0))) (command "LINE" l1-start l1-end "") ;; Linia pionowa (l2) (setq l2-start (list (/ width 2.0) (- (/ height 2.0)))) (setq l2-end (list (/ width 2.0) (* 3 (/ height 2.0)))) (command "LINE" l2-start l2-end "") ;; Informacja o zakończeniu (princ "\nProstokąt, otwory i linie osiowe zostały wygenerowane.") (princ) )
Rozszerzenie funkcjonalności
Możesz modyfikować powyższy skrypt, aby:
- Dodawać warstwy, na których rysowane są obiekty.
- Automatycznie wypełniać prostokąt określonym hatch’em.
- Dodawać tekst lub wymiarowanie do rysunku.
Podsumowanie
AutoLISP to potężne narzędzie, które pozwala na znaczną automatyzację pracy w AutoCAD. Dzięki niemu możesz tworzyć własne funkcje i narzędzia, które przyspieszą i ułatwią proces projektowania.
Zachęcamy do eksperymentowania z AutoLISP i odkrywania jego pełnych możliwości!