r 2


3/![bojn!{bd{ojfnz!q3ph3bnpxb 44
Zanim zaczną omawiać na poszczególnych przykładach podstawy jązyka AutoLISP,
chciałbym w paru punktach podać jeszcze trochą teorii, która mam nadzieją, bądzie
pomocna przy pisaniu Twoich własnych programów w AutoLISPie.
Wszystkie programy w AutoLISPie są plikami tekstowymi, które ładujemy do interpre-
tera AutoLISPu funkcjÄ… load. Podczas Å‚adowania programu nastÄ…puje jego weryfikacja
od strony leksykalnej, natomiast podczas wykonywania programu nastÄ…puje jego wery-
fikacja od strony formalnej. Ponieważ w pierwszym okresie programowania w Auto-
LISPie prawie każdy program bądzie zawierał mniejszą lub wiąkszą ilość błądów,
Twoja praca bądzie polegać przede wszystkim na wczytywaniu, uruchamianiu i popra-
wianiu błądów w kodzie zródłowym programu. Dlatego też chcą pokazać Ci, jak
z poziomu programu AutoCAD można wywołać edytor tekstu.
Pomocny okaże sią tutaj zbiór ACAD.PGP (programm parameters file  plik para-
metrów wywołania programów). Zbiór ACAD.PGP powinien sią znajdować w katalogu
głównym AutoCADa  jeśli go tam nie ma, należy go utworzyć dowolnym edytorem
ASCII.
45 BvupMJTQ! !q3bluzd{oz!lv3t
Plik parametrów wywołania programów ACAD.PGP jest plikiem tekstowym, zawiera-
jącym definicje poleceń AutoCADa. Plik ten podzielono na dwie sekcje: w sekcji pier-
wszej zdefiniowano sposoby działania programu w przypadku wywoływania poleceń
zewnątrznych, natomiast sekcja druga dotyczy tworzenia skrótów nazw poleceń stan-
dardowych. Plik ACAD.PGP może również zawierać komentarze. Komentarz jest tek-
stem informacyjnym, poprzedzonym średnikiem (;).
My zajmiemy sią tutaj sekcją pierwszą  sekcją poleceń zewnątrznych.
Każda linia pliku ACAD.PGP, dotycząca polecenia zewnątrznego, posiada piąć pól.
Pola te są od siebie oddzielone przecinkami, nawet jeżeli są puste. W kolejnych polach
wystÄ…pujÄ…:
3/2/2/!Ob{xb!qpmfdfojb
3/2/2/!Ob{xb!qpmfdfojb
3/2/2/!Ob{xb!qpmfdfojb
3/2/2/!Ob{xb!qpmfdfojb
Dodane polecenie zewnÄ…trzne AutoCADa. Jest to polecenie podawane w odpowiedzi na
zgłoszenie Command: (Polecenie:), wystąpujące w linii poleceń AutoCADa. Nie może
ono pokrywać sią z nazwą polecenia wewnątrznego, gdyż w takim przypadku polecenie
zewnątrzne bądzie ignorowane. Nazwa może zawierać litery duże i małe.
3/2/3/!Qpmfdfojf!TP!)tztufnv!pqf3bdzkofhp*
3/2/3/!Qpmfdfojf!TP!)tztufnv!pqf3bdzkofhp*
3/2/3/!Qpmfdfojf!TP!)tztufnv!pqf3bdzkofhp*
3/2/3/!Qpmfdfojf!TP!)tztufnv!pqf3bdzkofhp*
Pole zawiera łańcuch tekstowy wysyłany do systemu operacyjnego po wywołaniu pole-
cenia zewnątrznego AutoCADa. Może to być każde polecenie dopuszczalne w danym
systemie operacyjnym, również polecenie wewnątrzne systemu takie, jak dir czy set.
Aańcuch może zawierać przełączniki, parametry itd.
3/2/4/!Pct{b3!{xbmojbofk!qbnj dj
3/2/4/!Pct{b3!{xbmojbofk!qbnj dj
3/2/4/!Pct{b3!{xbmojbofk!qbnj dj
3/2/4/!Pct{b3!{xbmojbofk!qbnj dj
Pole to służy do zapewnienia kompatybilności z poprzednimi wersjami AutoCADa
i, mimo że AutoCAD nie korzysta z danych zawartych w tym polu, musi być ono obecne
i zwykle przypisuje mu sią wartość 0.
3/2/5/![h pt{fojf
3/2/5/![h pt{fojf
3/2/5/![h pt{fojf
3/2/5/![h pt{fojf
W polu tym umieszcza sią łańcuch tekstowy, wyświetlany po wywołaniu polecenia
w systemie operacyjnym. Odpowiedz na to zgłoszenie jest dołączana do łańcucha
wystÄ…pujÄ…cego w polu drugim (nazwa polecenia w systemie operacyjnym) lub podaje
nazwą bloku, gdy kod powrotu ma przypisaną wartość 1. Jeśli pierwszy znak w polu
jest gwiazdką (*), wtedy odpowiedz może zawierać spacje i musi zostać potwierdzona
klawiszem ENTER. Gdy gwiazdka nie wystąpuje, odpowiedz można zakończyć bądz
spacją, bądz klawiszem ENTER. W przypadku rezygnacji ze zgłoszenia, pole zawiera
łańcuch pusty ("").
3/![bojn!{bd{ojfnz!q3ph3bnpxb 46
3/2/6/!Lpe!qpx3puv
3/2/6/!Lpe!qpx3puv
3/2/6/!Lpe!qpx3puv
3/2/6/!Lpe!qpx3puv
Jest to pole zawierające opcjonalny parametr w postaci liczby całkowitej, odpowia-
dającej sumie wartości poszczególnych bitów, np. jeśli użytkownik chce osiągnąć tryby
pracy zgodne z wartościami 1, 2 i 4, do pola wprowadza wartość 7. Poszczególne
wartości mają nastąpujące przypisania:
0  powrót do ekranu tekstowego,
1  wczytaj plik DXB,
2  utwórz blok z pliku DXB,
4  powrót do poprzedniego ekranu.
Z powyższych kodów interesującymi nas wartościami są 0 lub 4. AutoCAD ignoruje w pliku
ACAD.PGP wszystkie linie puste i wszystkie teksty leżące na prawo od średnika.
Ponieważ moim ulubionym edytorem jest Norton Edytor 2.0, tak wiąc dopisałem nastą-
pujÄ…cÄ… liniÄ… w pliku ACAD.PGP:
NE,C:\NC\NE,0,Zbior do edycji: ,4
W ten sposób mam nastąpujące możliwości edycji plików z programami lispowymi:
Command: neµ!
µ!
µ!
µ!
Zbior do edycji: demo1.lspµ!
µ!
µ!
µ!
Powyższa sekwencja wywołuje edytor Nortona z jednoczesnym wczytaniem zbioru
DEMO1.LSP, a w przypadku, gdy zbiór DEMO1.LSP nie istnieje w bieżącym katalogu,
utworzenie pustego zbioru DEMO1.LSP w celu napisania w nim np. nowej funkcji.
Command: neµ!
µ!
µ!
µ!
Zbior do edycji: c:\users\marek\lisp\demo1.lspµ!
µ!
µ!
µ!
Powyższa sekwencja wywołuje edytor Nortona z jednoczesnym wczytaniem zbioru
DEMO1.LSP, znajdujÄ…cego siÄ… w katalogu C:\USERS\MAREK\LISP, a w przypadku, gdy
zbiór DEMO1.LSP nie istnieje w tym katalogu, utworzenie nowego zbioru DEMO1.LSP
w podanym katalogu.
Command: neµ!
µ!
µ!
µ!
Zbior do edycji: µ!
µ!
µ!
µ!
Powyższa sekwencja (naciśniącie samego ENTER w odpowiedzi na nazwą zbioru do
edycji) wywołuje edytor Nortona bez wczytywania jakiegokolwiek zbioru. Zbiór do
edycji można wybrać wywołując opcją FILE => OPEN..., która wyświetla okno dialo-
gowe katalogów i zbiorów, z których w łatwy sposób można wybrać żądany zbiór.
Command: neµ!
µ!
µ!
µ!
Zbior do edycji:
47 BvupMJTQ! !q3bluzd{oz!lv3t
Powyższa sekwencja przerywa komendą zewnątrzną  nastąpuje powrót do AutoCADa
bez uruchamiania edytora. Sekwencja powyższa może być przydatna w przypadku
pomyłkowego wywołania edytora Nortona.
Na koniec tego punktu chciałbym jeszcze wymienić kilka najważniejszych zalet pro-
gramu Norton Edytor 2.0. Zalety te to:
1. Stosowanie menu rozwijanych, poprzez które możliwy jest dostąp do wiąkszości
funkcji programu.
2. Możliwość współpracy z myszą.
3. Możliwość pracy z bardzo długimi dokumentami.
4. Możliwość pracy jednocześnie z dwoma dokumentami, w dwóch oknach edycji.
5. Istnienie operacji blokowych umożliwiających przenoszenie bloków tekstu
w obrąbie jednego bądz dwóch dokumentów.
6. Możliwość sprawdzania w tekście dokumentu poprawnej ilości nawiasów
prawych i lewych każdego rodzaju. Z funkcji tej bądą korzystać w pierwszej
kolejności użytkownicy piszący programy komputerowe.
7. Możliwość wydrukowania z poziomu edytora całego dokumentu lub zaznaczo-
nego bloku  mamy tym samym możliwość wydrukowania kodu interesującej
nas funkcji bez drukowania całego programu.
Cennymi właściwościami ułatwiającymi redagowanie tekstu są możliwości skonfigu-
rowania edytora tak, aby:
1. Marginesy ustawiane były automatycznie, zgodnie z wybraną wcześniej ich
długością.
2. Słowa wychodzące poza zadeklarowaną długość linii były przenoszone automa-
tycznie do nastÄ…pnej linii.
3. Wciącia linii tekstowych były ustawiane automatycznie przy przechodzeniu do
linii nastÄ…pnej.
Istnieje też możliwość automatycznego formatowania paragrafu bądz całego doku-
mentu, półautomatycznego wprowadzania znaków łamania stron lub ich usuwania oraz
ustawiania wielkości marginesów na stronie drukowanej. Z możliwości tych nie należy
jednak korzystać podczas pisania kodów zródłowych programów, gdyż interpreter
AutoLISPu wymaga czystego kodu ASCII (tzn. bez kodów formatujących dokument).
3/![bojn!{bd{ojfnz!q3ph3bnpxb 48
W punkcie tym zostanie podanych kilka najważniejszych uwag, które  mam nadzieją
 pomogą Ci zminimalizować ilość błądów podczas pisania Twoich pierwszych pro-
gramów w AutoLISPie.
A oto najważniejsze zasady:
1. W pliku z kodem zródłowym programu oddzielaj od siebie poszczególne fun-
kcje, na przykład:
;========================================
;
(defun FUNKCJA_1 ()
(progn
ciało_funkcji
);progn
);FUNKCJA_1
;
;========================================
;
(defun FUNKCJA_2 ()
(progn
ciało_funkcji
);progn
);FUNKCJA_2
;
;========================================
2. Stosuj wciącia w kodzie zródłowym programu. Tak rozplanuj swój kod, że im
bardziej zagnieżdżona jest dana linia kodu, tym dalej odsuniąta jest od lewego
marginesu. W swoich programach stosujÄ… wciÄ…cia co dwie kolumny, np.
(defun FUNKCJA_1 ()
(progn
(setq
x1 (getint "\nPodaj liczbe : ")
x2 (* x1 2)
);setq
(princ
(strcat
"\nLiczba x2 = "
(rtos x2 2 0)
);strcat
);princ
);progn
);FUNKCJA_1
49 BvupMJTQ! !q3bluzd{oz!lv3t
3. Kiedy jest to możliwe, stosuj grupowanie komend. Staraj sią również nie
umieszczać wiącej niż jednej instrukcji w jednej linii, np.
(setq x1 1 x2 "string" x3 (list 1 2 3))
rozbij na:
(setq
x1 1
x2 "string"
x3 (list 1 2 3)
);setq
4. Opatruj komentarzem nawias zamykajÄ…cy instrukcji, np.
(setq
.....
.....
);setq
(command
.....
.....
);command
5. Korzystaj z komentarzy w kodzie zródłowym programu. Obfite komentowanie
kodu zródłowego podczas pisania programów jest pracą, która sowicie sią
opłaca. Komentarze te bądą przydatne dla Ciebie jak również i dla przyszłego
użytkownika Twoich programów, który może być zmuszony do dostosowania
programu do własnych potrzeb przez zmianą cząści jego kodu. Komentarze
mogą być wykorzystywane na przykład w nastąpujących celach:
" do nadawania tytułów, podawania autora lub daty utworzenia funkcji lub
programu,
" podawania instrukcji użytkowania programu,
" podawania uwag objaśniających wewnątrz kodu funkcji,
" umieszczania osobistych notatek podczas uruchamiania programu,
" wstawiania znaków poprawiających estetyką programu.
6. Korzystaj z funkcji edytora do wyszukiwania odpowiadających sobie nawiasów
otwierajÄ…cych i zamykajÄ…cych  sprawdzaj zawsze, czy nawiasowi otwiera-
jącemu funkcji odpowiada nawias zamykający. Jeśli Twój edytor nie ma opcji
wyszukiwania nawiasów  najwyższy czas wymienić go na inny.
7. Po napisaniu kodu funkcji przetestuj ją natychmiast, zanim zaczniesz pisać
nastÄ…pne funkcje.
3/![bojn!{bd{ojfnz!q3ph3bnpxb 4:
Jak już wspomniałem wcześniej, programy w AutoLISPie zapisywane są w plikach
tekstowych w formacie ASCII. Aby skorzystać z danego programu, należy go najpierw
załadować do interpretera AutoLISPu a nastąpnie uruchomić. Poniżej, w poszcze-
gólnych punktach, podane zostaną metody ładowania i uruchamiania programów
w AutoLISPie.
3/4/2/ Jouf3bldzkof! bepxbojf!q3ph3bn x
3/4/2/ Jouf3bldzkof! bepxbojf!q3ph3bn x
3/4/2/ Jouf3bldzkof! bepxbojf!q3ph3bn x
3/4/2/ Jouf3bldzkof! bepxbojf!q3ph3bn x
x!BvupMJTQjf
x!BvupMJTQjf
x!BvupMJTQjf
x!BvupMJTQjf
W metodzie tej, wpisujemy z klawiatury nazwą żądanego programu. Nazwa ta jest
argumentem standardowej funkcji AutoLISPu load, przeznaczonej do Å‚adowania
programów w AutoLISPie.
Format funkcji load jest nastÄ…pujÄ…cy:
(load filename [onfailure])
Argument filename jest łańcuchem alfanumerycznym (wartość typu string), króry repre-
zentuje nazwą pliku bez rozszerzenia (domyślnie zakładane jest rozszerzenie .LSP).
Jeżeli rozszerzenie pliku jest inne niż .LSP, należy je podać razem z nazwą pliku, na
przykład TEST.DAT. Ponadto filename może zawierać przedrostek określający ścieżką
dostąpu, na przykład:
"c:/acad12/users/marek/kombajn"
lub
"c:\\acad12\\users\\marek\\kombajn".
Jeśli nie podasz w argumencie filename ścieżki dostąpu do pliku, to funkcja load prze-
szukuje ścieżką biblioteczną AutoCADa w nastąpującej kolejności:
" katalog bieżący,
" katalog zawierający plik bieżącego rysunku,
" katalogi określone przez zmienną środowiskową ACAD,
" katalog zawierajÄ…cy pliki programu AutoCAD.
Jeśli argument filename zawiera ścieżką dostąpu, to funkcja load szuka pliku tylko na
tej ścieżce. Jeżeli na tej ścieżce/ścieżkach zostanie znaleziony podany plik, to jest on
wczytywany do pamiąci. Jeśli operacja ładowania zakończy sią sukcesem, load zwraca
wartość ostatniego wyrażenia w pliku, które cząsto jest nazwą ostatniej zdefiniowanej
51 BvupMJTQ! !q3bluzd{oz!lv3t
w pliku funkcji. Jeżeli operacja load zakończyła sią porażką, zostaje wyświetlony odpo-
wiedni komunikat o błądzie. Jeżeli jednak funkcja load zawiera opcjonalny argument
onfailure (jeśli_błąd), to funkcja zwraca wartość tego argumentu. Mamy wówczas
możliwość wypisania własnego komunikatu o błądzie.
Zakładając przykładowo, że plik C:/ACAD12/USERS/MAREK/TEST1.LSP zawiera
dwie definicje funkcji:
;====================
(defun FUNKCJA_1 ()
(progn
ciało_funkcji
);progn
);FUNKCJA_1
;====================
(defun FUNKCJA_2 ()
(progn
ciało_funkcji
);progn
);FUNKCJA_2
;====================
oraz, że plik TEST2.LSP nie istnieje, a zmienna środowiskowa ACAD zawiera katalog
C:/ACAD12/USERS/MAREK, otrzymamy nastąpujące wyniki wywołania funkcji load:
Command: (load "c:/acad12/users/marek/test1")µ!
µ!
µ!
µ!
FUNKCJA_2
Command:
Powyższe wyrażenie powoduje przeszukanie katalogu C:/ACAD12/USERS/MAREK
w poszukiwaniu pliku TEST1.LSP. Ponieważ plik ten istnieje w podanym katalogu,
zostaje on załadowany oraz zostaje zwrócona wartość ostatniego wyrażenia w pliku 
FUNKCJA_2.
Command: (load "c:\\acad12\\users\\marek\\test1")µ!
µ!
µ!
µ!
FUNKCJA_2
Command:
Jest to przykład podobny do poprzedniego z tą różnicą, że ścieżka dostąpu do pliku
podana została w inny sposób.
Command: (load "test1")µ!
µ!
µ!
µ!
FUNKCJA_2
Command:
Powyższe wyrażenie powoduje przeszukanie ścieżki bibliotecznej AutoCADa, w poszu-
kiwaniu pliku TEST1.LSP. Ponieważ plik ten znajduje sią w katalogu C:/ACAD12/
USERS/MAREK, a parametr ten został umieszczony w zmiennej środowiskowej ACAD,
plik zostaje załadowany oraz zostaje zwrócona wartość ostatniego wyrażenia
w pliku  FUNKCJA_2.
Command: (load "test1" "\nPlik TEST1.LSP nie zostal
wczytany.")µ!
µ!
µ!
µ!
3/![bojn!{bd{ojfnz!q3ph3bnpxb 52
FUNKCJA_2
Command:
W powyższym wyrażeniu argument onfailure = "\nPlik TEST1.LSP nie zostal
wczytany." nie jest wykorzystany przez funkcją load, bowiem plik TEST1.LSP został
znaleziony na ścieżce bibliotecznej AutoCADa oraz podczas jego wczytywania nie
wykryto błądów.
Command: (load "test2" "\nPlik TEST2.LSP nie zostal
wczytany.")µ!
µ!
µ!
µ!
Plik TEST2.LSP nie zostal wczytany.
Command:
Powyższe wyrażenie powoduje przeszukanie ścieżki bibliotecznej AutoCADa, w poszu-
kiwaniu pliku TEST2.LSP. Ponieważ plik ten nie istnieje, funkcja load zwraca wartość
argumentu onfailure = "\nPlik TEST2.LSP nie zostal wczytany.".
Command: (load "test2")µ!
µ!
µ!
µ!
Can't open "test2.lsp" for input
error: LOAD failed
(LOAD "test2")
*Cancel*
Command:
Powyższe wyrażenie powoduje przeszukanie ścieżki bibliotecznej AutoCADa, w poszu-
kiwaniu pliku TEST2.LSP. Ponieważ plik ten nie istnieje oraz nie został zdefiniowany
opcjonalny argument onfailure, funkcja load powoduje wypisanie standardowego błądu
AutoLISPu.
Funkcja load może być użyta wewnątrz innej funkcji AutoLISPu, a nawet
rekurencyjnie (we wczytywanym pliku).
3/4/3/! bepxbojf!q3ph3bn x!x!BvupMJTQjf
3/4/3/! bepxbojf!q3ph3bn x!x!BvupMJTQjf
3/4/3/! bepxbojf!q3ph3bn x!x!BvupMJTQjf
3/4/3/! bepxbojf!q3ph3bn x!x!BvupMJTQjf
{b!qpnpd !qmjlv!BDBE/MTQ
{b!qpnpd !qmjlv!BDBE/MTQ
{b!qpnpd !qmjlv!BDBE/MTQ
{b!qpnpd !qmjlv!BDBE/MTQ
Plik ACAD.LSP pozwala na wczytanie biblioteki programów, napisanych w Auto-
LISPie, przy każdym uruchamianiu AutoCADa lub rozpoczynaniu nowego rysunku.
Plik ACAD.LSP może zawierać kod AutoLISPu dla jednej lub wiąkszej liczby funkcji
lub, po prostu, szereg wywołań funkcji load. Zalecam użycie tego drugiego sposobu
postąpowania, gdyż pozwala on na łatwiejsze przeprowadzenie ewentualnych mody-
fikacji zawartości biblioteki.
Gdy w pliku ACAD.LSP umieścimy nastąpujące linie:
(load "ddtype")
(load "edge")
(load "mvsetup")
53 BvupMJTQ! !q3bluzd{oz!lv3t
przy każdym uruchamianiu AutoCADa lub rozpoczynaniu nowego rysunku automa-
tycznie bÄ…dÄ… wczytywane pliki: DDTYPE.LSP, EDGE.LSP oraz MVSETUP.LSP.
Gdy w pliku ACAD.LSP umieścimy nastąpującą linią:
(defun c:k ()(load "kombajn"))
wtedy wpisujÄ…c literÄ… k (lub K) w odpowiedzi na polecenie AutoCADa Command:,
spowodujemy załadowanie pliku KOMBAJN.LSP.
Jeśli podczas wczytywania pliku ACAD.LSP zostanie wykryty błąd, pozostała cząść
pliku jest ignorowana i nie zostaje wczytana. W takim przypadku pomocne może
okazać sią użycie w funkcji load opcjonalnego argumentu onfailure (jeśli_błąd).
Plik ACAD.LSP może wtedy wyglądać nastąpująco:
(princ (load "ddtype" "\nPlik DDTYPE.LSP nie zostal
wczytany."))
(princ (load "edge" "\nPlik EDGE.LSP nie zostal wczytany."))
(princ (load "mvsetup" "\nPlik MVSETUP.LSP nie zostal
wczytany."))
(princ)
Jeśli wywołanie funkcji load kończy sią pozytywnie, zwracana jest wartość ostatniego
wyrażenia w pliku (zwykle nazwa ostatniej funkcji zdefiniowanej w pliku lub komu-
nikat dotyczący sposobu użycia funkcji). W przypadku wykrycia błądu, zwracana jest
wartość opcjonalnego argumentu onfailure. W powyższym przykładzie, wartość zwra-
cana przez funkcją load została podstawiona jako argument funkcji princ, co spowo-
duje, w razie pojawienia sią błądu, wyświetlenie odpowiedniego komunikatu w linii
poleceń AutoCADa. Na przykład, jeśli zostanie wykryty błąd podczas wczytywania
pliku DDTYPE.LSP, funkcja princ wyświetli komunikat:
Plik DDTYPE.LSP nie zostal wczytany.
i AutoCAD bądzie kontynuował wczytywanie dwóch nastąpnych plików.
Plik ACAD.LSP może również zawierać komentarze. Komentarz jest tekstem informa-
cyjnym, poprzedzonym średnikiem ";".
Plik ACAD.LSP poszukiwany jest w pierwszej kolejności w katalogu bieżącym.
Oznacza to, że masz możliwość tworzenia wielu plików ACAD.LSP, znajdu-
jących się wróżnych katalogach i obsługujących aplikacje tam umieszczone.
W pliku ACAD.LSP nie należy umieszczać wywołań funkcji command, ani
żadnych innych funkcji posiadających bezpośredni dostęp do rysunkowej bazy
danych. Na etapie wczytywania pliku ACAD.LSP rysunek nie jest jeszcze
w pełni zainicjowany, tak że mogą wystąpić nieprzewidziane zachowania
systemu. Aby osiągnąć efekt automatycznego wykonywania ciągu wywołań
funkcji command po wczytaniu rysunku, należy umieścić je w definicji defun
specjalnej funkcji S::STARTUP.
3/![bojn!{bd{ojfnz!q3ph3bnpxb 54
3/4/4/! bepxbojf!q3ph3bn x!x!BvupMJTQjf
3/4/4/! bepxbojf!q3ph3bn x!x!BvupMJTQjf
3/4/4/! bepxbojf!q3ph3bn x!x!BvupMJTQjf
3/4/4/! bepxbojf!q3ph3bn x!x!BvupMJTQjf
{b!qpnpd !plob!ejbmphpxfhp
{b!qpnpd !plob!ejbmphpxfhp
{b!qpnpd !plob!ejbmphpxfhp
{b!qpnpd !plob!ejbmphpxfhp
MPBE!BVUPMJTQ!BOE!BET!GJMFT
MPBE!BVUPMJTQ!BOE!BET!GJMFT
MPBE!BVUPMJTQ!BOE!BET!GJMFT
MPBE!BVUPMJTQ!BOE!BET!GJMFT
Okno dialogowe Load AutoLISP and ADS Files (Wczytywanie plików AutoLISP
i ADS) pozwala Ci zarządzać Twoimi ulubionymi programami. Daje ono możliwość
łatwego odnajdowania i wybierania programów użytkowych. Po zlokalizowaniu pliku,
staje sią on cząścią listy Files to Load (Pliki do wczytania). Dziąki temu nie bądziesz go
musiał szukać za każdym razem, gdy jest potrzebny. Nawet po opuszczeniu AutoCADa
lista wybranych plików zostaje zachowana w pliku dyskowym APPLOAD.DFS.
Okno dialogowe Load AutoLISP and ADS Files wywołujemy z menu górnego [File] 
[Applications...] ([Pliki]  [Aplikacje...]) lub wpisujemy z klawiatury APPLOAD.
Poszczególne opcje okna dialogowego oznaczają:
File... (Plik...)
Dodaje aplikacją do listy. Wyświetlone zostaje okno dialogowe (podobne jak w komen-
dzie OPEN (OTWÓRZ)) i program oczekuje na wskazanie pliku aplikacji. Nazwa apli-
kacji i ścieżka dostąpu zostaje umieszczona na liście w oknie dialogowym.
Remove (Usuń z listy)
Usuwa wskazane aplikacje z listy.
Save List (Zapisz ListÄ™)
Zaznaczenie przełącznika spowoduje automatyczny zapis na dysku utworzonej listy
aplikacji w momencie opuszczenia okna dialogowego przyciskiem Load, Unload lub
Exit.
55 BvupMJTQ! !q3bluzd{oz!lv3t
Load (Wczytaj)
Wczytuje aplikacje wskazane w oknie kartotekowym Files to Load.
Unload (Usuń)
Usuwa z pamiÄ…ci aplikacje ADS.
Exit (Koniec)
Opuszcza okno dialogowe.
Help... (Pomoc...)
Wyświetla standardowe okno pomocy AutoCADa z opisem komendy APPLOAD.
3/4/5/!Gvoldkb!T;;TUBSUVQ
3/4/5/!Gvoldkb!T;;TUBSUVQ
3/4/5/!Gvoldkb!T;;TUBSUVQ
3/4/5/!Gvoldkb!T;;TUBSUVQ
Gdy omawiałem zastosowanie pliku ACAD.LSP, wspomniałem, że aby osiągnąć efekt
automatycznego wykonywania ciągu wywołań funkcji command po wczytaniu
rysunku, należy umieścić je w definicji defun specjalnej funkcji S::STARTUP. Jeżeli
funkcja ta jest umieszczona w pliku ACAD.LSP, to zostanie ona automatycznie
wywołana (bez żadnych argumentów) przy każdym wczytaniu istniejącego rysunku lub
utworzeniu nowego. Dlatego utworzonÄ… przy pomocy defun definicjÄ… funkcji
S::STARTUP można umieścić w pliku ACAD.LSP tak, aby zawsze, na początku sesji
edycyjnej wykonywana była sekwencja określonych czynności wstąpnych. Użycie
funkcji S::STARTUP przeanalizujemy na nastąpujących przykładach.
Q3{zl be!2
Poniższa zawartość pliku ACAD1.LSP spowoduje utworzenie warstw 1 i 2, nadanie
warstwie 1 koloru czerwonego, warstwie 2 koloru niebieskiego, narysowanie na
warstwie 1 okrągu o środku w punkcie (6,4.5) i promieniu 2, narysowanie na warstwie 2
trójkąta o wierzchołkach (2,2), (6,7), (10,2) oraz ustalenie warstwy 0 jako warstwy
bieżącej.
;=================================================ACAD1.LSP
;test funkcji S::STARTUP - wersja 1
;
(defun S::STARTUP ()
(progn
(princ "\nRozpoczecie wykonywania funkcji startowej.")
(command
"_zoom" "_window" "0,0" "12,9"
"_layer"
"_new" "1,2"
"_color" "1" "1"
"_color" 5 2
""
"_layer" "_set" "1" ""
"_circle" (list 6 4.5) 2
3/![bojn!{bd{ojfnz!q3ph3bnpxb 56
"_layer" "_set" "2" ""
"_line" "2,2" '(6 7) (list 10 2) "_c"
"_layer" "_set" "0" ""
);command
(princ "\nZakonczenie wykonywania funkcji startowej.")
(princ)
);progn
);S::STARTUP
;
;=================================================KONIEC
Omówmy teraz wyróżnione linie programu:
Rozpoczynamy ciąg wywołań funkcji command.
Funkcja command posiada format:
(command [arguments]...)
i służy do wywołania poleceń AutoCADa z programu napisanego w jązyku
AutoLISP. Argumentami funkcji command sÄ… polecenia programu AutoCAD
i ich opcje. Argumenty te mogą mieć postać łańcuchów alfanumerycznych, liczb
typu real i integer oraz punktów, zależnie od tego, czego oczekuje wykonywana
właśnie funkcja AutoCADa.
Wywołujemy standardowe polecenie AutoCADa LAYER (WARSTWA). Znak
podkreślenia "_" przed nazwą komendy umożliwia jej rozpoznanie w naro-
dowych wersjach AutoCADa.
Tak wiÄ…c sekwencja:
(command "_layer" ...)
jest równoważna sekwencji:
(command "warstwa" ...)
Obsługa języków narodowych została wprowadzona od wersji 12 programu
AutoCAD. We wcześniejszych wersjach AutoCADa komenda "_layer" nie
zostanie rozpoznana (dotyczy to tak wersji angielskiej jak i wersji narodowych).
BÄ…dÄ…c w dalszymciÄ…gu w trakcie wykonywania komendy LAYER, tworzymy
dwie nowe warstwy  1 i 2. Nazwy warstw oddzielone sÄ… od siebie przecinkami
i umieszczone w jednym łańcuchu.
Przyporządkowujemy kolor "1" (czerwony) do warstwy "1". Zarówno numer
koloru jak i nazwa warstwy podane są jako łańcuchy alfanumeryczne.
Przyporządkowujemy kolor 5 (niebieski) do warstwy 2. Zarówno numer koloru
jak i nazwa warstwy podane są jako liczby całkowite.
Kończymy wykonywanie komendy LAYER. Podwójny cudzysłów rozumiany
jest przez AutoLISP jako naciśniącie klawisza ENTER.
Wywołujemy nową komendą LAYER i powodujemy ustalenie warstwy 1 jako
warstwy aktualnej.
Wywołujemy komendą CIRCLE, rysującą okrąg.
57 BvupMJTQ! !q3bluzd{oz!lv3t
Ustalamy warstwÄ… 2 jako aktualnÄ….
Wywołujemy komendą LINE i rysujemy trójkąt złożony z trzech linii.
Zaprezentowane tutaj zostały trzy sposoby podawania współrzędnych punktu.
Dwa pierwsze z nich, tj. "2,2" '(6 7) są to współrzędne punktu podane w sposób
jawny (nie może tu wystąpić wyrażenie AutoLISPu). W sposobie trzecim, tj. (list
10 2) możemy użyć wyrażeń AutoLISPu, np.:
(setq
x 10
y 1
punkt (list x (+ y 1))
);setq
Zauważ, że utworzono tylko 2 boki trójkąta. Narysowanie trzeciego boku
wymusza opcja "_c" (CLOSE  ZAMKNIJ) komendy LAYER, która powoduje
zamknięcie narysowanej figury.
Aby uruchomić plik ACAD1.LSP, wykonaj jedną z nastąpujących czynności:
" dodaj zawartość pliku ACAD1.LSP do Twojego pliku ACAD.LSP (najlepiej na
końcu pliku ACAD.LSP)  pod warunkiem, że funkcja S::STARTUP nie była
wcześniej zdefiniowana w pliku ACAD.LSP,
" przekopiuj plik ACAD1.LSP na ACAD.LSP  pod warunkiem, że wbieżącym
katalogu nie ma jeszcze pliku ACAD.LSP  inaczej jego zawartość zostanie
skasowana.
Jeśli interesuje Cią, co sią stanie, gdy instrukcje z pliku ACAD1.LSP nie byłyby cząścią
funkcji S::STARTUP, wez w komentarz definicjÄ… funkcji, nie zapominajÄ…c o odpowia-
dającym jej nawiasie zamykającym  linie wziąte w komentarz zaznaczone są tłustym
drukiem, opuść program AutoCAD i wywołaj go ponownie lub wywołaj nowy rysunek
(aby wczytać ponownie plik ACAD.LSP => ACAD1.LSP).
;(defun S::STARTUP ()
(progn
ciało_funkcji
);progn
;);S::STARTUP
Q3{zl be!3
W przykładzie 1 pokazałem sposoby podawania współrządnych punktu. Położenie
każdego punktu na płaszczyznie można określić za pomocą układu współrządnych
prostokątnych (kartezjańskich) lub układu współrządnych biegunowych. Każdy rodzaj
współrządnych może być zapisany w formie współrządnych bezwzglądnych lub
w formie współrządnych wzglądnych (poprzedzonych znakiem @).
3/![bojn!{bd{ojfnz!q3ph3bnpxb 58
Współrządne bezwzglądne odnoszą sią do początku układu współrządnych, współ-
rządne wzglądne  do ostatnio wskazanego punktu. Jeżeli chcesz, aby wprowadzone
współrządne odniesione były do Globalnego Układu Współrządnych raczej niż do
układu bieżącego to poprzedz je znakiem *. Jeżeli znaki @ i * wystąpują razem to znak
@ powinien wystąpować przed *.
Poniższy przykład pokazuje kolejne sposoby podawania współrządnych punktów .
;*************************************************ACAD2.LSP
;Test funkcji S::STARTUP - wersja 2
;
;Podawanie wspolrzednych punktow w ukladzie
;bezwzglednym, wzglednym oraz biegunowym.
;
;=================================================
;Funkcja zatrzymujaca realizacje programu,
;dopoki uzytkownik nie nacisnie ENTER...
;
(defun CZEKAJ ()
(progn
;----------
(getstring "\nNacisnij ENTER...")
(princ)
;----------
);progn
);CZEKAJ
;
;=================================================
;
(defun S::STARTUP (/ p1 p2 p3 p4)
(progn
;----------
(command
"_cmdecho" "0"
"_blipmode" "_off"
"_ucs" "_world"
"_zoom" "_window" "0,0" "12,9"
);command
;----------
;zastosowanie wspolrzednych bezwzglednych
;
(princ "\nZastosowanie wspolrzednych bezwzglednych.")
(CZEKAJ)
(setq
p1 "1,1"
p2 '(1 8)
p3 (list 11 8)
p4 "11,1"
);setq
(princ "P1=")(princ p1)(princ " ")
(princ "P2=")(princ p2)(princ " ")
(princ "P3=")(princ p3)(princ " ")
(princ "P4=")(princ p4)(princ " ")
59 BvupMJTQ! !q3bluzd{oz!lv3t
(command
"_color" "1"
"_pline" p1 p2 p3 p4 "_c"
);command
;----------
;zastosowanie wspolrzednych wzglednych
;
(princ "\nZastosowanie wspolrzednych wzglednych.")
(CZEKAJ)
(setq
p1 "2,2"
p2 (strcat "@" "0,5")
p3 (strcat "@" "8,0")
p4 (strcat "@" "0,-5")
);setq
(princ "P1=")(princ p1)(princ " ")
(princ "P2=")(princ p2)(princ " ")
(princ "P3=")(princ p3)(princ " ")
(princ "P4=")(princ p4)(princ " ")
(command
"_color" "3"
"_pline" p1 p2 p3 p4 "_c"
);command
;----------
;zastosowanie wspolrzednych biegunowych
;
(princ "\nZastosowanie wspolrzednych biegunowych.")
(CZEKAJ)
(setq
p1 "3,3"
p2 "@3<90"
p3 "@6<0"
p4 "@-3<90"
);setq
(princ "P1=")(princ p1)(princ " ")
(princ "P2=")(princ p2)(princ " ")
(princ "P3=")(princ p3)(princ " ")
(princ "P4=")(princ p4)(princ " ")
(command
"_color" "5"
"_pline" p1 p2 p3 p4 "_c"
);command
;----------
(command "_color" "_bylayer")
;----------
(princ)
;----------
);progn
);S::STARTUP
;
;*************************************************KONIEC
W powyższym przykładzie, funkcją S::STARTUP podzielono na 4 główne sekcje:
3/![bojn!{bd{ojfnz!q3ph3bnpxb 5:
Ustawienie zmiennych poczÄ…tkowych.
Wyłączamy echo komend (CMDECHO) oraz znaczniki punktów (BLIPMODE),
ustawiamy globalny ukÅ‚ad współrzÄ…dnych oraz ekran roboczy o wymiarach 12×9.
Ponieważ występują różnice w określaniu granic rysunku prototypowego
w wersji 12 i 13 AutoCADa, we wszystkich przykładowych programach wyko-
rzystujących komendy do rysowania poszczególnych obiektów rysunkowych,
zastosowano komendę ZOOM do ustalenia odpowiednich rozmiarów okna
roboczego.
Przykład zastosowania współrządnych bezwzglądnych.
Jeszcze raz zostały tutaj powtórzone sposoby podawania współrządnych punktu
za pomocą łańcucha, listy kwotowanej oraz zwykłej listy.
Przykład zastosowania współrządnych wzglądnych.
Aby uzyskać efekt programowego przekazania współrządnych wzglądnych,
współrządne takie należy podać w formie łańcucha, gdzie pierwszym znakiem
włańcuchu jest znak @. Zgodnie z powyższym przykładem, współrządne punk-
tów p2, p3 i p4 wynoszą odpowiednio:
p2[X] = p1[X] + 0 = 2
p2[Y] = p1[Y] + 5 = 7
p3[X] = p2[X] + 8 = 10
p3[Y] = p2[Y] + 0 = 7
p4[X] = p3[X] + 0 = 10
p4[Y] = p3[Y] - 5 = 2
Przykład zastosowania współrządnych biegunowych wzglądnych.
Współrządne biegunowe podwane w formacie r<Ć określają położenie punktu na
Ć
Ć
Ć
płaszczyznie w biegunowym układzie współrządnych przez podanie promienia
i kąta odchylenia. Współrządne biegunowe mogą być bezwzglądne (obliczane
wzglądem bieżącego UCS) lub wzglądne (obliczane wzglądem ostatnio wprowa-
dzonego punktu). Współrządne biegunowe wzglądne @r<Ć określają położenie
Ć
Ć
Ć
wzglądem ostatnio wprowadzonego punktu. Współrządne biegunowe poprze-
dzone znakiem mnożenia * określają położenie wzglądem globalnego układu
współrządnych.
Układ odniesienia dla pomiaru kątów oraz dodatni kierunek kąta ustalamy
komendÄ… UNITS (JEDN).
Q3{zl be!4
Poniższa zawartość pliku ACAD3.LSP definiuje dwie funkcje: FUNKCJA_1 oraz
S::STARTUP. Zadaniem funkcji FUNKCJA_1 jest utworzenie warstwy WARSTWA_1
oraz narysowanie na niej kwadratu. Zadaniem funkcji S::STARTUP jest wywołanie
funkcji FUNKCJA_1.
61 BvupMJTQ! !q3bluzd{oz!lv3t
;=================================================ACAD3.LSP
;test funkcji S::STARTUP - wersja 3
;
;-------------------------------------------------
;definicja funkcji FUNKCJA_1
;
(defun FUNKCJA_1 ()
(progn
(command
"_zoom" "_window" "0,0" "12,9"
"_layer" "_new" "warstwa_1" ""
"_line" "2,2" "2,4" "4,4" "4,2" "_c"
"_layer" "_set" "0" ""
);command
(princ)
);progn
);FUNKCJA_1
;
;-------------------------------------------------
;wypisanie komunikatu na ekran tekstowy
;
(textscr) ;przejscie na ekran tekstowy
(princ "\nFunkcja FUNKCJA_1 zostala juz zaladowana do
pamieci.")
(princ "\nNacisnij ENTER w celu jej wykonania.")
(setq x (getstring T))
(graphscr) ;przejscie na ekran graficzny
;
;-------------------------------------------------
;definicja funkcji S::STARTUP
;
(defun S::STARTUP ()
(progn
(FUNKCJA_1) ;wywolanie funkcji FUNKCJA_1
(princ)
);progn
);S::STARTUP
;
;-------------------------------------------------
;=================================================KONIEC
Już od razu widać, że plik ACAD3.LSP składa sią z trzech głównych bloków:
" definicja funkcji FUNKCJA_1,
" wypisanie komunikatu na ekran tekstowy,
" definicja funkcji S::STARTUP.
Omówmy po kolei każdy z bloków.
W bloku pierwszym definiujemy funkcją FUNKCJA_1, której zadaniem jest naryso-
wanie kwadratu na warstwie WARSTWA_1. Ponieważ na etapie wczytywania pliku
3/![bojn!{bd{ojfnz!q3ph3bnpxb 62
ACAD.LSP rysunek nie jest jeszcze w pełni zainicjowany, funkcją tą musimy wywołać
z funkcji S::STARTUP.
W bloku drugim, po przejściu na ekran tekstowy, wypisujemy komunikat o pomyślnym
załadowaniu funkcji FUNKCJA_1. Aby zatrzymać wykonywanie pliku ACAD.LSP,
wywołujemy funkcją getstring, która pobiera z klawiatury dowolny ciąg znaków
zakończony naciśniąciem klawisza ENTER. Dopiero wówczas przechodzimy na ekran
graficzny AutoCADa i tym samym kończymy wykonywanie bloku drugiego.
Blok drugi uwidacznia jeszcze jedną ważną sprawę. Wszystkie wyrażenia
w pliku .LSP, nie będące częścią instrukcji defun, są automatycznie wykony-
wane podczas wczytywania pliku. Własność tę można wykorzystać do ustalenia
wartości wybranych parametrów albo wykonać wszelkie inne potrzebne proce-
dury wstępne, niezależnie od wyświetlenia informacji tekstowych. O praktycz-
nym wykorzystaniu tej własności będzie jeszcze mowa w dalszej części książki.
W bloku trzecim, definiujemy funkcją S::STARTUP, której zadaniem jest wywołanie
zdefiniowanej wcześniej funkcji FUNKCJA_1.
Q3{zl be!5
Podczas omawiania pliku ACAD.LSP wspomniałem, że plik ten może zawierać kod
AutoLISPu dla jednej lub wiąkszej liczby funkcji lub, po prostu, szereg wywołań
funkcji load. Zalecałem również użycie tego drugiego sposobu postąpowania, gdyż
pozwala on na łatwiejsze przeprowadzenie ewentualnych modyfikacji zawartości
biblioteki.
W przykładzie trzecim funkcja FUNKCJA_1 została zdefiniowana w taki właśnie sposób
(tj. wewnątrz pliku ACAD.LSP). Dopóki funkcji takich jest niewiele i są one bardzo krótkie,
można postąpić tak jak to zostało zaprezentowane w przykładzie 3. Osobiście odradzam
jednak tego sposobu postąpowania. W miarą upływu czasu wzrośnie bowiem liczba
aplikacji, których bądziesz używał, bądą one również coraz dłuższe. Znalezienie i
poprawienie czegokolwiek w jednym ogromnym pliku bÄ…dzie nie lada wyczynem. InnÄ…
niedogodnością jest też to, że w takich plikach nie mogłoby być dwóch funkcji o
identycznych nazwach  inaczej wczytana ostatnio przesłoni wszystkie poprzednie.
Tak wiąc najlepszym rozwiązaniem jest ładowanie kolejnych plików .LSP tak, jak to
opisano w punkcie  Aadowanie programów w AutoLISPie za pomocą pliku
ACAD.LSP, bÄ…dz tak, jak to zrobimy teraz.
Niech dany bÄ…dzie plik ACAD4.LSP, zawierajÄ…cy definicjÄ… funkcji FUNKCJA_1,
krórej działanie jest identyczne jak w przykładzie 3.
Plik ACAD4.LSP wyglÄ…da nastÄ…pujÄ…co:
;=================================================ACAD4.LSP
;test funkcji S::STARTUP - wersja 4
;
63 BvupMJTQ! !q3bluzd{oz!lv3t
;-------------------------------------------------
;definicja funkcji FUNKCJA_1
;
(defun FUNKCJA_1 ()
(progn
(command
"_zoom" "_window" "0,0" "12,9"
"_layer" "_new" "warstwa_1" ""
"_line" "2,2" "2,4" "4,4" "4,2" "_c"
"_layer" "_set" "0" ""
);command
(princ)
);progn
);FUNKCJA_1
;
;-------------------------------------------------
;=================================================KONIEC
Plik ACAD.LSP mógłby wtedy wyglądać nastąpująco:
;=================================================ACAD.LSP
;-------------------------------------------------
;tutaj definiujemy pozostala czesc pliku acad.lsp
;-------------------------------------------------
;tutaj definiujemy nasza funkcje S::STARTUP
;
(defun S::STARTUP ()
(progn
;----------
;zaladowanie pliku acad4.lsp
(load "acad4")
;----------
;wywolanie funkcji FUNKCJA_1
(FUNKCJA_1)
;----------
(princ)
);progn
);S::STARTUP
;
;-------------------------------------------------
;
;=================================================KONIEC
W pliku ACAD.LSP w funkcji S::STARTUP powodujemy załadowanie pliku
ACAD4.LSP i wywołanie funkcji FUNKCJA_1.
W tym miejscu możesz zapytać, dlaczego plik ACAD4.LSP ładujemy w funkcji
S::STARTUP. W powyższym przypadku nie musimy tego robić, gdyż plik ten nie za-
wiera instrukcji poza obrąbem funkcji defun. Gdyby jednak zawartość pliku
ACAD4.LSP była nastąpująca (tłustszym drukiem zaznaczone są dodane linie):
3/![bojn!{bd{ojfnz!q3ph3bnpxb 64
;=================================================ACAD4.LSP
;plik acad4.lsp po modyfikacji
;test funkcji S::STARTUP - wersja 4
;
;-------------------------------------------------
;definicja funkcji FUNKCJA_1
;
(defun FUNKCJA_1 ()
(progn
(command
"_zoom" "_window" "0,0" "12,9"
"_layer" "_new" "warstwa_1" ""
"_line" "2,2" "2,4" "4,4" "4,2" "_c"
"_layer" "_set" "0" ""
);command
(princ)
);progn
);FUNKCJA_1
;
;-------------------------------------------------
;wywołanie funkcji FUNKCJA_1
(FUNKCJA_1)
;-------------------------------------------------
;=================================================KONIEC
wówczas próba załadowania pliku ACAD4.LSP poza funkcją S::STARTUP spowodo-
wałaby nieokreślone zachowanie sią AutoCADa.
Tak wiąc, jeśli w pliku aplikacji znajdują sią instrukcje wywołujące funkcją command,
które mają zostać wykonane automatycznie po załadowaniu programu, program należy
ładować we wnątrzu funkcji S::STARTUP. Temat ten bądzie jeszcze poruszany w dal-
szych cząściach książki.
3/4/6/!V3vdibnjbojf!q3ph3bn x!x!BvupMJTQjf
3/4/6/!V3vdibnjbojf!q3ph3bn x!x!BvupMJTQjf
3/4/6/!V3vdibnjbojf!q3ph3bn x!x!BvupMJTQjf
3/4/6/!V3vdibnjbojf!q3ph3bn x!x!BvupMJTQjf
Po załadowaniu programu należałoby go uruchomić. Metod uruchamiania programów
też jest kilka. Oto one, w najwiąkszym skrócie:
" Jeśli dany plik został napisany poprawnie, po załadowaniu powinien wyświetlić
w obszarze komend nazwą lub nazwy funkcji, które powodują jego urucho-
mienie.
" Jeśli plik zawiera funkcje wykonywane automatycznie po jego załadowaniu,
sprawa jego uruchomienia sama siÄ… rozwiÄ…zuje.
" Wiąksze aplikacje, oprócz funkcji wykonywanych automatycznie, posiadają
swoje własne menu oraz systemy pomocy dla użytkownika (nie mówiąc już o in-
strukcji obsługi danej aplikacji). Dopiero praca z takimi aplikacjami dostarcza
prawdziwej przyjemności.
" Jeśli dany plik nie posiada żadnej z cech wymienionych powyżej, należy prze-
glądnąć go dowolnym edytorem ASCII, wypisać nazwy funkcji w nim zdefinio-
65 BvupMJTQ! !q3bluzd{oz!lv3t
wanych i próbować po kolei uruchamiać kolejne funkcje. Bardziej zaawan-
sowani użytkownicy AutoLISPu mogą spróbować analizować kody poszcze-
gólnych funkcji (jest to jednak dobre dla krótkich plików o małej liczbie
funkcji).
Rozdział ten zapoznał Cią z przystosowaniem edytora tekstu do pracy pod Auto-
CADem, poznałeś najważniejsze reguły pisania programów (nie tylko w jązyku Auto-
LISP) oraz sposoby wczytywania i uruchamiania programów w AutoLISPie.
Nastąpny rozdział pomoże Ci zrozumieć mechanizm działania interpretera AutoLISPu
 w jaki sposób i w jakiej kolejności realizowane są polecenia wpisywane z klawiatury
bądz też wczytywane z pliku.


Wyszukiwarka