LISP w programie AutoCAD jest idealnym narzędziem służącym do automatyzacji pracy projektanta. Dzięki temu językowi programowania – nie martw się, wszystko zrozumiesz :) – jesteśmy w stanie przygotować proste aplikacje, dzięki którym zaoszczędzimy sobie mozolnej i powtarzalnej pracy. Zapraszam Cię na 2-odcinkowy cykl tutoriali, w którym napiszemy praktyczną aplikację LISP.
Cel
W pierwszej kolejności wyznaczmy sobie cel – jakie zadanie ma spełniać aplikacja i jakie procesy usprawniać/przyspieszać? W naszym przypadku będziemy chcieli usprawnić proces rysowania grupy drzew (dokumentacja techniczna dla terenów zieleni). Ty natomiast pomyśl o swojej branży i o tym co byś chciał usprawnić – wiedza, którą tutaj otrzymasz będzie uniwersalna. To jak ma wyglądać grupa drzew na rysunku przedstawia poniższy obraz:
Grupa drzew składa się z:
- minimum dwóch okręgów o odpowiedniej średnicy
- punktów wyznaczających pień drzewa
Co istotne okręgi grupy, które na siebie nachodzą są ucięte w miejscu łączenia:
Co będziemy potrzebować?
- Przede wszystkim musimy wiedzieć w jakich punktach użytkownik chce wstawić każde poszczególne drzewo grupy
- Musimy wiedzieć ile drzew w grupie przewiduje użytkownik aplikacji
- Musimy zapytać użytkownika o średnicę korony wstawianego drzewa
Zacznijmy pisać tego LISP’a!
Na karcie Zarządzaj w panelu Aplikacje odnajdziesz edytor Visual LISP. Po uruchomieniu utwórz nowy plik i w nim rozpocznij pisanie programu. O wszystkich szczegółach opowiadam w filmie na górze tej strony.
LISP to lista funkcji, która zawsze zawarta jest w nawiasach:
( tutaj są funkcje )
Zaraz za pierwszym nawiasem zdefiniujemy naszą pierwszą funkcję – dzięki wstawieniu “c:” będziemy mogli później wywołać program z linii poleceń AutoCADa, dokładnie tak samo jak uruchamia się zwykłe polecenia. Funkcja GDRZEW (Grupa Drzew) nie zawiera argumentów:
(DEFUN C:GDRZEW() )
Kolejny krok to definicja zmiennych, w których będziemy przechowywali różne dane – głównie pobrane od usera. Aby zdefiniować pierwszą zmienna PIEN wpisz SETQ:
(DEFUN C:GDRZEW() (SETQ PIEN (GETPOINT "\nWskaz punkt wstawienia na rysunku: ")) )
Dzięki temu, oprócz stworzenia zmiennej, wykonamy operację przypisania wartości. A wartość dla tej zmiennej poda nam sam użytkownik ponieważ funkcja GETPOINT w AutoCAD pozwoli wskazać mu punkt w przestrzeni CAD’a. Analogicznie poprosimy użytkownika o średnicę korony:
(DEFUN C:GDRZEW() (SETQ PIEN (GETPOINT "\nWskaz punkt wstawienia na rysunku: ")) (SETQ KORONA (GETREAL "\nPodaj srednice korony: ")) )
Tym razem jednak wykorzystamy GETREAL do uzyskania liczby rzeczywistej. W momencie gdy posiadamy te podstawowe informacje to możemy przystąpić do faktycznego narysowania okręgów i punktu. Będziemy wykorzystywać do tego funkcję COMMAND:
(DEFUN C:GDRZEW() (SETQ PIEN (GETPOINT "\nWskaz punkt wstawienia na rysunku: ")) (SETQ KORONA (GETREAL "\nPodaj srednice korony: ")) (COMMAND "_circle" "_non" PIEN "_Diameter" KORONA) (COMMAND "_point" PIEN) )
Jaki widzisz po funkcji command w cudzysłowie wpisujemy polecenie, a następnie kolejne parametry, które są wymagane do realizacji polecenia (tak samo jak w AutoCADzie). W momencie gdy należy narysować punkt (_point) odwołujemy się jedynie do zmiennej PIEN, która przechowuje współrzędne punktu. W ostatnim kroku zapytamy użytkownika ile drzew chce wstawić (ILOSCD):
(DEFUN C:GDRZEW() (SETQ ILOSCD (GETINT "\nPodaj ilosc drzew w grupie: ")) (REPEAT ILOSCD (SETQ PIEN (GETPOINT "\nWskaz punkt wstawienia na rysunku: ")) (SETQ KORONA (GETREAL "\nPodaj srednice korony: ")) (command "_circle" "_non" PIEN "_Diameter" KORONA) (command "_point" PIEN) ) )
Zobacz jeszcze jedną istotną rzecz. Aby program mógł narysować więcej niż jedno drzewo musieliśmy zastosować pętlę REPEAT. Pętla ta zostanie wykonana tyle razy ile określi użytkownik (zmienna ILOSCD). Wszystkie funkcje w pętli zamykamy nawiasem.
Spróbujmy teraz użyć naszej funkcji w AutoCADzie. W edytorze wybierz Narzędzia -> Wczytaj tekst z edytora (Ctrl+Alt+E). Teraz w AutoCADzie wpisz GDRZEW. Jak widzisz program został uruchomiony i użytkownik musi podać ilość drzew w grupie. Zobacz film na górze tej strony.
Już niedługo kolejna część tego tutoriala, gdzie wykonamy kolejne elementy naszego programu.