LISP w AutoCAD – automatyzacja i przykłady kodu
autocad lisp

Automatyzacja pracy w AutoCAD za pomocą AutoLISP

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

  1. Ładowanie skryptu:
    • W AutoCAD wpisz polecenie AP lub APPLOAD.
    • W oknie dialogowym wybierz swój plik .lsp i kliknij Load.
  2. Uruchamianie funkcji:
    • Wpisz nazwę swojej funkcji w wierszu poleceń (np. nazwa-funkcji) i naciśnij Enter.

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:: Prefiks c: oznacza, że funkcja będzie dostępna jako polecenie w AutoCAD.
  • setq: Służy do przypisywania wartości zmiennym.
  • getreal i getpoint: 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)
)
blacha węzłowa - konstrukcjie stalowe.
Efekt pracy skryptu LISP

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!

AutoCADdynamolispvba
Udostępnij:
Automatyzacja pracy w AutoCAD za pomocą AutoLISP
Napisane przez
Michał Wrochna
Co myślisz o tym artykule?
0 reakcji
love
0
like
0
so-so
0
weakly
0
0 komentarzy
Najnowsze komentarze
  • Najnowsze komentarze
  • Najlepsze komentarze
Zaloguj się, aby dodać komentarz.
Prawa zastrzeżone Pi Corp sp. z o.o. copyright 2020-2022