3/![bojn!{bd{ojfnz!qsphsbnpxb
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 źró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!—!qsbluzd{oz!lvst
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!qp
3/2/2/!Ob{xb!qp
3/2/2/!Ob{xb!qp
3/2/2/!Ob{xb!qpmfdfojb
mfdfojb
mfdfojb
mfdfojb
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!
3/2/3/!Qpmfdfojf!
3/2/3/!Qpmfdfojf!
3/2/3/!Qpmfdfojf!TP!)tztufn
TP!)tztufn
TP!)tztufn
TP!)tztufnv!pqfsbdz
v!pqfsbdz
v!pqfsbdz
v!pqfsbdzkofhp*
kofhp*
kofhp*
kofhp*
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.
Ła
ńcuch może zawierać przełączniki, parametry itd.
3/2/
3/2/
3/2/
3/2/4/!Pct{bs!{xb
4/!Pct{bs!{xb
4/!Pct{bs!{xb
4/!Pct{bs!{xbmojbofk!qbnj
mojbofk!qbnj
mojbofk!qbnj
mojbofk!qbnjdj
dj
dj
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"p
3/2/5/![h"p
3/2/5/![h"p
3/2/5/![h"pt{fojf
t{fojf
t{fojf
t{fojf
W polu tym umieszcza si
ę łańcuch tekstowy, wyświetlany po wywołaniu polecenia
w systemie operacyjnym. Odpowied
ź 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 odpowiedź może zawierać spacje i musi zostać potwierdzona
klawiszem ENTER. Gdy gwiazdka nie wyst
ępuje, odpowiedź można zakończyć bądź
spacj
ą, bądź klawiszem ENTER. W przypadku rezygnacji ze zgłoszenia, pole zawiera
ła
ńcuch pusty ("").
3/![bojn!{bd{ojfnz!qsphsbnpxb
46
3/2/6/!L
3/2/6/!L
3/2/6/!L
3/2/6/!Lpe!qpxspuv
pe!qpxspuv
pe!qpxspuv
pe!qpxspuv
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: <Ctrl-C>
47
BvupMJTQ!—!qsbluzd{oz!lvst
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ądź 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ądź 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 źródłowych programów, gdyż interpreter
AutoLISPu wymaga czystego kodu ASCII (tzn. bez kodów formatuj
ących dokument).
3/![bojn!{bd{ojfnz!qsphsbnpxb
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
źró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 źró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!—!qsbluzd{oz!lvst
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
źródłowym programu. Obfite komentowanie
kodu
źró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!qsphsbnpxb
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/
3/
3/
3/4/2/
4/2/
4/2/
4/2/ Joufsbld
Joufsbld
Joufsbld
Joufsbldzkof!"bep
zkof!"bep
zkof!"bep
zkof!"bepxbojf!qsp
xbojf!qsp
xbojf!qsp
xbojf!qsphsbn(x
hsbn(x
hsbn(x
hsbn(x
x!B
x!B
x!B
x!BvupMJTQjf
vupMJTQjf
vupMJTQjf
vupMJTQjf
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!—!qsbluzd{oz!lvst
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!qsphsbnpxb
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
3
3
3/4/3/!+bepxb
/4/3/!+bepxb
/4/3/!+bepxb
/4/3/!+bepxbojf!qsphsbn
ojf!qsphsbn
ojf!qsphsbn
ojf!qsphsbn(x!x!BvupMJ
(x!x!BvupMJ
(x!x!BvupMJ
(x!x!BvupMJTQjf
TQjf
TQjf
TQjf
{b!qp
{b!qp
{b!qp
{b!qpnpd,!qmjlv!
npd,!qmjlv!
npd,!qmjlv!
npd,!qmjlv!BDBE/MTQ
BDBE/MTQ
BDBE/MTQ
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!—!qsbluzd{oz!lvst
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
ę
w ró
ż
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!qsphsbnpxb
54
3/4/4/!+bepxb
3/4/4/!+bepxb
3/4/4/!+bepxb
3/4/4/!+bepxbojf!qsphsbn
ojf!qsphsbn
ojf!qsphsbn
ojf!qsphsbn(x!x!BvupMJ
(x!x!BvupMJ
(x!x!BvupMJ
(x!x!BvupMJTQjf
TQjf
TQjf
TQjf
{b!qp
{b!qp
{b!qp
{b!qpnpd,!plob!e
npd,!plob!e
npd,!plob!e
npd,!plob!ejbmphpxfhp
jbmphpxfhp
jbmphpxfhp
jbmphpxfhp
M
M
M
MPBE!BVUP
PBE!BVUP
PBE!BVUP
PBE!BVUPMJTQ!BOE!BET!
MJTQ!BOE!BET!
MJTQ!BOE!BET!
MJTQ!BOE!BET!GJMFT
GJMFT
GJMFT
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!—!qsbluzd{oz!lvst
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/!G
3/4/5/!G
3/4/5/!G
3/4/5/!Gvoldkb!T;;TU
voldkb!T;;TU
voldkb!T;;TU
voldkb!T;;TUBSUVQ
BSUVQ
BSUVQ
BSUVQ
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.
Qs{zlbe!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!qsphsbnpxb
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 dalszym cią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!—!qsbluzd{oz!lvst
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 w bieżą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, we
ź 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
Qs{zlbe!3
W przykładzie 1 pokazałem sposoby podawania współrz
ędnych punktu. Położenie
ka
żdego punktu na płaszczyźnie 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!qsphsbnpxb
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 poprzedź 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!—!qsbluzd{oz!lvst
(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!qsphsbnpxb
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łaszczy
źnie 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).
Qs{zlbe!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!—!qsbluzd{oz!lvst
;=================================================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!qsphsbnpxb
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.
Qs{zlbe!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 — Ładowanie programów w AutoLISPie za pomoc
ą pliku
ACAD.LSP, b
ądź 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!—!qsbluzd{oz!lvst
;-------------------------------------------------
;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!qsphsbnpxb
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/
3/
3/
3/4/6/!Vsvdib
4/6/!Vsvdib
4/6/!Vsvdib
4/6/!Vsvdibnjbojf!qsphsbn
njbojf!qsphsbn
njbojf!qsphsbn
njbojf!qsphsbn(x!x!BvupMJ
(x!x!BvupMJ
(x!x!BvupMJ
(x!x!BvupMJTQjf
TQjf
TQjf
TQjf
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!—!qsbluzd{oz!lvst
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
ądź też wczytywane z pliku.