Professional Documents
Culture Documents
qsphsbnpxb
44
Wszystkie programy w AutoLISPie s plikami tekstowymi, ktre adujemy do interpretera AutoLISPu funkcj load. Podczas adowania programu nastpuje jego weryfikacja
od strony leksykalnej, natomiast podczas wykonywania programu nastpuje jego weryfikacja od strony formalnej. Poniewa w pierwszym okresie programowania w AutoLISPie prawie kady program bdzie zawiera mniejsz lub wiksz ilo bdw,
Twoja praca bdzie polega przede wszystkim na wczytywaniu, uruchamianiu i poprawianiu bdw w kodzie rdowym programu. Dlatego te chc pokaza Ci, jak
z poziomu programu AutoCAD mona wywoa edytor tekstu.
Pomocny okae si tutaj zbir ACAD.PGP (programm parameters file plik parametrw wywoania programw). Zbir ACAD.PGP powinien si znajdowa w katalogu
gwnym AutoCADa jeli go tam nie ma, naley go utworzy dowolnym edytorem
ASCII.
45
BvupMJTQ!!qsbluzd{oz!lvst
Plik parametrw wywoania programw ACAD.PGP jest plikiem tekstowym, zawierajcym definicje polece AutoCADa. Plik ten podzielono na dwie sekcje: w sekcji pierwszej zdefiniowano sposoby dziaania programu w przypadku wywoywania polece
zewntrznych, natomiast sekcja druga dotyczy tworzenia skrtw nazw polece standardowych. Plik ACAD.PGP moe rwnie zawiera komentarze. Komentarz jest tekstem informacyjnym, poprzedzonym rednikiem (;).
My zajmiemy si tutaj sekcj pierwsz sekcj polece zewntrznych.
Kada linia pliku ACAD.PGP, dotyczca polecenia zewntrznego, posiada pi pl.
Pola te s od siebie oddzielone przecinkami, nawet jeeli s puste. W kolejnych polach
wystpuj:
3/2/2/!Ob{xb!qpmfdfojb
3/2/2/!Ob{xb!qpmfdfojb
Dodane polecenie zewntrzne AutoCADa. Jest to polecenie podawane w odpowiedzi na
zgoszenie Command: (Polecenie:), wystpujce w linii polece AutoCADa. Nie moe
ono pokrywa si z nazw polecenia wewntrznego, gdy w takim przypadku polecenie
zewntrzne bdzie ignorowane. Nazwa moe zawiera litery due i mae.
3/2/3/!Qpmfdfojf!TP!)tztufn
3/2/3/!Qpmfdfojf!TP!)tztufnv!pqfsbdz
TP!)tztufnv!pqfsbdzkofhp*
v!pqfsbdzkofhp*
Pole zawiera acuch tekstowy wysyany do systemu operacyjnego po wywoaniu polecenia zewntrznego AutoCADa. Moe to by kade polecenie dopuszczalne w danym
systemie operacyjnym, rwnie polecenie wewntrzne systemu takie, jak dir czy set.
acuch moe zawiera przeczniki, parametry itd.
3/2/4/!Pct{bs!{xb
3/2/4/!Pct{bs!{xbmojbofk!qbnj
4/!Pct{bs!{xbmojbofk!qbnjdj
mojbofk!qbnjdj
Pole to suy do zapewnienia kompatybilnoci 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
W polu tym umieszcza si acuch tekstowy, wywietlany po wywoaniu polecenia
w systemie operacyjnym. Odpowied na to zgoszenie jest doczana do acucha
wystpujcego w polu drugim (nazwa polecenia w systemie operacyjnym) lub podaje
nazw bloku, gdy kod powrotu ma przypisan warto 1. Jeli pierwszy znak w polu
jest gwiazdk (*), wtedy odpowied moe zawiera spacje i musi zosta potwierdzona
klawiszem ENTER. Gdy gwiazdka nie wystpuje, odpowied mona zakoczy bd
spacj, bd klawiszem ENTER. W przypadku rezygnacji ze zgoszenia, pole zawiera
acuch pusty ("").
3/![bojn!{bd{ojfnz!qsphsbnpxb
46
3/2/6/!Lpe!qpxspuv
3/2/6/!Lpe!qpxspuv
Jest to pole zawierajce opcjonalny parametr w postaci liczby cakowitej, odpowiadajcej sumie wartoci poszczeglnych bitw, np. jeli uytkownik chce osign tryby
pracy zgodne z wartociami 1, 2 i 4, do pola wprowadza warto 7. Poszczeglne
wartoci maj nastpujce przypisania:
0 powrt do ekranu tekstowego,
1 wczytaj plik DXB,
2 utwrz blok z pliku DXB,
4 powrt do poprzedniego ekranu.
Z powyszych kodw interesujcymi nas wartociami s 0 lub 4. AutoCAD ignoruje w pliku
ACAD.PGP wszystkie linie puste i wszystkie teksty lece na prawo od rednika.
Poniewa moim ulubionym edytorem jest Norton Edytor 2.0, tak wic dopisaem nastpujc lini w pliku ACAD.PGP:
NE,C:\NC\NE,0,Zbior do edycji: ,4
Zbior do edycji:
47
BvupMJTQ!!qsbluzd{oz!lvst
Powysza sekwencja przerywa komend zewntrzn nastpuje powrt do AutoCADa
bez uruchamiania edytora. Sekwencja powysza moe by przydatna w przypadku
pomykowego wywoania edytora Nortona.
Na koniec tego punktu chciabym jeszcze wymieni kilka najwaniejszych zalet programu Norton Edytor 2.0. Zalety te to:
1. Stosowanie menu rozwijanych, poprzez ktre moliwy jest dostp do wikszoci
funkcji programu.
2. Moliwo wsppracy z mysz.
3. Moliwo pracy z bardzo dugimi dokumentami.
4. Moliwo pracy jednoczenie z dwoma dokumentami, w dwch oknach edycji.
5. Istnienie operacji blokowych umoliwiajcych przenoszenie blokw tekstu
w obrbie jednego bd dwch dokumentw.
6. Moliwo sprawdzania w tekcie dokumentu poprawnej iloci nawiasw
prawych i lewych kadego rodzaju. Z funkcji tej bd korzysta w pierwszej
kolejnoci uytkownicy piszcy programy komputerowe.
7. Moliwo wydrukowania z poziomu edytora caego dokumentu lub zaznaczonego bloku mamy tym samym moliwo wydrukowania kodu interesujcej
nas funkcji bez drukowania caego programu.
Cennymi waciwociami uatwiajcymi redagowanie tekstu s moliwoci skonfigurowania edytora tak, aby:
1. Marginesy ustawiane byy automatycznie, zgodnie z wybran wczeniej ich
dugoci.
2. Sowa wychodzce poza zadeklarowan dugo linii byy przenoszone automatycznie do nastpnej linii.
3. Wcicia linii tekstowych byy ustawiane automatycznie przy przechodzeniu do
linii nastpnej.
Istnieje te moliwo automatycznego formatowania paragrafu bd caego dokumentu, pautomatycznego wprowadzania znakw amania stron lub ich usuwania oraz
ustawiania wielkoci marginesw na stronie drukowanej. Z moliwoci tych nie naley
jednak korzysta podczas pisania kodw rdowych programw, gdy interpreter
AutoLISPu wymaga czystego kodu ASCII (tzn. bez kodw formatujcych dokument).
3/![bojn!{bd{ojfnz!qsphsbnpxb
48
W punkcie tym zostanie podanych kilka najwaniejszych uwag, ktre mam nadziej
pomog Ci zminimalizowa ilo bdw podczas pisania Twoich pierwszych programw w AutoLISPie.
A oto najwaniejsze zasady:
1. W pliku z kodem rdowym programu oddzielaj od siebie poszczeglne funkcje, na przykad:
;========================================
;
(defun FUNKCJA_1 ()
(progn
ciao_funkcji
);progn
);FUNKCJA_1
;
;========================================
;
(defun FUNKCJA_2 ()
(progn
ciao_funkcji
);progn
);FUNKCJA_2
;
;========================================
49
BvupMJTQ!!qsbluzd{oz!lvst
3. Kiedy jest to moliwe, stosuj grupowanie komend. Staraj si rwnie nie
umieszcza wicej 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
(command
.....
.....
);command
3/![bojn!{bd{ojfnz!qsphsbnpxb
4:
3/4/2/
Joufsbldzkof!"bep
zkof!"bepxbojf!qsp
3/4/2/ Joufsbld
zkof!"bepxbojf!qsphsbn(x
xbojf!qsphsbn(x
x!BvupMJTQjf
x!BvupMJTQjf
W metodzie tej, wpisujemy z klawiatury nazw danego programu. Nazwa ta jest
argumentem standardowej funkcji AutoLISPu load, przeznaczonej do adowania
programw w AutoLISPie.
Format funkcji load jest nastpujcy:
(load filename [onfailure])
Argument filename jest acuchem alfanumerycznym (warto typu string), krry reprezentuje nazw pliku bez rozszerzenia (domylnie zakadane jest rozszerzenie .LSP).
Jeeli rozszerzenie pliku jest inne ni .LSP, naley je poda razem z nazw pliku, na
przykad TEST.DAT. Ponadto filename moe zawiera przedrostek okrelajcy ciek
dostpu, na przykad:
"c:/acad12/users/marek/kombajn"
lub
"c:\\acad12\\users\\marek\\kombajn".
Jeli nie podasz w argumencie filename cieki dostpu do pliku, to funkcja load przeszukuje ciek biblioteczn AutoCADa w nastpujcej kolejnoci:
katalog biecy,
katalog zawierajcy plik biecego rysunku,
katalogi okrelone przez zmienn rodowiskow ACAD,
katalog zawierajcy pliki programu AutoCAD.
Jeli argument filename zawiera ciek dostpu, to funkcja load szuka pliku tylko na
tej ciece. Jeeli na tej ciece/ciekach zostanie znaleziony podany plik, to jest on
wczytywany do pamici. Jeli operacja adowania zakoczy si sukcesem, load zwraca
warto ostatniego wyraenia w pliku, ktre czsto jest nazw ostatniej zdefiniowanej
51
BvupMJTQ!!qsbluzd{oz!lvst
w pliku funkcji. Jeeli operacja load zakoczya si porak, zostaje wywietlony odpowiedni komunikat o bdzie. Jeeli jednak funkcja load zawiera opcjonalny argument
onfailure (jeli_bd), to funkcja zwraca warto tego argumentu. Mamy wwczas
moliwo wypisania wasnego komunikatu o bdzie.
Zakadajc przykadowo, e plik C:/ACAD12/USERS/MAREK/TEST1.LSP zawiera
dwie definicje funkcji:
;====================
(defun FUNKCJA_1 ()
(progn
ciao_funkcji
);progn
);FUNKCJA_1
;====================
(defun FUNKCJA_2 ()
(progn
ciao_funkcji
);progn
);FUNKCJA_2
;====================
oraz, e plik TEST2.LSP nie istnieje, a zmienna rodowiskowa ACAD zawiera katalog
C:/ACAD12/USERS/MAREK, otrzymamy nastpujce wyniki wywoania funkcji load:
Command: (load "c:/acad12/users/marek/test1")
FUNKCJA_2
Command:
FUNKCJA_2
Command:
FUNKCJA_2
Command:
Powysze wyraenie powoduje przeszukanie cieki bibliotecznej AutoCADa, w poszukiwaniu 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 zaadowany oraz zostaje zwrcona warto ostatniego wyraenia
w pliku FUNKCJA_2.
Command: (load "test1" "\nPlik TEST1.LSP nie zostal
wczytany.")
3/![bojn!{bd{ojfnz!qsphsbnpxb
52
FUNKCJA_2
Command:
Powysze wyraenie powoduje przeszukanie cieki bibliotecznej AutoCADa, w poszukiwaniu pliku TEST2.LSP. Poniewa plik ten nie istnieje, funkcja load zwraca warto
argumentu onfailure = "\nPlik TEST2.LSP nie zostal wczytany.".
Command: (load "test2")
Powysze wyraenie powoduje przeszukanie cieki bibliotecznej AutoCADa, w poszukiwaniu pliku TEST2.LSP. Poniewa plik ten nie istnieje oraz nie zosta zdefiniowany
opcjonalny argument onfailure, funkcja load powoduje wypisanie standardowego bdu
AutoLISPu.
Funkcja load moe by uyta wewntrz innej funkcji AutoLISPu, a nawet
rekurencyjnie (we wczytywanym pliku).
3/4/3/!+bepxbojf!qsphsbn
/4/3/!+bepxbojf!qsphsbn(x!x!BvupMJ
ojf!qsphsbn(x!x!BvupMJTQjf
(x!x!BvupMJTQjf
{b!qpnpd,!qmjlv!
{b!qpnpd,!qmjlv!BDBE/MTQ
npd,!qmjlv!BDBE/MTQ
Plik ACAD.LSP pozwala na wczytanie biblioteki programw, napisanych w AutoLISPie, przy kadym uruchamianiu AutoCADa lub rozpoczynaniu nowego rysunku.
Plik ACAD.LSP moe zawiera kod AutoLISPu dla jednej lub wikszej liczby funkcji
lub, po prostu, szereg wywoa funkcji load. Zalecam uycie tego drugiego sposobu
postpowania, gdy pozwala on na atwiejsze przeprowadzenie ewentualnych modyfikacji zawartoci biblioteki.
Gdy w pliku ACAD.LSP umiecimy nastpujce linie:
(load "ddtype")
(load "edge")
(load "mvsetup")
53
BvupMJTQ!!qsbluzd{oz!lvst
przy kadym uruchamianiu AutoCADa lub rozpoczynaniu nowego rysunku automatycznie bd wczytywane pliki: DDTYPE.LSP, EDGE.LSP oraz MVSETUP.LSP.
Gdy w pliku ACAD.LSP umiecimy nastpujc lini:
(defun c:k ()(load "kombajn"))
Jeli wywoanie funkcji load koczy si pozytywnie, zwracana jest warto ostatniego
wyraenia w pliku (zwykle nazwa ostatniej funkcji zdefiniowanej w pliku lub komunikat dotyczcy sposobu uycia funkcji). W przypadku wykrycia bdu, zwracana jest
warto opcjonalnego argumentu onfailure. W powyszym przykadzie, warto zwracana przez funkcj load zostaa podstawiona jako argument funkcji princ, co spowoduje, w razie pojawienia si bdu, wywietlenie odpowiedniego komunikatu w linii
polece AutoCADa. Na przykad, jeli zostanie wykryty bd podczas wczytywania
pliku DDTYPE.LSP, funkcja princ wywietli komunikat:
Plik DDTYPE.LSP nie zostal wczytany.
3/![bojn!{bd{ojfnz!qsphsbnpxb
54
3/4/4/!+bepxbojf!qsphsbn
3/4/4/!+bepxbojf!qsphsbn(x!x!BvupMJ
ojf!qsphsbn(x!x!BvupMJTQjf
(x!x!BvupMJTQjf
{b!qpnpd,!plob!e
{b!qpnpd,!plob!ejbmphpxfhp
npd,!plob!ejbmphpxfhp
MPBE!BVUPMJTQ!BOE!BET!
PBE!BVUPMJTQ!BOE!BET!GJMFT
MJTQ!BOE!BET!GJMFT
Okno dialogowe Load AutoLISP and ADS Files (Wczytywanie plikw AutoLISP
i ADS) pozwala Ci zarzdza Twoimi ulubionymi programami. Daje ono moliwo
atwego odnajdowania i wybierania programw uytkowych. Po zlokalizowaniu pliku,
staje si on czci listy Files to Load (Pliki do wczytania). Dziki temu nie bdziesz go
musia szuka za kadym razem, gdy jest potrzebny. Nawet po opuszczeniu AutoCADa
lista wybranych plikw zostaje zachowana w pliku dyskowym APPLOAD.DFS.
Okno dialogowe Load AutoLISP and ADS Files wywoujemy z menu grnego [File]
[Applications...] ([Pliki] [Aplikacje...]) lub wpisujemy z klawiatury APPLOAD.
55
BvupMJTQ!!qsbluzd{oz!lvst
Load (Wczytaj)
Wczytuje aplikacje wskazane w oknie kartotekowym Files to Load.
Unload (Usu)
Usuwa z pamici aplikacje ADS.
Exit (Koniec)
Opuszcza okno dialogowe.
Help... (Pomoc...)
Wywietla standardowe okno pomocy AutoCADa z opisem komendy APPLOAD.
3/4/5/!Gvoldkb!T;;TU
3/4/5/!Gvoldkb!T;;TUBSUVQ
voldkb!T;;TUBSUVQ
Gdy omawiaem zastosowanie pliku ACAD.LSP, wspomniaem, e aby osign efekt
automatycznego wykonywania cigu wywoa funkcji command po wczytaniu
rysunku, naley umieci je w definicji defun specjalnej funkcji S::STARTUP. Jeeli
funkcja ta jest umieszczona w pliku ACAD.LSP, to zostanie ona automatycznie
wywoana (bez adnych argumentw) przy kadym wczytaniu istniejcego rysunku lub
utworzeniu nowego. Dlatego utworzon przy pomocy defun definicj funkcji
S::STARTUP mona umieci w pliku ACAD.LSP tak, aby zawsze, na pocztku sesji
edycyjnej wykonywana bya sekwencja okrelonych czynnoci wstpnych. Uycie
funkcji S::STARTUP przeanalizujemy na nastpujcych przykadach.
Qs{zlbe!2
Ponisza zawarto pliku ACAD1.LSP spowoduje utworzenie warstw 1 i 2, nadanie
warstwie 1 koloru czerwonego, warstwie 2 koloru niebieskiego, narysowanie na
warstwie 1 okrgu o rodku w punkcie (6,4.5) i promieniu 2, narysowanie na warstwie 2
trjkta o wierzchokach (2,2), (6,7), (10,2) oraz ustalenie warstwy 0 jako warstwy
biecej.
;=================================================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
"_layer" "_set" "2" ""
"_line" "2,2" '(6 7) (list 10 2) "_c"
56
57
BvupMJTQ!!qsbluzd{oz!lvst
Ustalamy warstw 2 jako aktualn.
Qs{zlbe!3
W przykadzie 1 pokazaem sposoby podawania wsprzdnych punktu. Pooenie
kadego punktu na paszczynie mona okreli za pomoc ukadu wsprzdnych
prostoktnych (kartezjaskich) lub ukadu wsprzdnych biegunowych. Kady rodzaj
wsprzdnych moe by zapisany w formie wsprzdnych bezwzgldnych lub
w formie wsprzdnych wzgldnych (poprzedzonych znakiem @).
3/![bojn!{bd{ojfnz!qsphsbnpxb
58
Wsprzdne bezwzgldne odnosz si do pocztku ukadu wsprzdnych, wsprzdne wzgldne do ostatnio wskazanego punktu. Jeeli chcesz, aby wprowadzone
wsprzdne odniesione byy do Globalnego Ukadu Wsprzdnych raczej ni do
ukadu biecego to poprzed je znakiem *. Jeeli znaki @ i * wystpuj razem to znak
@ powinien wystpowa przed *.
Poniszy przykad pokazuje kolejne sposoby podawania wsprzdnych punktw .
;*************************************************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
3/![bojn!{bd{ojfnz!qsphsbnpxb
5:
Qs{zlbe!4
Ponisza 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 wywoanie
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
3/![bojn!{bd{ojfnz!qsphsbnpxb
62
ACAD.LSP rysunek nie jest jeszcze w peni zainicjowany, funkcj t musimy wywoa
z funkcji S::STARTUP.
W bloku drugim, po przejciu na ekran tekstowy, wypisujemy komunikat o pomylnym
zaadowaniu funkcji FUNKCJA_1. Aby zatrzyma wykonywanie pliku ACAD.LSP,
wywoujemy funkcj getstring, ktra pobiera z klawiatury dowolny cig znakw
zakoczony naciniciem klawisza ENTER. Dopiero wwczas przechodzimy na ekran
graficzny AutoCADa i tym samym koczymy wykonywanie bloku drugiego.
Blok drugi uwidacznia jeszcze jedn wan spraw. Wszystkie wyraenia
w pliku .LSP, nie bdce czci instrukcji defun, s automatycznie wykonywane podczas wczytywania pliku. Wasno t mona wykorzysta do ustalenia
wartoci wybranych parametrw albo wykona wszelkie inne potrzebne procedury wstpne, niezalenie od wywietlenia informacji tekstowych. O praktycznym wykorzystaniu tej wasnoci bdzie jeszcze mowa w dalszej czci ksiki.
Qs{zlbe!5
Podczas omawiania pliku ACAD.LSP wspomniaem, e plik ten moe zawiera kod
AutoLISPu dla jednej lub wikszej liczby funkcji lub, po prostu, szereg wywoa
funkcji load. Zalecaem rwnie uycie tego drugiego sposobu postpowania, gdy
pozwala on na atwiejsze przeprowadzenie ewentualnych modyfikacji zawartoci
biblioteki.
W przykadzie trzecim funkcja FUNKCJA_1 zostaa zdefiniowana w taki wanie sposb
(tj. wewntrz pliku ACAD.LSP). Dopki funkcji takich jest niewiele i s one bardzo krtkie,
mona postpi tak jak to zostao zaprezentowane w przykadzie 3. Osobicie odradzam
jednak tego sposobu postpowania. W miar upywu czasu wzronie bowiem liczba
aplikacji, ktrych bdziesz uywa, bd one rwnie coraz dusze. Znalezienie i
poprawienie czegokolwiek w jednym ogromnym pliku bdzie nie lada wyczynem. Inn
niedogodnoci jest te to, e w takich plikach nie mogoby by dwch funkcji o
identycznych nazwach inaczej wczytana ostatnio przesoni wszystkie poprzednie.
Tak wic najlepszym rozwizaniem jest adowanie kolejnych plikw .LSP tak, jak to
opisano w punkcie adowanie programw w AutoLISPie za pomoc pliku
ACAD.LSP, bd tak, jak to zrobimy teraz.
Niech dany bdzie plik ACAD4.LSP, zawierajcy definicj funkcji FUNKCJA_1,
krrej dziaanie jest identyczne jak w przykadzie 3.
Plik ACAD4.LSP wyglda nastpujco:
;=================================================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
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
;
;------------------------------------------------;wywoanie funkcji FUNKCJA_1
(FUNKCJA_1)
;------------------------------------------------;=================================================KONIEC
wwczas prba zaadowania pliku ACAD4.LSP poza funkcj S::STARTUP spowodowaaby nieokrelone zachowanie si AutoCADa.
Tak wic, jeli w pliku aplikacji znajduj si instrukcje wywoujce funkcj command,
ktre maj zosta wykonane automatycznie po zaadowaniu programu, program naley
adowa we wntrzu funkcji S::STARTUP. Temat ten bdzie jeszcze poruszany w dalszych czciach ksiki.
3/4/6/!Vsvdib
3/4/6/!Vsvdibnjbojf!qsphsbn
4/6/!Vsvdibnjbojf!qsphsbn(x!x!BvupMJ
njbojf!qsphsbn(x!x!BvupMJTQjf
(x!x!BvupMJTQjf
Po zaadowaniu programu naleaoby go uruchomi. Metod uruchamiania programw
te jest kilka. Oto one, w najwikszym skrcie:
Jeli dany plik zosta napisany poprawnie, po zaadowaniu powinien wywietli
w obszarze komend nazw lub nazwy funkcji, ktre powoduj jego uruchomienie.
Jeli plik zawiera funkcje wykonywane automatycznie po jego zaadowaniu,
sprawa jego uruchomienia sama si rozwizuje.
Wiksze aplikacje, oprcz funkcji wykonywanych automatycznie, posiadaj
swoje wasne menu oraz systemy pomocy dla uytkownika (nie mwic ju o instrukcji obsugi danej aplikacji). Dopiero praca z takimi aplikacjami dostarcza
prawdziwej przyjemnoci.
Jeli dany plik nie posiada adnej z cech wymienionych powyej, naley przegldn go dowolnym edytorem ASCII, wypisa nazwy funkcji w nim zdefinio-
65
BvupMJTQ!!qsbluzd{oz!lvst
wanych i prbowa po kolei uruchamia kolejne funkcje. Bardziej zaawansowani uytkownicy AutoLISPu mog sprbowa analizowa kody poszczeglnych funkcji (jest to jednak dobre dla krtkich plikw o maej liczbie
funkcji).
Rozdzia ten zapozna Ci z przystosowaniem edytora tekstu do pracy pod AutoCADem, poznae najwaniejsze reguy pisania programw (nie tylko w jzyku AutoLISP) oraz sposoby wczytywania i uruchamiania programw w AutoLISPie.
Nastpny rozdzia pomoe Ci zrozumie mechanizm dziaania interpretera AutoLISPu
w jaki sposb i w jakiej kolejnoci realizowane s polecenia wpisywane z klawiatury
bd te wczytywane z pliku.