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
APlubAPPLOAD. - W oknie dialogowym wybierz swój plik
.lspi 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.getrealigetpoint: 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!






