Epebufl!C
778
),!
),!
),!
),!ovncfs!ovncfs!
****
Funkcja ta realizuje arytmetyczn
ą operację dodawania i zwraca w wyniku sumę
wszystkich argumentów number. Składniki sumy mog
ą być zarówno liczbami rzeczy-
wistymi typu real jak i warto
ściami typu integer. Jeżeli wszystkie argumenty są typu
integer, to wynik jest równie
ż typu integer. Jeśli którykolwiek z nich jest liczbą typu
real, to wszystkie liczby typu integer zostan
ą zamienione na rzeczywiste i wynik też
b
ędzie liczbą rzeczywistą. Przykładowo:
(+ 1 2)
zwraca
3
(+ 1 2 3 4.5)
zwraca
10.5
(+ 1 2 3 4.0)
zwraca
10.0
).!
).!
).!
).!ovncfs!\ovncfs^!
****
Funkcja ta realizuje arytmetyczn
ą operację odejmowania; odejmuje drugą liczbę od
pierwszej i zwraca ró
żnicę. Jeżeli lista zawiera więcej niż dwie liczby, to od pierwszej
liczby jest odejmowana suma liczb od drugiej do ostatniej i zwracany jest wynik. Je
żeli
natomiast lista argumentów zawiera tylko jedn
ą liczbę, wówczas wynikiem końcowym
jest odj
ęcie tej liczby od zera. Argumentami mogą być zarówno wartości całkowito-
liczbowe typu integer jak i liczby rzeczywiste, przy ogólnie przyj
ętych zasadach kon-
wersji typów. Przykładowo:
(- 50 40)
zwraca
10
(- 50 40.0 2)
zwraca
8.0
(- 50 40.0 2.5)
zwraca
7.5
(- 8)
zwraca
-8
779
BvupMJTQ!—!qsbluzd{oz!lvst
)+!
)+!
)+!
)+!ovncfs!\ovncfs^!
****
Funkcja ta realizuje arytmetyczn
ą operację mnożenia i zwraca iloczyn wszystkich
argumentów number. Mog
ą to być zarówno liczby typu integer jak i real, przy ogólnie
przyj
ętych zasadach konwersji typów. Przykładowo:
(* 2 3)
zwraca
6
(* 2 3 4.0)
zwraca
24.0
(* 3 -4.5)
zwraca
-13.5
)0!
)0!
)0!
)0!ovncfs!\ovncfs^!
****
Funkcja ta realizuje arytmetyczn
ą operację dzielenia i zwraca iloraz pierwszego
argumentu number przez drugi. Je
żeli lista argumentów zawiera więcej niż dwie liczby,
to warto
ścią zwracaną przez funkcję jest wynik dzielenia pierwszej liczby przez iloczyn
pozostałych. Argumentami mog
ą być zarówno wartości całkowitoliczbowe typu
integer, jak i liczby rzeczywiste.
W przypadku gdy funkcja ma tylko jeden argument liczba, to zwracany jest wynik
dzielenia przez 1. Przykładowo:
(/ 100 2)
zwraca
50
(/ 100 2.0)
zwraca
50.0
(/ 100 20.0 2)
zwraca
2.5
(/ 100 20 2)
zwraca
2
(/ 135 360)
zwraca
0
(/ 135 360.0)
zwraca
0.375
(/ 4)
zwraca
4
)>!
)>!
)>!
)>!bupn!bupn!
****
Jest to funkcja sprawdzaj
ąca relację równości. Zwraca T, jeżeli wszystkie atomy są
sobie numerycznie równe; w wypadku przeciwnym funkcja zwraca nil. Argumentami
tej funkcji mog
ą być łańcuchy alfanumeryczne (typ string) i liczby. Na przykład:
(= 4 4.0)
zwraca
T
(= 20 388)
zwraca
nil
(= 2.4 2.4 2.4)
zwraca
T
(= 499 499 500)
zwraca
nil
(= "ja" "ja")
zwraca
T
(= "ja" "ty")
zwraca
nil
)0>!
)0>!
)0>!
)0>!bupn!bupn!
****
Jest to funkcja sprawdzaj
ąca relację nierówności. W wyniku zwraca T, jeżeli argumenty
atom s
ą różne. W wypadku przeciwnym, gdy oba atomy są sobie równe, funkcja zwraca
nil. Dla wi
ęcej niż dwóch argumentów funkcja jest nieokreślona. Przykładowo:
Epebufl!C
77:
(/= 10 20)
zwraca
T
(/= "ona" "ona")
zwraca
nil
(/= 5.43 5.44)
zwraca
T
)=!
)=!
)=!
)=!bupn!bupn!
****
Jest to funkcja sprawdzaj
ąca relację mniejszości. Zwraca T, jeżeli pierwszy atom jest
numerycznie mniejszy ni
ż drugi, a nil w przypadku przeciwnym. Jeżeli lista argu-
mentów zawiera wi
ęcej niż dwa atomy, to funkcja zwraca T wtedy, gdy każdy atom ma
warto
ść mniejszą od następnego z prawej strony. Przykładowo:
(< 10 20)
zwraca
T
(< "b" "c")
zwraca
T
(< 357 33.2)
zwraca
nil
(< 2 3 88)
zwraca
T
(< 2 3 4 4)
zwraca
nil
)=>!
)=>!
)=>!
)=>!bupn!bupn!
****
Jest to funkcja sprawdzaj
ąca relację mniejszy lub równy. Jeżeli pierwszy atom jest
numerycznie mniejszy lub równy drugiemu, to funkcja zwraca T; w wypadku prze-
ciwnym nil. Je
żeli lista argumentów zawiera więcej niż dwa atomy, to funkcja zwraca T
wówczas, gdy ka
żdy atom jest mniejszy lub równy następnemu z prawej strony.
Przykładowo:
(<= 10 20)
zwraca
T
(<= "b" "b")
zwraca
T
(<= 357 33.2)
zwraca
nil
(<= 2 9 9)
zwraca
T
(<= 2 9 4 5)
zwraca
nil
)?!
)?!
)?!
)?!bupn!bupn!
****
Jest to funkcja sprawdzaj
ąca relacje większości. Jeżeli pierwszy atom jest numerycznie
wi
ększy od drugiego, to funkcja zwraca T; w wypadku przeciwnym nil. Jeżeli lista
argumentów zawiera wi
ęcej niż dwa atomy, to funkcja zwraca T w przypadku, gdy
ka
żdy atom ma wartość większą od następnego z prawej strony. Przykładowo:
(> 120 17)
zwraca
T
(> "c" "b")
zwraca
T
(> 3.5 1792)
zwraca
nil
(> 77 4 2)
zwraca
T
(> 77 4 4)
zwraca
nil
781
BvupMJTQ!—!qsbluzd{oz!lvst
)?>!
)?>!
)?>!
)?>!bupn!bupn!
****
Jest to funkcja sprawdzaj
ąca relacje większy lub równy. Jeżeli pierwszy atom jest
numerycznie wi
ększy lub równy drugiemu, to funkcja zwraca T; w wypadku prze-
ciwnym zwraca nil. Je
żeli lista argumentów zawiera więcej niż dwa atomy, to funkcja
zwraca T w przypadku, gdy ka
żdy atom ma wartość większą lub równą następnemu
z prawej strony. Przykładowo:
(>= 120 17)
zwraca
T
(>= "c" "c")
zwraca
T
(>= 3.5 1792)
zwraca
nil
(>= 77 4 4)
zwraca
T
(>= 77 4 9)
zwraca
nil
)Ä!
)Ä!
)Ä!
)Ä!ovncfs****
Funkcja ta zwraca bitow
ą negację (dopełnienie do jedynki) argumentu number,
otrzymywan
ą w wyniku działania jednoargumentowego operatora logicznego NOT
(NIE) na bitach argumentu number. Funktor ten zamienia ka
żdy bit 1 na 0 i odwrotnie.
Argument musi by
ć liczbą stałopozycyjną typu integer (wartością całkowitoliczbową).
Przykładowo:
(~ 3)
zwraca
-4
(~ 100)
zwraca
-101
(~ -4)
zwraca
3
)2,!
)2,!
)2,!
)2,!ovncfs****
Funkcja ta zwraca warto
ść argumentu number zwiększoną o 1. Argument może być
warto
ścią liczbową typu integer lub real. Przykładowo:
(1+ 5)
zwraca
6
(1+ -17.5)
zwraca
-16.5
)2.!
)2.!
)2.!
)2.!ovncfs****
Funkcja ta zwraca warto
ść argumentu number zmniejszoną o 1.
(1- 5)
zwraca
4
(1- -17.5)
zwraca
-18.5
)b
)b
)b
)bct!
ct!
ct!
ct!ovncfs****
Funkcja ta zwraca warto
ść bezwzględną argumentu number. Argument może być
warto
ścią liczbową typu integer lub real. Przykładowo:
Epebufl!C
782
(abs 100)
zwraca
100
(abs -100)
zwraca
100
(abs -99.25)
zwraca
99.25
)bet*
)bet*
)bet*
)bet*
Funkcja ta zwraca list
ę zawierającą aktualnie wczytane programy użytkowe ADS
(AutoCAD Development System). Elementami tej listy s
ą łańcuchy znaków tekstowych
b
ędące nazwami wszystkich programów wraz z ich ścieżkami dostępu. Przykładowo:
(ads)
mo
że zwrócić
("pliki/programy/PROG1" "PROG2")
Informacje uzupełniaj
ące: patrz funkcje xload i xunload pod koniec tego rozdziału.
)bmfsu!
)bmfsu!
)bmfsu!
)bmfsu!tusjoh****
Funkcja wy
świetla okienko ostrzegawcze z komunikatem błędu lub ostrzegawczym,
okre
ślonym przez argument string. Okienko ostrzegawcze jest oknem dialogowym
z pojedynczym przyciskiem TAK. Na przykład:
(alert "Taka funkcja nie istnieje.")
powoduje wy
świetlenie poniższego okna dialogowego:
Dzi
ęki wykorzystaniu w łańcuchu znaku nowej linii można definiować komunikaty
składaj
ące się z wielu linii tekstu. Na przykład:
(alert "Taka funkcja\nnie istnieje.")
powoduje wy
świetlenie poniższego okna dialogowego:
Długo
ść
linii i liczb
ę
linii w oknie alarmowym zale
ż
y od platformy, wy
ś
wietlacza
i okna. AutoCAD obcina wszystkie zbyt długie ła
ń
cuchy tak, by zmie
ś
ciły si
ę
w oknie.
783
BvupMJTQ!—!qsbluzd{oz!lvst
)bmm
)bmm
)bmm
)bmmpd!
pd!
pd!
pd!ovncfs****
Ustala rozmiar segmentu na podan
ą liczbę węzłów.
)boe!
)boe!
)boe!
)boe!fyqs!
****
Funkcja ta zwraca warto
ść logicznego iloczynu argumentów expr, utworzonego za po-
moc
ą spójników AND (koniunkcja). Jeżeli którekolwiek z wyrażeń jest wartościowane
jako nil, to funkcja przerywa dalsz
ą ewaluację i całe wyrażenie zwraca nil. W prze-
ciwnym wypadku funkcja zwraca T. Przykładowo, je
żeli przypisano:
(setq a 103)
(setq b nil)
(setq c "marta")
to:
(and 1.4 a c)
zwraca
T
(and 1.4 a b c)
zwraca
nil
)bohmf!
)bohmf!
)bohmf!
)bohmf!qu2!qu3****
Funkcja ta zwraca warto
ść kąta nachylenia odcinka łączącego punkty LUW pt1 i pt2.
K
ąt jest mierzony względem osi X aktualnej płaszczyzny konstrukcyjnej LUW w ra-
dianach, a kierunek narastania warto
ści kątowych jest przeciwny do kierunku ruchu
wskazówek zegara. Je
żeli podane zostaną punkty 3W, to są one rzutowane prostopadle
na aktualn
ą płaszczyznę konstrukcyjną. Przykładowo:
(angle '(1.0 1.0) '(1.0 4.0))
zwraca
1.5708
(angle '(5.0 1.33) '(2.4 1.33)
zwraca
4.14159
)boh
)boh
)boh
)bohupg!
upg!
upg!
upg!tusjoh!\npef^!*
!*
!*
!*
Funkcja wykonuje konwersj
ę łańcucha string, reprezentującego kąt w formacie
wy
świetlanym określonym przez argument mode, na wartość zmiennoprzecinkową
(typu real). Funkcja zwraca wynik wyra
żony w radianach.
Argument mode okre
śla jednostki, w których sformatowany jest łańcuch string.
Warto
ść tego argumentu powinna być zgodna z wartościami dopuszczalnymi dla
zmiennej systemowej AutoCADa AUNITS, pokazanymi w poni
ższej tabeli. Jeśli
argument tryb jest pomini
ęty, funkcja angtof wykorzystuje bieżącą wartość zmiennej
AUNITS.
Tabela B.1. Warto
ści jednostek kątowych
Warto
ść argumentu tryb
Format ła
ńcucha
0
stopnie
1
stopnie/minuty/sekundy
Epebufl!C
784
Tabela B.1. Warto
ści jednostek kątowych (c.d.)
Warto
ść argumentu tryb
Format ła
ńcucha
2
grady
3
radiany
4
jednostki geodezyjne
String musi by
ć takim łańcuchem, który może być poprawnie i zgodnie z podanym
trybem zanalizowany przez angtof. Mo
że być takiej samej postaci, jaką angtof ma
zwróci
ć, albo w postaci dopuszczanej przez AutoCAD dla danych podawanych z kla-
wiatury. Funkcje angtof i angtos s
ą komplementarne: jeśli funkcji angtof poda się
ła
ńcuch zwrócony przez angtos, angtof z całą pewnością zwróci poprawną wartość i na
odwrót (zakładaj
ąc, że w obu wypadkach podano tę samą wartość argumentu mode).
Je
śli wywołanie funkcji angtof kończy się sukcesem, zwracana jest wartość liczbowa
typu real, okre
ślająca kąt w radianach. W przeciwnym wypadku funkcja zwraca nil.
)bohupt!
)bohupt!
)bohupt!
)bohupt!bohmf!\npef!\qsfdjtjpo^^****
Funkcja bierze k
ąt angle (wyrażony liczbą rzeczywistą typu real, określającą miarę kąta
w radianach) i zwraca go w postaci ła
ńcucha alfanumerycznego o formacie zależnym od
argumentów mode, precision, od warto
ści zmiennej systemowej UNITMODE AutoCADa
oraz od warto
ści zmiennej wymiarowania DIMZIN. Argumenty mode i precision są
liczbami typu integer, które okre
ślają rodzaj jednostek i dokładność wartości kątowych.
Dopuszczalne warto
ści argumentu mode są takie same, jak podane w tabeli B.1 (patrz
opis poprzedniej funkcji).
Argument precision jest liczb
ą typu integer, która ustala wymaganą dokładność
warto
ści kątowych, określając ilość miejsc dziesiętnych po przecinku. Argumenty mode
i precision s
ą odpowiednikami zmiennych systemowych AUNITS i AUPREC programu
AutoCAD. Je
żeli argumenty te zostaną pominięte, to zostaną użyte aktualne wartości
zmiennych AUNITS i AUPREC.
Funkcja angtos akceptuje ujemne warto
ści argumentu angle, lecz zawsze przed wyko-
naniem podanej konwersji sprowadza go do warto
ści nieujemnej z przedziału od zera
do 2
π
radianów. Na przykład:
(angtos 0.785398 0 4)
zwraca
"45.0000"
(angros -0.785398 0 4)
zwraca
"315.0000"
Zmienna systemowa UNITMODE wpływa na zwracany ła
ńcuch znaków tekstowych
wtedy, gdy wybrane zostały jednostki geodezyjne (argument mode równy 4). Je
żeli
UNITMODE=0,
to
ła
ńcuch zawiera spacje (np."N 45dE"); jeżeli natomiast
UNITMODE=1, to ła
ńcuch nie zawiera spacji (np. "N45dE").
785
BvupMJTQ!—!qsbluzd{oz!lvst
Procedury wykorzystuj
ą
ce funkcj
ę
angtos do wy
ś
wietlania dowolnie obranych
k
ą
tów (dla których warto
ść
zmiennej systemowej ANGBASE nie stanowi k
ą
ta
odniesienia) powinny sprawdza
ć
i bra
ć
pod uwag
ę
warto
ść
ANGBASE.
)b
)b
)b
)bqqfoe!
qqfoe!
qqfoe!
qqfoe!fyqs!
****
Argumentami funkcji mo
że być dowolna ilość argumentów expr, które są brane razem
jako jedna lista, otrzymana z ich poł
ączenia. Przykładowo:
(append '(a b) '(c d)
zwraca
(A B C D)
(append '((a)(b)) '((c)(d)))
zwraca
((A)(B)(C)(D))
Funkcja append wymaga, aby argumenty były listami.
)bqqmz!
)bqqmz!
)bqqmz!
)bqqmz!gvodujpo!mjtu****
Wykonywana jest funkcja okre
ślona przez argument function, a jej argumentami są ele-
menty, które zawiera list. Przykładowo:
(apply '+ '(1 2 3))
zwraca
6
(apply 'strcat '("a" "b" "c"))
zwraca
"abc"
Funkcja apply działa zarówno z funkcjami wewn
ętrznymi (obiekty typu SUBR), jak też
z funkcjami definiowanymi przez u
żytkownika, przy użyciu funkcji defun lub lambda.
)b
)b
)b
)btdjj!
tdjj!
tdjj!
tdjj!tusjoh****
Funkcja ta zwraca liczb
ę typu integer, otrzymaną w wyniku konwersji pierwszego
znaku w ła
ńcuchu alfanumerycznym string na jego kod ASCII. Funkcja ta jest podobna
do funkcji ASC w j
ęzyku BASIC. Przykładowo:
(ascii "A")
zwraca
65
(ascii "a")
zwraca
97
(ascii "BIG")
zwraca
66
)bttpd!
)bttpd!
)bttpd!
)bttpd!jufn!bmjtu****
Funkcja ta przeszukuje list
ę asocjacji alist, szukając w niej skojarzeń z elementem item,
pełni
ącym tu funkcję elementu kluczowego. Asocjacja ta (lista złożona z pary skoja-
rzonych ze sob
ą elementów) jest zwracana jako wynik ewaluacji wyrażenia. Jeżeli item
nie zostanie w li
ście asocjacji znaleziony, to funkcja assoc zwraca nil. Przykładowo
mo
żna założyć, że lista "marta" zawiera następujące asocjacje:
((oczy piwne) (wzrost 171) (waga 56) (wiek 16))
Epebufl!C
786
Wtedy:
(assoc 'wzrost marta)
zwraca
(WZROST 171)
(assoc 'nr-butow marta)
zwraca
nil
Listy asocjacji s
ą często używane do przechowywania danych dostępnych poprzez
identyfikuj
ący je klucz. Jest to podobne do stosowanych w innych językach progra-
mowania tablic lub struktur. Opisywana dalej w tym rozdziale funkcja subst umo
żliwia
łatw
ą wymianę wartości skojarzonej w liście asocjacji z danym kluczem.
)bubo!
)bubo!
)bubo!
)bubo!ovn2!\ovn3^****
Przy braku argumentu num2 funkcja zwraca wyra
żoną w radianach wartość arcus
tangens argumentu num1; gdzie num1 mo
że być ujemna; zwracane wartości kątów za-
wieraj
ą się w zakresie od –
π
/2 do +
π
/2 radianów. Przykładowo:
(atan 0.5)
zwraca
0.463648
(atan 1.0)
zwraca
0.785398
(atan -1.0)
zwraca
-0.785398
(antgos (atan -1.0) 0 4)
zwraca
"315.0000"
Je
żeli podano obydwa argumenty num1 i num2, to funkcja zwraca wyrażoną w ra-
dianach warto
ść arcus tangens ilorazu num1/num2. Jeżeli num2 jest równa zeru, to
funkcja zwraca warto
ść +1.5700796 lub –1.570796 radianów (+90 lub –90), zależnie od
znaku argumentu num1. Przykładowo:
(atan 2.0 30)
zwraca
0.588003
(angtos (atan 2.0 3.0) 0 4)
zwraca
"33.6901"
(atan 2.0 -3.0)
zwraca
2.55359
(angtos (atan 2.0 -3.0) 0 4)
zwraca
"146.3099"
(atan -2.0 3.0)
zwraca
-0.588003
(atan -2.0 -3.0)
zwraca
-2.55359
(atan 1.0 0.0)
zwraca
1.5708
(angtos (atan 1.0 0.0) 0 4)
zwraca
"90.0000"
(atan -0.5 0.0)
zwraca
-1.5708
(angtos (atan -0.5 0.0) 0 2)
zwraca
"270.00"
Pokazane powy
ż
ej wywołania funkcji angtos ilustruj
ą
sposób konwersji
zwracanych przez atan warto
ś
ci podanych w radianach na ła
ń
cuchy tekstowe
typu string.
)bupg!
)bupg!
)bupg!
)bupg!tusjoh****
Funkcja zwraca wynik konwersji ła
ńcucha tekstowego string na wartość typu real (licz-
ba rzeczywista). Przykładowo:
(atof "97.1")
zwraca
97.1
787
BvupMJTQ!—!qsbluzd{oz!lvst
(atof "3")
zwraca
3.0
)bupj!
)bupj!
)bupj!
)bupj!tusjoh****
Funkcja zwraca wynik konwersji ła
ńcucha tekstowego string na liczbę całkowitą typu
integer. Przykładowo:
(atoi "97")
zwraca
97
(atoi "3")
zwraca
3
(atoi "3.9")
zwraca
3
)bup
)bup
)bup
)bupn!
n!
n!
n!jufn****
Je
żeli argument item jest listą, to funkcja ta zwraca nil, a w wypadku przeciwnym zwraca T.
Ka
żdy obiekt, który nie jest listą, jest uważany za atom. Przykładowo, jeżeli przypisano:
(setq a '(x y z))
(setq b 'a)
to:
(atom 'a)
zwraca
T
(atom a)
zwraca
nil
(atom 'b)
zwraca
T
(atom b)
zwraca
T
(atom '(a b c))
zwraca
nil
Niektóre wersje LISPu w odmienny sposób interpretuj
ą pojęcie atom i z tego powodu
nale
ży zachować ostrożność przy konwersji programów.
)bupnt.gbnjm
)bupnt.gbnjm
)bupnt.gbnjm
)bupnt.gbnjmz!
z!
z!
z!gpsnbu!\tznmjtu^****
Funkcja ta zwraca list
ę symboli wbudowanych oraz wszelkich symboli zdefiniowanych
podczas bie
żacej sesji edycyjnej. Pierwszy argument format jest wartością całkowitą
0 lub 1. Dla warto
ści 0, zwracana jest lista aktualnie zdefiniowanych symboli. Jeśli
format jest równy 1, symbole w li
ście są zwracane jako łańcuchy (typu string).
(atoms-family 0)
zwraca list
ę aktualnie zdefiniowanych symboli
Funkcja atoms-family mo
że także poszukiwać listy nazw symboli. Jeśli podany jest
opcjonalny argument symlist, to musi on by
ć listą łańcuchów nazw symboli do
szukania. W celu sprawdzenia czy zdefiniowane zostały symbole "CAR", "CDR' i
"XYZ", a lista ewentualnie znalezionych symboli ma by
ć zwrócona jako lista
ła
ńcuchów alfanumerycznych, należy wprowadzić:
(atoms-family 1 '("CAR" "CDR" "XYZ"))
Funkcja atoms-family zwraca list
ę typu określonego przez format (symbole lub
ła
ńcuchy alfanumeryczne) zawierającą nazwy tych symboli, które są zdefiniowane oraz
Epebufl!C
788
nil dla tych symboli, które nie s
ą zdefiniowane. Gdyby symbol "XYZ" w powyższym
przykładzie nie był zdefiniowany, zwrócona zostałaby nast
ępująca lista:
("CAR" "CDR" nil)
Przed Wydaniem 12 AutoCADa, atomlist był symbolem, który mógł by
ć
redefiniowany lub usuwany. Tak wi
ę
c stare programy u
ż
ytkownika w Auto-
LISPie, w których atomlist jest traktowane jako symbol, nie b
ę
d
ą
prawidłowo
działały w Wydaniu 12 AutoCADa.
!)cppmf!
!)cppmf!
!)cppmf!
!)cppmf!gvod!jou2!jou3!
****
Jest to uogólniona funkcja bitowa, realizuj
ąca dwuargumentowe operacje logiczne
(boole'owskie). Argument func jest liczb
ą typu integer z zakresu od 0 do 15, która
reprezentuje jeden z 16 mo
żliwych funktorów boole'owskich. Odpowiadające sobie bity
kolejnych argumentów typu integer s
ą argumentami operacji logicznych, w wyniku
których zwracana jest nowa liczba typu integer. Jej bity stanowi
ą logiczne kombinacje
bitów argumentów składowych, okre
ślone rodzajem argumentu func i bazujące na
przedstawionej poni
żej tablicy prawdziwości.
Tabela B.2. Tablica stanów logicznych
Int1
Int2
Bit
0
0
8
0
1
4
1
0
2
1
1
1
Ka
żdy bit argumentu int1 jest zestawiany z odpowiednim bitem argumentu int2. Para
taka wyznacza jeden z poziomych rz
ędów tablicy prawdy. Bitem wyniku jest 0 lub 1,
stosownie do warto
ści odpowiadającego im w wierszu bitu func. Pewnym wartościom
argumentu func odpowiadaj
ą standardowe operacje Boole'owskie AND, OR, XOR,
NOT i NAND. Pokazano to poni
żej:
Tabela B.3. Warto
ści bitów funkcji Boole'a
Funkcja
Operacja
Bitem wynikowym jest 1 je
żeli …
1
AND
obydwa bity s
ą jedynkami
6
XOR
jeden i tylko jeden z bitów jest jedynk
ą.
7
OR
przynajmniej jeden z bitów jest jedynk
ą.
8
NOR
żaden z bitów nie jest jedynką.
14
NAND
obydwa bity nie s
ą jedynkami równocześnie
Przykłady
Ni
żej podano przykład operacji logicznej AND dla wartości 12 i 5.
789
BvupMJTQ!—!qsbluzd{oz!lvst
(boole 1 12 5)
daje w wyniku 4
Wyznaczenie funkcji logicznej XOR dla liczb 6 i 5.
(boole 6 6 5)
daje w wyniku 3
W celu wykonywania innych operacji algebry Boole'a, równie
ż tych dla których nie ma
standardowych nazw, mo
żna wykorzystywać pozostałe wartości argumentu func.
Przykładowo, je
żeli argument func ma wartość 4, to bity wynikowe są jedynkami
wtedy, gdy odpowiadaj
ące im bity są jedynkami w argumencie int2 i zerami dla int1.
Tak wi
ęc wyrażenie:
(boole 4 3 14)
zwróci 12
)cpvo
)cpvo
)cpvo
)cpvoeq!
eq!
eq!
eq!bupn****
Funkcja ta zwraca T, je
żeli atom ma przypisaną określoną wartość (dowolnego typu).
Je
żeli z argumentem atom nie jest związana żadna wartość, lub przypisano mu nil, to
funkcja zwraca nil.
Je
żeli atom jest symbolem niezdefiniowanym, to zostanie on automatycznie utworzony
i zostanie mu przypisane nil.
Przykładowo, je
żeli przypisano
(setq a 2) (setq b nil)
to
:
(boundp 'a)
zwraca
T
(boundp 'b)
zwraca
nil
Funkcja atoms-family oferuje alternatywn
ą metodę określania istnienia symbolu, bez
jego automatycznego tworzenia.
)dbs!
)dbs!
)dbs!
)dbs!mjtu****
Funkcja ta zwraca pierwszy element argumentu list. Je
żeli lista jest pusta, to funkcja
zwraca nil. Przykładowo:
(car '(a b c))
zwraca
A
(car '((a b) c))
zwraca
(A B)
(car '0)
zwraca
nil
)des!
)des!
)des!
)des!mjtu****
Epebufl!C
78:
Funkcja ta zwraca list
ę zawierającą wszystkie elementy argumentu list oprócz
pierwszego elementu. Je
żeli argument list jest listą pustą, to funkcja zwraca nil.
Przykładowo:
(cdr '(a b c))
zwraca
(B C)
(cdr '((a b) c))
zwraca
(C)
(cdr '())
zwraca
nil
Je
żeli argument list jest parą kropkową (patrz opis funkcji cons), to funkcja cdr zwraca
drugi element pary jako atom, a nie jako list
ę. Przykładowo:
(cdr '(a . b))
zwraca
B
(cdr '(1 . "Tekst"))
zwraca
"Tekst"
)dbbs!
)dbbs!
)dbbs!
)dbbs!mjtu*-!)dbes!
*-!)dbes!
*-!)dbes!
*-!)dbes!mjtu*-!)dees!
*-!)dees!
*-!)dees!
*-!)dees!mjtu*-!)dbebs!
*-!)dbebs!
*-!)dbebs!
*-!)dbebs!mjtu*-!jue/
*-!jue/
*-!jue/
*-!jue/
W AutoLISPie mo
żliwe jest łączenie funkcji car i cdr, przy czym superpozycja ta może
si
ęgać do czterech poziomów w głąb. Przykładowo, jeżeli przypisano:
(setq x '((a b) c d))
to
(caar x)
jest równowa
żne
car (car x))
i zwraca
A
(cdar x)
jest równowa
żne
(cdr (car x))
i zwraca
(B)
(cadar x)
jest równowa
żne
(car (cdr (car x)))
i zwraca
B
(cadr x)
jest równowa
żne
(car (cdr x))
i zwraca
C
(cddr x)
jest równowa
żne
(cdr (cdr x))
i zwraca
(D)
(caddr x)
jest równowa
żne
(car (cdr (cdr x)))
i zwraca
D
Funkcja cadr jest cz
ęsto używana w AutoLISPie w celu uzyskania współrzędnej
Y punktu 2W lub 3W (drugiego elementu listy zawieraj
ącej dwie lub trzy liczby typu
real). Podobnie funkcja caddr mo
że być użyta w celu uzyskania współrzędnej Z punktu
3W. Przykładowo, je
żeli przypisano:
(setq pkt2 '(5.25 1.0))
(punkt 2W)
(setq pkt3 '(5.25 1.0 3.0))
(punkt 3W)
to:
(car pkt2)
zwraca
5.25
(cadr pkt2)
zwraca
1.0
(caddr pkt2)
zwraca
nil
(car pkt3)
zwraca
5.25
(cadr pkt3)
zwraca
1.0
(caddr pkt3)
zwraca
3.0
)dis!
)dis!
)dis!
)dis!ovncfs****
791
BvupMJTQ!—!qsbluzd{oz!lvst
Funkcja ta zwraca wynik konwersji liczby typu integer, reprezentuj
ącej kod ASCII, na
odpowiadaj
ący temu kodowi znak, przedstawiony jako jednoznakowy łańcuch tekstowy
(warto
ść typu string); podobnie działa funkcja chr$ w języku BASIC. Przykładowo:
(chr 65)
zwraca
"A"
(chr 66)
zwraca
"B"
(chr 97)
zwraca
"a"
)d
)d
)d
)dmptf!
mptf!
mptf!
mptf!gjmf.eftd****
Funkcja zamyka plik i zwraca nil. Argument file-desc jest deskryptorem pliku
zwróconym przez funkcj
ę open. Po wykonaniu close, deskryptor pliku nie ulega
zmianie, ale nie jest ju
ż ważny.
Przyjmuj
ąc przykładowo, że x jest aktualnie obowiązującym deskryptorem otwartego pliku:
(close x)
zamknie ten plik i zwróci
nil.
)dpnnbo
)dpnnbo
)dpnnbo
)dpnnboe!
e!
e!
e!\bshvnfout^!
****
Funkcja ta wywołuje polecenie AutoCADa z programu napisanego w j
ęzyku AutoLISP
i zawsze zwraca nil. Argumentami s
ą polecenia programu AutoCAD i ich opcje.
Ka
żdy z argumentów podlega ewaluacji i jest wysyłany do AutoCADa w odpowiedzi
na kolejne zgłoszenia gotowo
ści. Nazwy poleceń i opcji są danymi typu string, punkty
2W s
ą listami zawierającymi dwie liczby rzeczywiste typu real, a punkty 3W są listami
zawieraj
ącymi trzy liczby typu real. Nazwy poleceń są rozpoznawane przez AutoCAD
tylko wtedy, gdy wcze
śniej ukazało się zgłoszenie gotowości Polecenie:; Przykładowo:
(setq pkt1 '(1.45 3.23) pkt2 '(1 5))
(command "_line" pkt1 pkt2 "")
Argumentami funkcji command mog
ą być łańcuchy alfanumeryczne, liczby typu real
i integer oraz punkty, zale
żnie od tego, czego oczekuje wykonywana właśnie funkcja
AutoCADa. Pusty ła
ńcuch ("") jest równoważny naciśnięciu na klawiaturze klawisza
ENTER. Wywołanie funkcji command bez argumentów jest równowa
żne wciśnięciu
klawiszy Ctrl+C i powoduje to przerwanie wykonywania wi
ększości poleceń AutoCADa.
Je
żeli zmienna systemowa AutoCADa CMDECHO (dostępna przy użyciu funkcji
setvar i getvar) ma warto
ść 0, to na ekranie nie pojawia się echo poleceń wywo-
ływanych funkcj
ą command. Użycie funkcji command jest podstawową metodą
wywoływania polece
ń AutoCADa z poziomu AutoLISPu.
Epebufl!C
792
Funkcje getxxx, słu
żą
ce do przejmowania danych wprowadzanych przez
u
ż
ytkownika (np. getangle, getstring, getint, getpoint itd.), nie mog
ą
by
ć
u
ż
ywane wewn
ą
trz funkcji command. Próba takiego działania spowoduje
pojawienie si
ę
komunikatu:
"bł
ą
d: AutoCAD rejected function"
i przerwanie wykonywania wywoływanej funkcji. Je
ż
eli konieczne jest wprowa-
dzenie danych przez u
ż
ytkownika, to funkcj
ę
getxxx nale
ż
y wprowadzi
ć
przed
wywołaniem funkcji command (tak jak miało to miejsce w poprzednim
przykładzie) lub nale
ż
y u
ż
y
ć
jej pomi
ę
dzy kolejnymi wywołaniami command.
W przypadku polece
ń AutoCADa wymagających wybierania obiektów (jak np. pole-
cenia PRZERWIJ lub UTNIJ) zamiast punktów słu
żących do wskazywania elementów
mo
że zostać użyta lista otrzymana przy użyciu funkcji entsel.
Ograniczenia: Polecenia AutoCADa DTEKST i SZKICUJ czytaj
ą dane bezpośrednio
z klawiatury i digitizera. Z tego powodu nie mog
ą być wywoływane przez funkcję com-
mand. Je
śli funkcja command wywołuje polecenie SCRIPT, to powinno to być
ostatnie wywołanie funkcji w procedurze AutoLISPu.
Je
żeli w trakcie wykonywania polecenia AutoCADa zostanie napotkany zdefiniowany
w AutoLISPie symbol PAUSE, wprowadzony jako jeden z argumentów funkcji com-
mand, to wykonywanie polecenia zostanie zawieszone, w celu umo
żliwienia użyt-
kownikowi wprowadzenia danych.
•
Symbol PAUSE jest zdefiniowany jako ła
ńcuch składający się z pojedynczego
znaku "\". Zamiast u
żywania symbolu PAUSE, możliwe jest więc bezpośrednie
wprowadzenie tego znaku do listy argumentów. Je
żeli jednak funkcja command
zostanie wywołana z pozycji menu, znak lewego uko
śnika zawiesi odczytywanie
sekwencji działa
ń zadeklarowanych w pozycji menu, co spowoduje częściowe
wyliczenie wyra
żenia AutoLISPu. Możliwe jest również, że w przyszłych
wersjach AutoLISPu zostanie u
żyty inny symbol włączający mechanizm pauzy.
Zaleca si
ę zatem stosowanie w każdym przypadku symbolu PAUSE, a nie
lewego uko
śnika "\"
Przypomnienie: Znak lewego uko
śnika wykorzystywany w łańcuchu alfanumerycznym
musi by
ć poprzedzony drugim znakiem ukośnika (czyli musi wystąpić sekwencja "\\").
•
Je
żeli symbol PAUSE zostanie napotkany w momencie gdy spodziewane jest
podanie ła
ńcucha znaków tekstowych lub wartości atrybutu, to AutoCAD
zawiesi realizacj
ę polecenia na czas wprowadzania danych tylko w wypadku,
gdy zmienna systemowa TEXTEVAL ma warto
ść różną od zera. W przeciwnym
razie warto
ść symbolu PAUSE (czyli znak lewego ukośnika) jest traktowana
jako jeden ze znaków tekstowych i nie powoduje wstrzymania działania
programu w celu umo
żliwienia wczytania danych wejściowych.
•
Funkcja command oczekuj
ąca na wprowadzenie danej przez użytkownika jest
wci
ąż uważana za aktywną; nie można więc w tym momencie wprowadzić
innego wyra
żenia AutoLISPu do wartościowania.Oto przykład użycia symbolu
PAUSE:
(setq blk "MOJBLOK")
793
BvupMJTQ!—!qsbluzd{oz!lvst
(setq old lay (getvar "clayer"))
(command "_layer" "_set" "NOWA_WAR" "")
(command "_insert" blk pause "" "" pause)
(command "_layer" "_set" old_lay "")
Powy
ższy fragment kodu ustala warstwę bieżącą na ”NOWA_WAR”, oczekuje na podanie
przez u
żytkownika punktu wstawienia bloku MOJBLOK (który będzie wstawiony ze
współczynnikami skali w kierunkach X i Y równymi 1) i znów oczekuje na podanie przez
u
żytkownika kąta obrotu bloku. Następnie zostaje przywrócona poprzednio obowiązująca
warstwa aktualna.
Je
śli funkcja command podaje PAUSE dla polecenia _SELECT (WYBIERZ) gdy
aktywny jest zbiór PICKFIRST, polecenie WYBIERZ odczytuje zbiór PICKFIRST bez
oczekiwania na wprowadzenie danych przez u
żytkownika.
Opcje _RADIUS (PROMIE
Ń
) i _DIAMETER (
Ś
REDNICA) polecenia _DIM
(WYMIAR), w niektórych sytuacjach wykorzystuj
ą
dodatkowe zgłoszenia goto-
wo
ś
ci. W działaniu programów w AutoLISPie, utworzonych dla wersji wcze-
ś
niejszych ni
ż
Wydanie 11 i wykorzystuj
ą
cych te polecenia, mog
ą
wyst
ą
pi
ć
bł
ę
dy.
)dpoe!
)dpoe!
)dpoe!
)dpoe!)uftu2!sftvmu2!
*!
****
Argumentami funkcji mo
że być dowolna liczba list. Funkcja testuje wyrażenia test-n,
wyznaczaj
ąc wartość pierwszych elementów każdej kolejnej listy podrzędnej (w poda-
nym porz
ądku), aż do momentu, gdy wartość któregoś z nich okaże się różna od nil.
Nast
ępnie wartościowane są te wyrażenia result, które następują po pozytywnie przete-
stowanym wyra
żeniu test i zwracana jest wartość ostatniego wyrażenia listy podrzędnej.
Je
żeli na takiej liście znajduje się tylko jeden element (tzn. opuszczono result), funkcja
zwraca warto
ść wyrażenia test. Funkcja cond jest główną funkcją warunkową w Auto-
LISPie. Przykładowo, poni
ższe wyrażenie prezentuje zastosowanie funkcji cond do
obliczenia warto
ści bezwzględnej:
(cond
((minusp a) (- a))
(t a)
)
Je
żeli zmiennej a przypisano wartość –10, to wyrażenie to zwraca 10. Jak pokazano,
funkcja cond mo
że być użyta w charakterze funkcji typu case. Zwykle jako ostatnie
wyra
żenie test używa się T (jest ono uwzględniane w przypadku braku pozytywnego
wyniku testowania wszystkich poprzednich). Oto kolejny prosty przykład. Funkcja te-
stuje wprowadzany przez u
żytkownika łańcuch znaków tekstowych, przypisany zmien-
nej s i zwraca 1, je
żeli wprowadzono T lub t. Jeżeli wprowadzono N lub n, to funkcja
zwraca 0, oraz nil w ka
żdym innym przypadku.
(cond
((=s "T") 1)
((=s "t") 1)
((=s "N") 0)
((=s "n") 0)
(t nil)
)
Epebufl!C
794
)dpot!
)dpot!
)dpot!
)dpot!ofx.gjstu.fmfnfou!mjtu!*
!*
!*
!*
Jest to podstawowa funkcja słu
żąca do tworzenia list. Argument new-first-element jest
wprowadzany jako pierwszy argument listy okre
ślonej przez argument list. Przykładowo:
(cons 'a '(b c d))
zwraca
(A B C D)
(cons '(a) '(b c d)
zwraca
((A) B C D)
Nale
ży zauważyć, że argumentem new-first-element może być zarówno atom, jak i lista.
Argumentem list mo
że być również atom; cons tworzy wtedy strukturę znaną w języku
LISP jako para kropkowa. Pomi
ędzy pierwszym i drugim elementem pary kropkowej
znajduje si
ę kropka. Aby odzyskać drugi atom takiej pary, można zastosować funkcję cdr.
Zatem:
(cons 'a 2)
zwraca
(A . 2)
(car (cons 'a 2))
zwraca
A
(cdr (cons 'a 2))
zwraca
2
Para kropkowa jest specjalnym rodzajem listy; nie jest ona akceptowana jako argument
przez niektóre funkcje, które operuj
ą na zwykłych listach.
)dpt!
)dpt!
)dpt!
)dpt!bohmf****
Funkcja ta zwraca cosinus wyra
żonego w radianach argumentu angle. Przykładowo:
(cos 0.0)
zwraca
1.0
(cos pi)
zwraca
-1.0
)dwvoj
)dwvoj
)dwvoj
)dwvoju!
u!
u!
u!wbmvf!gspn!up****
Funkcja ta przelicza warto
ść lub współrzędne punktu, wyrażone w miarach jednego
układu jednostek, na warto
ści w innych jednostkach. Po udanym przeliczeniu, funkcja
zwraca wyznaczon
ą w wyniku konwersji nową wartość lub nowe współrzędne punktu.
Je
żeli nazwa jednostki nie jest znana (nie została znaleziona w pliku ACAD.UNT) lub
dwie podane jednostki dotycz
ą miar różnych wielkości (jak na przykład próba zamiany
cali na miesi
ące), funkcja zwraca nil.
Argument value jest wyra
żony wartością liczbową, przeznaczoną do przeliczenia. Może
ona by
ć również listą, zawierającą dwie lub trzy liczby do przeliczenia (punkt 2W lub
3W). Argument from okre
śla jednostki, w których podana jest wielkość, a argument to
okre
śla jednostki, na które wielkość ma zostać przeliczona. Argumenty from i to mogą
by
ć nazwami dowolnych jednostek, zapisanymi w pliku ACAD.UNT.
Przykłady:
(cvunit 1 "min" "s")
zwraca
60.0
795
BvupMJTQ!—!qsbluzd{oz!lvst
(cvunit 1 "galon" "kopa jaj")
zwraca
nil
(cvunit 1.0 "cal" "cm")
zwraca
2.54
(cvunit 1.0 "acre" "sq yard")
zwraca
4840.0
(cvunit '(1.0 2.5) "ft" "inch")
zwraca
(12.0 30.0)
(cvunit '(1 2 3) "m" "cm")
zwraca
(100.0 200.0 300.0)
Je
ż
eli w programie zachodzi konieczno
ść
dokonywania przelicze
ń
wi
ę
kszej
ilo
ś
ci danych według tego samego schematu, to znacznie bardziej efektywn
ą
metod
ą
jest dokonanie jednorazowego przeliczenia wielko
ś
ci 1.0, a nast
ę
pnie
stosowanie uzyskanego współczynnika do skalowania pozostałych warto
ś
ci.
Sposób ten nadaje si
ę
do wszystkich jednostek zdefiniowanych w pliku
ACAD.UNT, oprócz jednostek temperatury; w tym przypadku dochodzi jeszcze
przesuni
ę
cie skali.
)efgvo!
)efgvo!
)efgvo!
)efgvo!tzn!bshvnfou.mjtu!fyqs!
****
Funkcja defun definiuje funkcj
ę o nazwie sym (należy zwrócić uwagę, że nazwa funkcji
jest automatycznie cytowana dosłownie i nie trzeba w tym celu u
żywać apostrofu). Po
nazwie funkcji nast
ępuje lista argumentów (może być pusta). Opcjonalnie może w niej
wyst
ąpić lista symboli lokalnych danej funkcji, rozpoczynająca się od znaku prawego
uko
śnika "/". Ostatni element listy argumentów (jeżeli funkcja jakieś posiada), lewy
uko
śnik i pierwszy symbol lokalny muszą być między sobą odseparowane co najmniej
jedn
ą spacją. Jeżeli nie deklaruje się żadnych argumentów ani lokalnych symboli, to po
nazwie funkcji nale
ży wpisać same nawiasy.
Poni
ższe przykłady argumentu argument-list ukazują wartości ważne i nieważne:
(defun ela (x y) ...)
Funkcja ma dwa argumenty
(defun ela (/ a b) ...)
Funkcja ma dwa symbole lokalne
(defun ela (x / temp) ...)
Jeden argument i jeden symbol lokalny
(defun ela () ...)
Brak argumentów i symboli lokalnych
Nie mo
żna definiować funkcji o wielu argumentach posiadających tę samą nazwę.
Funkcja mo
że jednak definiować zmienne lokalne o nazwie identycznej, jak nazwa in-
nej zmiennej lokalnej lub nazwa jednego z argumentów, na przykład:
(defun fubar (a a / b) ...)
Nie jest dopuszczalne
(defun fubar (a b / a a b) ...)
Tak mo
że być
Po li
ście zawierającej argumenty i symbole lokalne znajduje się co najmniej jedno
wyra
żenie, którego wartość ma być wyznaczona w czasie wykonania funkcji.
Je
ś
li lista symboli argumentów zawiera wielokrotnie t
ę
sam
ą
nazw
ę
, wówczas
wykorzystywany jest tylko pierwszy symbol na li
ś
cie, a nast
ę
pne s
ą
ignorowane.
Po wywołaniu tak zdefiniowanej funkcji wyznaczane s
ą wartości jej argumentów i są
one przypisywane odpowiednim symbolom. Symbole lokalne mog
ą być używane we-
Epebufl!C
796
wn
ątrz wywoływanej funkcji bez powodowania zmian ich wartości na poziomach
zewn
ętrznych. Funkcja ta zwraca wartość ostatniego wyliczonego wyrażenia.
Wszystkie poprzednie wyra
żenia funkcji mają tylko znaczenie pomocnicze. Natomiast
sama funkcja defun zwraca nazw
ę funkcji aktualnie definiowanej.
Poni
ższe przykłady wykorzystują defun do zdefiniowania dwóch nowych funkcji i uka-
zuj
ą wartości, zwracane przez nowe funkcje:
(defun dodaj_10 (x)
(+ 10 x)
)
zwraca
DODAJ_10
(dodaj_10 5)
zwraca
15
(dodaj_10 -7.4)
zwraca
2.6
oraz:
(defun wielokropek (x y / kropki)
(setq kropki (strcat x "..."))
(strcat kropki y)
)
zwraca
WIELOKROPEK
(wielokropek "a" "b")
zwraca
"a...b"
(wielokropek "od " " do")
zwraca
"od ... do"
Jako argumentu sym nigdy nie nale
ż
y u
ż
ywa
ć
nazw funkcji lub symboli
wewn
ę
trznych; uniemo
ż
liwiłoby to dost
ę
p do funkcji wewn
ę
trznej. Aby uzyska
ć
list
ę
symboli
wewn
ę
trznych
i
zdefiniowanych
wcze
ś
niej
funkcji,
nale
ż
y
wykorzysta
ć
opisan
ą
wcze
ś
niej funkcj
ę
atoms-family.
)ejtu
)ejtu
)ejtu
)ejtubodf!
bodf!
bodf!
bodf!qu2!qu3****
Funkcja ta zwraca odległo
ść w przestrzeni 3W pomiędzy punktami pt1 i pt2.
Przykładowo:
(distance '(1.0 2.5 3.0) '(7.7 2.5 3,0))
zwraca
6.7
(distance '(1.0 2.0 0.5) ' (3.0 4.0 0.5))
zwraca
2.82843
Je
żeli jeden z punktów jest punktem 2W (lub obydwa), to funkcja distance ignoruje
współrz
ędne Z punktu 3W i zwraca odległość 2W pomiędzy rzutami punktów na
aktualn
ą płaszczyznę konstrukcyjną.
)ejtu
)ejtu
)ejtu
)ejtupg!
pg!
pg!
pg!tusjoh!\uszc^****
Funkcja distof wykonuje konwersj
ę łańcucha string, zawierającego wartość rzeczywistą
(zmiennoprzecinkow
ą) w formacie wyświetlania określanym przez mode, na wartość
typu real.
Argument mode okre
śla jednostki, w których sformatowany jest łańcuch string. Jego
warto
ść powinna być zgodna z wartościami dopuszczalnymi dla zmiennej systemowej
797
BvupMJTQ!—!qsbluzd{oz!lvst
AutoCADa LUNITS, ukazanym w poni
ższej tabeli. Ponadto, jeśli mode jest pominięty,
distof wykorzystuje bie
żącą wartość zmiennej LUNITS.
Tabela B.4. Warto
ści jednostek liniowych
Warto
ść argumentu tryb
Format ła
ńcucha
1
Wykładniczy
2
Ułamki dziesi
ętne
3
Stopy i dziesi
ętne ułamki cala
4
Stopy i zwykłe ułamki cala
5
Ułamki zwykłe
Argument string musi by
ć łańcuchem, który distof będzie w stanie właściwie zinter-
pretowa
ć, zgodnie z formatem określonym przez argument mode. Może on mieć taką
sam
ą postać, jaką zwraca funkcja rtos, albo taką, jaką można wprowadzić z klawiatury
w odpowiedzi na zgłoszenie AutoCADa. Funkcje distof i rtos s
ą komplementarne: jeśli
argumentem string dla funkcji distof b
ędzie łańcuch zwrócony przez rtos, distof z całą
pewno
ścią zwróci poprawną wartość, i na odwrót (przy założeniu, że wartości para-
metru mode s
ą takie same).
Funkcja distof nie rozró
ż
nia trybów 3 i 4 i traktuje je tak samo. Oznacza to,
ż
e
je
ś
li
mode jest równy 3 (stopy i dziesi
ę
tne ułamki cala) lub 4 (stopy i zwykłe
ułamki cala), a
string jest okre
ś
lony w którymkolwiek z tych formatów, to distof
zwróci poprawn
ą
warto
ść
rzeczywist
ą
.
W wyniku sukcesu wywołania funkcji distof zwracana jest liczba rzeczywista. W wy-
padku przeciwnym funkcja zwraca nil.
)fouefm!
)fouefm!
)fouefm!
)fouefm!fobnf****
Element wskazywany przez argument ename jest wymazywany, je
żeli aktualnie znaj-
duje si
ę na rysunku lub odtwarzany i umieszczany w rysunku, jeżeli uprzednio został
z niego wymazany. Tego rodzaju operacje mog
ą być dokonywane bez utraty elementu
tylko w czasie tej samej sesji w edytorze graficznym; po zako
ńczeniu sesji edycyjnej
elementy wymazane z rysunku s
ą usuwane z rysunkowej bazy danych.
Funkcja entdel działa jedynie na elementach głównych. Niezale
żnie od elementu nad-
rz
ędnego nie jest więc możliwe usuwanie atrybutów Bloków ani wierzchołków Polilinii
(aby to uzyska
ć można skorzystać z funkcji command i posłużyć się poleceniem
ATRRED lub EDPLIN).
Nie jest mo
żliwe usuwanie elementów z definicji Bloku. Możliwe jest jednak utwo-
rzenie definicji na nowo (z pomini
ęciem elementu, który chcemy usunąć) z użyciem
funkcji entmake.
Przykład:
Epebufl!C
798
(setq e1 (entnext))
przypisuje e1 nazw
ę pierwszego elementu rysunku
(entdel e1)
usuwa element e1
(entdel e1)
odtwarza usuni
ęty element e1
)fouhfu!
)fouhfu!
)fouhfu!
)fouhfu!fobnf!\bqqmjtu^!*
!*
!*
!*
Element rysunku którego nazw
ą jest ename, jest odszukiwany w rysunkowej bazie
danych i zwracany w postaci listy, która zawiera definiuj
ące go dane. Jeżeli wyrażenie
zawiera równie
ż opcjonalny argument applist, zawierający listę zarejestrowanych
programów u
żytkowych (aplikacji), wówczas zwracane są również dodatkowe dane
elementu zwi
ązane z wymienionymi w niej programami użytkowymi. Dane kodowane
s
ą w postaci typowych dla LISPu list asocjacji, z których mogą być wyciągane przy
pomocy funkcji assoc. Obiekty s
ą w listach oznaczone kodami grup, których znaczenie
jest zgodne ze standardem przyj
ętym dla plików DXF; odpowiednie kody są związane
z ka
żdym rodzajem wartości wchodzących w skład definiujących element danych.
W poni
ższym przykładzie przyjęto następujące założenia:
•
aktualn
ą warstwą rysunkową jest "0",
•
aktualnym rodzajem linii rysunkowej jest CONTINUOUS,
•
aktualnym poziomem jest poziom zerowy,
•
identyfikatory elementów s
ą zablokowane,
Przypu
śćmy, że przy pomocy poniższej sekwencji poleceń został narysowany odcinek
prostoliniowy (element LINE):
Polecenie: _line
↵
↵↵
↵
Od punktu: 1,2
↵
↵↵
↵
Do punktu: 6,6
↵
↵↵
↵
Do punktu:
↵
↵↵
↵
Dane elementu dla tego odcinka mo
żna otrzymać przez wprowadzenie wyrażenia:
Polecenie: (setq a (entget (entlast)))
↵
↵↵
↵
co powoduje przypisanie zmiennej a listy podobnej lub takiej samej, jak poni
ższa:
((-1 . <Nazwa elementu: 60000014>)
(0 . "LINE")
Typ elementu
(8 . "0")
Warstwa
(10 1.0 2.0 0.0)
Punkt pocz
ą
tkowy
(11 6.0 6.0 0.0)
Punkt ko
ń
cowy
)
Rozpoczynaj
ąca listę para kropkowa z pierwszym elementem –1 zawiera nazwę
elementu, którego dotycz
ą przedstawione w liście dane. Opisywana dalej funkcja entmod
korzysta z tej nazwy przy identyfikowaniu elementu, który ma by
ć zmodyfikowany.
Poszczególne pary kropkowe, reprezentuj
ące konkretne wartości, mogą zostać w łatwy
sposób wyodr
ębnione z listy za pomocą funkcji assoc, a same wartości można z nich
799
BvupMJTQ!—!qsbluzd{oz!lvst
potem wyci
ągnąć z użyciem funkcji cdr. Kody składających się na definicję elementu
danych s
ą takie same, jakie stosuje się w formacie DXF. Są one opisane w dodatku E
niniejszej ksi
ążki.
Podobnie jak w przypadku plików DXF, pozycje nagłówkowe elementu (kolor i rodzaj
linii rysunkowej, grubo
ść, znacznik poprzedzający atrybuty oraz identyfikator ele-
mentu) s
ą podawane tylko wtedy, gdy mają wartości różne od standardowych pro-
pozycji AutoCADa. W przeciwie
ństwie natomiast do plików DXF, opcjonalne pola
definiuj
ące element są podawane bez względu na to, czy pokrywają się z wartościami
standardowo proponowanymi, czy nie. Intencj
ą takiego rozwiązania było uproszczenie
przetwarzania; przy tworzeniu programów wykorzystuj
ących te pola można zakładać,
że istnieją one zawsze.
Równie
ż inaczej niż w plikach DXF, współrzędne X,Y, Z tego samego punktu są
zebrane w jedn
ą listę, jak np. (10 1.0 2.0 0.0), a nie występują jako oddzielne grupy 10,
20 i 30. Podobna uwaga dotyczy grupowania w jedn
ą listę współrzędnych wektorów,
np. (210 0.0 0.0 1.0).
Nale
ży zauważyć, że listy podrzędne, które reprezentują punkty (zawierają ich
współrz
ędne), nie są parami kropkowymi, tak jak wszystkie pozostałe. Przyjęto
konwencj
ę, że użycie wobec listy podrzędnej funkcji cdr daje wartość grupy. Ponieważ
punkt jest list
ą dwóch lub trzech liczb typu real, to cała grupa jest listą zawierającą trzy
lub cztery elementy. U
życie funkcji cdr dla takiej grupy daje listę reprezentującą punkt,
co zapewnia spełnienie wspomnianej konwencji.
Przed wykonaniem funkcji entget lub entmod na elementach Vertex (Wierzchołek
Polilinii), nale
ży odczytać lub zapisać nagłówek (element Polyline) Polilinii, do której
wierzchołki te nale
żą. Jeśli ostatnia przetwarzana Polilinia jest różna od Polilinii, do
której nale
żą Wierzchołki, stracona może być informacja o szerokości (grupy 40 i 41).
Przy pisaniu programów przeznaczonych do przetwarzania list zawieraj
ących dane
elementów, nale
ży zapewnić niezależność wyniku od kolejności list podrzędnych.
Gwarantuje to u
życie funkcji assoc. Zawierająca nazwę elementu grupa z kodem –1
umo
żliwia zaakceptowanie listy elementów przez modyfikujące je operacje oraz
pozwala unikn
ąć konieczności równoległego utrzymywania nazwy elementu w do-
datkowej strukturze. Element SEQEND, ko
ńczący sekwencję elementów składowych
polilinii lub zbioru atrybutów, zawiera grup
ę –2, która poddana działaniu funkcji cdr
daje nazw
ę elementu nadrzędnego. Umożliwia to uzyskanie informacji jaki element jest
nadrz
ędny dla danego elementu podrzędnego poprzez przejście do elementu SEQEND.
Nast
ępnie wyrażenie z funkcją cdr i grupą z kodem –2 może zostać użyte jako nazwa
elementu do uzyskania elementu nadrz
ędnego.
Poni
ższy przykład przedstawia nieco bardziej złożoną listę reprezentującą element rysunku.
W przykładzie tym przyj
ęto, że aktualnie obowiązujący Lokalny Układ Współrzędnych jest
obrócony o 40 stopni wokół osi X Globalnego Układu Współrz
ędnych, w kierunku prze-
ciwnym do ruchu wskazówek zegara, oraz
że identyfikatory elementów są odblokowane.
Polecenie: rodzlin
↵
↵↵
↵
?/Definiuj/Wczytaj/Ustal: ustal
↵
↵↵
↵
Epebufl!C
79:
Nowy rodzaj linii dla elementów (albo ?) <JAKWARSTWA>:
dashed
↵
↵↵
↵
?/Definiuj/Wczytaj/Ustal:
↵
↵↵
↵
Polecenie: kolor
↵
↵↵
↵
Nowy kolor elementów <JAKWARSTWA>: niebieski
↵
↵↵
↵
Polecenie: warstwa
↵
↵↵
↵
?/Twórz/Ustal/Nowa/Widoczna/UKryta/Kolor/Rodzlin/Zablok/Odbl
ok/zaMkn/OTw: twórz
↵
↵↵
↵
Nowa warstwa aktualna <0>: komentarze
↵
↵↵
↵
?/Twórz/Ustal/Nowa/Widoczna/UKryta/Kolor/Rodzlin/Zablok/Odbl
ok/zaMkN/OTw:
↵
↵↵
↵
Polecenie: tekst
↵
↵↵
↵
Just/STyl/<Pocz
ą
tek tekstu>: 2,2
↵
↵↵
↵
Wysoko
ść
<0.2000>: 3
↵
↵↵
↵
K
ą
t obrotu <0>: 30
↵
↵↵
↵
Tekst: Do zobaczenia, dzi
ę
kuj
ę
za pomoc!
↵
↵↵
↵
Polecenie: (setq ed (entget (setq e (entlast))))
↵
↵↵
↵
W tym przypadku symbolowi e została przypisana nazwa elementu, którym jest napis
wykonany poleceniem TEKST, a symbol ed otrzymał warto
ść taką samą lub zbliżoną
do przedstawionej poni
żej listy.
(
(-1 . <Nazwa elementu: 6000053C>)
(0. "TEXT")
Rodzaj elementu
(8. "KOMENTARZE")
Warstwa
(6. "DASHED")
Rodzaj linii
(62 . 5)
Kolor
(5 . "7E")
Identyfikator
(10 2.0 2.0 0.0)
Punkt pocz
ątkowy
(40 . 0.3)
Wysoko
ść
(1 . "Do zobaczenia, dzi
ę
kuj
ę
za pomoc!")
(50 . 0.523599)
K
ąt obrotu (w radianach
)
(41 . 1.0)
Współczynnik szeroko
ści
(51 . 0.0)
K
ąt pochylenia
(7 "STANDARD")
Styl tekstu
(71 . 0)
Wska
źnik generowania tekstu
(72 . 0)
Justowanie poziome
(73 . 0)
Justowanie pionowe
(11 0.0 0.0 0.0)
Punkt bazowy
(210 0.0 -0.642788 0.766044)
Wektor kierunku pogrubiania
)
Warto
ści wszystkich związanych z elementem punktów są wyrażone względem jego
własnego Układu Współrz
ędnych Elementu (UWE). W przypadku elementów typu
Punkt, Linia, Linia 3W, Polilinia 3W, oraz dla wycinków płaskich powierzchni 3W
(rysowanych poleceniem 3WPOW), siatek przestrzennych (polecenie 3WSIATKA)
i elementów wymiarowych, UWE jest równowa
żny GUW (punkty elementu są
punktami wyra
żonymi we współrzędnych globalnych). Dla wszystkich innych elemen-
7:1
BvupMJTQ!—!qsbluzd{oz!lvst
tów, UWE mo
żna otrzymać z GUW i kierunku pogrubiania danego elementu (grupa
o kodzie 210). W przypadku operowania na elementach narysowanych w innym ni
ż
GUW układzie współrz
ędnych (jak np. Tekst w powyższym przykładzie), konieczna
mo
że być transformacja współrzędnych do GUW lub do aktualnie obowiązującego
LUW, któr
ą można wykonać za pomocą funkcji trans. Używając powyższego elementu
Tekst w charakterze przykładu:
(setq p (cdr (assoc 10 ed)))
zwraca
(2.0 2.0 0.0)
i przypisze zmiennej p punkt pocz
ątkowy tekstu, wyrażony we współrzędnych jego
UWE (zwró
ćmy uwagę na to, że taka postać wyniku nie zależy od LUW obowią-
zuj
ącego w momencie użycia entget). Teraz:
(trans p e 0)
zwraca
(2.0 1.53209 1.285558)
Wyra
żenie to wykorzystuje symbol e (nazwa elementu tekstu) w celu wskazania układu
from, z którego dokonywana jest konwersja i przelicza warto
ści współrzędnych
pocz
ątkowego punktu tekstu z UWE na wartości globalne (GUW)
)foum
)foum
)foum
)foumbtu*
btu*
btu*
btu*
Funkcja zwraca nazw
ę elementu, który jest ostatnim niewymazanym elementem głównym
w rysunkowej bazie danych. Funkcja ta jest cz
ęsto wykorzystywana w celu uzyskania
nazwy nowego elementu, który wła
śnie został dodany z użyciem funkcji command. Element
ten nie musi by
ć widoczny na ekranie ani należeć do warstwy odblokowanej.
Przykładowo:
(setq e1 (entlast))
przypisuje e1 nazw
ę ostatniego elementu
z bazy danych rysunku
(setq e2 (entnext e1)
przypisuje e2 warto
ść nil (lub nazwę
atrybutu albo wierzchołka)
Je
żeli wykorzystywany program użytkowy wymaga nazwy niewymazanego elementu,
który mo
że być uznany za rzeczywiście ostatni, bez względu na to czy jest to element
główny czy podrz
ędny, to można zdefiniować funkcję taką, jak przedstawiona poniżej
i wywoływa
ć ją zamiast entlast.
(defun ostatni (/ a b)
(if (setq a (entlast))
We
ź
ostatni element główny,
je
ż
eli ma on elementy
(while (setq b (entnext a))
podrz
ę
dne, to bierz je kolejno
(setq a b)
i sprawdzaj w p
ę
tli
czy s
ą
nast
ę
pne, a
ż
trafisz na
);while
ostatni
);if
a
Zwró
ć
ostatni element główny /
podrz
ę
dny
);defun
)founblf!
)founblf!
)founblf!
)founblf!\fmjtu^****
Epebufl!C
7:2
Funkcja ta tworzy w rysunku nowy element. Je
żeli operacja tworzenia elementu się
powiedzie, to funkcja zwraca list
ę zawierającą definiujące ten element dane. Jeżeli
natomiast element nie mo
że zostać z jakichkolwiek powodów utworzony (np. z powodu
nieprawidłowych danych), wówczas funkcja zwraca nil.
Argument elist musi by
ć listą zawierającą definiujące element dane, której format jest
podobny do listy zwracanej przez funkcj
ę entget. Musi on zawierać wszystkie informacje
niezb
ędne do zdefiniowania elementu. Gdy jakiejkolwiek z wymaganych informacji
brakuje, to generowany jest komunikat bł
ędu i element jest odrzucany. W przypadku
opuszczenia danych podawanych w definicji elementu opcjonalnie (takich jak nazwa
warstwy), entmake wykorzystuje warto
ści spełniające rolę standardowych propozycji.
Jedna z metod tworzenia nowego elementu polega na uzyskaniu danych tworz
ących
definicj
ę elementu za pomocą funkcji entget, zmodyfikowaniu ich i następnie dodaniu
nowego elementu do rysunku za pomoc
ą funkcji entmake.
Przed utworzeniem nowego elementu rysunku funkcja entmake sprawdza czy zostały
podane nazwa warstwy, rodzaj linii i kolor. Je
śli wprowadzono nazwę nieistniejącej
warstwy, to warstwa taka jest przez entmake tworzona automatycznie. Funkcja ent-
make sprawdza równie
ż, jeżeli typ elementu tego wymaga, obecność takich danych jak
nazwy bloków, stylów wymiarowania, stylów tekstu oraz nazwy symboli (w tym
wypadku chodzi o elementy rysunku wprowadzane poleceniem SYMBOL).
Rodzaj elementu rysunku (tzn. CIRCLE, LINE itp.) musi by
ć pierwszym lub drugim
elementem listy elist. Je
żeli rodzaj elementu jest podany na drugim miejscu, to na
pierwszym mo
że być tylko nazwa elementu. Jest to postać listy analogiczna do zwra-
canej przez funkcj
ę entget. W takich przypadkach, przy tworzeniu nowego elementu,
ignorowana jest jego nazwa. Je
żeli argument dane zawiera identyfikator elementu, to
jest on równie
ż ignorowany.
Nast
ępny przykład tworzy w rysunku czerwony Okrąg o środku w punkcie (4,4) i pro-
mieniu 1. Opcjonalne pola warstwy i rodzaju linii zostały pomini
ęte, co oznacza
przyj
ęcie wartości obowiązujących.
(entmake
'( (0. "CIRCLE")
Typ elementu
(62 . 1)
Kolor
(10 4.0 4.0 0.0)
Ś
rodek
(40 . 1.0)
Promie
ń
)
)
Elementy utworzone w warstwie zablokowanej nie s
ą
regenerowane a
ż
do
odblokowania warstwy.
Elementy zło
żone
Do zdefiniowania elementu zło
żonego (definicja Bloku, Polilinia lub wstawiony do
rysunku odno
śnik do Bloku z Atrybutami) konieczne jest wielokrotne wywoływanie
7:3
BvupMJTQ!—!qsbluzd{oz!lvst
funkcji entmake i zdefiniowanie ich elementów podrz
ędnych (atrybutów lub
wierzchołków). Gdy entmake zorientuje si
ę, że tworzony jest element złożony, zakłada
tymczasowy plik dyskowy przechowuj
ący dane definiujące. Przy każdym wywołaniu
entmake sprawdzana jest obecno
ść tego pliku (oznaczająca tworzenie elementu złożo-
nego); je
żeli plik taki istnieje, dodawane są do niego nowe dane. Po zakończeniu de-
finiowania nowego elementu zło
żonego (po dodaniu kończącego sekwencję elementu
Seqend lub Endblk), podane dane s
ą ponownie sprawdzane i do rysunku dodawany jest
nowy element zło
żony. Zakończenie tworzenia definicji bloku (przez wywołanie
funkcji entmake w celu zdefiniowania elementu Endblk) powoduje zwrócenie nazwy
bloku,
a nie jak zazwyczaj listy zawieraj
ącej definiujące element dane.
Je
żeli podczas tworzenia elementu złożonego podane zostaną dane niezgodne z typem
definiowanego elementu, wówczas odrzucana jest definicja zarówno tego elementu, jak
i całego elementu zło
żonego. Definicja bloku nie może być zagnieżdżana, ani nie może
zawiera
ć odnośników do samej siebie (wywołań rekurencyjnych). Dopuszczalne jest
jednak umieszczanie w definicji bloku odwoła
ń do definicji innych bloków.
Kod grupy 66 (sygnalizuj
ący wystąpienie atrybutów) jest uwzględniany jedynie w przy-
padku bloków wstawionych w rysunek ("INSERT"). W przypadku Polilinii, dla kodu
grupy 66 wymuszana jest warto
ść 1 (oznaczająca istnienie wierzchołków), a dla ele-
mentów wszystkich innych typów wymuszana jest standardowa warto
ść zero. Jedynym
elementem, który ma prawo wyst
ępować po elemencie POLYLINE (polilinia) jest
element VERTEX (wierzchołek).
Do momentu całkowitego zako
ńczenia definiowania elementu złożonego na ekranie nie
jest wy
świetlana żadna część tego elementu. Anulowanie operacji definiowania
elementu zło
żonego uzyskuje się przez wywołanie funkcji entmake bez argumentów.
Powoduje to usuni
ęcie zawartości pliku tymczasowego i zwrócenie nil.
Wszystkie elementy podrz
ędne wchodzące w skład elementu złożonego muszą być
utworzone dla tego samego obszaru. Elementy składowe mog
ą istnieć albo w obszarze
papieru, albo w obszarze modelu, ale nie mog
ą to być elementy z różnych obszarów.
Przykładowo, elementy POLYLINE, VERTEX i SEQEND musz
ą leżeć w tym samym
obszarze. To samo dotyczy elementów INSERT, ATTRIB i SEQEND.
Do utworzenia nowej definicji bloku mo
żna wykorzystać elementy BLOCK i END-
BLK. Nowo utworzone bloki s
ą automatycznie wprowadzane do tablicy symboli, gdzie
mog
ą być potem wskazywane odnośnikami.
Programy u
żytkowe mogłyby tworzyć siatki polipowierzchni z wieloboków o dowolnej
liczbie kraw
ędzi. Struktura elementów AutoCADa narzuca jednak ograniczenie w za-
kresie liczby wierzchołków, które mo
żna podać dla jednego elementu płaskiej
powierzchni (
ściany). Bardziej skomplikowane wieloboki mogą być odwzorowywane
po podzieleniu ich na trójk
ątne kliny. AutoCAD przedstawia trójkątne kliny jako
płaskie elementy powierzchni o czterech wierzchołkach, których dwa s
ąsiednie
wierzchołki si
ę pokrywają. Krawędzie takich segmentów należy uczynić niewido-
cznymi, aby zapobiec rysowaniu linii podziałów; nie powinny by
ć one widoczne.
Epebufl!C
7:4
Polecenie PPOW wykonuje ten podział automatycznie, ale je
żeli program użytkowy
samodzielnie generuje siatki polipowierzchni, to powinien równie
ż samodzielnie
dokonywa
ć podziału.
Kluczowym parametrem w procesie podziału
ścian na mniejsze segmenty jest liczba
wierzchołków przypadaj
ąca na jedną ścianę elementarną. Program użytkowy określa
ten parametr na podstawie warto
ści zmiennej systemowej PFACEVMAX. Zmienna ta
jest przeznaczona tylko do odczytu i ma warto
ść 4.
Wa
żna informacja: Nie jest możliwe wykorzystanie funkcji entmake do tworzenia
elementów rysunku typu Rzutnia.
Blok tworzony przez funkcj
ę
entmake mo
ż
e zast
ą
pi
ć
blok ju
ż
istniej
ą
cy. Funkcja
entmake nie sprawdza konfliktu nazw w tablicy definicji bloków i dlatego przez
u
ż
yciem jej, w celu utworzenia bloku, nale
ż
y za pomoc
ą
funkcji tblsearch sprawdzi
ć
czy nazwa nowego bloku nie jest powtórzeniem której
ś
z istniej
ą
cych. U
ż
yteczne
mo
ż
e by
ć
jednak wykorzystywanie funkcji entmake do przedefiniowywania bloków
anonimowych (bez nazwy), opisanych w nast
ę
pnym podrozdziale.
Bloki bez nazwy
Tablica z definicjami istniej
ących w rysunku bloków może zawierać bloki bez nazwy.
S
ą to bloki tworzone w związku z operacjami zakreskowywania powierzchni i wy-
miarowania zespolonego. Mog
ą one być również tworzone przez funkcję entmake
w zwi
ązku z potrzebami wynikającymi ze specyfiki programu użytkowego; zawierają
wtedy zazwyczaj elementy, do których u
żytkownik nie ma bezpośredniego dostępu.
Nazw
ą bloku anonimowego (grupa o kodzie 2) jest *Unnn, gdzie nnn jest numerem
generowanym przez AutoCADa. Ponadto, najmniej znacz
ący bit znacznika typu bloku
(grupa o kodzie 70) jest w bloku bez nazwy jedynk
ą. Jeżeli za pomocą funkcji entmake
tworzony jest blok, którego nazwa rozpoczyna si
ę od znaku * i dla którego ustawiony
jest najmniej znacz
ący bit w znaczniku typu bloku, to AutoCAD rozpoznaje to jako
tworzenie bloku bez nazwy i nadaje mu nazw
ę. Dowolny znak, występujący po
gwiazdce (*) w u
żytym w wyrażeniu entmake łańcuchu określającym nazwę, jest igno-
rowany. Po utworzeniu bloku, entmake zwraca jego nazw
ę. Jeżeli podczas tworzenia
bloku funkcja entmake jest wywoływana wielokrotnie, to nazwa bloku jest zwracana
po zako
ńczonym sukcesem wywołaniu:
(entmake "endblk")
(element ENDBLK ko
ńczy sekwencję elementów podrzędnych w przypadku bloku).
Przy ka
żdym wprowadzaniu rysunku do edytora graficznego, wszystkie niewykorzysty-
wane w nim bloki bez nazwy s
ą usuwane z tablicy zawierającej definicje bloków. Bloki
bez nazwy, do których w rysunku s
ą odnośniki (wstawione do rysunku), nie są
usuwane. Funkcja entmake mo
że być wykorzystana do utworzenia wstawienia bloku
bez nazwy (element Insert). Nale
ży tu zwrócić uwagę na to, że blok bez nazwy nie
mo
że być użyty w operacji wywoływanej poleceniem WSTAW. Funkcja entmake
mo
że być też użyta do zmiany definicji bloku. Elementy tworzące blok (ale nie sam
Blok jako element rysunku) mog
ą być modyfikowane za pomocą funkcji entmod.
7:5
BvupMJTQ!—!qsbluzd{oz!lvst
Chocia
ż
wstawiany blok bez nazwy, staje si
ę
stałym składnikiem rysunku, to jednak
jego nazwa mo
ż
e ulega
ć
zmianie w kolejnych sesjach edycyjnych. Dlatego
programy u
ż
ytkowe nie mog
ą
zakłada
ć
,
ż
e nazwy bloków anonimowych s
ą
stałe.
)foun
)foun
)foun
)founpe!
pe!
pe!
pe!fmjtu****
Funkcja entmod operuje na argumencie elist, który jest list
ą w postaci zwracanej przez
funkcj
ę entget, i aktualizuje informacje w bazie danych związane z elementem, którego
nazwa jest okre
ślona w tej liście w grupie o kodzie –1. Tak więc, podstawowy sposób
uaktualniania bazy danych przez AutoLISP polega na wydobywaniu informacji o ele-
mencie przy pomocy funkcji entget, na modyfikowaniu listy definiuj
ących element
danych (nale
ży zwrócić uwagę na to, że szczególnie przydatna jest tu funkcja subst)
oraz na aktualizowaniu informacji o elemencie w bazie danych za pomoc
ą entmod.
Przykład
(setq en (entnext))
przypisuje en nazw
ę
pierwszego
elementu rysunku
(setq ed (entget en))
przypisuje ed dane elementu o
nazwie en
(setq ed
(subst
(cons 8 "0")
zmienia warstw
ę
w danych ed na
(assoc 8 ed)
warstw
ę
"0"
);subst
);setq
(entmod ed)
modyfikuje warstw
ę
elementu en
w rysunku
Istnieje kilka ogranicze
ń na zmiany dokonywane przy użyciu funkcji entmod. Przede
wszystkim nie mo
że być zmieniany typ elementu ani jego identyfikator (jeżeli chcemy
to zrobi
ć, należy po prostu wymazać ten element przy użyciu entdel i utworzyć nowy,
wywołuj
ąc funkcję command lub entmake). Wszystkie obiekty, do których odwołuje
si
ę lista z danymi elementu, muszą być znane AutoCADowi przed wykonaniem
entmod. Zatem styl tekstu, rodzaj linii, oraz nazwy Bloków i Symboli musz
ą być dla
rysunku zdefiniowane wcze
śniej, zanim zostaną użyte w liście dane w wyrażeniu
z funkcj
ą entmod. Jedynym wyjątkiem od tej reguły są nazwy warstw. Jeżeli zostanie
podana nazwa warstwy nieistniej
ącej, wówczas entmod utworzy nową warstwę o pa-
rametrach standardowych dla polecenia WARSTWA z opcj
ą Nowa.
Dla pól przeznaczonych na dane elementu o warto
ściach zmiennoprzecinkowych (np.
grubo
ść), entmod akceptuje wartości stałopozycyjne typu integer, które poddaje
konwersji na liczby typu real. Podobnie, je
żeli dla pola typu integer (np. numer koloru)
zostanie podana liczba zmiennoprzecinkowa, to zostanie ona zamieniona na warto
ść
całkowitoliczbow
ą przez obcięcie części ułamkowej.
Funkcja entmod wykonuje operacje sprawdzania spójno
ści podanej listy tak samo, jak
polecenie DXFWE sprawdza dane odczytywane z pliku DXF. Je
żeli zostanie wykryty
Epebufl!C
7:6
bł
ąd na tyle poważny, że baza danych nie może być uaktualniona, funkcja zwraca nil.
W przeciwnym wypadku funkcja entmod zwraca list
ę będącą jej argumentem. Entmod
nie mo
że zmieniać pól wewnętrznych, takich jak nazwa elementu w grupie –2 elementu
Seqend. Próby dokonania takich zmian zostan
ą po prostu zignorowane.
Gdy uaktualniany jest element główny, entmod modyfikuje go i uaktualnia jego wygl
ąd
na ekranie (ł
ącznie z elementami składowymi). Gdy przy wykorzystaniu entmod
uaktualniany jest element podrz
ędny (wierzchołek Polilinii lub atrybut Bloku),
modyfikacje s
ą wprowadzane do bazy danych, lecz wygląd rysunku na ekranie nie
ulegnie zmianie. Po wykonaniu wszystkich modyfikacji elementów składowych danego
elementu głównego, jego wygl
ąd na ekranie można uaktualnić wywołując opisaną dalej
funkcj
ę entupd.
Przed wykonaniem funkcji entget lub entmod na elementach Vertex (Wierzchołek
Polilinii), nale
ży odczytać lub zapisać nagłówek (element Polyline) Polilinii, do której
wierzchołki te nale
żą. Jeśli ostatnia przetwarzana Polilinia jest różna od Polilinii, do
której nale
żą Wierzchołki, stracona może być informacja o szerokości (grupy 40 i 41).
Wa
żna informacja: Funkcja entmod nie może być wykorzystana do modyfikacji
elementu typu Rzutnia. Mo
żliwa jest zmiana na 0 lub na 1 pola determinującego
widzialno
ść obszaru (ale nie dla rzutni będących elementem rysunku). Zastosowanie
funkcji entmod wobec elementu wewn
ątrz definicji bloku, wprowadza zmiany do
wszystkich wywoła
ń tego bloku w rysunku.
Funkcja entmod mo
ż
e by
ć
wykorzystana do modyfikacji elementów wewn
ą
trz
definicji bloku. Tak wprowadzone modyfikacje dotycz
ą
tym samym wszystkich
wywoła
ń
bloku w rysunku. T
ą
drog
ą
mo
ż
na utworzy
ć
blok wywołuj
ą
cy sam
siebie. Nie nale
ż
y tego robi
ć
; prawdopodobnie spowoduje to załamanie si
ę
pracy AutoCADa.
)fouofyu!
)fouofyu!
)fouofyu!
)fouofyu!\fobnf^****
Je
żeli funkcja jest wywoływana bez argumentów, to zwraca ona nazwę pierwszego
niewymazanego elementu z rysunkowej bazy danych. Je
żeli wyrażenie z entnext
zawiera argument ename, to funkcja zwraca nazw
ę pierwszego niewymazanego
elementu, który wyst
ępuje w bazie danych po elemencie wskazywanym przez ten
argument. Je
żeli nie ma już następonego elementu rysunkowego, to funkcja zwraca nil.
Funkcja entnext zwraca zarówno elementy główne, jak równie
ż ich elementy
podrz
ędne.
Elementy rysunku wybierane przy wykorzystaniu funkcji ssget s
ą elementami
głównymi. Nie zaliczaj
ą się do nich atrybuty Bloków ani wierzchołki Polilinii. Dostęp
do wewn
ętrznej struktury tych złożonych elementów jest możliwy przy użyciu metody,
która polega na „przechodzeniu” od jednego elementu podrz
ędnego do następnego za
pomoc
ą entnext. Po otrzymaniu nazwy elementu podrzędnego można na nim działać
tak, jak na wszystkich innych elementach. Je
żeli nazwa elementu podrzędnego została
uzyskana za pomoc
ą entnext, to nazwę elementu wobec niego nadrzędnego można
uzyska
ć przez powtarzanie entnext aż do momentu dojścia do elementu SEQEND.
7:7
BvupMJTQ!—!qsbluzd{oz!lvst
Element taki ko
ńczy sekwencje elementów podrzędnych względem jednego elementu.
Z elementu SEQEND nale
ży odczytać teraz grupę z kodem –2, która zawiera
poszukiwan
ą nazwę elementu nadrzędnego dla całej sekwencji.
Przykład:
(setq e1 (entnext))
Przypisuje e1 nazw
ę
pierwszego
elementu rysunku
(setq e2 (entnext e1))
Przypisuje e2 nazw
ę
nast
ę
pnego
elementu po e1
)foutfm!
)foutfm!
)foutfm!
)foutfm!\qspnqu^****
W przypadku niektórych wykonywanych na elementach operacji mo
że się zdarzyć, że
oprócz wybrania elementu potrzebna jest równie
ż znajomość współrzędnych punktu,
który został u
żyty do jego wskazania. Przykłady takich sytuacji w programie AutoCAD
mo
żna znaleźć przy lokalizowaniu położenia punktów względem obiektów oraz przy
poleceniach PRZERWIJ, UTNIJ i WYDŁU
Ż. Programy AutoLISPu mogą wykonywać
podobne zadania dzi
ęki funkcji entsel; wybiera ona pojedynczy element, przy czym
konieczne jest dokonanie wyboru metod
ą punktowania. Aktualnie obowiązujące tryby
lokalizacji punktów wzgl
ędem obiektów, ustalone za pomocą polecenia OBIEKT, są
przez funkcj
ę entsel ignorowane (odpowiada to stanowi braku ustalonych trybów lokali-
zacji), chyba
że specjalnie zażądamy inaczej podczas wykonywania funkcji. Funkcja
entsel uwzgl
ędnia słowa kluczowe, zdefiniowane w ostatnim wywołaniu funkcji initget.
Funkcja entsel zwraca list
ę, której pierwszym elementem jest nazwa wybranego
elementu. Drugim jej elementem jest lista współrz
ędnych punktu użytego do wskazania
elementu (o warto
ściach odniesionych do aktualnie obowiązującego LUW). Jeżeli
wyra
żenie zawiera łańcuch alfanumeryczny prompt, to zostanie on użyty w charakterze
komunikatu dla u
żytkownika nakazującego mu wybranie elementu. W razie jego braku
pojawi si
ę standardowe zgłoszenie Wskaż obiekty:. Przedstawiona poniżej sekwencja
dialogu z programem AutoCAD ilustruje sposób u
życia funkcji entsel. Zwracana lista
jest podobna lub taka sama, jak pokazana poni
żej:
Polecenie: linia
↵
↵↵
↵
Od punktu: 1,1
↵
↵↵
↵
Do punktu: 6,6
↵
↵↵
↵
Do punktu:
↵
↵↵
↵
Polecenie: (setq e (entsel "Uprzejmie prosz
ę
wybra
ć
element:"))
↵
↵↵
↵
Uprzejmie prosz
ę
wybra
ć
element: 3,3
↵
↵↵
↵
(<Nazwa elementu: 60000014> (3.0 3.0 0.0))
Lista utworzona przez entsel mo
że być wykorzystywana w programie AutoCAD, jako
odpowied
ź na dowolne z jego zgłoszeń, po których możliwe jest wybieranie obiektów.
Jest to traktowane przez AutoCAD jak wybranie obiektu metod
ą punktowania (tzn.
przez wskazanie punktu).
Zagadnienie zwi
ązane tematycznie: Patrz opis funkcji initget.
Epebufl!C
7:8
)fou
)fou
)fou
)fouvqe!
vqe!
vqe!
vqe!fobnf****
W czasie modyfikowania przy u
życiu funkcji entmod wierzchołka Polilinii lub atrybutu
Bloku, wygl
ąd całego elementu złożonego na ekranie nie jest uaktualniany.
Przykładowo, gdyby nale
żało zmodyfikować 100 wierzchołków skomplikowanej
polilinii, to ka
żdorazowe przeliczanie i wyświetlanie jej zmieniającego się wraz ze
zmian
ą każdego wierzchołka wyglądu, przebiegałoby w niedopuszczalnie wolnym
tempie. Aktualizacj
ę wyglądu modyfikowanej polilinii lub bloku można więc wymusić
dopiero przez u
życie funkcji entupd. Argumentem funkcji entupd jest nazwa
dowolnego jednego elementu składowego Polilinii lub Bloku. Nie musi to by
ć nazwa
elementu głównego — entupd odnajdzie nagłówek. Chocia
ż funkcja entupd jest
przeznaczona dla Polilinii i Bloków z atrybutami, to w praktyce mo
że być ona
wywoływana dla dowolnego elementu. W ka
żdym przypadku powoduje ona
regeneracj
ę elementu na ekranie wraz ze wszystkimi elementami podrzędnymi.
Je
ż
eli funkcja entupd jest stosowana wobec elementu zagnie
ż
d
ż
onego
(elementu w Bloku) lub Bloku zawieraj
ą
cego elementy zagnie
ż
d
ż
one, to
regeneracja mo
ż
e nie dotyczy
ć
wszystkich zagnie
ż
d
ż
onych elementów Bloku.
Aby uzyska
ć
pewno
ść
,
ż
e wszystkie bloki i ich elementy zagnie
ż
d
ż
one zostały
poddane regeneracji, nale
ż
y wywoła
ć
polecenie REGEN. Mo
ż
na to równie
ż
zrealizowa
ć
w AutoLISPie wprowadzaj
ą
c (command "regen").
Przykład:
Przy zało
żeniu, że pierwszym elementem w bazie danych rysunku jest polilinia o kilku
wierzchołkach:
(setq e1 (entnext))
Przypisuje e1 nazw
ę
elementu
dla tej polilinii
(setq e2 (entnext e1))
Przypisuje e2 jej pierwszy
wierzchołek
(setq ed (entget e2))
Przypisuje ed dane wierzchołka
(setq ed
(subst
'(10 1.0 2.0)
Zmienia poło
ż
enia wierzchołka
(assoc 10 ed)
w ed na punkt o współrz
ę
dnych
ed
1,2
);subst
);setq
(entmod ed)
Przesuwa wierzchołek na rysunku
(entupd e1)
Regeneruje element e1
(polilini
ę
)
)fr!
)fr!
)fr!
)fr!fyqs2!fyqs3****
Funkcja okre
śla, czy argumenty expr1 i expr2 są identyczne; należy przez to rozumieć,
że oba wyrażenia są w rzeczywistości przypisane do tego samego obiektu (np. przy
pomocy setq). Funkcja eq zwraca T, gdy wyra
żenia są identyczne. W przeciwnym razie
funkcja zwraca nil. Funkcja ta jest zazwyczaj u
żywana przy sprawdzaniu, czy dwie listy
s
ą w rzeczywistości takie same.
7:9
BvupMJTQ!—!qsbluzd{oz!lvst
Przykładowo, je
śli wykonane zostaną przypisania:
(setq f1 '(a b c))
(setq f2 '(a b c))
(setq f3 f2)
to:
(eq f1 f3)
zwraca
nil
f1 i f3 nie s
ą tą samą listą!
(eq f3 f2)
zwraca
T
f3 i f2 s
ą dokładnie tą samą listą
Informacje uzupełniaj
ące: Patrz opisy funkcji = oraz funkcji equal
)frvbm!
)frvbm!
)frvbm!
)frvbm!fyqs2!fyqs3!\gv{{^****
Funkcja ta okre
śla, czy argumenty expr1 i expr2 są sobie równe; należy przez to
rozumie
ć, że wartościowanie obu daje taki sam wynik. Przykładowo dla następujących
przypisa
ń:
(setq f1 '(a b c))
(setq f2 '(a b c))
(setq f3 f2)
otrzymuje si
ę wyniki:
(equal f1 f3)
zwraca
T
wyniki ewaluacji f1 i f3 s
ą takie same
(equal f3 f2)
zwraca
T
f3 i f2 s
ą dokładnie tą samą listą
Nale
ży zauważyć, że dwie listy, dla których funkcja equal zwraca T, funkcja eq może tra-
ktowa
ć jako różne. Różnica taka nie wystąpi w przypadku atomów. Natomiast dla każdych
dwóch list lub atomów, je
żeli funkcja eq zwraca T, to również equal zwróci zawsze T.
Przy porównywaniu dwóch liczb rzeczywistych (lub dwóch list zawieraj
ących liczby
typu real, np. współrz
ędne punktów) należy zwrócić uwagę na to, że dwie „identyczne”
liczby mog
ą nieznacznie różnić się między sobą, jeżeli zostały obliczone z użyciem
ró
żnych metod. Dlatego też funkcja equal może zawierać dodatkowy argument fuzz,
który okre
śla maksymalną dopuszczalną różnicę między argumentami expr1 i expr2,
przy której obydwa te wyra
żenia są jeszcze traktowane jako równe. Przykładowo,
je
żeli:
(setq a 1.123456)
(setq b 1.123457)
to wtedy:
(equal a b)
zwraca
nil
(equal a b 0.000001)
zwraca
T
Informacje uzupełniaj
ące: Patrz opisy funkcji = oraz funkcji eq.
Epebufl!C
7::
)+f
)+f
)+f
)+fssps+!tusjoh*
ssps+!tusjoh*
ssps+!tusjoh*
ssps+!tusjoh*
Jest to definiowana przez u
żytkownika funkcja obsługi błędów. Jeżeli jest różna od nil, to
jest wykonywana w wypadku wyst
ąpienia dowolnego błędu w programie AutoLISPu.
Jedynym jej argumentem jest ła
ńcuch alfanumeryczny string zawierający opis błędu.
Przykład:
(defun *error* (opis)
(princ "Bł
ą
d: ")
(princ opis)
(terpri)
)
Przedstawiona powy
żej funkcja, w wypadku wystąpienia błędu wykonałaby dokładnie
to samo, co wbudowana funkcja obsługi bł
ędów AutoLISPu, tzn. spowodowałaby zapi-
sanie na ekranie komunikatu Bł
ąd: i odpowiedniego opisu.
Definiowana przez u
żytkownika funkcja *error* może zawierać wywołania funkcji
command (a wi
ęc wyrażenia (command)). Powoduje to unieważnienie poprzedniej
funkcji AutoCADa, wywołanej poprzez funkcj
ę command.
)f
)f
)f
)fwbm!
wbm!
wbm!
wbm!fyqs****
Funkcja ta zwraca wynik wyznaczenia warto
ści argumentu expr, który jest dowolnym
wyra
żeniem LISPu. Przykładowo, jeżeli:
(setq a 123)
(setq b 'a)
to:
(eval 4.0)
zwraca
4.0
(eval (abs -10))
zwraca
10
(eval a)
zwraca
123
(eval b)
zwraca
123
)fyju*
)fyju*
)fyju*
)fyju*
Funkcja exit wymusza zako
ńczenie działania bieżącego programu użytkowego. Po wy-
wołaniu exit, zwraca ona komunikat bł
ędu informujący o przerwaniu działania wykony-
wanego programu i przywraca na ekranie standardowe zgłoszenie AutoCADa Polecenie:
Informacje uzupełniaj
ące: Patrz także opis funkcji quit.
811
BvupMJTQ!—!qsbluzd{oz!lvst
)fyq!
)fyq!
)fyq!
)fyq!ovncfs****
Funkcja ta zwraca warto
ść typu real otrzymaną w wyniku podniesienia liczby e do
pot
ęgi określonej argumentem number. Wartość ta bywa określana nazwą antylogarytm
naturalny. Przykładowo:
(exp 1.0)
zwraca
2.71828
(exp 2.2)
zwraca
9.02501
(exp -0.4)
zwraca
0.67032
)fyqbo
)fyqbo
)fyqbo
)fyqboe!
e!
e!
e!ovncfs****
Przydziela obszar w
ęzłów, żądając określonej liczby segmentów.
)fyqu!
)fyqu!
)fyqu!
)fyqu!cbtf!qpxfs!*
!*
!*
!*
Funkcja ta zwraca warto
ść otrzymaną w wyniku podniesienia argumentu base do potęgi
okre
ślonej argumentem power. Jeżeli obydwa argumenty są liczbami typu integer, to
funkcja ta zwraca warto
ść całkowitoliczbową, w innym wypadku zwraca liczbę rzeczy-
wist
ą. Przykładowo:
(expt 2 4)
zwraca
16
(expt 3.0 2.0)
zwraca
9.0
)gjoegj
)gjoegj
)gjoegj
)gjoegjmf!
mf!
mf!
mf!gjmfobnf****
Funkcja findfile poszukuje okre
ślonego pliku w bibliotecznej ścieżce poszukiwań
AutoCADa i w razie sukcesu zwraca pełn
ą nazwę pliku wraz ze ścieżką dostępu.
Biblioteczna
ścieżka poszukiwań jest przeszukiwana 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
W zale
ż
no
ś
ci od bie
żą
cego
ś
rodowiska, dwa lub wi
ę
cej tych katalogów, mo
ż
e
by
ć
w rzeczywisto
ś
ci tym samym katalogiem.
Funkcja findfile nie stosuje
żadnych założeń związanych z typem pliku filename ani
rozszerzeniem jego nazwy. Je
żeli plik ma posiadać pełną nazwę z rozszerzeniem, to
nale
ży je podać. Jeżeli nazwa pliku nie jest poprzedzona ścieżką dostępu do pliku, to
AutoCAD poszukuje pliku i zwraca pełn
ą jego nazwę, razem ze ścieżką dostępu, albo
nil, je
żeli pliku nie znajdzie. Gdy podano pełną nazwę pliku (razem ze ścieżką dostępu),
Epebufl!C
812
to AutoCAD przeszukuje tylko wskazany katalog. W przykładach przedstawionych
ni
żej separatorem katalogów jest ukośnik prawy "/"; w systemach operacyjnych PC-
DOS/MS-DOS mo
żna stosować oba ukośniki: lewy "\" i prawy"/".
Niech aktualnym katalogiem b
ędzie /ACAD, zawiera on plik ABC.LSP, dokonywana
jest edycja rysunku umieszczonego w katalogu /ACAD/RYSUNKI, zmiennej
środo-
wiskowej ACAD przypisano warto
ść /ACAD/SUPPORT, plik XYZ.TXT istnieje tylko
w katalogu /ACAD/SUPPORT, a w
żadnym z wyżej wymienionych katalogów nie ma
pliku BZDURY. Wówczas:
(findfile "abc.lsp")
zwraca
"/acad/abc.lsp"
(findfile "xyz.txt")
zwraca
"/acad/support/xyz.txt"
(findfile "bzdury")
zwraca
nil
Pełna nazwa ze
ścieżką dostępu zwracana przez findfile, jest możliwa do wykorzystania
przez funkcj
ę open.
)gjy!
)gjy!
)gjy!
)gjy!ovncfs****
Funkcja ta zwraca wynik konwersji argumentu number na liczb
ę typu integer. Argument
number mo
że być typu real lub integer. Jeżeli argumentem jest liczba rzeczywista, to
liczba typu integer powstaje przez odrzucenie cz
ęści ułamkowej. Przykładowo:
(fix 3)
zwraca
3
(fix 3.7)
zwraca
3
Je
ż
eli
number jest wi
ę
ksza od najwi
ę
kszej dopuszczalnej warto
ś
ci dla liczb typu
integer (+2,147,483,647 lub –2,147,483,648 na platformie 32-bitowej), fix
zwraca obci
ę
t
ą
liczb
ę
typu real (mimo
ż
e liczby całkowite transferowane
pomi
ę
dzy AutoLISPem i AutoCADem s
ą
ograniczone do warto
ś
ci 16-bitowych).
)gmpbu!
)gmpbu!
)gmpbu!
)gmpbu!ovncfs****
Funkcja zwraca wynik konwersji argumentu number na liczb
ę zmiennoprzecinkową
typu real. Argument number mo
że być typu real lub integer. Przykładowo:
(float 3)
zwraca
3.0
(float 3.75)
zwraca
3.75
)gpsfbd
)gpsfbd
)gpsfbd
)gpsfbdi!
i!
i!
i!obnf!mjtu!fyqs
****
Kolejne elementy argumentu list s
ą przypisywane zmiennej name, a następnie każde
expr jest poddawane ewaluacji dla ka
żdego elementu listy. Dozwolone jest podanie
dowolnej liczby argumentów expr. Funkcja foreach zwraca rezultat ostatniego wyliczo-
nego wyra
żenia. Przykładowo:
(foreach n '(a b c) (print n))
813
BvupMJTQ!—!qsbluzd{oz!lvst
jest równowa
żne:
(print a)
(print b)
(print c)
i zwraca
c
Ró
żnica polega jedynie na tym, że funkcja foreach zwróci wartość tylko ostatniego
wyliczonego wyra
żenia.
)hd*
)hd*
)hd*
)hd*
Jest to funkcja wymuszaj
ąca czyszczenie pamięci przez zwolnienie obszaru niewyko-
rzystywanych w
ęzłów.
)hde!
)hde!
)hde!
)hde!ovn2!ovn3****
Warto
ścią zwracaną przez funkcję gcd jest największy wspólny podzielnik argumentów
num1 i num2. Oba argumenty musz
ą być liczbami typu integer. Przykładowo:
(gcd 81 57)
zwraca
3
(gcd 12 20)
zwraca
4
)hfub
)hfub
)hfub
)hfubohmf!
ohmf!
ohmf!
ohmf!\qu^!\qspnqu^****
Funkcja ta powoduje przerw
ę na podanie przez użytkownika wartości kąta i następnie
zwraca jego warto
ść w radianach. Funkcja getangle dokonuje pomiaru wielkości
k
ątowej przyjmując za 0 radianów kąt określony przez wartość zmiennej systemowej
ANGBASE i kierunek narastania k
ątów przeciwny do ruchu wskazówek zegara.
Zwracana warto
ść kąta jest wyrażana w radianach względem aktualnej płaszczyzny
konstrukcyjnej (płaszczyzny XY aktualnego LUW dla aktualnego poziomu).
Argument prompt jest opcjonalnym ła
ńcuchem alfanumerycznym, wyświetlanym jako
zgłoszenie gotowo
ści, a pt jest opcjonalnym bazowym punktem 2W, którego współ-
rz
ędne są wyrażone w aktualnym LUW. Kąt można podać przez napisanie liczby
b
ędącej jego miarą w aktualnie obowiązującym formacie zapisu miar kątowych Auto-
CADa. Chocia
ż jednostkami mogą być aktualnie stopnie, grady lub inne jednostki,
funkcja ta zawsze zwraca warto
ść kąta w radianach.
Inn
ą metodą jest pokazanie kąta przez wskazanie dwóch punktów 2W na ekranie grafi-
cznym. AutoCAD rysuje wtedy ruchom
ą linię pomocniczą między pierwszym punktem
i punktem wskazywanym aktualnym poło
żeniem kursora, w celu ułatwienia wizualnej oceny
wielko
ści kąta. Jeżeli podany jest opcjonalny argument pt, to jest on przyjmowany przez
getangle za pierwszy z tych punktów; pozwala to pokaza
ć kąt przez wskazanie drugiego
punktu. Punkt bazowy mo
że być punktem 3W, ale jednak efekt tego mógłby być mylący,
gdy
ż kąt jest zawsze mierzony w aktualnej płaszczyźnie konstrukcyjnej.
Epebufl!C
814
Istotne jest zrozumienie ró
żnicy pomiędzy kątem wprowadzonym, a kątem zwróconym
przez getangle. K
ąty wprowadzane do getangle są kątami mierzonymi z uwzględnie-
niem aktualnych warto
ści zmiennych systemowych ANGDIR i ANGBASE. Jednak,
gdy k
ąt zostanie już wprowadzony, jego wartość jest mierzona w kierunku przeciwnym
do ruchu wskazówek zegara (niezale
żnie od ANGDIR), poczynając od kierunku zero
radianów, ustalonego zgodnie z aktualn
ą wartością zmiennej ANGBASE.
Poni
żej podano przykłady wywołań funkcji getangle:
(setq ang (getangle))
(setq ang (getangle '(1.0 3.5)))
(setq ang (getangle "W jakim kierunku?"))
(setq ang (getangle '(1.0 3.5) "W jakim kierunku?"))
K
ąt nie może być wprowadzony do getangle w postaci innego wyrażenia w
AutoLISPie. Przy podj
ęciu takiej próby zostanie wyświetlony komunikat:
Can`t reenter AutoLISP.
Informacje uzupełniaj
ące: Opis ten należy porównać z opisem dla funkcji getorient.
Patrz równie
ż opis initget.
)hfudpsofs!
)hfudpsofs!
)hfudpsofs!
)hfudpsofs!qu!\qspnqu^****
Funkcja getcorner zwraca punkt w aktualnym LUW, podobnie jak getpoint. Funkcja
getpoint wymaga jednak argumentu w postaci punktu bazowego pt, a nast
ępnie rysuje
od tego miejsca prostok
ąt, którego przeciwległy wierzchołek jest wskazywany położe-
niem wy
świetalnego na ekranie krzyża nitkowego. Argument prompt jest opcjonalnym
ła
ńcuchem alfanumerycznym, wyświetlanym jako zgłoszenie gotowości.
Punkt bazowy jest okre
ślany we współrzędnych aktualnego LUW. Jeżeli zostanie poda-
ny punkt 3W, to jego współrz
ędna Z jest pomijana; jako współrzędna Z punktu bazowe-
go przyjmowana jest zawsze warto
ść aktualnego poziomu.
K
ąt nie może być wprowadzony do getcorner w postaci innego wyrażenia w AutoLISPie.
Informacje uzupełniaj
ące: Patrz również opis funkcji getpoint i initget.
)hfu
)hfu
)hfu
)hfuejtu!
ejtu!
ejtu!
ejtu!\qu^!\qspnqu^****
Funkcja ta powoduje przerw
ę na podanie przez użytkownika wartości wymiaru
liniowego lub dwóch punktów; getdist zwraca nast
ępnie liczbę rzeczywistą, która jest
miar
ą odległości między punktami.
Odległo
ść można określić wprowadzając liczbę będącą jej miarą w aktualnym obowią-
zuj
ącym układzie jednostek miar liniowych AutoCADa. Jednak, nawet gdy aktualnie
obowi
ązującym układem jednostek są stopy i cale, wartością zwracaną przez funkcję
jest zawsze liczba typu real.
815
BvupMJTQ!—!qsbluzd{oz!lvst
Mo
żliwe jest również wskazanie położenia dwóch punktów. Funkcja getdist zwraca
wówczas odległo
ść między nimi, wyświetlając na ekranie ruchomą linię pomocniczą
mi
ędzy pierwszym punktem, a aktualnym położeniem ekranowego krzyża nitkowego,
co pomaga w wizualnej ocenie wprowadzanej wielko
ści. Argument pt jest opcjonalnym
bazowym punktem 2W lub 3W wyra
żonym we współrzędnych aktualnie obowią-
zuj
ącego LUW. Jeżeli jest podany, staje się pierwszym z dwóch wyznaczających
warto
ść odległości punktów, a użytkownik wprowadza tylko drugi punkt.
W przypadku u
życia punktu 3W, zwracana wartość jest wektorem 3W. Jeżeli jednak
w funkcji initget ustawiony został bit 64, to powoduje on ignorowanie przez getdist
współrz
ędnych Z punktów 3W i zwracana jest odległość 2W.
Argument prompt jest opcjonalnym ci
ągiem znaków alfanumerycznych, wyświetlanym
jako zgłoszenie gotowo
ści.
Funkcja getdist nie akceptuje danych wprowadzanych z u
ż
yciem innych
wyra
ż
e
ń
j
ę
zyka AutoLISP.
U
życie funkcji getdist ilustrują następujące przykłady:
(setq dist (getdist))
(setq dist (getdist '(1.0 3.5)))
(setq dist (getdist "Jak daleko "))
(setq dist (getdist '(1.0 3.5) "Jak daleko? "))
Informacje uzupełniaj
ące: Patrz opis funkcji initget.
)hfufow!
)hfufow!
)hfufow!
)hfufow!wbsjbcmf.obnf****
Funkcja ta zwraca warto
ść typu string w postaci łańcucha alfanumerycznego przypi-
sanego do systemowej zmiennej
środowiskowej. Argument variable-name jest łańcu-
chem okre
ślającym nazwę zmiennej, której wartość ma być odczytana. Jeśli taka zmien-
na nie istnieje, to funkcja getenv zwraca nil.
Przykładowo, je
żeli zmiennej środowiskowej ACAD przypisano wartość /ACAD/SUP-
PORT, a zmienna BRAK nie istnieje, to:
(getenv "ACAD")
zwraca
"/acad/support"
(getenv "BRAK")
zwraca
nil
Nale
ż
y pami
ę
ta
ć
o tym,
ż
e w
ś
rodowiskach bazuj
ą
cyh na systemie operacyjnym
UNIX, ła
ń
cuchy ACAD i acad odnosz
ą
si
ę
do dwóch ró
ż
nych zmiennych
ś
rodowiskowych, gdy
ż
system UNIX rozró
ż
nia du
ż
e i małe litery.
Epebufl!C
816
)hfu
)hfu
)hfu
)hfugjmfe!
gjmfe!
gjmfe!
gjmfe!ujumf!efgbvmu!fyu!gbmht****
Funkcja getfiled wy
świetla okno dialogowe, zawierające listę dostępnych plików o po-
danym rozszerzeniu nazwy. Funkcj
ę tę można wykorzystywać do przeglądania różnych
dysków i katalogów, wybierania istniej
ącego pliku lub podania nazwy nowego pliku.
Funkcja
żąda od użytkownika podania nazwy pliku, wyświetlając standardowe okno
plików AutoCADa. Argument title okre
śla nagłówek całego okna dialogowego,
argument default definiuje standardow
ą (proponowaną) nazwę pliku (może to być
ła
ńcuch pusty""), a argument ext jest standardowym (proponowanym) rozszerzeniem
nazwy pliku (podanie tu ła
ńcucha pustego "" jest równoważne proponowanemu roz-
szerzeniu *). Pokazana ilustracja przedstawia wpływ tych argumentów na wygl
ąd okna
dialogowego. Po otrzymaniu od u
żytkownika nazwy pliku, funkcja getfiled zwraca
ła
ńcuch zawierający nazwę pliku. W przeciwnym wypadku funkcja zwraca nil.
Przykład
Widoczne poni
żej okno dialogowe ukazuje się po następującym wywołaniu funkcji getfiled:
(getfiled "Wybierz plik
LSP" "c:/acad12/support/" "lsp" 8)
Argument flags jest warto
ścią typu integer (pole zakodowane bitowo), sterującą
zachowaniem si
ę okna dialogowego. Aby jednocześnie ustalić większą liczbę warunków,
nale
ży po prostu zsumować wartości (w dowolnej kolejności), tworząc wartość argu-
mentu flags z zakresu od 0 do 15. Warto
ści i znaczenie argumentu flags są następujące:
Tabela B.5. Parametr flags funkcji getfiled
Warto
ść
Znaczenie
1
Oznacza
żądanie utworzenia nowego pliku
2
Blokuje przycisk Wpisz
817
BvupMJTQ!—!qsbluzd{oz!lvst
Tabela B.5. Parametr flags funkcji getfiled (c.d.)
Warto
ść
Znaczenie
4
Pozwala u
żytkownikowi wprowadzić dowolne rozszerzenie
nazwy pliku
8
Wykonuje szukanie pliku o podanej nazwie w
ścieżce
poszukiwania bibliotek AutoCADa
Poszczególne znaczenia warto
ści argumentu flags są poniżej opisane bardziej szczegółowo.
Warto
ść=1 (bit 0) — Bit 0 powinien być ustawiony wówczas, gdy program ma
domaga
ć się od użytkownika podania nazwy nowego pliku do
utworzenia. Je
śli program ma pytać o nazwę istniejącego pliku do
otwarcia, bit ten nie powinien by
ć ustawiony. W tym drugim
wypadku,
wprowadzenie
przez
u
żytkownika nazwy pliku
nieistniej
ącego powoduje wyświetlenie komunikatu błędu w
dolnej cz
ęści okna dialogowego.
Je
śli bit 0 jest ustawiony i użytkownik wybierze plik już istniejący,
AutoCAD wy
świetli okienko ostrzegawcze i zaoferuje możliwość
przerwania operacji lub jej kontynuowania z podanymi danymi.
Na rysunku pokazane jest okno alarmowe.
Warto
ść=2 (bit 1) — Blokuje możliwość użycia przycisku Napisz (Type it). Bit 1 jest
ustawiany automatycznie, gdy funkcja getfiled jest wywoływana
podczas aktywno
ści innego okna dialogowego (w przeciwnym
wypadku wymuszone zostałoby znikni
ęcie również drugiego okna
dialogowego).
Epebufl!C
818
Je
śli bit ten nie jest ustawiony, korzystanie z przycisku Napisz jest
mo
żliwe. Gdy użytkownik wskaże ten przycisk, okno dialogowe
znika, a funkcja getfiled zwraca warto
ść 1.
Warto
ść=4 (bit 2) — Pozwala użytkownikowi ustalić dowolne rozszerzenie nazwy
pliku lub nawet brak rozszerzenia.
Gdy bit 2 nie jest ustawiony, funkcja getfiled akceptuje wył
ącznie
rozszerzenie okre
ślone przez argument ext i dodaje je do nazwy
pliku, je
śli użytkownik nie poda go w polu edycyjnym Plik:.
Warto
ść=8 (bit 3) — Jeśli jednocześnie bit 3 jest ustawiony, a bit 0 nie jest ustawiony,
to funkcja getfiled poszukuje pliku o podanej nazwie w
ścieżce
poszukiwania bibliotek AutoCADa. Je
śli plik i jego katalog
zostan
ą znalezione w ścieżce poszukiwania bibliotek AutoCADa,
ścieżka do pliku zostaje odcięta i getfiled zwraca tylko samą
nazw
ę pliku. (Ścieżka nie zostanie odcięta w wypadku, gdy znale-
ziony zostanie plik o tej samej nazwie, ale znajduj
ący się w innym
katalogu dyskowym.)
Gdy bit ten nie jest ustawiony, getfiled zwraca pełn
ą nazwę pliku
wraz ze
ścieżką dostępu.
Bit 3 nale
ży ustawiać wtedy, gdy okno dialogowe ma służyć do
otwarcia istniej
ącego pliku, którego nazwa ma być zapamiętywana
wraz z rysunkiem (lub inn
ą bazą danych), i który ma być szukany
pó
źniej przez kolejne wywołanie funkcji getfiled.
)hfujou!
)hfujou!
)hfujou!
)hfujou!\qspnqu^****
Funkcja ta powoduje przerw
ę, która umożliwia użytkownikowi wprowadzenie wartości
typu integer, a nast
ępnie zwraca tę liczbę. Wartościami takimi są liczby całkowite
zawieraj
ące się w przedziale od –32768 do +32767. Argument prompt jest opcjonalnym
ci
ągiem alfanumerycznym, który ma być wyświetlany jako zgłoszenie gotowości.
Przykładowo:
(setq num (getint))
(setq num (getint "Liczba typu integer: "))
Funkcja getint nie akceptuje danych wprowadzanych z u
ż
yciem innych
wyra
ż
e
ń
j
ę
zyka AutoLISP.
Informacje uzupełniaj
ące: Patrz opis funkcji initget.
819
BvupMJTQ!—!qsbluzd{oz!lvst
)hfu
)hfu
)hfu
)hfulxpse!
lxpse!
lxpse!
lxpse!\qspnqu^****
Funkcja getkword wymaga, aby u
żytkownik wprowadził słowo kluczowe. Lista
aktualnie branych pod uwag
ę słów kluczowych jest ustalana przed wywołaniem
getkword, poprzez wywołanie funkcji initget. Opcjonalny argument prompt jest
ła
ńcuchem alfanumerycznym, wyświetlanym jako zgłoszenie programu.
Funkcja getkword zwraca słowo kluczowe, odpowiadaj
ące wprowadzonemu przez
u
żytkownika łańcuchowi alfanumerycznemu. AutoCAD umożliwia ponawianie próby,
je
żeli wprowadzono błędną odpowiedź. Odpowiedź pusta, jeżeli jest dozwolona, zwraca
nil. Funkcja zwraca nil równie
ż w wypadku, gdy przed jej wywołaniem nie wywołano
funkcji initget, ustalaj
ącej jedno lub więcej słów kluczowych.
Przykład
Poni
ższy przykład ukazuje zainicjowanie listy słów kluczowych (Tak i Nie) i zabloko-
wanie mo
żliwości podania odpowiedzi pustej (argument bits równy 1) przez wywołanie
funkcji initget, stwarzaj
ącej warunki do wywołania funkcji getkword:
(initget 1 "Tak Nie")
(setq x (getkword "Czy jeste
ś
pewny? (Tak lub Nie) "))
Powy
ższy fragment kodu programu w AutoLISPie powoduje wyświetlenie zgłoszenia
z pytaniem do u
żytkownika i nadanie symbolowi x wartości ”Tak” lub ”Nie”, w
zale
żności od wprowadzonej odpowiedzi. Jeżeli odpowiedź nie pokrywa się z żadnym
ze słów kluczowych, lub je
żeli użytkownik wprowadzi odpowiedź pustą, to AutoCAD
zaproponuje ponowienie próby wprowadzenia odpowiedzi, wy
świetlając wartość
podanego argumentu prompt. Je
śli argument prompt jest pominięty, AutoCAD
wy
świetla zgłoszenie:
Spróbuj jeszcze raz: (Try again: )
Funkcja getkword nie akceptuje danych wprowadzanych z u
życiem innych wyrażeń
j
ęzyka AutoLISP.
Informacje uzupełniaj
ące: Patrz opis funkcji initget.
)h
)h
)h
)hfupsjfou!
fupsjfou!
fupsjfou!
fupsjfou!\qu^!\qspnqu^****
Funkcja getorient jest podobna w działaniu do funkcji getangle; ró
żni się jednak od
niej tym,
że zwracana wartość kąta jest niezależna od wartości zmiennych systemowych
ANGBASE i ANGDIR. Funkcja getorient zawsze zwraca k
ąty mierzone w radianach.
Kierunkiem zerowym jest zawsze kierunek w prawo (wschód), a warto
ść kąta wzrasta
przeciwnie do kierunku ruchu wskazówek zegara. Podobnie jak getangle, funkcja
getorient wyra
ża zwracane kąty w radianach, w odniesieniu do aktualnej płaszczyzny
konstrukcyjnej.
Argumenty pt i prompt maj
ą znaczenie takie samo, jak dla funkcji getangle.
Epebufl!C
81:
Istotne jest zrozumienie ró
żnicy pomiędzy kątem wprowadzonym, a kątem zwróconym
przez getorient. K
ąty wprowadzane do getorient są wyrażane wartościami mierzonymi
zgodnie z aktualnymi warto
ściami zmiennych systemowych ANGDIR i ANGBASE.
Jednak po wprowadzeniu, warto
ść kąta jest mierzona w kierunku przeciwnym do ruchu
wskazówek zegara, poczynaj
ąc od kierunku zerowego wskazującego w prawo (nieza-
le
żnie od wartości zmiennych ANGDIR i ANGBASE).
Z tego powodu, je
żeli zdefiniowano inny kierunek zerowy lub innych kierunek wzrostu
k
ątów (za pomocą polecenia JEDN lub przez zmianę wartości zmiennych systemowych
ANGBASE i ANGDIR), to konieczne staje si
ę wykonanie odpowiedniej konwersji war-
to
ści kątowych.
Funkcja getangle powinna by
ć wykorzystywana do określania wielkości obrotu (wzglę-
dna warto
ść kąta), a getorient do ustalania orientacji (bezwzględna wartość kąta).
Funkcja getorient nie akceptuje danych wprowadzanych z u
życiem innych wyrażeń
j
ęzyka AutoLISP.
Informacje uzupełniaj
ące Patrz opis funkcji getangle i initget.
)hfuqpjou!
)hfuqpjou!
)hfuqpjou!
)hfuqpjou!\qu^!\qspnqu^****
Funkcja ta powoduje przerw
ę przeznaczoną na umożliwienie użytkownikowi wprowa-
dzenia punktu. Argument pt jest opcjonalnym punktem bazowym 2W lub 3W, którego
współrz
ędne są wyrażone w aktualnym LUW. Argument prompt jest opcjonalnym
ła
ńcuchem alfanumerycznym, który ma być wyświetlony na ekranie jako zgłoszenie
gotowo
ści. Wprowadzany punkt można określić przez podanie jego współrzędnych
w aktualnie obowi
ązującym formacie zapisu jednostek lub można go wskazać na ekra-
nie. Je
żeli podany zostanie punkt bazowy w postaci argumentu, to AutoCAD wyświetla
na ekranie ruchom
ą linię pomocniczą, ciągnącą się od tego punktu do punktu odpowia-
daj
ącego aktualnej pozycji krzyża nitkowego. Przykładowo:
(setq p (getpoint))
(setq p (getpoint "Gdzie? "))
(setq p (getpoint '(1.5 2.0) "Drugi punkt: "))
Zwracana warto
ść odpowiada punktowi 3W, którego współrzędne mają wartości
okre
ślone w aktualnym LUW.
Funkcja getpoint nie akceptuje danych wprowadzanych z u
ż
yciem innych
wyra
ż
e
ń
j
ę
zyka AutoLISP.
Informacje uzupełniaj
ące: Patrz opis funkcji getcorner i initget.
821
BvupMJTQ!—!qsbluzd{oz!lvst
)hfusf
)hfusf
)hfusf
)hfusfbm!
bm!
bm!
bm!\qspnqu^****
Funkcja ta powoduje przerw
ę, która umożliwia użytkownikowi wprowadzenie liczby
typu real, a nast
ępnie zwraca tę liczbę. Argument prompt jest opcjonalnym łańcuchem
alfanumerycznym, który ma by
ć wyświetlony na ekranie jako zgłoszenie gotowości
tekstem. Przykładowo:
(setq val (getreal))
(setq val (getreal "Skala rysunku: "))
Funkcja getreal nie akceptuje danych wprowadzanych z u
ż
yciem innych wyra-
ż
e
ń
j
ę
zyka AutoLISP.
Informacje uzupełniaj
ące: Patrz opis funkcji initget.
)hfutusjoh!
)hfutusjoh!
)hfutusjoh!
)hfutusjoh!\ds^!\qspnqu^****
Funkcja ta powoduje przerw
ę, która umożliwia użytkownikowi wprowadzenie danej
typu string, a nast
ępnie zwraca ten łańcuch znaków alfanumerycznych. W przypadku,
gdy tekst jest dłu
ższy niż 132 znaki, zwracane są tylko 132 pierwsze znaki.
Wyst
ępujący we wprowadzanym tekście pojedynczy lewy ukośnik (\) podlega kon-
wersji na dwa lewe uko
śniki (\\). Zostało to wprowadzone ze względu na to, żeby
zwracana warto
ść mogła zawierać nazwę pliku ze ścieżką dostępu i mogła być wyko-
rzystywana przez inne funkcje.
Je
żeli użyty zostanie różny od nil opcjonalny argument cr, to wprowadzany łańcuch
b
ędzie mógł zawierać spacje; jego wprowadzanie zakończy dopiero wciśnięcie klawisza
Enter. Je
żeli nie, to będzie to następować przez wciśnięcie klawisza Enter lub spacji.
Argument prompt jest opcjonalnym ła
ńcuchem alfanumerycznym, który ma być
wy
świetlony na ekranie jako zgłoszenie gotowości.
Przykład
(setq s (getstring "Jak masz na imi
ę
? "))
po wprowadzeniu Jan zwraca "Jan"
Natomiast po wyra
ż
eniu:
(setq s (getstring T "Imi
ę
i nazwisko tłumacza: "))
po wprowadzeniu
Jan Kowalski zwraca "Jan Kowalski"
Z kolei w przypadku wyra
ż
enia:
(setq s (getstring "Podaj nazw
ę
pliku: "))
po wprowadzeniu
\aplikom\pliki\rysunki zwraca "\\aplikom\\pliki\\rysunki"
Je
ż
eli wprowadzany przez u
ż
ytkownika ła
ń
cuch alfanumeryczny musi by
ć
jednym ze słów kluczowych (np. nazw
ą
opcji), to mo
ż
na wykorzysta
ć
opisan
ą
poprzednio funkcj
ę
getkword.
Epebufl!C
822
Funkcja getstring nie akceptuje danych wprowadzanych z u
życiem innych wyrażeń
j
ęzyka AutoLISP.
Informacje uzupełniaj
ące: Patrz opis funkcji getkword.
)hfu
)hfu
)hfu
)hfuwbs!
wbs!
wbs!
wbs!wbsobnf****
Funkcja ta daje dost
ęp do wartości przypisanych zmiennym systemowym AutoCADa.
Nazwa zmiennej musi by
ć ujęta w podwójne cudzysłowy. Przykładowo, jeżeli ostatnio
ustalony promie
ń zaokrąglenia ma wartość 0.25 jednostki, to wyrażenie:
(getvar "FILLETRAD") zwraca 0.25
Je
żeli w wyrażeniu podana zostanie nazwa zmiennej nieznanej dla programu AutoCAD,
to funkcja getvar zwróci nil. Aktualn
ą listę zmiennych systemowych podano
w dodatku F.
Informacje uzupełniaj
ące: Patrz opis funkcji setvar.
)hsbqit
)hsbqit
)hsbqit
)hsbqitds*
ds*
ds*
ds*
Gdy AutoCAD pracuje w systemie z jednym monitorem, funkcja graphscr przeł
ącza
tryb pracy ekranu z tekstowego na graficzny. Działanie jest identyczne jak działanie
polecenia GEKRAN AutoCADa, lub klawisza steruj
ącego przełączaniem trybu pracy
ekranu (je
śli ekran jest aktualnie w trybie tekstowym).
Funkcja graphscr zawsze zwraca nil.
Informacje uzupełniaj
ące: Patrz opis funkcji textscr i textpage.
)hsdmfbs*
)hsdmfbs*
)hsdmfbs*
)hsdmfbs*
Funkcja ta wymazuje (czy
ści) zawartość aktualnej rzutni. W systemach z jednym
monitorem nast
ąpi najpierw automatyczne przełączenie z ekranu tekstowego na gra-
ficzny. Niezmieniony pozostaje stan pól polece
ń/komunikatów, linia stanu oraz obszary
menu. Pierwotna zawarto
ść ekranu może zostać przywrócona za pomocą funkcji
redraw. Funkcja grclear zawsze zwraca nil.
Informacje uzupełniaj
ące: Patrz opis funkcji textscr i textpage.
)hsesb
)hsesb
)hsesb
)hsesbx!
x!
x!
x!gspn!up!dpmps!\ijhimjhiu^****
Funkcja grdraw rysuje wektor mi
ędzy dwoma danymi punktami w aktualnej rzutni.
Argumenty from i to s
ą punktami 2W lub 3W (listami składającymi się z dwóch lub
trzech liczb typu real), które definiuj
ą końce wektora we współrzędnych aktualnie
823
BvupMJTQ!—!qsbluzd{oz!lvst
obowi
ązującego LUW. AutoCAD obcina wektor tak, aby zmieścił się na ekranie. Jest
on rysowany w kolorze okre
ślonym przez argument color (typu integer). Wartość –1
oznacza tu tzw. kolor XOR, czyli kolor dopełniaj
ący w stosunku do innych elementów
rysunku, na tle których rysowany jest wektor i powoduj
ący wymazanie wektora po jego
ponownym narysowaniu.
Dodanie opcjonalnego argumentu highlight (warto
ść typu integer) o wartości różnej od
zera powoduje,
że wektor będzie rysowany w taki sposób, jaki jest dla danego
wy
świetlacza standardowo używany do wyróżniania obiektów (zwykle używana jest
linia kreskowa). W przypadku gdy argument highlight zostanie pomini
ęty lub gdy ma
warto
ść równą zeru, używany jest normalny tryb wyświetlania.
Do rysowania wielu wektorów na ekranie graficznym słu
ży funkcja grvecs.
)hssfbe!
)hssfbe!
)hssfbe!
)hssfbe!\usbdl^!\bmmlfzt!\dvsuzqf^^****
Funkcja grread bezpo
średnio odczytuje najbliższą odpowiedź użytkownika, wprowa-
dzon
ą za pomocą dowolnego urządzenia wejściowego AutoCADa. Opcjonalnie może
ona tak
że dynamicznie śledzić zmiany położenia urządzeń wskazujących. Poniżej opi-
sano sposób wykorzystania przez AutoCAD metody dynamicznych przesuni
ęć.
Funkcja ta b
ę
dzie potrzebna tylko w bardzo szczególnych procedurach Auto-
LISPu. Wi
ę
kszo
ść
danych powinna by
ć
wprowadzana do AutoLISPu przy wyko-
rzystaniu ró
ż
nych funkcji typu getxxx, takich jak getstring, getreal i podobnych.
U
życie różnego od nil argumentu track, uruchamia zwracanie współrzędnych z poru-
szaj
ącego się urządzenia wskazującego, bez konieczności wciskania przycisku wybie-
raj
ącego. Argument allkeys jest opcjonalną wartością całkowitą (kodowaną bitowo).
Je
śli argument allkeys jest podany, grread spełnia różne funkcje, w zależności od war-
to
ści tego argumentu. Argument curtype może być wykorzystany do sterowania
rodzajem wy
świetlanego kursora.
track
Śledzi położenie kursora, jeśli argument ten jest różny od nil.
Allkeys
Je
śli argument allkeys jest podany, to musi być liczbą typu integer,
zdefiniowan
ą następująco:
Warto
ść = 1 (bit 0). Zwraca współrzędne w trybie przesunięć dynamicz-
nych. Je
śli bit 0 jest ustawiony i użytkownik przesuwa urządzenie
wskazuj
ące zamiast wybrania przycisku lub naciśnięcia klawisza, grread
zwraca list
ę, której pierwszym składnikiem jest liczba 5 jako określenie
typu, a nast
ępnym składnikiem są współrzędne (X,Y) bieżacego poło-
żenia urządzenia wskazującego (myszki lub digitizera). Na tym polega
wykorzystanie przez AutoCAD trybu dynamicznych przesuni
ęć.
Warto
ść = 2 (bit 1). Zwraca wszystkie wartości klawiszy, włącznie z kla-
wiszami funkcyjnymi i klawiszami kursora i nie przesuwa kursora, gdy
u
żytkownik naciska klawisz kursora.
Epebufl!C
824
Warto
ść = 4 (bit 2). Wykorzystuje wartość argumentu curtype do
sterowania wy
świetlanym kursorem. Opcje są pokazane poniżej.
Warto
ść = 8 (bit 3). Nie wyświetla komunikatu błąd: przerwanie z konsoli
po przyci
śnięciu przez użytkownika klawiszy Ctrl+C.
Warto
ść = 16 (bit 4). Blokuje menu rozwijane.
Curtype
Je
śli podany jest argument curtype, to określa on rodzaj wyświetlanego
na ekranie kursora. Warto
ść argumentu musi być liczbą całkowitą,
o jednej
z nast
ępujących wartości:
0 Wy
świetla zwykły krzyż nitkowy
1 Nie wy
świetla żadnego kursora (również krzyża nitkowego
2 Wy
świetla kursor „z celownikiem”, wykorzystywany podczas wybiera-
nia elementów rysunkowych.
Argument
curtype wpływa na kursor jedynie podczas bie
żą
cego wywołania
funkcji grread.
Nale
ż
y mie
ć
na uwadze,
ż
e w przyszłych wersjach AutoCADa mog
ą
by
ć
zdefiniowane dodatkowe bity steruj
ą
ce.
Funkcja grread zwraca list
ę, której pierwszym elementem jest kod określający typ
danych wej
ściowych. Drugim elementem listy może być albo liczba typu integer, albo
lista współrz
ędnych punktu, zależnie do typu wprowadzanych danych. Zwracane kody
mog
ą przybierać przedstawione poniżej wartości:
Tabela B.6. Warto
ści zwracane przez grread
Pierwszy element
Drugi element
Warto
ść
Typ danych
wej
ściowych
Warto
ść
Znaczenie
2
Dane z klawiatury
Zmienna
Kod znaku
3
Wybrany punkt
Punkt 3W
Współrz
ędne punktu
4
Pozycja menu ekranu
/ menu rozwijanego
(z urz
ądzenia
wskazuj
ącego)
0 do 999
1001 do 1999
2001 do 2999
3001 do 3999
… i tak dalej, a
ż do
16001 do 16999
Numer pola menu ekranowego
Numer pola menu POP1
Numer pola menu POP2
Numer pola menu POP3
…
Numer pola menu POP16
825
BvupMJTQ!—!qsbluzd{oz!lvst
Tabela B.6. Warto
ści zwracane przez grread (c.d.)
Pierwszy element
Drugi element
Warto
ść
Typ danych
wej
ściowych
Warto
ść
Znaczenie
5
Urz
ądzenie
wskazuj
ące
(informacja ta jest
zwracana tylko
wtedy, gdy
uaktywnione jest
śledzenie
dynamiczne)
Punkt 3W
Współrz
ędne w trybie
dynamicznych przesuni
ęć
6
Pozycja menu
BUTTONS
0 do 999
1000 do 1999
2000 do 2999
3000 do 3999
Numer pola menu BUTTONS1
Numer pola menu BUTTONS2
Numer pola menu BUTTONS3
Numer pola menu BUTTONS4
7
Pole menu
TABLET1
0 do 32767
Numer pola digitizera
8
Pole menu
TABLET2
0 do 32767
Numer pola digitizera
9
Pole menu
TABLET3
0 do 32767
Numer pola digitizera
10
Pole menu
TABLET4
0 do 32767
Numer pola digitizera
11
Pole menu AUX
0 do 999
1000 do 1999
2000 do 2999
3000 do 3999
Numer pola menu AUX1
Numer pola menu AUX2
Numer pola menu AUX3
Numer pola menu AUX4
12
Przycisk urz
ądzenia
wskazuj
ącego
(wyst
ępuje po
zwróconych typach 6
lub 11)
Punkt 3W
Współrz
ędne punktu
Wprowadzenie Ctrl+C w trakcie działania funkcji grread powoduje wymuszone z kla-
wiatury przerwanie realizacji programu AutoLISPu, z sygnalizacj
ą przerwania z kla-
wiatury (chyba
że argument allkeys zablokował taką możliwość).
Wszystkie pozostałe dane wej
ściowe są przejmowane bezpośrednio przez grread, co
pozwala na pełne sterowanie urz
ądzeniami wejściowymi przez program użytkowy.
Funkcja grread zwraca kod 11, gdy u
żytkownik w momencie wskazywania pozycji
w menu ekranowym lub rozwijanym, naci
śnie przycisk wybierający urządzenia wska-
Epebufl!C
826
zuj
ącego. Jednak przy kolejnym wywołaniu, funkcja grread nie zwróci kodu 12; kod
12 wyst
ępuje tylko po kodach 6 lub 11, gdy przycisk wybierający zostanie naciśnięty
w momencie wskazywania punktu w graficznym obszarze ekranu.
Przed
przyst
ąpieniem do następnej operacji związanej z użyciem przycisku
wybieraj
ącego lub zewnętrznego modułu funkcyjnego, istotne jest opróżnienie bufora
z danych kodu 12. Osi
ągnąć to można przez zagnieżdżone wywołanie funkcji grread,
podobne do poni
ższego:
(setq code_12 (grread (setq code (grread))))
Powy
ższa sekwencja pobiera wartość listy związanej z kodem 12 ze strumienia
wej
ściowego z urządzenia.
Z tego wzgl
ę
du,
ż
e wprowadzanie danych odbywa si
ę
ró
ż
nie na ró
ż
nych
platformach, na których wykorzystywany mo
ż
e by
ć
AutoCAD, funkcja grread
mo
ż
e dawa
ć
nieoczekiwane efekty. Wi
ę
cej informacji zwi
ą
zanych ze specyfik
ą
ró
ż
nych platform mo
ż
na znale
źć
w AutoCAD Podr
ę
cznik Instalacyjny.
•
Standardowe urz
ą
dzenie wskazuj
ą
ce, dla platform wykorzystuj
ą
cych mysz
systemow
ą
, zwraca kod 11, a nie kod 6.
•
Na platformie Macintosh, menu rozwijane zwraca kod 11, a nie 4. Równie
ż
na tych samych komputerach, podwójne przyci
ś
ni
ę
cie przycisku myszy
zwraca kod 11 (a nie kod 6), po którym (o ile wybór nast
ą
pił w bie
żą
cej rzut-
ni) nast
ę
puje para współrz
ę
dnych kodu 5. Odpowiednio, podwójne przyci
ś
-
ni
ę
cie przycisku myszy poza aktualn
ą
rzutni
ą
, zwraca par
ę
współrz
ę
dnych
kodu 3, po których nast
ę
puje kod 11.
!)hsuf
!)hsuf
!)hsuf
!)hsufyu!
yu!
yu!
yu!\cpy!ufyu!\ijhimjhiu^^****
Funkcja grtext pozwala na pisanie w obszarach tekstowych ekranu graficznego Auto-
CADa. Je
żeli argumentem box jest liczba z zakresu od zera do pomniejszonego o 1 naj-
wi
ększego numeru pola menu ekranu, to argument text (łańcuch alfanumeryczny typu
string) zostanie wy
świetlony w określonym polu menu. Jeżeli text nie mieści się w nim,
to zostanie odpowiednio obci
ęty. Jeżeli natomiast będzie za krótki, to zostanie
dopełniony spacjami. Podanie niewła
ściwego numeru pola powoduje zwrócenie nil.
U
życie opcjonalnego dodatniego argumentu całkowitoliczbowego highlight (wartość
typu integer) powoduje,
że grtext wyróżni tekst we wskazanym polu. Przy pisaniu
w obszarach menu, tekst musi zosta
ć najpierw wpisany bez argumentu highlight i do-
piero potem mo
że zostać wyróżniony. Wyróżnienie jednego pola powoduje
automatycznie zaprzestanie wyró
żniania jakiegokolwiek pola wyróżnianego poprze-
dnio. Zerowa warto
ść argumentu highlight likwiduje wyróżnienie wskazanej pozycji
menu. Ujemna warto
ść argumentu highlight jest ignorowana.
827
BvupMJTQ!—!qsbluzd{oz!lvst
Nale
ży zwrócić uwagę na to, że funkcja ta powoduje tylko wyświetlenie tekstu w danym
polu menu nie powoduje to zmiany umieszczonej w tym miejscu pozycji tego menu.
Wywołanie grtext z numerem obszaru –1 spowoduje wpisanie tekstu w ekranowej linii
stanu. Liczba znaków, jak
ą można w niej umieścić, jest różna dla różnych wyświetlaczy
(wi
ększość pozwala na co najmniej 40 znaków); grtext obcina tekst odpowiednio do
ilo
ści dostępnego miejsca.
Gdy argument box ma warto
ść –2, to grtext wpisuje tekst w linii stanu w obszarze
współrz
ędnych. Jeżeli włączony jest tryb śledzenia bieżących współrzędnych, to wpisa-
ny w to pole tekst zostanie zast
ąpiony współrzędnymi natychmiast po tym, jak kursor
graficzny przeka
że nowe ich wartości. Argument highlight jest ignorowany zarówno
w wypadku obszaru o numerze –1, jak i –2.
Funkcja grtext mo
że być także wywoływana bez argumentów. Powoduje wtedy przy-
wrócenie pierwotnej zawarto
ści wszystkim obszarom tekstowym na ekranie.
Do okre
ślenia liczby pól menu ekranowego dostępnych w poszczególnych instalacjach
AutoCADa mo
żna wykorzystać informacje przechowywane pod zmienną systemową
SCREENBOXES.
)hswfdt!
)hswfdt!
)hswfdt!
)hswfdt!wmjtu!\usbot^****
Jest to funkcja przeznaczona do rysowania wielu wektorów w graficznym obszarze
ekranu. Argument vlist jest list
ą, składającą się z ciągu opcjonalnych kodów całkowi-
tych koloru i list dwóch punktów. Format argumentu vlist jest nast
ępujący:
([kolor1](od_1)(do_1) [kolor2](od_2)(do_2)…)
Opcjonalna warto
ść kodu koloru obowiązuje dla wszystkich występujących po niej
wektorów, a
ż do wystąpienia w liście vlist nowej wartości kodu koloru. Kolor jest określany
jako liczba całkowita. Kolory w AutoCADzie zawieraj
ą się w przedziale od 0 do 255. Jeśli
warto
ść kodu koloru jest większa od 255, występujące po niej wektory są rysowane kolorem
XOR, czyli kolorem dopełniaj
ącym w stosunku do innych elementów rysunku, na tle
których rysowany jest wektor i powoduj
ącym wymazanie wektora po jego ponownym
narysowaniu. Je
śli wartość koloru jest mniejsza od zera, wektor jest wyróżniany.
Wyró
żnienie zależy od rodzaju wyświetlacza. Większość urządzeń wyświetlających
jako wyró
żnienie stosuje linię przerywaną, ale są i takie, na których do wyróżnienia
stosowany jest inny kolor.
Pary list współrz
ędnych definiują początki i końce wektorów, wyrażone w aktualnym
LUW. Mog
ą to być punkty dwuwymiarowe lub trójwymiarowe.
Wa
żne: Punkty te muszą być podawane parami, czyli jako dwie występujące po sobie
listy. Je
śli warunek ten nie będzie spełniony, działanie funkcji grvecs zostanie przerwane.
Epebufl!C
828
W razie potrzeby AutoCAD skraca wektory tak, by mie
ściły się na ekranie. Jeśli wywo-
łanie funkcji grvecs ko
ńczy się sukcesem, funkcja zwraca nil.
Przykłady
Poni
ższy przykład powoduje narysowanie na ekranie graficznym pięciu pionowych
linii, ka
żdej w innym kolorze:
(grvecs
'(
1 (1 2)(1 5);Rysuje czerwon
ą
lini
ę
od (1,2) do (1,5)
2 (2 2)(2 5);Rysuje
ż
ółt
ą
lini
ę
od (2,2) do (2,5)
3 (3 2)(3 5);Rysuje zielon
ą
lini
ę
od (3,2) do (3,5)
4 (4 2)(4 5);Rysuje bł
ę
kitn
ą
lini
ę
od (4,2) do (4,5)
5 (5 2)(5 5);Rysuje niebiesk
ą
lini
ę
od (5,2) do (5,5)
)
);grvecs
Opcjonalny argument trans jest macierz
ą transformacji, pozwalającą zmieniać
poło
żenie i proporcje wektorów zdefiniowanych w liście wektorów. Macierz ta jest listą
czterech list, z których ka
żda zawiera cztery liczby rzeczywiste. Na przykład, pokazana
poni
żej macierz powoduje jednakowe, równe 1, przeskalowanie we wszystkich
kierunkach i przesuni
ęcie o 5.9, 5.0,0,0:
'(
(1.0 0.0 0.0 5.0)
(0.0 1.0 0.0 5.0)
(0.0 0.0 1.0 0.0)
(0.0 0.0 0.0 1.0)
)
Gdyby macierz ta została zastosowana w odniesieniu do pokazanych wcze
śniej pięciu
wektorów, zostałyby one przesuni
ęte o 5.9, 5.0, 0.0.
Informacje uzupełniaj
ące: Patrz opis funkcji nentselp, zawierający więcej informacji na
temat macierzy transformacji.
))))iboefou!
iboefou!
iboefou!
iboefou!iboemf****
Nazwy elementów mog
ą być inne w każdej kolejnej sesji edycyjnej. Zmianom nie
ulegaj
ą natomiast, dopóki istnieją, identyfikatory elementów. Przyjmijmy, że łańcuch
alfanumeryczny b
ędący identyfikatorem elementu, jest argumentem handle. Funkcja
handent zwraca wtedy obowi
ązującą w aktualnej sesji edycyjnej nazwę elementu
zwi
ązanego z tym identyfikatorem. Gdy nazwa elementu jest już znana, może być
wykorzystana do wykonywania w odniesieniu do elementu ró
żnych operacji, urucha-
mianych z u
życiem dowolnej z przeznaczonych do tego funkcji.
Przykład
W konkretnej sesji edycyjnej, wyra
żenie:
(handent "5A2")
mo
że zwrócić
<Nazwa elementu: 60004722>
829
BvupMJTQ!—!qsbluzd{oz!lvst
Takie samo wywołanie funkcji w tym samym rysunku, lecz w trakcie innej sesji
edycyjnej, mo
że zwrócić inną nazwę elementu. W każdym przypadku jednak jest to
odwołanie do tego samego elementu; jego identyfikator pozostaje taki sam, cho
ć nazwy
mog
ą być inne w każdej sesji edycji.
Funkcja zwraca nil wtedy, je
żeli w rysunku nie są używane identyfikatory lub gdy
argument handle nie jest identyfikatorem
żadnego z elementów aktualnego rysunku.
Funkcja handent zwraca równie
ż elementy, które zostały usunięte podczas aktualnej
sesji edycyjnej; mo
żna je więc w razie potrzeby odtworzyć, wykorzystując w tym celu
funkcj
ę entdel (patrz opis funkcji entdel).
)jg!
)jg!
)jg!
)jg!uftufyqs!uifofyqs!\fmtffyqs^****
Jest to funkcja warunkowej ewaluacji wyra
żeń. Jeśli wyrażenie testexpr nie zwraca nil,
to wyliczeniu podlega wyra
żenie thenexpr, w przeciwnym razie wyznaczana jest
warto
ść wyrażenia elseexpr. Ostatnie wyrażenie jest argumentem występującym opcjo-
nalnie. Funkcja if zwraca warto
ść wyrażenia poddanego ewaluacji. Jeżeli argument
elseexpr został pomini
ęty, a testexpr zwraca nil, to wynikiem funkcji jest również nil.
Przykład
(if (= 1 3) "TAK!!"
"nie")
zwraca
"nie"
(if (= 2 (+ 1 1)) "TAK!!")
zwraca
"TAK!!"
(if (= 2 (+ 3 4)) "TAK!!")
zwraca
nil
Informacje uzupełeniaj
ące: Patrz opis funkcji progn.
)joju
)joju
)joju
)jojuhfu!
hfu!
hfu!
hfu!\cjut^!\tusjoh^****
Funkcja initget ustala ró
żne opcje dla następnych wywołań funkcji entsel, nentsel lub
getxxx (za wyj
ątkiem getstring, getenv i getvar). Funkcja initget zawsze zwraca nil.
Opcjonalny argument bits jest zakodowan
ą bitowo liczbą typu integer, której wartości
mog
ą być następujące:
Tabela B.7. Opcje wprowadzania danych, ustalane przez initget
Warto
ść bitu
Znaczenie
1
Niedopuszczalne wprowadzenie odpowiedzi pustej
2
Niedopuszczalne warto
ści zerowe
4
Niedopuszczalne warto
ści ujemne
8
Granice nie s
ą sprawdzane, nawet gdy zmienna LIMCHECK ma wartość 1
16
(Ten bit nie jest aktualnie wykorzystywany)
32
Ruchoma linia pomocnicza i ramka s
ą rysowane linią kreskową
Epebufl!C
82:
Tabela B.7. Opcje wprowadzania danych, ustalane przez initget (c.d.)
Warto
ść bitu
Znaczenie
64
Ignorowane s
ą współrzędne Z punktów 3W (dotyczy tylko funkcji getdist)
128
Zwracana jest dowolna odpowied
ź z klawiatury
Przyszłe wersje AutoCADa mog
ą
wykorzystywa
ć
dodatkowe bity steruj
ą
ce
funkcj
ą
initget, tak wi
ę
c nale
ż
y unika
ć
ustawiania bitów nie pokazanych w ta-
beli i nie uwzgl
ę
dnionych w opisie.
Specjalne warto
ści sterujące są honorowane tylko przez te funkcje z grupy getxxx, dla
których maj
ą one sens. Pokazuje to następna tabela:
Tabela B.8. Funkcje pobieraj
ące dane od użytkownika i bity sterujące
Funkcja
Honoro-
wane
Uwzgl
ędniane bity sterujące
słowa
kluczowe
Bez odpo-
wiedzi
pustej (1)
Bez zera
(2)
Bez liczb
ujemnych
(4)
Bez granic
(8)
U
żyj
kreski
(32)
Odległo
ść2
W
(64)
Odpowied
ź
dowolna
getint
*
*
*
*
*
getreal
*
*
*
*
*
getdist
*
*
*
*
*
*
*
getangle
*
*
*
*
*
getorient
*
*
*
*
*
getpoint
*
*
*
*
*
getcorner
*
*
*
*
*
getkword
*
*
*
getstring
entsel
*
nentsel
*
nentselp
*
Opiszemy teraz bardziej szczegółowo znaczenie ka
żdego bitu:
Warto
ść = 1 (bit 0)
Zapobiega podaniu przez u
żytkownika odpowiedzi, składającej
si
ę tylko z wciśnięcia klawisza Enter.
Warto
ść = 2 (bit 1)
Zapobiega podaniu przez u
żytkownika odpowiedzi wartości zero.
Warto
ść = 4 (bit 2)
Zapobiega podaniu przez u
żytkownika odpowiedzi wartości
ujemnej.
Warto
ść = 8 (bit 3)
Pozwala na wprowadzenie przez u
żytkownika punktu poło-
żonego poza bieżącymi granicami rysunku. Warunek ten
obowi
ązuje dla najbliższego wywołania funkcji pobierającej
831
BvupMJTQ!—!qsbluzd{oz!lvst
odpowied
ź od użytkownika nawet wtedy, gdy zmienna syste-
mowa AutoCADa LIMCHECK jest ustawiona na sprawdzanie
poło
żenia punktów w granicach.
Warto
ść = 16 (bit 4)
Aktualnie niewykorzystana.
Warto
ść = 32 (bit 5)
W przypadku funkcji pozwalaj
ących użytkownikowi na
okre
ślenie punktu przez wskazanie jego położenia na ekranie
graficznym sprawia,
że rozciągnięta linia pomocnicza lub
ramka, wy
świetlana przez edytor graficzny, ukazuje się ryso-
wana lini
ą kreskową, a nie ciągłą (niektóre typy wyświetlaczy
zamiast linii kreskowej wykorzystuj
ą wyróżniający kolor).
AutoCAD ignoruje stan tego bitu, je
śli zmienna systemowa
POPUPS ma warto
ść zero.
Warto
ść = 64 (bit 6)
Zapobiega podaniu przez u
żytkownika współrzędnej Z w od-
powiedzi na zgłoszenie funkcji getdist. Pozwala to na zagwa-
rantowanie w programie u
żytkowym, że funkcja ta zwróci
odległo
ść 2W.
Warto
ść = 128 (bit 7)
Pozwala na wprowadzanie dowolnych odpowiedzi, tak jakby
były słowami kluczowymi, honoruj
ąc najpierw wszystkie inne
bity kontrolne i podane słowa kluczowe. Bit ten ma wy
ższy
priorytet, ni
ż bit 0: jeśli bit 7 jest ustawiony i użytkownik
wprowadzi odpowied
ź pustą, zwracany jest łańcuch pusty.
Gdy initget ustawia okre
ślony bit sterujący, a następnie program użytkowy wywołuje
funkcj
ę, dla której bit ten nie ma znaczenia, to jest on po prostu ignorowany. Bity mogą
by
ć sumowane w dowolnych kombinacjach, tworząc wartości z przedziału od zera do
255. Je
śli argument bits nie jest podany, initget przyjmuje dla niego wartość zero (brak
warunków). Gdy podana przez u
żytkownika odpowiedź nie jest zgodna z jednym lub
wi
ększą ilością warunków (na przykład wartość zero, gdy nie jest ona dopuszczalna),
AutoCAD wy
świetla stosowny komunikat i ponownie domaga się od użytkownika
podania odpowiedzi.
Efgjojp
Efgjojp
Efgjojp
Efgjojpxbojf!t()x!lm
xbojf!t()x!lm
xbojf!t()x!lm
xbojf!t()x!lmvd{pxzdi
vd{pxzdi
vd{pxzdi
vd{pxzdi
Opcjonalny argument string definiuje list
ę słów kluczowych, które mają być sprawdzane
przy nast
ępnym użyciu funkcji entsel, nentsel, nentselp lub getxxx w przypadku, gdy typ
wprowadzonej przez u
żytkownika danej jest inny od spodziewanego (np. nie jest to punkt
dla funkcji getpoint). Je
żeli odpowiedź użytkownika odpowiada jednemu ze znajdu-
j
ących się na tej liście słów kluczowych, to funkcja getxxx zwraca właśnie to słowo
(warto
ść typu string). Słowa kluczowe mogą być testowane przez program użytkowy,
a nast
ępnie może on podejmować różne działania, określone dla każdego ze słów. Jeżeli
wprowadzona odpowied
ź nie jest spodziewanego typu i nie pokrywa się z żadnym ze
słów kluczowych, AutoCAD zaproponuje ponowienie próby wprowadzenia odpowiedzi.
Argument string jest interpretowany zgodnie z nast
ępującymi regułami:
Epebufl!C
832
•
Ka
żde słowo kluczowe jest odseparowane od następnego przez jeden lub więcej
znaków
odst
ępu (spacji). Na przykład łańcuch "Szerokość Wysokość
Gł
ębokość" definiuje trzy słowa kluczowe.
•
Legalne słowo kluczowe mo
że zawierać litery, cyfry i myślniki (–). Każdy wy-
kaz słów kluczowych mo
że nakazywać AutoCADowi rozpoznawanie skrótów.
Mo
żna to osiągnąć dwoma sposobami:
•
Ta cz
ęść słowa, która jest skrótem nazwy opcji, jest pisana dużymi literami,
a reszta małami. Skrót zaznaczony du
żymi literami może znajdować się w
dowolnej cz
ęści słowa (na przykład: "RLinii", "koNiec", "aplikoM").
•
Słowa kluczowego s
ą podane dużymi literami, a po niej, po przecinku, po-
wtórzona jest ta jej cz
ęść która stanowi skrót (na przykład: RLINII,RL).
W tym wypadku skrót słowa kluczowego musi zawiera
ć pierwszą literę
słowa, co oznacza na przykład,
że specyfikacja "KONIEC,O" jest błędna.
(Druga metoda jest przeznaczona do wykorzystania w programach u
żytkowych pisa-
nych z u
życiem języków obcych, w których konwersja małych i dużych liter mogłaby
by
ć trudna lub niemożliwa.)
Oba krótkie przykłady: "RLinii" i "RLINII,RL"s
ą równoważne. Jeśli użytkownik poda
RL (małymi lub du
żymi literami), to wystarczy to do jednoznacznego zidentyfikowania
słowa kluczowego.
U
żytkownik może wprowadzać znaki występujące po wymaganej części słowa kluczowego,
pod warunkiem
że są one zgodne ze specyfikacją. W powyższym przykładzie użytkownik
mógł tak
że wprowadzić RLI lub RLIN, ale L już byłoby niewystarczające. Z kolei RLINIA
lub RLENA nie jest zgodne z pisowni
ą słowa kluczowego.
•
Je
śli argument string zawiera słowo kluczowe pisane w całości dużymi lub
małymi literami, po którym bez przecinka wyst
ąpiłaby wymagana część słowa,
AutoCAD rozpozna słowo kluczowe tylko wtedy, gdy u
żytkownik wprowadzi je
w cało
ści.
Wprowadzone przez initget bity steruj
ą
ce oraz lista słów kluczowych dotycz
ą
tylko nast
ę
pnego wywołania funkcji entsel, nentsel, nentselp lub getxxx
i zaraz potem s
ą
automatycznie uniewa
ż
niane. Unika si
ę
w ten sposób konie-
czno
ś
ci anulowania tych specjalnych warunków przy kolejnym wywoływaniu
tych funkcji.
)j
)j
)j
)joufst!
oufst!
oufst!
oufst!qu2!qu3!qu4!qu5!\potfh^****
Funkcja inters wykonuje operacj
ę sprawdzenia dwóch odcinków prostoliniowych
i zwraca punkt ich przeci
ęcia. Jeżeli punkt taki nie istnieje, to funkcja zwraca nil.
Argumenty pt1 i pt2 s
ą końcami pierwszego odcinka, a pt3 i pt4 są końcowymi
punktami drugiego.
Wszystkie punkty s
ą określane przez wartości współrzędnych dla aktualnego LUW.
Je
żeli wszystkie cztery argumenty są punktami 3W, wówczas funkcja inters wyznacza
833
BvupMJTQ!—!qsbluzd{oz!lvst
punkt przeci
ęcia również w przestrzeni 3W. W innym przypadku inters rzutuje odcinki
na aktualn
ą płaszczyznę konstrukcyjną i na niej poszukuje punktu przecięcia 2W.
Je
żeli w wyrażeniu został użyty opcjonalny argument onseg i jest on równy nil, to
odcinki zdefiniowane przez cztery wskazane punkty s
ą traktowane jako proste o nie-
sko
ńczonej długości. Funkcja inters zwraca wtedy punkt przecięcia nawet wtedy, gdy
jest on poło
żony na zewnątrz jednego lub obu odcinków. Jeżeli argument onseg został
pomini
ęty lub jest różny od nil, to punkt przecięcia musi leżeć na obydwu odcinkach.
W przeciwnym razie inters zwraca nil. Przykładowo, je
śli określono punkty:
(setq a '(1.0 1.0) b '(9.0 9.0))
(setq c '(4.0 1.0) d '(4.0 2.0))
to:
(inters a b c d)
zwraca
nil
(inters a b c d T)
zwraca
nil
(inters a b c d nil)
zwraca
4.0 4.0)
)jupb!
)jupb!
)jupb!
)jupb!jou****
Funkcja ta zwraca wynik konwersji liczby typu integer na ła
ńcuch cyfr (wartość typu
string). Przykładowo:
(itoa 33)
zwraca
"33"
(itoa -17)
zwraca
"-17"
)mb
)mb
)mb
)mbnceb!
nceb!
nceb!
nceb!bshvnfout!fyqs!
****
Funkcja lambda definiuje nie posiadaj
ącą nazwy funkcję anonimową. Najcześciej jest
to stosowane wtedy, gdy definiowanie nowej funkcji nie jest uzasadnione przyszłymi
potrzebami w innych zastosowaniach. Wprowadzenie definicji funkcji bezpo
średnio
w miejscu, w którym ma by
ć ona używana powoduje także, że intencje programisty są
bardziej czytelne. Funkcja lambda zwraca warto
ść ostatniego argumentu expr. Jest ona
cz
ęsto używana w połączeniu z apply i/lub mapcar w celu wykonania funkcji na
obiekcie typu lista. Przykładowo:
(apply
'(lambda (x y z)
(*x(- y z)
);lambda
'(5 20 14)
);apply
zwraca
30
oraz:
(setq counter 0)
(mapcar
'(lambda (x)
(setq counter (1+ counter))
Epebufl!C
834
(* x 5)
);lambda
'(2 4 -6 10.2)
);mapcar
zwraca
(10 20 -30 51.0)
)mbtu!
)mbtu!
)mbtu!
)mbtu!mjtu****
Funkcja last zwraca ostatni element argumentu list. Nie mo
że on być listą pustą.
Przykładowo:
(last '(a b c d e))
zwraca
E
(last '(a b c (d e)))
zwraca
(D E)
Jak pokazano, last zwraca element, którym mo
że być atom lub lista.
Na pierwszy rzut oka, funkcja last mo
ż
e si
ę
wydawa
ć
idealnym sposobem
uzyskiwania współrz
ę
dnej Y. Jest to prawd
ą
dla punktów 2W (listy dwóch liczb
typu real). Dla punktów 3W wynikiem last byłaby jednak współrz
ę
dna Z. Aby
funkcje działały prawidłowo dla punktów 2W oraz 3W, w celu uzyskania
współrz
ę
dnej Y zalecane jest stosowanie funkcji cadr, a funkcji caddr w celu
uzyskania współrz
ę
dnej Z.
)m
)m
)m
)mfohui!
fohui!
fohui!
fohui!mjtu****
Funkcja ta zwraca liczb
ę typu integer, określającą liczbę elementów argumentu list.
Przykładowo:
(length '(a b c d))
zwraca
4
(length '(a b (c d)))
zwraca
3
(length '())
zwraca
0
)mjtu!
)mjtu!
)mjtu!
)mjtu!fyqs!
****
Funkcja list ł
ączy dowolną liczbę argumentów expr w jeden łańcuch wyrażeń i zwraca
utworzon
ą w ten sposób listę. Przykładowo:
(list 'a 'b 'c)
zwraca
(A B C)
(list 'a '(b c) 'd)
zwraca
(A (B C) D)
(list 3.9 6.7)
zwraca
(3.9 6.7)
W AutoLISPie funkcja ta jest cz
ęsto używana do definiowania zmiennych reprezentu-
j
ących punkty 2W i 3W (listy dwóch lub trzech liczb typu real).
Je
ś
li w li
ś
cie nie ma zmiennych lub niezdefiniowanych wyra
ż
e
ń
, do tworzenia
listy mo
ż
na wykorzysta
ć
alternatywn
ą
metod
ę
, polegaj
ą
c
ą
na prostym ozna-
czeniu listy znakiem cytatu.
'(3.9 6.7) ma takie samo znaczenie, jak (list 3.9 6.7)
835
BvupMJTQ!—!qsbluzd{oz!lvst
Jest to bardzo wygodny sposób tworzenia listy asocjacji lub definiowania punktów.
Wi
ęcej informacji zawiera opis funkcji quote.
)mjtu
)mjtu
)mjtu
)mjtuq!
q!
q!
q!jufn****
Funkcja ta zwraca T, je
żeli argument item jest listą, a nil w przeciwnym przypadku.
Przykładowo:
(listp '(a b c))
zwraca
T
(listp 'a)
zwraca
nil
(listp 4.343)
zwraca
nil
)mpbe!
)mpbe!
)mpbe!
)mpbe!gjmfobnf!\pogbjmvsf^****
Funkcja wczytuje plik zawieraj
ący wyrażenia AutoLISPu i wyznacza ich wartość.
Argument filename jest ła
ńcuchem alfanumerycznym (wartość typu string), który
reprezentuje nazw
ę pliku bez rozszerzenia (zakładane jest rozszerzenie .LSP). Ponadto
filename mo
że zawierać przedrostek określający ścieżkę dostępu, np. /KAROL/
ACAD_PN. W systemach operacyjnych MS-DOS/PC-DOS dopuszczalne jest tak
że
u
życie litery identyfikującej napęd dyskowy oraz stosowanie znaku lewego ukośnika \
zamiast / (pami
ętać trzeba jednak, że aby w łańcuchu otrzymać znak \, należy wpisać
\\).
Je
żeli użytkownik nie poda w łańcuchu filename ścieżki dostępu do pliku, to funkcja
load przeszukuje
ścieżkę biblioteczną AutoCADa w podobny sposób jak funkcja
findfile (
ścieżka poszukiwania plików bibliotecznych AutoCADa jest opisana wraz
z funkcj
ą findfile). Jeżeli na tej ścieżce zostanie znaleziony podany plik, to funkcja
load wczyta go do pami
ęci.
Je
żeli operacja zakończyła się sukcesem, load zwraca wartość ostatniego wyrażenia
w pliku, które cz
ęsto jest nazwą ostatniej zdefiniowanej w pliku funkcji. Jeżeli operacja
load zako
ńczyła się porażką, to zwykle wynika to z błędu AutoLISPu i powoduje
wy
świetlenie odpowiedniego komunikatu. Jeżeli jednak wyrażenie zawiera argument
onfailure, to funkcja zwraca warto
ść tego argumentu. Umożliwia to tworzenie aplikacji
(programów u
żytkowych) AutoLISPu, które w przypadku nieudanej operacji load
wykonuj
ą inne działanie alternatywne.
Oczywi
ście wartość argumentu onfailure powinna być inna niż wartość ostatniego
wyra
żenia w pliku. W przeciwnym wypadku wartość zwrócona przez funkcję load będzie
niejednoznaczna. Nale
ży zauważyć, że jeśli argument onfailure jest poprawnie użytą
funkcj
ą AutoLISPu, to zostanie ona poddana wyliczeniu. Z tego powodu, w większości
przypadków argument onfailure powinien by
ć łańcuchem tekstowym lub atomem.
Zakładaj
ąc przykładowo, że plik /KAROL/TEST1.LSP zawiera:
(defun FUNKCJA1 (x)
...definicja funkcji...
Epebufl!C
836
)
(defun FUNKCJA2 (x)
...definicja funkcji...
)
oraz,
że plik TEST2.LSP nie istnieje, otrzymamy następujące wyniki:
(load "/karol/test1")
zwraca
FUNKCJA2
(load "\\karol\\test1")
zwraca
FUNKCJA2
(load "/karol/test1" "fatalnie")
zwraca
FUNKCJA2
(load "test2" "Bł
ą
d")
zwraca
"Bł
ą
d"
(load "test2")
bł
ąd AutoLISPu
Funkcja load mo
że być użyta wewnatrz innej funkcji AutoLISPu, a nawet rekursywnie
(we wczytywanym pliku).
Je
żeli istnieje plik ACAD.LSP, to jest on automatycznie wczytywany przy każdym
rozpoczynaniu sesji pracy z edytorem rysunku. Umieszczenie w nim definicji cz
ęściej
u
żywanych funkcji spowoduje ich automatyczną ewaluację (definiowanie) na początku
ka
żdej sesji edycji rysunku. Jeżeli w tym momencie chcemy automatycznie spowo-
dowa
ć wykonywanie serii poleceń AutoCADa lub funkcji AutoLISPu, to należy
zdefiniowa
ć w pliku ACAD.LSP specjalną funkcję S::STARTUP. Gdy jest ona w pliku,
AutoCAD wykonuje j
ą automatycznie na początku sesji rysunkowej.
Informacje uzupełniaj
ące: Patrz opis funkcji defun.
)mph!
)mph!
)mph!
)mph!ovncfs****
Warto
ścią zwracaną przez funkcję jest liczba typu real równa logarytmowi naturalnemu
argumentu number. Przykładowo:
(log 4.5)
zwraca
1.50408
(log 1.22)
zwraca
0.198851
)mphboe!
)mphboe!
)mphboe!
)mphboe!ovncfs!ovncfs!///****
Funkcja ta zwraca liczb
ę będącą wynikiem dwuargumentowych operacji koniunkcji
(iloczyn logiczny), wykonywanych za pomoc
ą funktora AND na odpowiadających
sobie bitach kolejnych argumentów number. Musz
ą być one wartościami całkowito-
liczbowymi. Przykładowo:
(logand 7 15 3)
zwraca
3
(logand 2 3 15)
zwraca
2
(logand 8 3 4)
zwraca
0
837
BvupMJTQ!—!qsbluzd{oz!lvst
)mphjp
)mphjp
)mphjp
)mphjps!
s!
s!
s!joufhfs!///****
Funkcja ta zwraca liczb
ę, będącą wynikiem dwuargumentowych operacji alternatywy
niewykluczaj
ącej, zwanej inaczej sumą logiczną, wykonywanych za pomocą funktora
OR na odpowiadaj
ących sobie bitach kolejnych argumentów integer. Muszą być one
warto
ściami całkowitoliczbowymi. Przykładowo:
(logior 1 2 4)
zwraca
7
(logior 9 3)
zwraca
11
)mti!
)mti!
)mti!
)mti!ovn2!ovncjut****
Funkcja ta zwraca liczb
ę, będącą wynikiem operacji przesunięcia bitów argumentu
num1 o liczb
ę pozycji równą argumentowi numbits. Oba argumenty muszą być liczbami
typu integer.
Je
żeli argument numbits jest liczbą dodatnią, to bity argumentu num1 są przesuwane
w lewo; je
żeli ujemną, to dokonywane jest przesunięcie w prawo. W każdym
przypadku, na miejsca w wyniku przesuni
ęcia zwolnione, które nie zostały zajęte innym
przesuni
ętym bitem, są wstawiane bity 0. Bity przesuwane w prawo na zewnątrz bajtu
s
ą tracone. Jeżeli bit 1 jest przesuwany na lub poza pozycję najwyższego bitu argu-
mentu num1 (bit 16-ty w przypadku komputerów 16-bitowych i bit 32-gi w 32-
bitowych stacjach roboczych), to zmianie ulega jej znak.
Przykład
(lsh 2 1)
zwraca
4
(lsh 2 -1)
zwraca
1
(lsh 40 2)
zwraca
160
Wyra
ż
enie (lsh 16384 1) zwraca –32768 w przypadku komputerów 16-bitowych,
lub 32768 w przypadku komputerów 32-bitowych.
)nbqdbs!
)nbqdbs!
)nbqdbs!
)nbqdbs!gvodujpo!mjtu2!
!mjtuo****
Wyra
żenie z funkcją mapcar zwraca listę, której elementami są wyniki ewaluacji
wyra
żenia function z argumentami branymi z kolejnych pozycji poszczególnych list
poczynaj
ąc od argumentu list1 do listn. Liczba argumentów listn musi odpowiadać
liczbie argumentów, której wymaga function. Przykładowo:
(setq a 10 b 20 c 30)
(mapcar '1+ (list a b c))
zwraca
(11 21 31)
Jest to równowa
żne wyrażeniom:
(1+ a)
(1+ b)
Epebufl!C
838
(1+ c)
z t
ą różnicą, że mapcar zwraca wyniki w postaci jednej listy. Podobnie:
(mapcar '+ '(10 20 30) '(4 3 2))
zwraca
(14 23 32)
co odpowiada sekwencji wyra
żeń:
(+ 10 4)
(+ 20 3)
(+ 30 2)
Funkcj
ą, która ma być wykonywana przy wywołaniu mapcar, może być funkcja
anonimowa, zdefiniowana za pomoc
ą funkcji lambda. Jest to przydatne, gdy część
argumentów funkcji ma warto
ści stałe lub podawane w inny sposób. Przykładowo:
(mapcar
'(lambda (x)
(+ x 3)
);lambda
'(10 20 30)
);mapcar
zwraca
(13 23 33)
oraz:
(mapcar
'(lambda (x y z)
(* x (- y z))
);lambda
'(5 6) '(20 30) '(14 5.0)
);mapcar
zwraca
(30 150.0)
)nb
)nb
)nb
)nby!
y!
y!
y!ovncfs!ovncfs!///****
Funkcja ta zwraca najwi
ększą liczbę z argumentów number. Mogą to być liczby typu
real i integer. Je
żeli wszystkie argumenty number są wartościami całkowitoliczbowymi,
to funkcja zwraca liczb
ę typu integer. Jeżeli którykolwiek z argumentów jest liczbą
rzeczywist
ą, to argumenty typu integer są poddawane konwersji na real i wynik również
jest liczb
ą typu real.
Przykład
(max 4.07 -144)
zwraca
4.07
(max -88 19 5 2)
zwraca
19
(max -2.1 4 8 2)
zwraca
8.0
839
BvupMJTQ!—!qsbluzd{oz!lvst
)nfn*
)nfn*
)nfn*
)nfn*
Wy
świetla aktualny stan pamięci przydzielonej dla AutoLISPu.
)nfncfs!
)nfncfs!
)nfncfs!
)nfncfs!fyqs!mjtu****
Funkcja ta wyszukuje w
śród elementów argumentu list przypadki występowania
obiektu expr. W przypadku wyst
ępowania obiektu expr, zwracana jest lista, której
pierwszym elementem jest wła
śnie ten element oraz list, zawierająca resztę elementów
argumentu a
ż do jej końca. Jeżeli expr nie występuje w przeszukiwanej liście, to
wyra
żenie z funkcją member zwraca nil. Przykładowo:
(member 'c '(a b c d e))
zwraca
(C D E)
(member 'q '(a b c d e))
zwraca
nil
)nfov
)nfov
)nfov
)nfovdne!
dne!
dne!
dne!tusjoh****
Funkcja menucmd umo
żliwia programom LISPu przełączanie stron podrzędnych menu
programu AutoCAD. W ten sposób, program przygotowany w j
ęzyku AutoLISP, może
współpracowa
ć ze skojarzonym z nim plikiem menu, wyświetlając odpowiednie
podmenu z pozycjami zawieraj
ącymi różne możliwości, gdy zajdzie potrzeba
wprowadzenia danych przez u
żytkownika. Funkcja menucmd zawsze zwraca nil.
Argument string ma posta
ć:
"section=submenu"
gdzie section okre
śla sekcję menu, a submenu wskazuje podmenu w ramach sekcji,
przeznaczone do uaktywnienia. Dopuszczalne warto
ści argumentu section są takie
same, jak wywołania podmenu w pliku menu. S
ą one pokazane w poniższej tabeli.
Tabela B.9. Warto
ści części section argumentu string
Oznaczenie sekcji
Sekcja menu
S
dla menu SCREEN
B1 — B4
dla menu BUTTONS1 do BUTTONS4
I
dla menu ICON
PO — P16
dla menu rozwijanych POP0 do POP16
T1 — T4
dla menu TABLET1 do TABLET4
A1 do A4
dla menu AUX1 do AUX4
M
dla wyra
żeń łańcuchowych typu DIESEL
Aby zachowa
ć
zgodno
ść
z poprzednimi wersjami AutoLISPu, "B" podane jako
ła
ń
cuch zawieraj
ą
cy nazw
ę
sekcji jest interpretowane jako "B1".
Epebufl!C
83:
)njo!
)njo!
)njo!
)njo!ovncfs!ovncfs!
****
Funkcja ta zwraca najmniejsz
ą liczbę z argumentów number. Mogą nimi być liczby
typu real i integer. Je
żeli wszystkie argumenty number są wartościami całkowito-
liczbowymi, to funkcja zwraca liczb
ę typu integer. Jeżeli którykolwiek z argumentów
jest liczb
ą rzeczywistą, to argumenty typu integer są poddawane konwersji na real
i wynik równie
ż jest liczbą typu real. Przykładowo:
(min 683 -10.0)
zwraca
-10.0
(min 73 2 48 5)
zwraca
2
(min 2 4 6.7)
zwraca
2.0
)njovt
)njovt
)njovt
)njovtq!
q!
q!
q!jufn****
Je
żeli argument item jest liczbą typu real lub integer i jego wyliczenie daje wartość
ujemn
ą, to funkcja zwraca T. W przeciwnym wypadku minusp zwraca nil. Funkcja nie
jest zdefiniowana dla innych typów argumentów item. Przykładowo:
(minusp -1)
zwraca
T
(minusp -4.293)
zwraca
T
(minusp 830.2)
zwraca
nil
)ofoutfm!
)ofoutfm!
)ofoutfm!
)ofoutfm!\qspnqu^****
Funkcja ta zapewnia dost
ęp do danych definiujących elementy wchodzące w skład
wstawionego do rysunku elementu zło
żonego (Bloku).
Funkcja nentsel powoduje wy
świetlenie zgłoszenia, które daje użytkownikowi
mo
żliwość wybrania obiektu. Aktualnie obowiązujące tryby lokalizacji punktów
wzgl
ędem obiektów, ustalone za pomocą polecenia OBIEKT, są przez funkcję nentsel
ignorowane (odpowiada to stanowi braku ustalonych trybów lokalizacji), chyba
że
specjalnie za
żądamy inaczej podczas wykonywania funkcji. W celu udostępnienia
dodatkowych mo
żliwości odpowiedzi na zgłoszenie Polecenie:; nentsel może opcjonalnie
honorowa
ć słowa kluczowe, zdefiniowane przez wcześniejsze wywołanie funkcji initget.
Opcjonalny argument prompt, je
żeli występuje w wyrażeniu, musi być łańcuchem
alfanumerycznym (warto
ść typu string). Jeżeli jest on pominięty, pojawia się stan-
dardowe zgłoszenie Wska
ż obiekty:
Je
żeli wybrany obiekt nie jest obiektem złożonym (Polilinią lub Blokiem), to nentsel
zwraca identyczn
ą informację, jak funkcja entsel. Jeżeli jednak wybrany element jest
Polilini
ą, to nentsel zwraca listę zawierającą nazwę elementu podrzędnego (wierz-
chołka) oraz współrz
ędne użytego do jej wskaznia punktu. Lista ta jest podobna do
zwracanej przez entsel z t
ą różnicą, że zwracana jest nazwa wybranego wierzchołka,
a nie nazwa zwi
ązana z nagłówkowym elementem Polilinii. Funkcja nentsel zawsze
zwraca ten z wierzchołków Polilinii, który stanowi pocz
ątek wybranego segmentu
841
BvupMJTQ!—!qsbluzd{oz!lvst
Polilinii. Przykładowo, wskazanie trzeciego segmentu spowoduje zwrócenie trzeciego
wierzchołka. W przypadku Polilinii, nentsel nigdy nie zwraca ko
ńczącego sekwencję
elementu SEQEND.
Gdy wskazany element nale
ży do Bloku, nentsel zwraca listę zawierającą cztery
elementy, które zostan
ą obecnie opisane. Wyjątkiem od tej reguły są jedynie Atrybuty
wewn
ątrz Bloku. Wybranie Atrybutu powoduje zwrócenie tylko nazwy Atrybutu oraz
współrz
ędnych punktu użytego do wskazania obiektu (podobnie jak w przypadku listy
zwracanej przez funkcj
ę entsel).
Pierwszym elementem listy zwracanej po wskazaniu elementu nale
żącego do Bloku,
jest nazwa wybranego elementu. Drugim elementem tej listy jest lista, która zawiera
współrz
ędne punktu użytego do wskazania elementu rysunku.
Trzeci element zwracanej listy jest macierz
ą transformacji Układu Współrzędnych
Modelu w Globalny Układ Współrz
ędnych. Jest to lista, w skład której wchodzą cztery
listy podrz
ędne, każda z nich zawiera zestaw współrzędnych. Macierz ta może być
wykorzystywana do transformacji współrzednych punktów definiuj
ących element
z odniesionych do wewn
ętrznego układu współrzędnych, zwanego Układem Współ-
rz
ędnych Modelu (UWM), na współrzędne odniesione do Globalnego Układu Współ-
rz
ędnych (GUW). Początek UWM wyznacza bazowy punkt wstawienia Bloku, który
zawiera wybrany element. Kierunki osi UWM s
ą zgodne z kierunkami osi LUW,
obowi
ązującego w momencie definiowania Bloku.
Czwartym elementem jest równie
ż lista, zawierająca nazwę elementu dla Bloku, w któ-
rym znajduje si
ę wybrany element. Jeżeli wybrany element jest składnikiem Bloku
zagnie
żdżonego (Bloku w Bloku), wówczas lista zawiera dodatkowo nazwy elementów
dla wszystkich Bloków, w których zagnie
żdżony jest wybrany element, poczynając od
Bloku umieszczonego najgł
ębiej, a kończąc na Bloku najbardziej oddalonym idąc na
zewn
ętrz, czyli na Bloku wstawionym do rysunku.
(<Nazwa elementu: nazwa-1>
Nazwa elementu
(Px Py Pz)
Wskazany punkt
(
(X0 Y0 Z0)
Macierz transformacji UWM na
(X1 Y1 Z1)
GUW
(X2 Y2 Z2)
(X3 Y3 Z3)
)
(<Nazwa elementu: nazwa-2>
Nazwa najgł
ę
biej zagnie
ż
d
ż
onego
bloku z wybranym elementem
(<Nazwa elementu: nazwa-n>)
Nazwa bloku najbardziej
zewn
ę
trznego wzgl
ę
dem wybranego
elementu
)
Po uzyskaniu nazwy elementu oraz macierzy definiuj
ącej transformację Układ Współ-
rz
ędnych Modelu na Globalny Układ Współrzędnych, można dokonać transformacji,
definiuj
ących element, współrzędnych z UWM na GUW. W celu uzyskania wartości
Epebufl!C
842
współrz
ędnych punktów odniesionych do UWM, należy skorzystać z funkcji entget i
assoc w odniesieniu do nazwy elementu.
Macierz zwracana przez nentsel ma takie samo przeznaczenie, jak macierz zwracana
przez nentselp, ale jest macierz
ą o rozmiarze 4x3, będącą tablicą czterech punktów,
w której punkty umieszczone s
ą w kolejnych wierszach, a nie w kolumnach. Transfor-
macja jest opisana przez nast
ępujące mnożenie macierzy:
M
00
M
01
M
02
M
10
M
11
M
12
[ X' Y' Z' 1.0 ]= [ X Y Z 1.0 ] *
M
20
M
21
M
22
M
30
M
31
M
32
Z tego wynikaj
ą następujące równania określające nowe współrzędne:
X' = XM
00
+ YM
10
+ ZM
20
+ M
30
Y' = XM
01
+ YM
11
+ ZM
21
+ M
31
Z' = XM
02
+ YM
12
+ ZM
22
+ M
32
Współczynniki M
ij
, gdzie 0 <=i,j <=2, s
ą elementami macierzy transformacji UWM na
GUW, X, Y i Z okre
ślają punkt w układzie UWM, definiujący element rysunkowy, a X'
Y' i Z' okre
ślają wynikowy punkt definiujący element rysunkowy w układzie GUW.
Jest to jedyna funkcja AutoLISPu wykorzystuj
ą
ca tego typu macierz. Funkcja
nentselp zwraca macierz podobn
ą
do macierzy wykorzystywanych przez inne
funkcje AutoLISPu i ADS.
Informacje uzupełniaj
ące: opis funkcji entsel i initget.
)ofoutfmq!
)ofoutfmq!
)ofoutfmq!
)ofoutfmq!\qspnqu^!\qu^****
Funkcja nentselp, podobnie jak nentsel, zapewnia dost
ęp do danych definiujących
elementy wchodz
ące w skład wstawionego do rysunku elementu złożonego (Bloku).
Oprócz opcjonalnego argumentu prompt, nentselp akceptuje tak
że punkt wybierający
element rysunkowy, podawany jako dodatkowy argument opcjonalny. Umo
żliwia to
wybieranie obiektów bez interakcyjnego współdziałania z u
żytkownikiem. Funkcja
nentselp zwraca macierz transformacji o rozmiarze 4x4, zdefiniowan
ą następująco:
M
00
M
01
M
02
M
03
M
10
M
11
M
12
M
13
M
20
M
21
M
22
M
23
M
30
M
31
M
32
M
33
Trzy pierwsze kolumny macierzy okre
ślają skalowanie i obrót. Czwarta kolumna ma-
cierzy transformacji jest wektorem przesuni
ęcia.
Funkcje wykorzystuj
ące macierze tego typu traktują punkt jako wektor — kolumnę,
o rozmiarze 4. Punkt jest wyra
żony we współrzędnych jednorodnych, gdzie czwarty
element wektora punktu jest współczynnikiem skali, ustawionym zazwyczaj na 1.0.
Ostatni wiersz macierzy — wektor [M
30
M
31
M
32
M
33
] — ma nominaln
ą wartość [0 0 0 1]
843
BvupMJTQ!—!qsbluzd{oz!lvst
i aktualnie jest ignorowany przez funkcje wykorzystuj
ące ten format macierzy. W kon-
wencji tej zastosowanie transformacji do punktu jest równowa
żne następującemu mno-
żeniu macierzy.
X'
M
00
M
01
M
02
M
03
X
Y'
=
M
10
M
11
M
12
M
13
*
Y
Z'
M
20
M
21
M
22
M
23
Z
1.0
0.0
0.0
0.0
0.0
1.0
W wyniku tego mno
żenia otrzymujemy poszczególne współrzędne punktu:
X' = XM
00
+ YM
01
+ ZM
02
+ M
03
(1.0)
Y' = XM
10
+ YM
11
+ ZM
12
+ M
13
(1.0)
Z' = XM
20
+ YM
21
+ ZM
22
+ M
23
(1.0)
Jak pokazuj
ą powyższe wzory, współczynnik skali oraz ostatni wiersz macierzy nie
maj
ą znaczenia i są ignorowane.
)opu!
)opu!
)opu!
)opu!jufn****
Funkcja ta zwraca T, je
żeli wyliczenie wyrażenia item daje nil, a nil w wypadku
przeciwnym. Zazwyczaj do list u
żywana jest funkcja null, natomiast funkcja not jest
stosowana do innych typów danych, ł
ącznie z którąś z funkcji sterujących. Przy-
kładowo, je
żeli dokonano następujących przypisań:
(setq a 123)
(setq b "Jan Kowalski")
(setq c nil)
to:
(not a)
zwraca
nil
(not b)
zwraca
nil
(not c)
zwraca
T
(not '())
zwraca
T
)oui!
)oui!
)oui!
)oui!o!mjtu****
Funkcja nth zwraca n-ty element argumentu list, gdzie n jest numerem zwracanego
elementu (pierwszy element listy ma numer zerowy). Je
żeli wartość n jest większa od
najwy
ższego numeru elementu listy, to funkcja zwraca nil.
Przykładowo:
(nth 3 '(a b c d e))
zwraca
D
(nth 0 '(a b c d e))
zwraca
A
(nth 5 '(a b c d e))
zwraca
nil
Epebufl!C
844
)o
)o
)o
)ovmm!
vmm!
vmm!
vmm!jufn****
Funkcja zwraca T, je
żeli wyliczenie argumentu item daje nil. W przeciwnym razie
funkcja zwraca nil. Przykładowo, gdy dokonano przypisa
ń:
(setq a 123)
(setq b "Józef Pawlak")
(setq c nil)
wówczas:
(null a)
zwraca
nil
(null b)
zwraca
nil
(null c)
zwraca
T
(null '())
zwraca
T
)ovncfs
)ovncfs
)ovncfs
)ovncfsq!
q!
q!
q!jufn****
Funkcja zwraca T, je
żeli argument item jest liczbą typu real lub integer, w przeciwnym
wypadku zwraca nil. Przykładowo, w wyniku nast
ępujących przypisań:
(setq a 123)
(setq b 'a)
wykonanie:
(numberp 4)
zwraca
T
(numberp 3.8348)
zwraca
T
(numberp "Marta")
zwraca
nil
(numberp 'a)
zwraca
nil
(numberp a)
zwraca
T
(numberp b)
zwraca
nil
(numberp (eval b))
zwraca
T
)pqfo!
)pqfo!
)pqfo!
)pqfo!gjmfobnf!npef****
Wyra
żenie z tą funkcją otwiera plik, umożliwiając dostęp do jego zawartości dla funkcji
Wej
ścia/Wyjścia AutoLISPu. Funkcja open zwraca deskryptor pliku, który jest prze-
znaczony do wykorzystywania przez inne funkcje Wej
ścia/Wyjścia. Z tego względu
musi by
ć on przypisany do symbolu za pomocą funkcji setq. Przykładowo:
(setq a (open "plik.txt" "r"))
Argument filename jest ła
ńcuchem alfanumerycznym, który określa nazwę otwieranego
pliku wraz z rozszerzeniem. Argument mode jest znacznikiem odczytu/zapisu i musi
by
ć łańcuchem zawierającym jedną literę napisaną minuskułą (małą). Listę możliwych
trybów dost
ępu przedstawiono w poniższej tabeli:
845
BvupMJTQ!—!qsbluzd{oz!lvst
Tabela B.10. Dopuszczalne argumenty mode dla funkcji open
Tryb OPEN
Opis
"r"
Plik otwarty do odczytu danych. Je
żeli plik filename nie istnieje funkcja
zwraca nil.
"w"
Plik otwarty do zapisu danych. Je
żeli plik filename nie istnieje, to zostanie
utworzony i nast
ępnie otwarty. Jeżeli plik o podanej nazwie już istnieje,
wówczas jego zawarto
ść zostanie zastąpiona nowymi danymi.
"a"
Plik otwarty do dopisywania danych. Je
żeli plik filename nie istnieje, to
zostanie utworzony i nast
ępnie otwarty. Jeżeli plik o podanej nazwie już
istnieje, to jest on otwierany, a nowe dane mog
ą być dołączane po danych
istniej
ących w nim do tej pory.Uwaga: W systemach DOS, niektóre
programy i edytory tekstowe zapisuj
ą pliki tekstowe z umieszczonym na
ko
ńcu tekstu znacznikiem końca pliku (ang. end-of-file) w postaci znaku
CTRL-Z, którego dziesi
ętnym kodem ASCII jest liczba 26. Podczas
czytania pliku, po napotkaniu znacznika CTRL-Z, system operacyjny
zwraca status ko
ńca pliku, nawet wtedy, jeżeli zawiera on dalej więcej
danych. U
żytkownik zamierzający używać trybu "a" funkcji open w celu
dopisania danych do plików utworzonych za pomoc
ą innych programów,
powinien upewni
ć się, że żaden z nich nie umieszcza na końcu plików
tekstowych kodów CTRL-Z.
Zakładaj
ąc, że wymienione poniżej pliki nie istnieją:
(setq f (open "nowy.tst" "w"))
zwraca
<Plik: #nnn>
(setq f (open "inny.fil" "r"))
zwraca
nil
(setq f (open "plik" "a"))
zwraca
<Plik: #nnn>
Argument filename mo
że zawierać przedrostek określający ścieżkę dostępu, np.
/APLIKOM/ACAD-PN/FUNKCJA1, a w systemach MS-DOS/PC-DOS równie
ż literę
identyfikuj
ącą napęd dyskowy. Można także użyć znaku ukośnika lewego \ zamiast
prawego /, pami
ętając jednak o tym, że aby do łańcucha został wstawiony jeden
uko
śnik lewy \, należy użyć znaku zdublowanego \\.
Przykładowo:
(setq f (open "/x/nowy.tst" "w"))
zwraca
<Plik: #nnn>
(setq f (open "\\x\\nowy.tst" "w"))
zwraca
<Plik: #nnn>
)ps!
)ps!
)ps!
)ps!fyqs!
****
Funkcja or zwraca wynik sumy logicznej argumentów expr. S
ą one poddawane
warto
ściowaniu kolejno od lewej od prawej, w poszukiwaniu wyrażenia o wartości
ró
żnej od nil. Jeżeli takie zostanie znalezione, to ewaluacja dalszych wyrażeń nie jest
kontynuowana i funkcja zwraca T. Je
żeli wszystkie wyrażenia zwracają nil, to funkcja
or zwraca nil.
Epebufl!C
846
Przykładowo:
(or nil 45 '())
zwraca
T
(or nil '())
zwraca
nil
)ptobq!
)ptobq!
)ptobq!
)ptobq!qu!npef.tusjoh****
Funkcja ta zwraca punkt 3W, otrzymany w wyniku zastosowania dla argumentu pt
opisanych przez mode-string sposobów lokalizacji poło
żenia punktu względem obiektu.
Argument mode-string jest ła
ńcuchem alfanumerycznym, który zawiera jeden lub wię-
cej prawidłowych identyfikatorów trybów lokalizacji, takich jak np. centrum, symetria,
rozdzielonych przecinkami.
Przykładowo:
(setq pkt2 (osnap pkt1 "sym"))
(setq pkt2 (osnap pkt1 "sym,kon,cen"))
Działanie tej funkcji jest uzale
żnione od aktualnego widoku 3W (kierunku rzutowania).
qj
qj
qj
qj
Nie jest to wła
ściwie funkcja, lecz raczej stała
π
. Symbolowi przypisano warto
ść równą
w przybli
żeniu 3.1415926.
)qpmbs!
)qpmbs!
)qpmbs!
)qpmbs!qu!bohmf!ejtubodf****
Funkcja ta zwraca punkt 3W, wyra
żony we współrzędnych LUW, położony względem
punktu pt, którego współrz
ędne są również określone w LUW, w odległościach liniowej
i k
ątowej, zgodnych z wartościami argumentów distance i angle. Wartość angle jest
mierzona w radianach od osi X w kierunku przeciwnym do kierunku ruchu wskazówek
zegara. Chocia
ż argument pt może być punktem 3W, to angle jest zawsze mierzony
w aktualnej płaszczy
źnie konstrukcyjnej. Przykładowo:
(polar '(1.0 1.0 3.5) 0.785398 1.414214)
zwraca
(2.0 2.0 3.5)
)qsjo
)qsjo
)qsjo
)qsjo2!
2!
2!
2!\fyqs!\gjmf.eftd^^****
Funkcja wypisuje expr na ekranie monitora i zwraca je jako wynik. Argument expr
mo
że być dowolnego typu; nie musi to być łańcuch alfanumeryczny. W przypadku
wyst
ępowania argumentu file-desc, jeżeli jest to deskryptor pliku otwartego do zapisu,
expr jest zapisywane do pliku dokładnie w takiej formie, w jakiej pojawiłoby si
ę na
ekranie monitora. Zapisywane jest tylko podane expr, bez dodanych znaków spacji lub
nowej linii. Przykładowo, je
żeli dokonane zostały przypisania:
(setq a 123)
(setq b '(a))
847
BvupMJTQ!—!qsbluzd{oz!lvst
to
(prin1 'a)
wypisuje
A
i zwraca
A
(prin1 a)
wypisuje
123
i zwraca
123
(prin1 b)
wypisuje
(A)
i zwraca
(A)
(prin1 "Cze
ść
!")
wypisuje
"Cze
ść
!"
i zwraca
"Cze
ść
!"
Ka
żde z przedstawionych powyżej przykładowych wyrażeń, z powodu braku
argumentu file-desc, powoduje wypisywanie danych na ekranie. Załó
żmy, że f jest
obowi
ązującym deskryptorem pliku, otwartego do zapisywania w nim informacji.
Wtedy:
(prin1 "Rysował: J.Kowalski" f)
wpisze "Rysował: J.Kowalski" do okre
ślonego deskryptorem f pliku i zwróci tekst
"Rysował: J.Kowalski".
Je
żeli argument expr zawiera znaki sterujące, to zostaną one przez prin1 poprzedzone
znakiem lewego uko
śnika \, tak jak przedstawiono to poniżej:
Tabela B.11. Znaki steruj
ące
Znak
Znaczenie
\\
oznacza znak \
\"
oznacza znak"
\e
oznacza znak escape
\n
oznacza znak newline
\r
oznacza znak return
\t
oznacza znak tab
\nnn
oznacza znak o kodzie ósemkowym nnn
Zatem:
(prin1 (chr 2))
wypisuje
"\002"
i zwraca
"\002"
(prin1 (chr 10))
wypisuje
"\n"
i zwraca
"\n"
Wyra
żenie z funkcją prin1 bez argumentów zwraca (i wypisuje) łańcuch pusty. Jeżeli
prin1 bez
żadnego argumentu zostanie użyta w zdefiniowanej funkcji użytkowej jako
ostatnie wyra
żenie, to po jej zakończeniu zostanie wypisana tylko pusta linia, co umożli-
wia „niezauwa
żalne” zakończenie realizacji funkcji. Przykładowo, jeżeli mamy definicję:
(defun C:PARAMETRY ()
(setvar "LUNITS" 4)
(setvar "BLIPMODE" 0)
(prin1)
)
to:
Epebufl!C
848
Polecenie: parametry spowoduje wykonanie zdefiniowanego polecenia, ustawiaj
ąc
żądane wartości zmiennych systemowych i wyświetli zgłoszenie gotowości Polecenie:
bez wypisywania jakichkolwiek innych dodatkowych komunikatów.
)qsjod!
)qsjod!
)qsjod!
)qsjod!\fyqs!\gjmf.eftd^^****
Jest to funkcja działaj
ąca tak jak prin1, z tą różnicą, że znaki sterujące w argumencie
expr s
ą wypisywane bez znaku \. Ogólnie mówiąc, funkcja prin1 jest przeznaczona do
zapisu wyra
żeń w sposób zgodny z formatem load, podczas gdy princ pisze wyrażenia
w sposób czytelny dla funkcji takich jak read-line.
)qsjou!
)qsjou!
)qsjou!
)qsjou!\fyqs!\gjmf.eftd^^****
Funkcja działa tak jak prin1 z t
ą różnicą, że argument expr poprzedza znacznik nowej
linii, a po expr wstawiana jest spacja.
)qsp
)qsp
)qsp
)qspho!
ho!
ho!
ho!fyqs!
****
Funkcja warto
ściuje kolejno każde expr i zwraca wartość ostatniego z nich. Funkcja
progn mo
że być stosowana w celu ewaluacji sekwencji wyrażeń tam, gdzie powinno
wyst
ąpić tylko jedno wyrażenie. Przykładowo:
(if (= a b)
(progn
(setq a (- a 10))
(setq b (- b 10))
);progn
);if
Funkcja if, w przypadku gdy wyra
żenie testowe przyjmuje wartość różną od nil,
wyznacza normalnie warto
ść tylko jednego wyrażenia jeśli. W powyższym przykładzie,
funkcja progn została u
żyta do spowodowania ewaluacji dwóch wyrażeń.
)qspnqu!
)qspnqu!
)qspnqu!
)qspnqu!nth****
Funkcja prompt wy
świetla na ekranie monitora msg w linii poleceń i zwraca nil.
Argument msg jest ła
ńcuchem alfanumerycznym (wartość typu string). W konfiguracji
z dwoma monitorami funkcja prompt wy
świetla msg na obu monitorach. W pewnych
warunkach jest to zalet
ą w porównaniu z princ.
Przykład
(prompt "Nowa warto
ść
: ")
wy
świetla na ekranie (ekranach) zgłoszenie Nowa wartość: i zwraca nil.
849
BvupMJTQ!—!qsbluzd{oz!lvst
))))rvju*
rvju*
rvju*
rvju*
Funkcja quit wymusza zako
ńczenie działania bieżącego programu użytkowego. Po
wywołaniu quit/exit, zwraca ona komunikat bł
ędu informujący o przerwaniu działania
wykonywanego programu i przywraca na ekranie standardowe zgłoszenie AutoCADa
Polecenie:.
Informacje uzupełniaj
ące: Patrz także opis funkcji exit.
)rvpuf!
)rvpuf!
)rvpuf!
)rvpuf!fyqs****
Zwraca expr bez wyliczania warto
ści. Poprawny jest również zapis:
'expr
Przykładowo:
(quote a)
zwraca
A
(quote aplikom)
zwraca
APLIKOM
(quote (a b))
zwraca
(A B)
'a
zwraca
A
'aplikom
zwraca
APLIKOM
'(a b)
zwraca
(A B)
Ostatnie trzy wyra
żenia nie mogą być wprowadzone bezpośrednio z klawiatury w odpo-
wiedzi na zgłoszenie AutoCADa. Nale
ży pamiętać, że odpowiedź rozpoznawana jako
wyra
żenie LISPu, musi rozpoczynać się lewym nawiasem "(" lub wykrzyknikiem "!".
)sfb
)sfb
)sfb
)sfbe!
e!
e!
e!tusjoh****
Funkcja ta zwraca pierwszy obiekt typu lista lub atom napotkany w argumencie string.
Argument string nie mo
że zawierać innych spacji oprócz tych, które są separatorami
elementów listy lub poszczególnych słów w obiekcie typu string. Funkcja read zwraca
swój argument po konwersji na odpowiedni typ danych, tak jak pokazuj
ą to poniższe
przykłady:
(read "cze
ść
")
zwraca atom
CZE
ŚĆ
(read "Cze
ść
Karol")
zwraca atom
CZE
ŚĆ
(read "\"Cze
ść
Marta!\"")
zwraca string
"Cze
ść
Marta!"
(read "(a b c)")
zwraca list
ę
(A B C)
(read "(a b c) (d)")
zwraca list
ę
(A B C)
(read "1.2300")
zwraca real
1.23
(read "87")
zwraca integer
87
(read "87 3.2")
zwraca integer
87
Epebufl!C
84:
)sfbe.dibs!
)sfbe.dibs!
)sfbe.dibs!
)sfbe.dibs!\gjmf.eftd^****
Funkcja ta odczytuje jeden znak z wej
ściowego bufora klawiatury lub z otwartego pliku
wskazywanego przez file-desc. Funkcja zwraca kod ASCII odczytanego znaku (liczba
typu integer). List
ę kodów ASCII zawiera dodatek C.
Je
żeli w wyrażeniu nie ma argumentu file-desc i w wejściowym buforze klawiatury nie
ma
żadnego znaku, to read-char czeka na wprowadzenie czegokolwiek z klawiatury i
wci
śnięcie klawisza Enter. Przykładowo, jeżeli bufor klawiatury jest pusty, to
(read-char)
oczekuje na wprowadzenie czegokolwiek. Je
żeli zostanie teraz wpisane słowo MARTA
i wprowadzone wci
śnięciem Enter, to read-char zwróci 77 (kod ASCII litery M).
Nast
ępne pięć wywołań read-char da odpowiednio 65, 82, 84, 65 i 10 (kod znaku
nowej linii). Po kolejnym wywołaniu funkcji read-char nast
ąpi ponowne oczekiwanie
na wprowadzenie znaków.
AutoCAD i AutopLISP mog
ą pracować pod kontrolą różnych systemów operacyjnych,
w których z kolei mog
ą być używane różne konwencje sygnalizowania końca linii
w pliku tekstowym ASCII. Przykładowo, w systemie operacyjnym UNIX wykorzysty-
wany jest pojedynczy znak nowej linii (LF, ang. linefeed), którego kodem ASCII jest
liczba 10. W systemach operacyjnych DOS do tego celu stosuje si
ę parę znaków, tzn.
znak powrotu karetki (CR, ang. carriage-return) w poł
ączeniu ze znakiem nowej linii
LF, których kodami ASCII s
ą liczby 13 i 10. Aby ułatwić przenoszenie programów
AutoLISPu pomi
ędzy wszystkimi systemami operacyjnymi, funkcja read-char akcep-
tuje wszystkie te konwencje, a po napotkaniu znaku nowej linii zawsze zwraca 10 (kod
ASCII dla znaku LF).
)sfbe.mjof!
)sfbe.mjof!
)sfbe.mjof!
)sfbe.mjof!\gjmf.eftd^****
Funkcja ta odczytuje ła
ńcuch alfanumeryczny (wartość typu string), z klawiatury lub
z otwartego pliku wskazywanego przez file-desc. Je
żeli read-line napotka znacznik
ko
ńca pliku, to funkcja zwraca nil; w każdym innym wypadku zwracany jest odczytany
ła
ńcuch, Przykładowo, jeżeli f jest stałe i wskazuje jakiś otwarty plik, to
(read-line f)
zwraca kolejn
ą linię danych wejściowych z tego pliku lub nil, w przypadku dojścia do
znacznika ko
ńca pliku (EOF, ang. end-of-file).
)sfesb
)sfesb
)sfesb
)sfesbx!
x!
x!
x!\fobnf!\npef^^****
Efekt działania funkcji zale
ży od liczby podanych argumentów, Jeżeli funkcja wywo-
łana jest bez argumentów:
(redraw)
851
BvupMJTQ!—!qsbluzd{oz!lvst
to powoduje przerysowanie rysunku w aktualnej rzutni, tak jak w przypadku wywołania
polecenia AutoCADa PRZERYS. Je
żeli w wyrażeniu podano jako argument ename:
(redraw ename)
to przerysowany zostanie wybrany element rysunku AutoCADa. Jest to u
żyteczne, jako
metoda identyfikacji elementów na ekranie po u
życiu grclear, wymazującego
zawarto
ść ekranu.
Pełn
ą kontrolę nad przerysowywaniem elementów uzyskuje się przez wywołanie
funkcji redraw z dwoma argumentami:
(redraw ename mode)
gdzie ename odnosi si
ę do przerysowywanego elementu, a mode jest liczbą typu
integer, która mo
że mieć jedną z następujących wartości:
Tabela B.12 Tryby działania funkcji redraw
Tryby funkcji redraw
Działanie
1
Przerysowywanie elementu na ekranie
2
Wymazywanie elementu z ekranu
3
Wyró
żnianie elementu na ekranie (o ile umożliwia to
wy
świetlacz)
4
Usuwanie wyró
żnienia elementu (o ile umożliwia to wyświetlacz)
Je
żeli ename odnosi się do elementu złożonego (polilinii lub bloku z atrybutami),
a argument mode jest liczb
ą dodatnią, to zostanie przetworzony element główny
i wszystkie jego elementy składowe. Je
żeli mode ma wartość ujemną, to przerysowany
zostanie tylko element główny.
Funkcja redraw zawsze zwraca nil.
)sfhbqq!
)sfhbqq!
)sfhbqq!
)sfhbqq!bqqmjdbujpo****
Funkcja ta rejestruje nazw
ę aplikacji (programu użytkowego) w aktualnym rysunku
AutoCADa. Nazwa programu u
żytkowego jest podstawowym parametrem wykorzy-
stywanym do grupowania, przechowywania, uzyskiwania i modyfikowania zdefinio-
wanych przez taki program dodatkowych danych elementów. Aby zorganizowa
ć doda-
tkowe dane elementów, aplikacja mo
żne zarejestrować tak wiele nazw aplikacji, ile jest
wymagane, lub wcale.
Je
żeli aplikacja o podanej nazwie została już wcześniej zarejestrowana, to funkcja
regapp zwraca nil; w przeciwnym wypadku zwracana jest nazwa aplikacji.
Po zako
ńczonej sukcesem rejestracji, nazwa aplikacji zostaje umieszczona w tablicy
symboli APPID. Tablica ta przechowuje list
ę aplikacji, które wykorzystują dodatkowe
dane elementów w danym rysunku. Pozwala to programowi u
żytkowemu odróżnić
Epebufl!C
852
własne dodatkowe dane elementów od danych przeznaczonych dla innych aplikacji.
Aplikacjami, które dodaj
ą lub modyfikują dodatkowe dane elementów mogą być
zarówno programy u
żytkowe napisane w języku AutoLISP, jak i programy użytkowe
systemu ADS (AutoCAD Development System).
Argument application jest ła
ńcuchem alfanumerycznym zawierającym do 31 znaków,
zgodnie z konwencjami przyj
ętymi dla nazw symboli (jak nazwy tablic). Nazwa
aplikacji mo
że zawierać litery, cyfry oraz znaki specjalne $ (dolar), — (myślnik) i _
(podkre
ślenie). Nie może zawierać spacji. Litery w nazwie są poddawane konwersji na
du
że.
Przykład
(regapp "APLIKOM_18011976")
(regapp "ACAD_PN-v1.11-10101949")
Zalecamy
branie
takich
nazw
aplikacji,
które
gwarantuj
ą
swoj
ą
niepowtarzalno
ść
. Jedn
ą
z dróg do tego celu jest przyj
ę
cie zasady,
ż
e cz
ęść
nazwy zawiera nazw
ę
firmy lub produktu, a druga cz
ęść
unikalny numer (jak
numer telefonu lub aktualna data i godzina). Numer wersji produktu mo
ż
e by
ć
wł
ą
czony w nazw
ę
aplikacji albo przechowywany przez program u
ż
ytkowy
w oddzielnym polu numerycznym typu integer lub real, np. (1040 1.11).
)sf
)sf
)sf
)sfn!
n!
n!
n!ovn2!ovn3!
****
Funkcja ta zwraca reszt
ę z dzielenia argumentu num1 przez argument num2. Mogą być
nimi liczby typu real i integer; funkcja stosuje standardowe zasady konwersji typów.
Przykładowo:
(rem 42 12)
zwraca
6
(rem 12.0 16)
zwraca
12.0
(rem 60 3)
zwraca
0
)sfqfbu!
)sfqfbu!
)sfqfbu!
)sfqfbu!ovncfs!fyqs!
****
W funkcji tej argument number jest dowoln
ą dodatnią liczbą typu integer. Funkcja do-
konuje warto
ściowania każdego argumentu expr tyle razy, ile określa number i zwraca
warto
ść ostatniego z nich. Przykładowo, po dokonaniu podstawień:
(setq a 10)
(setq b 100)
wyra
żenie
(repeat 4
(setq a (+ a 10))
(setq b (+ b 100))
)
ustala warto
ść a na 50, b na 500, i zwraca 500.
853
BvupMJTQ!—!qsbluzd{oz!lvst
)sfwfstf!
)sfwfstf!
)sfwfstf!
)sfwfstf!mjtu****
Funkcja zwraca list
ę, która jest tworzona przez odwrócenie kolejności elementów
argumentu list. Przykładowo:
(reverse '((a) b c))
zwraca
(C B (A))
)su
)su
)su
)supt!
pt!
pt!
pt!ovncfs!\npef!\qsfdjtjpo^^****
Funkcja zwraca ła
ńcuch alfanumeryczny, który reprezentuje argument number (wartość
typu real) w sposób zale
żny od argumentów mode, precision, wartości zmiennej
systemowej UNITMODE oraz zmiennej wymiarowania DIMZIN programu AutoCAD;
mode i precision s
ą typu integer i określają system i dokładność zapisu jednostek
liniowych. Dopuszczalne warto
ści argumentu mode przedstawiono w tabeli.
Tabela B.13. Warto
ści dla jednostek liniowych
Tryby funkcji rtos
Sposób zapisu
1
Zapis wykładniczy
2
Ułamki dziesi
ętne
3
Stopy, cale i dziesi
ętne ułamki cali
4
Stopy, cale i ułamki zwykłe cali
5
Dowolne ułamki zwykłe
Argumenty mode i precision odpowiadaj
ą znaczeniem zmiennym systemowym
LUNITS i LUPREC w programie AutoCAD. Je
żeli zostaną pominięte, to funkcja rtos
przyjmuje warto
ści określone przez te zmienne.
Zmienna systemowa UNITMODE wpływa na posta
ć zwracanego łańcucha tekstowego
w przypadku, gdy wybrany został jeden z formatów wymiarów calowych lub format z do-
wolnymi ułamkami zwykłymi (warto
ść argumentu mode równa odpowiednio 3, 4 lub 5).
)tfu!
)tfu!
)tfu!
)tfu!tzn!fyqs****
Funkcja set przypisuje argumentowi sym, b
ędącemu wynikiem użycia funkcji quote dla
nazwy symbolu, warto
ść argumentu expr, a następnie zwraca tę wartość. Przykładowo:
(set 'a 5.0)
zwraca 5.0 i ustala warto
ść
symbolu A
(set (quote b) 'a) zwraca A i ustala warto
ść
symbolu B
Je
żeli funkcja set jest używana z nazwą symbolu bez apostrofu lub funkcji quote, to
mo
że pośrednio przypisać nową wartość innemu symbolowi. Dla wyżej przedstawio-
nych przykładów:
(set b 640)
zwraca
640
Epebufl!C
854
i powoduje przypisanie warto
ści 640 symbolowi a (gdyż jest on wartością symbolu b).
Informacje uzupełniaj
ące: Patrz także opis funkcji setq.
)tfur!
)tfur!
)tfur!
)tfur!tzn2!fyqs2!\tzn3!fyqs3^!
****
Funkcja przypisuje warto
ść argumentu expr1 symbolowi sym1, wartość expr2
symbolowi sym2, itd. Jest to podstawowa dla AutoLISPu funkcja słu
żąca do
przypisania warto
ści. Przy jednokrotnym wywołaniu funkcja setq może dokonać wielu
przypisa
ń, lecz zwraca tylko wartość ostatniego argumentu expr. Przykładowo,
wyra
żenie:
(setq a 5.0)
zwraca
5.0
i nadaje symbolowi a warto
ść 5.0. Każde mające potem miejsce wartościowanie symbo-
lu a daje w wyniku 5.0 (liczba typu real). Inne przykłady:
(setq b 123 c 4.7)
zwraca
4.7
(setq s "Marta")
zwraca
"Marta"
(setq x '(a b))
zwraca
(A B)
Przy bezpo
średnim przypisywaniu symbolowi łańcucha znaków tekstowych (wartość
typu string) za pomoc
ą setq lub set, istnieje ograniczenie jego długości do 132 znaków.
Mo
żliwe jest jednak tworzenie dłuższych łańcuchów przez wykorzystanie funkcji
strcat do zł
ączenia kilku łańcuchów tekstowych, a następnie przypisanie symbolowi tak
uzyskanego ła
ńcucha.
Funkcja setq jest tak
ą samą funkcją jak set, z tą jedynie różnicą, że nazwa symbolu nie
jest w niej cytowana dosłownie (tzn. nie poprzedza jej apostrof ani quote). Mówi
ąc
inaczej, set wylicza swój pierwszy argument, a setq tego nie robi. Poni
ższy przykład
pokazuje podobie
ństwo obu funkcji.
(setq a 5.0)
jest równowa
żne
(set (quote a) 5.0)
Funkcje set i setq tworz
ą lub modyfikują symbole globalne, chyba że zostały użyte w
obr
ębie wyrażenia z funkcją defun, w celu przypisania nowej wartości argumentowi
funkcji lub symbolowi zadeklarowanemu jako lokalny dla tego wyra
żenia. Przykładowo:
(setq glo1 123)
Tworzy symbol globalny
(defun demo (arg1 arg2 / lok1 lok2)
(setq arg1 234)
Przypisanie lokalne
(setq lok1 345)
Przypisanie lokalne
(setq glo1 456)
Przypisanie globalne
(setq glo2 567)
Tworzy nowy symbol globalny
Symbole globalne s
ą dostępne i mogą być modyfikowane za pomocą dowolnej funkcji oraz
mog
ą być używane w dowolnym wyrażeniu. Lokalne symbole i argumenty funkcji mają
znaczenie tylko w trakcie wyliczania funkcji, która je definiuje (oraz funkcji wywoływanych
855
BvupMJTQ!—!qsbluzd{oz!lvst
przez t
ę funkcję). Argumenty funkcji mogą być używane jako symbole lokalne; funkcja
mo
że zmienić ich wartości, ale zmiany te są anulowane po wyjściu z funkcji.
Funkcje set i setq mog
ą
przypisa
ć
nowe warto
ś
ci wewn
ę
trznym symbolom oraz
nazwom funkcji AutoLISPu, przez co strac
ą
znaczenie ich pierwotne przypisania
lub te
ż
stan
ą
si
ę
one niedost
ę
pne. Niektórym u
ż
ytkownikom zdarzyło si
ę
ju
ż
pechowo przypisa
ć
:
(setq angle (...))
Fatalnie!
(setq length (...))
Fatalnie!
(setq max (...))
Fatalnie!
(setq t (...))
Fatalnie!
(setq pi 3.0)
Fatalnie!!!
W celu unikni
ęcia wszelkiego rodzaju trudnych do wyjaśnienia błędów, należy
zachowa
ć dużą ostrożność w trakcie dobierania nazw dla definiowanych przez siebie
symboli. Nigdy nie nale
ży używać nazwy wewnętrznego symbolu lub funkcji wewnę-
trznej jako nazwy własnego symbolu! W przypadku braku pewno
ści co do unikalności
nazwy symbolu, w odpowiedzi na zgłoszenie Polecenie: nale
ży wprowadzić
nast
ępujące wyrażenie (zakładając, że sprawdzamy unikalność symbolu mysym):
Polecenie:
(atoms-family 0 '("mysym"))
Wyra
żenie to powinno zwrócić
(nil)
je
śli wskazany symbol nie jest aktualnie zdefiniowany. Więcej informacji na temat
wykorzystania funkcji atoms-family podano przy jej opisie.
)tfuwbs!
)tfuwbs!
)tfuwbs!
)tfuwbs!wbsobnf!wbmvf****
Funkcja ta nadaje zmiennej systemowej AutoCADa varname dan
ą wartość value i
zwraca t
ę wartość. Nazwa zmiennej systemowej musi być ujęta w cudzysłów.
Przykładowo:
(setvar "FILLETRAD" 0.50)
zwraca
0.5
i nadaje promieniowi zaokr
ąglenia krawędzi wartość 0.5 jednostki. Jeżeli zmienne
systemowe przyjmuj
ą wartości typu integer, to argument value musi być z zakresu od
–32768 do + 32767.
Niektóre polecenia AutoCADa pobieraj
ą wartości zmiennych systemowych przed
wy
świetleniem jakiegokolwiek zgłoszenia gotowości. Z tego powodu, jeżeli funkcja
setvar została wykorzystana do nadania nowej warto
ści zmiennej systemowej w trakcie
wykonywania jakiego
ś polecenia, to nowa wartość zmiennej może nie dać efektu, aż do
wprowadzenia nast
ępnego polecenia AutoCADa.
Epebufl!C
856
Przy nadawaniu za pomoc
ą
funkcji setvar nowej warto
ś
ci zmiennej systemowej
ANGBASE, warto
ść
argumentu jest interpretowana jako podana w radianach.
Jest to ró
ż
nica w stosunku do polecenia AutoCADa ZMSYS, które interpretuje ten
argument, jako podany w stopniach. Podobnie, przy nadawaniu za pomoc
ą
funkcji setvar nowej warto
ś
ci zmiennej systemowej SNAPANG, warto
ść
argumentu jest interpretowana jako podana w radianach w odniesieniu do
standardowego dla AutoCADa kierunku zerowego, którym jest kierunek na
wschód (lub inaczej mówi
ą
c, kierunek wskazywany godzin
ą
3). Jest to równie
ż
odmienne w stosunku do polecenia ZMSYS, które interpretuje ten argument jako
podany w stopniach wzgl
ę
dem k
ą
ta 0 ustalonego poprzez zmienn
ą
ANGBASE.
Polecenie COFAJ nie cofa skutków zmian zmiennej systemowej CVPORT,
wykonanych przez funkcj
ę
setvar.
Aktualn
ą listę zmiennych systemowych AutoCADa zawiera dodatek F.
Informacje uzupełniaj
ące: Patrz także opis funkcji getvar.
)t
)t
)t
)tjo!
jo!
jo!
jo!bohmf****
Funkcja ta zwraca warto
ść sinusa argumentu angle (miara kątowa wyrażona w radia-
nach) w postaci liczby typu real. Przykładowo:
(sin 1.0)
zwraca
0.841471
(sin 0.0)
zwraca
0.0
)trsu!
)trsu!
)trsu!
)trsu!ovncfs****
Funkcja ta zwraca warto
ść pierwiastka kwadratowego argumentu number w postaci
liczby typu real. Przykładowo:
(sqrt 4)
zwraca
2.0
(sqrt 2.0)
zwraca
1.41421
)ttbee!
)ttbee!
)ttbee!
)ttbee!\fobnf!\tt^^****
Je
żeli funkcja ssadd jest wywoływana bez argumentów, to tworzony jest nowy zbiór
wskaza
ń, który nie zawiera żadnego elementu. Jeżeli funkcja jest wywoływana z argu-
mentem ename, to ssadd tworzy nowy zbiór zawieraj
ący tę nazwę elementu. Jeżeli
natomiast podano zarówno argument ename, jak i nazw
ę zbioru ss, to ssadd dodaje do
niego wymieniony z nazwy element rysunku. Funkcja ssadd zawsze zwraca wi
ęc albo
nowoutworzony zbiór wskaza
ń albo zbiór zmodyfikowany. Jeżeli ename zostaje dodana
do istniej
ącego zbioru, to wywołanie funkcji powoduje, że do zbioru tego dodawany
jest nowy element i zbiór ten jest zwracany jako nowy ss. Tak wi
ęc, jeżeli zbiór ten jest
przypisany innym zmiennym, to zostan
ą one również zmodyfikowane. Jeżeli nazwany
857
BvupMJTQ!—!qsbluzd{oz!lvst
element wyst
ępuje już we wskazanym zbiorze, to operacja ssadd jest ignorowana; nie
pojawia si
ę żaden komunikat o błędzie. Przykładowo:
(setq e1 (entnext))
Przypisuje e1 nazw
ę pierwszego elementu rysunku
(setq z (ssadd))
Tworzy pusty zbiór wskaza
ń z
(ssadd e1 z)
Zwraca zbiór z z dodan
ą nazwą elementu e1
(setq e2 (entnext e1)
Przypisuje e2 nazw
ę następnego elementu po e1
(ssadd e2 z)
Zwraca zbiór z z dodan
ą nazwą elementu e2
)tte
)tte
)tte
)ttefm!
fm!
fm!
fm!fobnf!tt****
Funkcja ssdel powoduje wymazanie nazwy elementu ename ze zbioru wybranych
elementów rysunku ss i zwraca nazw
ę tego zbioru. Należy zwrócić uwagę na to, że
element jest rzeczywi
ście usuwany ze zbioru, a w rezultacie zwracany jest nowy zbiór,
który nie zawiera ju
ż tego elementu. Jeżeli w zbiorze nie ma tego elementu, to funkcja
zwraca nil.
Przykładowo, zakładaj
ąc że nazwa elementu e1 należy do zbioru wskazań z, a nazwa
elementu e2 do niego nie nale
ży, to:
(ssdel e1 z)
zwraca zbiór wskaza
ń z bez elementu e1
(ssdel e2 z)
zwraca nil; z nie ulega zmianie
)tthfu!
)tthfu!
)tthfu!
)tthfu!\npef^!\qu2!\qu3^^!\qu.mjtu^!\gjmufs.mjtu^****
Funkcja ssget zwraca utworzony zbiór wskaza
ń (zbiór wybranych elementów).
Opcjonalny argument mode jest warto
ścią typu string, która określa sposób dokony-
wania wyboru elementów. Mo
że on przyjmować wartości związane z odpowiednimi
trybami wybierania elementów rysunkowych: "O" (Okono), "OW" (OWbok), "Z"
(prZeci
ęcie), "ZW" (ZWbok), "S" (oStatni), "P" (Poprzedni), "U" (Uchwycony) i "K"
(Kraw
ędź). Możliwa jest jeszcze wartość "x" argumentu mode, powodująca wybranie
całej zawarto
ści bazy danych rysunku. Argumenty pt1 i pt2 określają punkty
interpretowane odpowiednio do zadeklarowanego trybu tworzenia zbioru wskaza
ń.
Je
żeli w wyrażeniu podany jest punkt, a pominięto argument mode, to jest to
równowa
żne wybraniu jednego elementu przez wskazanie jednego punktu (tzw. metodą
punktowania). Bie
żące tryby lokalizowania punktów względem obiektów są ignoro-
wane przez t
ę funkcję, chyba że zostaną specjalnie uruchomione podczas aktywności tej
funkcji. Ponadto do tworzenia zbiorów wskaza
ń można wykorzystywać połączenie
dowolnego trybu z argumentem filter-list, uzyskuj
ąc precyzyjniejszą kontrolę procesu
tworzenia zbioru wskaza
ń.
Je
żeli pominięto wszystkie argumenty, ssget powoduje wyświetlenie zgłoszenia Wskaż
obiekty:, umo
żliwiając użytkownikowi skorzystanie z normalnego dla AutoCADa
interakcyjnego tworzenia zbioru wskaza
ń.
Zbiory wskaza
ń mogą zawierać elementy wybrane zarówno z obszaru papieru, jak i z ob-
szaru modelu. Jednak w sytuacji, gdy zbiór wskaza
ń jest wykorzystywany podczas jakiejś
Epebufl!C
858
operacji, to elementy z obszaru aktualnie nieaktywnego nie s
ą brane pod uwagę (zostają
odfiltrowywane). Dotyczy to równie
ż wszystkich poleceń AutoCADa.
Zwracane przez funkcj
ę ssget zbiory wskazań zawierają tylko elementy główne (nie
zawieraj
ą atrybutów Bloków ani Wierzchołków Polilinii). Oto szereg przykładów
wyra
żeń z funkcją ssget:
(ssget)
Wy
świetla zgłoszenie Wskaż obiekty:
(ssget "P")
Wybiera obiekty poprzednio wybrane
(ssget "S")
Wybiera element ostatnio dodany do bazy
danych
(ssget "I")
Tworzy zbiór wskaza
ń z elementów z Implied
zbioru
wskaza
ń (wybranych podczas stanu
aktywno
ści PICKFIRST)
(ssget '(2 2))
Wybiera element przechodz
ący przez punkt 2,2
(ssget "O" '(0 0) '(5 5))
Wybiera element w oknie o naro
żnikach 0,0 i 5,5
(ssget "Z" '(0 0) '(1 1))
Wybiera elementy przecinaj
ące ramkę o naro-
żnikach 0,0 i 1,1
(ssget "X" filtr)
Wybiera elementy zgodne z filtrem
(ssget "X")
Tworzy zbiór wskaza
ń zawierający wszystkie
elementy z bazy danych
(ssget "X" lista-filtr)
Przeszukuje baz
ę danych i tworzy zbiór wskazań
z elementami zgodnymi z argumentem lista-filtr
(ssget lista-filtr)
Żąda od użytkownika wskazywania elementów
i bierze do zbioru wskaza
ń tylko te, które są
zgodne z argumentem lista-filtr
(ssget "P" lista-filtr)
Tworzy zbiór wskaza
ń z ostatnio wybranych
elementów, zgodnych z argumentem lista-filtr
Nast
ępne przykłady użycia funkcji ssget wymagają podania w argumentach listy punktów.
(setq lista-pkt '((1 1)(3 1)(5 2)(2 4)))
(ssget "OW" lista-pkt)
Tworzy zbiór wskaza
ń składający się ze wszy-
stkich elementów wenw
ątrz wielokąta o wierz-
chołkach okre
ślonych przez lista-pkt
(ssget "ZW" lista-pkt)
Tworzy zbiór wskaza
ń składający się ze wszy-
stkich elementów przecinaj
ących boki i zawar-
tych
całkowicie
wenw
ątrz
wielok
ąta
o
wierzchołkach okre
ślonych przez lista-pkt
(ssget "K" lista-pkt)
Tworzy zbiór wskaza
ń składający się ze wszy-
stkich elementów przecinaj
ących kierownicę
zdefiniowan
ą przez lista-pkt
(ssget "OW" lista-pkt
lista-filtr)
Tworzy zbiór wskaza
ń składający się ze wszy-
stkich elementów wenw
ątrz wielokąta o wierz-
chołkach okre
ślonych przez lista-pkt i zgodnych
z list
ą filtrującą lista-filtr
859
BvupMJTQ!—!qsbluzd{oz!lvst
Wybrane elementy s
ą wyróżniane na ekranie tylko w wypadku wywołania ssget bez
argumentów. Nie jest przechowywana jakakolwiek informacja o sposobie dokonania
wyboru (patrz jednak opis funkcji entsel, która stanowi tu rozwi
ązanie alternatywne). Zbiory
wskaza
ń zajmują obszary pamięci przeznaczone dla pliku tymczasowego AutoCADa,
w zwi
ązku z czym liczba jednocześnie otwartych zbiorów jest dla AutoLISPu ograniczona
do 128. Po osi
ągnięciu granicznej liczby utworzonych zbiorów, AutoCAD nie tworzy już
nast
ępnych, a każda próba wywołania funkcji ssget powoduje zwrócenie nil.
Zmienna z przypisanym zbiorem wskaza
ń może zostać wprowadzona jako odpowiedź
na ka
żde zgłoszenie gotowości AutoCADa Wskaż obiekty:, dla którego dopuszczalne
jest wybieranie elementów z u
życiem opcji oStatni.
Podanie w odpowiedzi symbolu, do którego przypisany jest zbiór wskaza
ń, powoduje
wybranie wszystkich elementów ze zbioru wskaza
ń ukrytego pod tym symbolem.
Filtry zbiorów wskaza
ń
Filtry zbiorów wskaza
ń mogą być używane w połączeniu z dowolnym z trybów
wybierania elementów. Argument filter-list jest list
ą asocjacji, podobną co do typu do
listy zwracanej przez funkcj
ę entget; filter-list określa cechy elementów, które mają być
badane oraz warto
ści, które cechy te powinny posiadać.
Wykorzystuj
ąc ten mechanizm można uzyskać zbiór wskazań zawierający wszystkie
elementy wybranego typu, poło
żone w wybranej warstwie rysunkowej, albo posiadające
okre
ślony kolor. Poniższy przykład zwraca zbiór wskazań składający się z niebieskich
Linii, b
ędących częścią zbioru wskazań Implied (elementów wybranych podczas
działania PICKFIRST):
(ssget "_I" '((0. "LINE") (62 . 5)))
Dzi
ęki liście filtrującej określonej dla funkcji ssget, można wybrać wszystkie elementy
rysunku, posiadaj
ące dane dodatkowe związane z wybraną aplikacją. Osiąga się to
poprzez u
życie kodu grupy –3, tak jak w wyrażeniu
(ssget "P" '((0 . "CIRCLE") (-3 ("NAZWA-APL"))))
Wyra
żenie takie spowodowałoby wybranie wszystkich Okręgów (elementów Circle),
zawieraj
ących dane dodatkowe dla programu użytkowego (aplikacji) "NAZWA-APL".
Testowanie relacji
O ile nie podano inaczej, w odniesieniu do ka
żdej pozycji argumentu filter-list
testowana jest relacja równo
ści. Dla grup liczbowych (liczby całkowite, rzeczywiste,
punkty i wektory) mo
żna określić inne relacje. Osiąga się to przez podanie specjalnego
kodu grupy –4, w którym okre
śla się operator relacji. Wartością grupy –4 jest łańcuch
alfanumeryczny wskazuj
ący operator, który ma być zastosowany w odniesieniu do
nast
ępnej grupy na liście filtrującej.
Na przykład:
(ssget "X" '((0 . CIRCLE") (-4 . ">=") (40 . 2.0)))
Epebufl!C
85:
powoduje wybranie wszystkich Okr
ęgów (elementów Circle), których promień (kod
grupy 40) jest wi
ększy lub równy 2.0. Poniższa tabela ukazuje wszystkie dopuszczalne
operatory relacji:
Tabela B.14. Operatory relacji dla listy filtruj
ącej funkcji ssget
Operator
Znaczenie
"*"
Relacja dowolna (zawsze prawdziwe)
"="
Równe
"!="
Nierówne
"/="
Nierówne
"<>"
Nierówne
"<"
Mniejsze
"<="
Mniejsze lub równe
">"
Wi
ększe
">="
Wi
ększe lub równe
"&"
Bitowe AND (tylko grupy typu integer)
"&="
Równe pod wzgl
ędem bitowej maski (tylko grupy typu integer)
U
życie operatorów relacji zależy od grupy, która ma być testowana:
•
Wszystkie operatory relacji, za wyj
ątkiem operatorów bitowych ("&" i "&=") są
odpowiednie dla grup o warto
ściach całkowitych i rzeczywistych.
•
Operatory bitowe "&" i "&=" s
ą ważne wyłącznie dla grup o wartościach
całkowitych. Bitowe "AND" ("&") jest prawdziwe, je
śli ((integer_group & filter)
/= 0), a wi
ęc wtedy, gdy każdy bit ustawiony w masce jest także ustawiony
w grupie całkowitej. Równo
ść pod względem bitowej maski ("&=") jest
prawdziwa, je
śli ((integer_group & filter) = filter), a więc wtedy, gdy wszystkie
bity ustawione w masce s
ą także ustawione w grupie całkowitej (pozostałe bity
w integer_group mog
ą być ustawione, ale nie podlegają sprawdzaniu).
•
Dla grup punktowych, testowanie X, Y i Z mo
że być połączone w testowanie
jednego ła
ńcucha, składającego się z operatorów oddzielonych przecinkami (na
przykład ">,>,*"). Je
śli któryś z operatorów zostanie pominięty w łańcuhu (na
przykład "=,<>" pomija testowanie Z), wówczas przyjmowany jest operator
"relacja dowolna" ("*").
•
Wektory kierunkowe (typ grupy 210) mog
ą być porównywane wyłącznie za
pomoc
ą operatorów "*", "=" i "!=" (lub jednego z odpowiednich łańcuchów
relacji "nierówny").
•
Nie jest dopuszczalne stosowanie operatorów relacji do porównywania grup
ła
ńcuchowych. W zastępstwie można wykorzystywać znaki uniwersalne.
861
BvupMJTQ!—!qsbluzd{oz!lvst
Logiczne grupowanie testów filtruj
ących
Opisane w poprzedniej cz
ęści operatory są operatorami binarnymi. Grupy mogą być
testowane tak
że przez tworzenie zagnieżdżonych wyrażeń booleowskich, wykorzystu-
j
ących operatory grupujące ukazane w poniższej tabeli. Podobnie jak operatory relacji,
operatory grupuj
ące są określane w grupie –4. Są one parowane, i aby wywołanie funkcji
ssget nie zako
ńczyło się błędem, muszą być właściwie wyważone. Ilość operandów, jaką
mog
ą obejmować te operatory, zależy od operacji. Ukazuje to następująca tabela.
Tabela B.15. Operatory grupuj
ące dla listy filtrującej zbiory wskazań
Operator pocz
ątkowy
Obejmuje
Operator ko
ńcowy
"<AND"
Jeden lub wi
ęcej operandów
"AND>"
"<OR"
Jeden lub wi
ęcej operandów
"OR>"
"<XOR"
Dwa operandy
"XOR>"
"<NOT"
Jeden operand
"NOT>"
Dla operatorów grupuj
ących, operandem może być grupa pola elementu, operator
relacji, po którym wyst
ępuje grupa pola elementu lub wyrażenie zagnieżdżone zbudo-
wane z tych operatorów.
Poni
żej podany jest przykład wykorzystania w liście filtrującej operatorów
grupuj
ących:
(ssget "X"
'(
(-4 . "<OR")
(-4 . "<AND")
(0 . "CIRCLE")
(40 . 1.0)
(-4 . "AND>")
(-4 . "<AND")
(0 . "LINE")
(8 . "ABC")
(-4 . "AND>")
(-4 . "OR>")
)
);ssget
Przykład ten spowodowałby wybranie wszystkich Okr
ęgów o promieniu 1.0 oraz wszy-
stkich Linii w warstwie rysunkowej "ABC".
Operatory grupuj
ące nie są czułe na pisownię dużymi lub małymi literami. Można
u
żywać ich pisanych małymi literami odpowiedników: "<and", "and>", "<or", "or>",
"<xor". "xor>", "<not" i "not>".
Epebufl!C
862
)ttmfohui!
)ttmfohui!
)ttmfohui!
)ttmfohui!tt****
Funkcja zwraca liczb
ę typu integer, która określa liczbę elementów w zbiorze
wybranych elementów ss. Je
żeli liczba elementów należących do tego zbioru jest
wi
ększa niż 32767, to funkcja zwraca liczbę typu real. Zbiory wskazań nigdy nie
zawieraj
ą duplikatów elementów, nawet jeżeli były one wybierane wielokrotnie do
umieszczenia w tym samym zbiorze. Przykładowo:
(setq z (ssget "S"))
umieszcza ostatni obiekt w zbiorze z
(sslength z)
zwraca 1
)tt
)tt
)tt
)ttnfnc!
nfnc!
nfnc!
nfnc!fobnf!tt****
Funkcja ssmemb sprawdza, czy argument ename nale
ży do zbioru wybranych
elementów ss. Je
żeli tak jest, to ssmemb zwraca nazwę elementu (ename). W prze-
ciwnym wypadku funkcja zwraca nil. Załó
żmy przykładowo, że nazwa elementu e1
nale
ży do zbioru wskazań z, a nazwa elementu e2 do niego nie należy. Wówczas:
(ssmemb e1 z)
Zwraca nazw
ę elementu e1
(ssmemb e2 z)
Zwraca nil
)ttobnf!
)ttobnf!
)ttobnf!
)ttobnf!tt!joefy****
Funkcja zwraca nazw
ę elementu należącego do zbioru wybranych elementów ss i mają-
cego w nim numer porz
ądkowy index. Jeżeli index jest mniejszy od zera lub większy od
najwy
ższego numeru porządkowego dla argumentu ss, to funkcja zwraca nil. Pierwszy
element zbioru ma indeks 0. Nazwy elementów w zbiorach wskaza
ń utworzonych przez
funkcj
ę ssget zawsze będą nazwami elementów głównych. Wchodzące w ich skład
elementy podrz
ędne (atrybuty Bloków i Wierzchołki Polilinii) nie są zwracane.
Mo
żliwość dostępu do nich daje opisywana dalej funkcja entnext.
Przykładowo:
(setq z (ssget))
Tworzy zbiór wskaza
ń o nazwie z
(setq e1 (ssname z 0))
Przypisuje e1 nazw
ę 1-go elementu z
(setq e4 (ssname z 3))
Przypisuje e4 nazw
ę 4-go elementu z
Aby uzyska
ć dostęp do elementów zbioru o indeksie większym od 32767, należy
argument index wprowadzi
ć jako liczbę typu real. Przykładowo:
(setq ex (ssname z2 50843.0))
Przypisuje ex nazw
ę 50844-go elementu z2
)tus
)tus
)tus
)tusdbtf!
dbtf!
dbtf!
dbtf!tusjoh!\xijdi^****
Funkcja strcase bierze ła
ńcuch znaków alfanumerycznych string i zwraca go po
dokonaniu konwersji wszystkich liter alfabetu na du
że lub małe (majuskuła lub minu-
863
BvupMJTQ!—!qsbluzd{oz!lvst
skuła), zale
żnie od wartości drugiego argumentu which. Jeżeli argument which został
w wyra
żeniu pominięty lub wynik jego ewaluacji daje wartość nil, to wszystkie litery
zostan
ą zamienione na duże (majuskuła). Jeżeli natomiast argument which jest podany
i jest ró
żny od nil, to wszystkie litery w łańcuchu alfanumerycznym string zostaną
zamienione na małe. Przykładowo:
(strcase "acAD-pN")
zwraca
"ACAD-PN"
(strcase "AbCd" T)
zwraca
"abcd"
)tusdbu!
)tusdbu!
)tusdbu!
)tusdbu!tusjoh2!\tusjoh3^!
****
Funkcja zwraca ła
ńcuch powstały w wyniku konkatenacji (połączenia) argumentów
string1, string2 itd. Przykładowo:
(strcat "M" "arta")
zwraca
"Marta"
(strcat "a" "b" "c")
zwraca
"abc"
(strcat "a" "" "c")
zwraca
"ac"
)tusmfo!
)tusmfo!
)tusmfo!
)tusmfo!\tusjoh^!
****
Funkcja ta zwraca liczb
ę typu integer, której wartość odpowiada liczonej w znakach
długo
ści łańcucha alfanumerycznego string. Jeżeli wyrażenie ma więcej argumentów
string, wówczas funkcja zwraca całkowit
ą liczbę znaków we wszystkich argumentach.
Brak argumentów lub wprowadzenie ła
ńcucha pustego (tak jak w dwóch ostatnich
przykładach poni
żej), powoduje zwrócenie liczby 0 (typ integer). Przykładowo:
(strlen "abcd")
zwraca
4
(strlen "ab")
zwraca
2
(strlen "raz" "dwa" "trzy")
zwraca
10
(strlen)
zwraca
0
(strlen "")
zwraca
0
)tv
)tv
)tv
)tvctu!
ctu!
ctu!
ctu!ofxjufn!pmejufn!mjtu****
Funkcja wyszukuje olditem w
śród elementów argumentu list i zwraca kopię tej listy,
w której ka
żdy olditem został zastąpiony przez newitem. Jeżeli list nie zawiera
elementów olditem, to funkcja subst zwraca argument list w niezmienionej postaci.
Przykładowo, je
żeli dokonamy podstawień:
(setq test '(a b (c d) b))
to:
(subst 'qq 'b test)
zwraca
(A QQ (C D) QQ)
(subst 'qq 'z test)
zwraca
(A B (C D) B)
(subst 'qq '(c d) test)
zwraca
(A B QQ B)
(subst '(qq rr) '(c d) test)
zwraca
(A B (QQ RR) B)
Epebufl!C
864
(subst '(qq rr) 'z test)
zwraca
(A B (C D) B)
U
życie funkcji subst w połączeniu z assoc umożliwia wygodną wymianę wartości powią-
zanej z jednym kluczem na li
ście asocjacji. Przykładowo, jeżeli dokonamy podstawień:
(setq kto '((a jan) (b f.) (c kowalski))
to:
(setq a1
(assoc 'a kto))
zwraca
(A JAN)
(setq a2 '(a j.))
zwraca
(A J.)
(subst a1 a2 kto)
zwraca
((A J.) (B F.) (C KOWALSKI))
)tvctus!
)tvctus!
)tvctus!
)tvctus!tusjoh!tubsu!\mfohui^****
Funkcja ta zwraca ła
ńcuch alfanumeryczny, który jest częścią argumentu string.
Rozpoczyna si
ę on od znaku na pozycji start i zawiera tyle kolejnych znaków, ile
okre
śla argument length. Jeżeli argument length nie występuje w wyrażeniu, to zwraca-
ny ła
ńcuch zawiera znaki aż do końca argumentu string. Argumenty start i length
musz
ą być dodatnimi liczbami typu integer.
Istotne jest zwrócenie uwagi na to,
że pierwszy znak w łańcuchu string ma numer 1.
Jest to ró
żnica w stosunku do wszystkich innych funkcji, operujących na elementach list
(takich jak nth, ssname i inne), które pozycj
ę pierwszego elementu listy liczą jako
pozycj
ę 0.
Przykład
(substr "abcde" 2)
zwraca
"bcde"
(substr "abcde" 2 1)
zwraca
"b"
(substr "abcde" 3 2)
zwraca
"cd"
)ubcmfu!
)ubcmfu!
)ubcmfu!
)ubcmfu!dpef!\spx2!spx3!spx4!ejsfdujpo^****
Funkcja ta słu
ży do odczytywania i ustalania kalibracji pulpitu graficznego (ang.tablet).
Mo
żna jej używać po prostu do zapamiętywania i odtwarzania kalibracji lub do two-
rzenia nowych transformacji tabletu.
W zale
żności od wartości argumentu całkowitego code, funkcja tablet odtwarza bieżącą
kalibracj
ę digitizera (pulpitu), albo ustanawia nową kalibrację. Gdy code jest równy
0, tablet zwraca bie
żącą kalibrację. Gdy argument code jest równy 1, muszą po nim wy-
st
ąpić nowe parametry kalibracji: row1, row2, row3 i direction.
code
Liczba całkowita (typu integer).
Gdy code jest równy 0, tablet zwraca bie
żącą
kalibracj
ę. W tym wypadku wszystkie pozostałe
argumenty musz
ą być pominięte. Gdy kod jest równy
865
BvupMJTQ!—!qsbluzd{oz!lvst
1, tablet ustala now
ą kalibrację, zgodnie z podanymi
nowymi parametrami. W tym wypadku pozostałe
argumenty musz
ą wystąpić.
row1, row2, row3
Trzy punkty 3W. Te trzy argumenty okre
ślają trzy
wiersze macierzy transformacji pulpitu.
direction
Punkt 3W. Jest to wektor (wyra
żony we współrzę-
dnych Globalnego Układu Współrz
ędnych GUW),
normalny do płaszczyzny reprezentuj
ącej powierz-
chni
ę tabletu.
Je
ś
li podany argument
direction nie jest znormalizowany, funkcja tablet
skoryguje go. Dlatego kierunek zwracany przez tablet mo
ż
e ró
ż
ni
ć
si
ę
od
podanego jako argument. Podobnie, trzeci wiersz row3 (Z) musi by
ć
zawsze
równy 1. Tablet zwraca ten parametr jako zawsze równy 1, nawet je
ś
li row3 na
li
ś
cie argumentów miał inn
ą
warto
ść
.
Je
śli wywołanie funkcji tablet nie zakończy się sukcesem, zwraca ona nil i ustawia zmienną
ERRNO na warto
ść wskazującą przyczynę wystąpienia błędu (patrz dodatek D). Sytuacja
taka mo
że zaistnieć na przykład wtedy, gdy digitizer nie jest jednocześnie pulpitem.
Bardzo prost
ą transformacją, jaka może być ustalona przez tablet, jest transformacja
to
żsamościowa:
(tablet 1 '(1 0 0) '(0 1 0) '(0 0 1) '(0 0 1))
Przy działaj
ącej takiej transformacji, AutoCAD będzie otrzymywał „surowe” współrzędne
digitizera z pulpitu. Je
śli na przykład, zostanie wskazany punkt o współrzędnych digitizera
(5000,15000), AutoCAD zobaczy go jako punkt w rysunku o takich samych współrz
ędnych.
Zmienna systemowa TABMODE umo
ż
liwia programom w AutoLISPie wł
ą
czanie
i wył
ą
czanie trybu pulpitowego.
)ucmof
)ucmof
)ucmof
)ucmofyu!
yu!
yu!
yu!ubcmf.obnf!\sfxjoe^****
Funkcja tblnext jest u
żywana przy przeszukiwaniu całej tablicy symboli. Pierwszym
argumentem jest ła
ńcuch alfanumeryczny, który identyfikuje interesującą nas tablicę
symboli. Dopuszczalnymi nazwami s
ą "LAYER" (tablica warstw), "LTYPE (tablica
rodzajów linii), "VIEW" (tablica widoków), "STYLE" (tablica stylów pisma), "BLOCK"
(tablica bloków), "UCS" (tablica lokalnych układów współrz
ędnych), "APPID" (tablica
aplikacji), "DIMSTYLE" (tablica stylów wymiarowania) i "VPORT" (tablica rzutni).
Ła
ńcuchy te nie muszą być pisane dużymi literami. Zazwyczaj powtarzanie tblnext
zwraca za ka
żdym razem następną z kolei pozycję w określonej tablicy (na ustalenie
nast
ępnej pozycji do odczytania pozwala opisywana dalej funkcja tblsearch).
Je
żeli jednak podano również argument rewind, który po ewaluacji daje wartość różną
od nil, to tablica symboli jest ponownie odczytywana od pierwszej wprowadzonej do
Epebufl!C
866
niej pozycji. W przypadku, gdy w tablicy nie ma ju
ż więcej zapisanych pozycji, funkcja
zwraca nil. Nigdy nie s
ą zwracane pozycje usunięte z tablicy.
Po znalezieniu wpisanej do tablicy pozycji, funkcja zwraca j
ą w postaci listy par kro-
pkowych zawieraj
ących kody grup i wartości w standardzie DXF. Lista ta jest bardzo
podobna do zwracanej przez entget. Przykładowo:
(tblnext "layer" T)
Dane pierwszej warstwy
mo
że zwrócić następującą listę:
(
(0 . "LAYER")
Typ symbolu
(2 . "0")
Nazwa symbolu
(70 . 0)
Wska
źniki
(62 . 7)
Numer koloru, ujemny gdy warstwa ukryta
(6 . "CONTINUOUS")
Nazwa rodzaju linii rysunkowej
)
Nale
ży zwrócić uwagę na brak grupy –1. AutoCAD pamięta ostatnią zwracaną pozycję
z ka
żdej tablicy i przy kolejnym wywołaniu funkcji tblnext dla danej tablicy, zwracana
jest nast
ępna wpisana do niej pozycja. Rozpoczynając przeglądanie tablicy należy się
upewni
ć, że drugi podany argument jest różny od nil. Zapewnia to rozpoczęcie
przegl
ądania tablicy od początku i zwrócenie jej pierwszej pozycji.
Pozycje odczytywane z tablicy Block zawieraj
ą grupę o kodzie –2, w której występuje
nazwa elementu dla pierwszego elementu w definicji Bloku (je
żeli taki występuje).
Je
żeli więc zdefiniowano Blok o nazwie RAMKA, to:
(tblnext "block")
Odczytuje definicj
ę Bloku
mo
że zwrócić:
(
(0 . "BLOCK")
Typ symbolu
(2 . "RAMKA")
Nazwa symbolu
(70 . 0)
Wska
źniki
(10 9.0 2.0 0.0)
Pocz
ątek X, Y, Z
(-2 . <Nazwa elementu: 40000126>)
Pierwszy element
)
Nazwa elementu zawarta w grupie –2 jest akceptowana przez funkcje entget i entnext.
Nie przyjmuj
ą jej jednak pozostałe funkcje dające dostęp do elementów rysunku.
Przykładowo oznacza to,
że nie jest możliwe umieszczenie takiego elementu w zbiorze
wskaza
ń przez wywołanie funkcji ssadd. Użycie w entnext nazwy elementu z grupy –2
pozwala na przegl
ądanie elementów składowych definicji bloku; po ostatnim elemencie
w definicji bloku entnext zwraca nil.
Je
ś
li Blok nie zawiera
ż
adnych elementów, zwracana przez tblnext grupa –2
jest nazw
ą
elementu Endblk tego Bloku.
867
BvupMJTQ!—!qsbluzd{oz!lvst
)ucmtfbsd
)ucmtfbsd
)ucmtfbsd
)ucmtfbsdi!
i!
i!
i!ubcmf.obnf!tzncpm!\tfuofyu^****
Funkcja przegl
ąda tablicę symboli wskazywaną przez argument table-name (taki sam,
jak w przypadku tblnext) w poszukiwaniu nazwy symbolu okre
ślonego przez argument
symbol. U
żyte w obu nazwach małe litery są automatycznie zamieniane na duże. Jeżeli
zostanie znaleziony wpis dla okre
ślonej nazwy symbolu, to pozycja ta jest zwracana
w formacie opisanym dla tblnext. W przeciwnym wypadku, funkcja zwraca nil.
Przykładowo:
(tblsearch "style" "standard")
Parametry stylu pisma
mo
że zwrócić:
(
(0 . "STYLE")
Typ symbolu
(2 . "STANDARD")
Nazwa symbolu
(70 . 0)
Wska
źniki
(40 . 0.0)
Stała wysoko
ść znaków
(41 . 1.0)
Współczynnik szeroko
ści
(50 . 0.0)
K
ąt pochylenia
(71 . 0)
Wska
źniki generowania
(3 . "txt")
Podstawowy plik kroju czcionki
(4 . "")
Plik wieloznakowy
)
Zwykle tblsearch nie ma wpływu na kolejno
ść odczytywania pozycji tablicy przez
tblnext. Je
żeli jednak użycie tblsearch skończyło się odnalezieniem szukanego wpisu
i wprowadzony został ró
żny od nil argument setnext, to licznik pozycji dla funkcji
tblnext zostanie tak ustawiony,
że jej wywołanie zwróci wpis następny względem
pozycji zwróconej w wyniku wywołania funkcji tblsearch.
)ufsqsj*
)ufsqsj*
)ufsqsj*
)ufsqsj*
Funkcja ta wypisuje na ekranie now
ą linię i zwraca nil. Funkcja terpri nie jest stoso-
wana w operacjach wej
ścia/wyjścia na plikach. Aby wpisać do pliku nową linię, należy
u
żyć funkcji print lub princ.
)ufyuc
)ufyuc
)ufyuc
)ufyucpy!
py!
py!
py!fmjtu****
Jest to funkcja mierz
ąca wybrany element rysunkowy Tekst i zwracająca współrzędne
przek
ątnej prostokąta, obejmującego ten element.
Argument elist musi definiowa
ć element tekstowy. Jeśli w liście pominięte są wszystkie
pola definiuj
ące parametry tekstu, poza samym tekstem, wykorzystywane są bieżące
(lub standardowe) parametry. Zako
ńczone sukcesem wywołanie funkcji textbox powo-
duje zwrócenie dwóch punktów. W przeciwnym wypadku funkcja zwraca nil.
Epebufl!C
868
Minimalna lista akceptowalna przez texbox zawiera sam tekst.
(textbox '((1 . "Hello world")))
mo
że zwrócić
((0.0 0.0 0.0) (0.8 0.2 0.0))
W powy
ższym przykładzie, jako pozostałe brakujące parametry funkcji textbox
wykorzystuje parametry standardowe. Punkty zwracane przez textbox definiuj
ą prostokąt
ograniczaj
ący element Tekst w taki sposób, jakby punktem wstawienia Tekstu był
pocz
ątek układu współrzędnych (0,0,0), a kąt obrotu wynosił 0. Pierwszą zwracaną listą
jest z reguły punkt (0.0, 0.0, 0.0), chyba
że element Tekst jest pisany pismem
pochylonym, pionowym, lub zawiera litery „z ogonkami” (takie jak g czy p). Warto
ść
listy okre
ślającej pierwszy punkt wskazuje przemieszczenie od punktu wstawienia
Tekstu, do dolnego lewego wierzchołka najmniejszego prostok
ąta, obejmującego element
Tekst. Lista zawieraj
ąca współrzędne drugiego punktu definiuje prawy górny wierzchołek
tego prostok
ąta. Niezależnie od orientacji mierzonego Tekstu zwracana lista punktów
zawsze wskazuje lewy dolny i prawy górny wierzchołek obejmuj
ącego prostokąta.
)ufyuqbhf*
)ufyuqbhf*
)ufyuqbhf*
)ufyuqbhf*
W jednomonitorowych instalacjach AutoCADa, funkcja ta wymazuje zawarto
ść
tekstowego okna AutoCADa i wy
świetla jego treść zamiast ekranu graficznego. Jest
ona równowa
żna funkcji textscr z tą jedynie różnicą, że usuwa wszelkie informacje
tekstowe, które były do tej pory wy
świetlane w oknie tekstowym. Funkcja textpage
zawsze zwraca nil.
Informacje uzupełniaj
ące: Patrz opisy funkcji textscr oraz graphscr.
)ufyu
)ufyu
)ufyu
)ufyutds*
tds*
tds*
tds*
W systemie z jednym monitorem funkcja textscr powoduje przeł
ączenie ekranu z trybu
graficznego w tryb tekstowy (podobnie jak klawisz funkcyjny AutoCADa Przeł
ącz
Ekran — F1). Funkcja textscr zawsze zwraca nil.
Informacje uzupełniaj
ące: Patrz opisy funkcji textpage i graphscr.
)usbdf!
)usbdf!
)usbdf!
)usbdf!gvodujpo!
****
Funkcja trace jest narz
ędziem pomocniczym do tzw. uruchamiania programów, przez
co nale
ży rozumieć ich testowanie w poszukiwaniu błędów. Ustawia ona znaczniki,
które pozwalaj
ą na śledzenie przebiegu wskazanych argumentów function i zwraca
nazw
ę ostatniej funkcji. Za każdym razem, gdy wskazana function jest poddawana
ewaluacji, na ekranie pojawia si
ę informacja o tym fakcie, wraz z podaniem stopnia
zagł
ębienia wywołań, oraz wypisywany jest wynik zwracany przez tę funkcję.
869
BvupMJTQ!—!qsbluzd{oz!lvst
Przykładowo:
(trace test)
zwraca
TEST
i ustawia znacznik umo
żliwiający śledzenie przebiegu funkcji TEST.
Funkcja trace zwraca nazw
ę ostatniej napotkanej funkcji.
Informacje uzupełniaj
ące: Patrz opis funkcji untrace.
)usbot!
)usbot!
)usbot!
)usbot!qu!gspn!up!\ejtq^****
Funkcja ta dokonuje transformacji układu współrz
ędnych. Argument pt jest listą trzech
liczb typu real, która mo
że być interpretowana jako punkt 3W lub przesunięcie 3W
(wektor przesuni
ęcia). Argument from jest kodem określającym układ współrzędnych,
dla którego okre
ślono wartości współrzędnych argumentu pt, a argument to jest kodem
układu współrz
ędnych, do którego odnoszą się wartości zwracane przez funkcję. Jeżeli
w wyra
żeniu podano opcjonalny argument disp i jest on różny od nil, to argument pt
b
ędzie traktowany jako przesunięcie 3W. Argumenty from i to mogą przyjmować
nast
ępujące wartości:
•
Kodów o warto
ści całkowitej (typ integer) z przedstawionej tabeli.
Tabela B.16. Kody układów współrz
ędnych
Kod
Układ współrz
ędnych
0
Globalny Układ Współrz
ędnych (GUW)
1
Lokalny Układ Współrz
ędnych (aktualnie obowiązujący LUW)
2
Ekranowy Układ Współrz
ędnychEUW dla aktualnej rzutni, z użyciem
kodu 0 lub 1EUW dla aktualnej rzutni w obszarze modelu, w przypadku
u
życia łącznie z kodem 3
3
EUW w obszarze papieru (u
żywany tylko łącznie z kodem 2)
•
Nazwa elementu w postaci zwracanej przez opisywane w dodatku funkcje
entnext, entlast, entsel, nentsel i ssname. Umo
żliwia to transformację układu
współrz
ędnych (rozumianą tu jako konwersja współrzędnych punktu) na zgodny
z Układem Współrz
ędnych Elementu (UWE) związanego z konkretnym elemen-
tem rysunku i transformacj
ę odwrotną. W przypadku niektórych elementów,
Układ Współrz
ędnych Elementu jest równoważny Globalnemu Układowi
Współrz
ędnych; dla tych elementów konwersja współrzędnych UWE na GUW
jest operacj
ą pustą.
•
Wektor 3W, który wyznacza kierunek pogrubiania (lista trzech liczb typu real).
Jest to inna metoda transformacji bazuj
ącej na UWE konkretnego elementu.
Sposób ten nie daje jednak
żadnego efektu w przypadku elementów, dla których
UWE i GUW s
ą równoważne.
Funkcja trans zwraca list
ę współrzędnych punktu 3W (lub wektora przesu-
ni
ęcia), które są wyrażone w układzie współrzędnych układ-2.
Epebufl!C
86:
Przykładowo, je
żeli LUW został zdefiniowany w wyniku transformacji GUW
polegaj
ącej na obrocie o 90 stopni wokół osi Z w kierunku przeciwnym do
kierunku ruchu wskazówek zegara, to:
(trans '(1.0 2.0 3.0) 0 1)
zwraca
(2.0 -1.0 3.0)
(trans '(1.0 2.0 3.0) 1 0)
zwraca
(-2.0 1.0 3.0)
•
Układy współrz
ędnych.
Przykładowo, je
żeli chcemy narysować odcinek prostoliniowy od punktu
wstawienia jakiego
ś tekstu (bez użycia polecenia OBIEKT), to współrzędne
EUW punktu wstawienia elementu typu Tekst mo
żna poddać konwersji na
warto
ści LUW:
(trans text-insert-point text-ename 1)
co mo
że stanowić odpowiedź wprowadzoną w odpowiedzi na zgłoszenie Od
punktu:.
Z drugiej strony, przed przekazaniem warto
ści współrzędnych punktu (lub
wektora przesuni
ęcia) do funkcji entmod, należy dokonać ich konwersji do
docelowego UWE. Przykładowo, gdy chcemy przesun
ąć Okrąg względem LUW
o warto
ści 1,2,3 (nie korzystając z polecenia PRZESUŃ), to należałoby dokonać
konwersji współrz
ędnych wektora przesunięcia z LUW do UWE okręgu:
(trans '(1 2 3) 1 okr
ą
g-nazwa-elementu)
Nast
ępnie należy dodać otrzymane przesunięcie do punktu będącego środkiem
okr
ęgu. Przykładowo, jeżeli chcemy sprawdzić, bliżej którego końca danego
elementu Linia wydaje si
ę leżeć wprowadzony przez użytkownika punkt, to
nale
ży dokonać konwersji jego współrzędnych z LUW do EUW:
(trans punkt 1 2)
oraz konwersji obu ko
ńców odcinka z UWE związanego z elementem Linia do
EUW:
(trans koniec linia-nazwa-elementu 2)
Teraz mo
żna obliczyć odległości między wprowadzonym punktem i każdym
z ko
ńców odcinka (ignorując współrzędne Z) i na tej podstawie określić, który
z ko
ńców odcinka będzie na ekranie wyglądał na położony bliżej.
Funkcja trans mo
że również dokonywać transformacji punktów 2W. Uzupełnia przy
tym dane punktu odpowiedni
ą wartością współrzędnej Z. Zależy ona od użytego
argumentu from oraz od tego, czy argument pt ma by
ć poddany konwersji jako punkt
czy jako przesuni
ęcie. Jeśli wartość ma być transformowana jako przesunięcie, wartość
Z zawsze wynosi 0.0. Je
śli wartość transformowana ma być punktem, uzupełniająca
warto
ść współrzędnej Z jest określana zgodnie z poniższymi zasadami.
Tabela B.17. Uzupełniaj
ące wartości Z dla transformowanych punktów 2W
Układ pocz
ątkowy
Uzupełniaj
ąca wartość Z
GUW
0.0
LUW
aktualny poziom
871
BvupMJTQ!—!qsbluzd{oz!lvst
UWE
0.0
Tabela B.17. Uzupełniaj
ące wartości Z dla transformowanych punktów 2W (c.d.)
Układ pocz
ątkowy
Uzupełniaj
ąca wartość Z
EUW
Rzut na aktualn
ą płaszczyznę konstrukcyjną (płaszczyzna XY
LUW + aktualny poziom)
EUWOP
Rzut na aktualn
ą płaszczyznę konstrukcyjną (płaszczyzna XY LUW
+ aktualny poziom)
)uz
)uz
)uz
)uzqf!
qf!
qf!
qf!jufn****
Funkcja ta zwraca okre
ślenie typu argumentu item, gdzie typ jest jedną z poniższych
pozycji (jako atom). Je
żeli argument item w wyniku ewaluacji daje nil, funkcja zwraca
nil.
Tabela B.18. Typy zmiennych zwracane przez funkcj
ę type
Typ
Znaczenie
REAL
Liczby zmiennoprzecinkowe
FILE
Deskryptory plików
STR
Ła
ńcuchy tekstowe
INT
Liczby całkowite
SYM
Symbole
LIST
Listy i funkcje u
żytkownika
SUBR
Funkcje wewn
ętrzne
EXSUBR
Funkcje zewn
ętrzne (ADS)
PICKSET
Zbiory wskaza
ń
ENAME
Nazwy elementów
PAGETB
Tablice stronicowania funkcji
Przykładowo, je
żeli dokonano przypisań:
(setq a 123 r 3.45 s "Witam!" x '(a b c))
(setq f (open "nazwa" "r"))
to:
(type 'a)
zwraca
SYM
(type a)
zwraca
INT
(type f)
zwraca
FILE
(type r)
zwraca
REAL
(type s)
zwraca
STR
(type x)
zwraca
LIST
Epebufl!C
872
(type +)
zwraca
SUBR
(type nil)
zwraca
nil
Kolejny przykład ilustruje, w jaki sposób mo
żna wykorzystać funkcję type:
(defun isint (a)
(if (=(type a) 'INT)
czy jest to liczba typu integer?
T
gdy tak, zwraca
T
nil
gdy nie, zwraca nil
);if
);defun
)vousbdf!
)vousbdf!
)vousbdf!
)vousbdf!gvodujpo!
****
Funkcja untrace usuwa ustawione przez trace znaczniki
śledzenia dla argumentów
function i zwraca nazw
ę ostatniej funkcji. Pozwala na selektywne wyłączanie trybu
śledzenia przebiegu wykonywania testowanego programu. Przykładowo:
(untrace TEST)
zwraca
TEST
oraz usuwa znacznik
śledzenia dla funkcji TEST.
Informacje uzuzpełniaj
ące: Patrz także opis funkcji trace.
))))wfs*
wfs*
wfs*
wfs*
Funkcja ta zwraca ła
ńcuch alfanumeryczny (typ string), który zawiera numer aktualnej
wersji AutoLISPu. Funkcja ta powinna by
ć używana (w połączeniu z equal) do
sprawdzania kompatybilno
ści programów. Łańcuch ten zwracany jest w postaci:
"AutoLISP Wydanie X.X"
gdzie X.X jest numerem wersji. Przykładowo:
(ver)
mo
że zwrócić
"AutoLISP Wydanie 12.0"
Programy u
żytkowe, testując łańcuch zwracany przez funkcję ver, mogą sprawdzać,
która wersja AutoLISPu jest wykorzystywana.
)wnpo*
)wnpo*
)wnpo*
)wnpo*
Obecnie funkcja ta nie zapewnia ju
ż wirtualnego stronicowania funkcji, ale została
pozostawiona w AutoLISPie w celu zapewnienia zgodno
ści z poprzednimi wersjami.
)wqps
)wqps
)wqps
)wqpsut*
ut*
ut*
ut*
Funkcja ta zwraca list
ę deskryptorów rzutni dla aktualnej konfiguracji rzutni. Każdy
deskryptor rzutni jest list
ą zawierającą jej numer identyfikacyjny oraz współrzędne
lewego dolnego i prawego górnego naro
żnika rzutni.
873
BvupMJTQ!—!qsbluzd{oz!lvst
Gdy zmienna systemowa TILEMODE ma warto
ść 1, zwracana lista opisuje konfigu-
racj
ę rzutni utworzoną za pomocą polecenia RZUTNIE.
Współrz
ędne rogów rzutni są wartościami z zakresu od 0.0 do 1.0, gdzie (0.0 0.0)
odpowiada lewemu dolnemu naro
żnikowi graficznego obszaru ekranu, a (1.0 1.0)
reprezentuje prawy górny naro
żnik. Jeżeli zmienna TILEMODE ma wartość 0, to
zwracana lista opisuje rzutnie b
ędące elementami rysunku, które zostały utworzone za
pomoc
ą polecenia WWIDOK. Narożniki takich rzutni są wyrażane we współrzędnych
w obszarze papieru. Gdy tryb TILEMODE jest wył
ączony, wówczas rzutnią oznaczoną
numerem 1 jest zawsze obszar papieru.
Przykładowo przy konfiguracji z jedn
ą rzutnią, gdy zmienna TILEMODE ma wartość 1,
funkcja vports mo
że zwrócić listę:
((1 (0.0 0.0) (1.0 1.0)))
Podobnie, przy podziale ekranu na cztery równe rzutnie rozmieszczone w czterech naro-
żnikach ekranu, gdy zmienna TILEMODE ma wartość 1, funkcja vports może zwrócić:
(
(5 (0.5 0.0) (1.0 0.5))
(2 (0.5 0.5) (1.0 1.0))
(3 (0.0 0.5) (0.5 1.0))
(4 (0.0 0.0) (0.5 0.5)) )
Deskryptor rzutni aktualnej jest zawsze umieszczany na pierwszym miejscu listy.
W przykładzie przedstawionym powy
żej, rzutnia 5 jest rzutnią aktualną.
)xdnbudi!
)xdnbudi!
)xdnbudi!
)xdnbudi!tusjoh!qbuufso****
Funkcja ta sprawdza, czy wzorzec, mog
ący zawierać znaki uniwersalne, odpowiada
argumentowi string. Argument string jest porównywany z argumentem pattern. Je
żeli
s
ą one sobie równe, funkcja zwraca T; w przeciwnym wypadku funkcja zwraca nil.
Tak string, jak i pattern, mog
ą być cytowanymi dosłownie (przez quote lub apostrof)
ła
ńcuchami alfanumerycznymi lub zmiennymi. Argument pattern może zawierać
przedstawione poni
żej znaki uniwersalne. Porównywanych jest jedynie około 500
pierwszych znaków argumentów string i pattern; wszystkie pozostałe s
ą ignorowane.
Tabela B.19. Znaki uniwersalne
Znak
Definicja
#(lub "funt")
Dowolna cyfra
@(At)
Dowolny znak alfabetu
.(kropka)
Dowolny znak niealfanumeryczny
*(gwiazdka)
Dowolna sekwencja znaków, wł
ącznie z łańcuchem pustym. Ten znak
uniwersalny mo
że być umieszczany w dowolnym miejscu wzorca (na
pocz
ątku, w środku, lub na końcu)
Epebufl!C
874
Tabela B.19. Znaki uniwersalne (c.d.)
Znak
Definicja
?(pytajnik)
Dowolny znak
~(tylda)
Je
żeli jest to pierwszy znak wzorca, to pokrywa wszystko oprócz
wzorca
[…]
Dowolny znak z umieszczonych w nawiasach
[~…]
Dowolny znak ró
żny od umieszczonych w nawiasach
— (my
ślnik)
Do u
żytku wewnątrz nawiasów
,(przecinek)
Oddziela dwa wzorce
`(lewy apostrof)
Powoduje,
że następujący potem znak specjalny jest interpretowany
dosłownie, jako znak pozbawiony specjalnego znaczenia
Przykładowo:
(wcmatch "Nazwa" "N*")
zwraca
T
Wyra
żenie to testuje łańcuch alfanumeryczny „Nazwa”, sprawdzając czy zaczyna się od
znaku „N”. Mo
żliwe jest używanie we wzorcu przecinków, co pozwala na wprowa-
dzenie wi
ększej liczby warunków. Poniższy przykład prezentuje testowanie przez
porównanie z trzema wzorcami:
(wcmatch "Nazwa" "???,~*w*,N*")
i zwraca
T
Je
żeli spełniony jest warunek zgodności z dowolnym z wzorców, funkcja zwraca T.
W powy
ższym przypadku testowane były następujące warunki: „Nazwa” ma trzy znaki
(fałsz), „Nazwa” nie zawiera „w” (fałsz), „Nazwa” rozpoczyna si
ę od „N” (prawda).
Jedno porównanie dało wynik pozytywny i wyra
żenie zwraca T.
Testy porównawcze rozró
żniają duże i małe litery: musi tu być zachowana pełna
zgodno
ść. Argumentami string i pattern mogą być zmienne i wartości zwracane przez
funkcje AutoLISPu.
Je
żeli zachodzi potrzeba sprawdzenia, czy łańcuch zawiera znak spełniający funkcję
znaku uniwersalnego, w charakterze znaku ucieczki, blokuj
ącego jego działanie, można
wykorzysta
ć znak lewego apostrofu (`). Powoduje on, że występujący za nim znak nie
jest interpretowany jako znak uniwersalny i przy porównywaniu ma on swoje zwykłe
znaczenie. Przykładowo, je
żeli chcemy sprawdzić, czy w dowolnym miejscu w łań-
cuchu „Nazwa” wyst
ępuje przecinek, należy wprowadzić:
(wcmatch "Nazwa" "*`,*")
zwraca
nil
Ze wzgl
ę
du na mo
ż
liwo
ść
dodania w przyszłych wersjach AutoLISPu kolejnych
znaków uniwersalnych, dobr
ą
praktyk
ą
jest poprzedzanie lewym apostrofem (`)
wszystkich znaków niealfabetycznych. Zapewni to zgodno
ść
napisanego
programu z przyszłymi wydaniami pakietu.
875
BvupMJTQ!—!qsbluzd{oz!lvst
Zarówno j
ęzyk C, jak i AutoLISP, wykorzystują lewy ukośnik (\) w charakterze znaku
ucieczki (ang. escape). Dlatego aby uzyska
ć w łańcuchu pojedynczy znak lewego uko-
śnika, należy użyć dwóch tych znaków (\\). Aby sprawdzić, czy znak lewego ukośnika
jest umieszczony w którymkolwiek miejscu ła
ńcucha „Nazwa”, należy napisać:
(wcmatch "Nazwa" "*`\\*")
zwraca
nil
Wszystkie znaki obj
ęte nawiasami kwadratowymi ([…]) są traktowane dosłownie i nie
ma konieczno
ści poprzedzania ich apostrofem. Wyjątki stanowią jednak tylda (~), która
nie jest znakiem steruj
ącym tylko wówczas, gdy nie jest pierwszym znakiem
umieszczonym w nawiasach, np. "[A~BC]". W przeciwnym wypadku jest ten znak
interpretowany jako operator negowania, którego znaczenie mo
żna przetłumaczyć
słowami wszystkie znaki, oprócz wyst
ępujących dalej, np. "[~ABC]". Myślnik (—) jest
odczytywany dosłownie tylko wówczas, gdy wyst
ępuje na początku lub na końcu
sekwencji znaków w nawiasach kwadratowych, np. "[—ABC]" lub "[ABC—]", lub gdy
wyst
ępuje po rozpoczynającej ciąg znaków tyldzie, np "[~—ABC]". W innych
przypadkach, my
ślnik (—) jest używany wewnątrz nawiasów kwadratowych do okre-
ślania zakresu wartości dla konkretnego znaku. Zakres funkcjonuje tylko dla poje-
dynczych znaków, tak wi
ęc "STR[1—38]" odpowiada łańcuchom „STR1”, „STR2”,
„STR4” i „STR8”, a "[—Z]" odpowiada dowolnej jednej du
żej literze.
Dosłownie interpretowany jest tak
że prawy nawias kwadratowy ("]"), występujący jako
pierwszy znak w nawiasach, lub po znaku tyldy, np. "[ ]ABC]" lub "[~]ABC]").
)xij
)xij
)xij
)xijmf!
mf!
mf!
mf!uftufyqs!fyqs!
****
Funkcja poddaje ewaluacji argument testexpr, i je
żeli jest on różny od nil, wylicza
pozostałe argumenty expr. Nast
ępnie wartość argumentu testexpr jest wyznaczana
ponownie. Taka sekwencja b
ędzie powtarzana dopóty, dopóki wyrażenie testexpr nie da
w wyniku nil. Wówczas funkcja while zwraca ostatni
ą wartość ostatniego argumentu
expr. Przykładowo:
(setq test 1)
wtedy:
(while (<= test 10)
(pewna-funkcja test)
(setq test (1 + test))
);while
wywoła dziesi
ęć razy funkcję pewna-funkcja dla wartości test od 1 do 10, a następnie
zwróci 11, jako warto
ść ostatniego wyliczonego wyrażenia.
)xsjuf.dibs!
)xsjuf.dibs!
)xsjuf.dibs!
)xsjuf.dibs!dpef!\gjmf.eftd^****
Funkcja zapisuje pojedynczy znak na ekranie lub w otwartym pliku, wskazywanym
przez file-desc. Argument code jest warto
ścią kodu ASCII (w systemie dziesiętnym)
zapisywanego znaku, a tak
że wartością zwracaną przez funkcję. Przykładowo:
(write-char 67)
zwraca
67
Epebufl!C
876
i zapisuje na ekranie liter
ę C. Zakładając, że f jest deskryptorem otwartego pliku:
(write-char 67 f)
zwraca
67
i zapisuje liter
ę C do tego pliku.
AutoCAD i AutoLISP mog
ą pracować pod kontrolą różnych systemów operacyjnych,
w których z kolei mog
ą być używane różne konwencje sygnalizowania końca linii
w pliku tekstowym ASCII. Przykładowo, w systemie operacyjnym UNIX wykorzy-
stywany jest pojedynczy znak nowej linii (LF, ang. linefeed), którego kodem ASCII jest
liczba 10. W systemie operacyjnym DOS do tego celu stosuje si
ę parę znaków, tzn.
znak powrotu karetki (CR, ang. carriage-return) w poł
ączeniu ze znakiem nowej linii
LF, których kodami ASCII s
ą liczby 13 i 10. Aby ułatwić przenoszenie programów
AutoLISPu pomi
ędzy wszystkimi systemami operacyjnymi, funkcja write-char
dokonuje konwersji znaku nowej linii LF (kod ASCII 10) na znak ko
ńca linii (lub
sekwencj
ę znaków) używany w aktualnie wykorzystywanym systemie operacyjnym.
Zatem w systemie operacyjnym DOS
(write-char 10 f)
zwraca
10
ale zapisuje do pliku sekwencj
ę znaków CR/LF (kody ASCII 13 i 10). Funkcja write-
char nie mo
że zapisać do pliku znaku NUL (kod ASCII 0).
Informacje uzupełniaj
ące: Listę kodów ASCII zawiera dodatek C.
)xsjuf.mj
)xsjuf.mj
)xsjuf.mj
)xsjuf.mjof!
of!
of!
of!tusjoh!\gjmf.eftd^****
Funkcja zapisuje ła
ńcuch alfanumeryczny string na ekranie lub do otwartego pliku wska-
zywanego przez file-desc i zwraca argument string bez ewaluacji, w postaci znaków
uj
ętych w cudzysłów, który jest jednak pomijany przy zapisie do pliku. Przykładowo,
zakładaj
ąc, że f jest deskryptorem otwartego pliku:
(write-line "Test" f)
zapisuje
Test
i zwraca
"Test"
)yesppn!
)yesppn!
)yesppn!
)yesppn!fobnf****
Funkcja xdroom zwraca ilo
ść pamięci, dostępnej dla dodatkowych danych elementu
ename. W przypadku wywołania nie zako
ńczonego sukcesem, funkcja zwraca nil.
Funkcja ta została udost
ępniona użytkownikom AutoLISPu, by pisane przez nich
programy miały mo
żliwość sprawdzenia ilości miejsca na dane, które programy te będą
próbowały umie
ścić jako dane dodatkowe elementu. Jest to przydatne z tego powodu,
że istnieje graniczna (obecnie 16 kilobajtów) ilość danych dodatkowych, jakie mogą
by
ć umieszczone przy elemencie, a jednocześnie możliwe jest umieszczanie w obszarze
danych dodatkowych jednego elementu danych tworzonych przez wiele programów.
Xdroom mo
żna wywoływać w zestawieniu z funkcją xdsize, która zwraca rozmiar listy
danych dodatkowych elementu.
877
BvupMJTQ!—!qsbluzd{oz!lvst
Podany przykład sprawdza dost
ępne miejsce na dane dodatkowe elementu Rzutnia.
Zakładaj
ąc, że zmienna vpname zawiera nazwę elementu rysunkowego Rzutnia,
(xdroom vpname)
zwróci
16162
W przykładzie tym, istnienie wolnych 16,162 bajtów z pocz
ątkowo dostępnych dla
dodatkowych danych elementu 16.383 bajtów oznacza,
że 221 bajtów zostało już
wykorzystanych. Ilo
ść pamięci wykorzystanej na dane dodatkowe może być bezpo-
średnio uzyskana za pomocą funkcji xdsize.
)ye
)ye
)ye
)yetj{f!
tj{f!
tj{f!
tj{f!mjtu****
Funkcja ta zwraca rozmiar obszaru pami
ęci (w bajtach), jaki zajmuje list po dopisaniu
jej do elementu w charakterze danych dodatkowych. W przypadku nieudanego
wywołania funkcja zwraca nil.
Argument list musi by
ć poprawną listą danych dodatkowych elementu, zawierającą
nazw
ę aplikacji zarejestrowanej uprzednio za pomocą funkcji regapp. Pola z nawiasami
klamrowymi (grupy z kodem 1002) musz
ą występować parami. Niepoprawna list jest
przyczyn
ą błędu i powoduje umieszczenie odpowiedniego kodu błędu w zmiennej
ERRNO. Je
żeli dane dodatkowe zawierają nazwę niezarejestrowanej aplikacji, na ekra-
nie uka
że się następujący komunikat błędu (zakładając, że zmienna CMDECHO ma
warto
ść 1):
Bł
ę
dna nazwa aplikacji w grupie o kodzie 1001
Argument list mo
że rozpoczynać się kodem grupy –3 (znacznik pomocniczy danych
dodatkowych elementu), ale nie jest to wymóg bezwzgl
ędny. Dane dodatkowe mogą
zawiera
ć informacje pochodzące z różnych aplikacji, dlatego lista musi być ujęta w parę
nawiasów.
Przykładowo:
(-3 ("PROGRAM-1" (1000 . "APLIKOM")
(1002 . "{")
(1040 . 0.0)
(1040 . 1.0)
(1002 . "}")
)
)
Poni
ższy przykład nie zawiera grupy z kodem –3. Lista ta jest uzyskana z poprzedniej
za pomoc
ą funkcji cdr. Istotne jest jednak, by posiadała obejmujące ją nawiasy.
( ("PROGRAM-1" (1000 . "APLIKOM")
(1002 . "{")
(1040 . 0.0)
(1040 . 1.0)
(1002 . "}")
)
)
Epebufl!C
878
Teraz przedstawiamy nieprawidłow
ą listę dla funkcji xdsize, w której brakuje obejmu-
j
ących ją nawiasów.
("PROGRAM-1" (1000 . "APLIKOM")
NIEPRAWIDŁOWO
(1002 . "{")
(1040 . 0.0)
(1040 . 1.0)
(1002 . "}")
)
Nast
ępny przykład pokazuje zastosowanie funkcji xdsize do przekazania listy zawie-
raj
ącej dodatkowe dane elementu z dwóch zarejestrowanych aplikacji.
(setq n1 (list "PROGRAM-1" (cons 1000 "APLIKOM")
(cons 1040 0.0)
(cons 1040 1.0)
)
)
(setq n2 (list "PROGRAM-2" (cons 1000 "APLIKOM")
(cons 1040 0.0)
(cons 1040 1.0)
)
)
(regapp "PROGRAM-1")
(regapp "PROGRAM-2")
(xdsize (list n1 n2))
zwraca
60
)ympbe!
)ympbe!
)ympbe!
)ympbe!bqqmjdbujpo!\pogbjmvsf^****
Funkcja ta słu
ży do wczytania programu użytkowego ADS (AutoCAD Development
System). Po pozytywnym zako
ńczeniu wczytywania, zwracana jest nazwa programu
u
żytkowego. W przeciwnym wypadku wyprowadzany jest komunikat błędu. Wywo-
łanie funkcji ko
ńczy się błędem w przypadku próby ponownego wczytania programu
ju
ż wczytanego.
Argument application jest wprowadzany jako uj
ęta w cudzysłów wartość typu string
lub zmienna zawieraj
ąca nazwę pliku wykonawczego. Podczas wczytywania pliku, jest
on weryfikowany pod k
ątem sprawdzenia, czy jest rzeczywiście programem użytko-
wym ADS. Dodatkowo sprawdzana jest zgodno
ść (kompatybilność) wersji programu
ADS, samego ADS oraz działaj
ącej wersji AutoLISPu.
(xload "/programy/ame")
po zako
ńczeniu pozytywnym, zwraca "/programy/ame"
Niepowodzenie w działaniu funkcji xload powoduje zwykle wyst
ąpienie błędu
AutoLISPu. Je
śli jednak podany jest argument onfailure, niepowodzenie w działaniu
funkcji powoduje zwrócenie warto
ści tego argumentu, zamiast wyświetlenia komu-
nikatu bł
ędu. Ta cecha funkcji xload jest podobna, jak dla funkcji load.
879
BvupMJTQ!—!qsbluzd{oz!lvst
)y
)y
)y
)yvompbe!
vompbe!
vompbe!
vompbe!bqqmjdbujpo!\pogbjmvsf^****
Funkcja ta słu
ży do usuwania programu użytkowego ADS z pamięci komputera. Po
pozytywnym zako
ńczeniu operacji zwracana jest nazwa programu użytkowego. W
przeciwnym wypadku wyprowadzany jest komunikat bł
ędu.
Argument application nale
ży wprowadzić jako ujęty w cudzysłów łańcuch alfanu-
meryczny lub zmienn
ą zawierającą nazwę programu użytkowego, który został
wczytany przez funkcj
ę xload. Nazwa programu użytkowego musi być wprowadzona
dokładnie
w takiej postaci, w jakiej została wprowadzona w wyra
żeniu z funkcją xload. Jeżeli
nazwa podana w przypadku funkcji xload zawierała równie
ż ścieżkę dostępu do pliku
(nazw
ę katalogu), to obecnie można ją pominąć.
Przykładowo, wyra
żenie przedstawione poniżej spowoduje usunięcie z pamięci progra-
mu u
żytkowego, który został wczytany przez funkcję xload w poprzednim przykładzie.
(xunload "ame")
po zako
ńczeniu pozytywnym, zwraca
"ame"
Niepowodzenie w działaniu funkcji xunload powoduje zwykle wyst
ąpienie błędu
AutoLISPu. Je
śli jednak podany jest argument onfailure, niepowodzenie w działaniu
funkcji powoduje zwrócenie warto
ści tego argumentu, zamiast wyświetlenia komuni-
katu bł
ędu. Ta cecha funkcji xunload jest podobna, jak dla funkcji load.
){f
){f
){f
){fspq!
spq!
spq!
spq!jufn****
Funkcja ta zwraca T, je
żeli item jest liczbą typu integer lub real, której ewaluacja daje
zero. W innym wypadku zerop zwraca nil. Funkcja nie jest zdefiniowana dla innych
typów argumentu item. Przykładowo:
(zerop 0)
zwraca
T
(zerop 0.0)
zwraca
T
(zerop 0.0001)
zwraca
nil
Opisane w tej cz
ęści funkcje są zdefiniowane przez program ACADAPP, napisany
w systemie ADS (na platformie DOS ma on rozszerzenie .EXP). W zwi
ązku z tym,
funkcje te s
ą dostępne tylko wtedy, gdy program ten jest wczytany. Przed wywołaniem
której
ś z tych funkcji, program w AutoLISPie może wywołać funkcję xload, w celu
sprawdzenia czy plik ACADAPP został wczytany.
Epebufl!C
87:
)bdbe`dpmpsem
)bdbe`dpmpsem
)bdbe`dpmpsem
)bdbe`dpmpsemh!
h!
h!
h!dpmpsovn!\gmbh^****
Wy
świetla standardowe okno AutoCADa, służące do wybierania koloru.
Argument colornum jest liczb
ą całkowitą, z zakresu od 0 do 256. Określa on numer
koloru AutoCADa, wy
świetlanego jako kolor proponowany. Jeśli opcjonalny argument
flag jest podany i jest nil, wówczas przyciski ekranowe JAKWARSTWA i JAKBLOK
s
ą zablokowane. Jeśli argument ten nie jest podany, albo jest podany ale różny od nil,
wówczas przyciski te s
ą dostępne do użycia.
Funkcja acad_colordlg zwraca numer koloru, wybranego przez u
żytkownika przez
wci
śnięcie przycisku OK. Jeśli użytkownik anuluje okienko dialogowe, acad_colordlg
zwraca nil.
Przykład
Poni
ższe wyrażenie pyta użytkownika o kolor, proponując kolor zielony.
(acad_colordlg 3)
Warto
ść
nr_koloru równa 0 oznacza kolor JAKBLOK, a warto
ść
równa 256 to
kolor JAKWARSTWA.
)bdbe`ifm
)bdbe`ifm
)bdbe`ifm
)bdbe`ifmqemh!
qemh!
qemh!
qemh!ifmqgjmf!\upqjd^****
Wy
świetla standardowe okienko z informacjami pomocniczymi AutoCADa, odczy-
tanymi ze wskazanego pliku dyskowego. Funkcja ta mo
że być wywoływana z pro-
cedury AutoLISPu w celu podania informacji pomocniczych zwi
ązanych ze standar-
dowym poleceniem AutoCADa, lub informacji zwi
ązanych z programem użytkownika.
Argument helpfile jest ła
ńcuchem alfanumerycznym, określającym plik z informacjami
pomocniczymi AutoCADa (rozszerzenie nazwy .HLP jest opcjonalne). Argument topic
jest hasłem, które pocz
ątkowo jest wyświetlane w okienku dialogowym. Jeśli argument
topic jest ła
ńcuchem pustym (""), okienko dialogowe zawiera informacje wstępne z pli-
ku informacji pomocniczych.
Dla własnych programów u
żytkownika, plik HLP będzie zwykle wskazywał nazwę
własnego pliku informacji pomocniczych u
żytkownika.
Przykład
Mo
żna utworzyć poniższy plik o nazwie AC_HELP.HLP, będący plikiem informacji
pomocniczych AutoCADa (pliki informacji pomocniczych AutoCADa musz
ą posiadać
rozszerzenie .HLP).
Funkcja acad_helpdlg wy
świetla standardowe okienko z informacjami pomocniczymi
AutoCADa. Format wywołania jest nast
ępujący:
881
BvupMJTQ!—!qsbluzd{oz!lvst
acad helpdlg <helpfile> <topic>
\PLIK_HLP
Argument <helpfile> okre
śla plik z informacjami pomocniczymi AutoCADa.
Rozszerzenie nazwy .HLP jest opcjonalne.
\HASŁO
Argument <topic> okre
śla hasło, które początkowo jest wyświetlane w okienku
dialogowym.
Je
śli argument topic jest łańcuchem pustym (""), okno dialogowe zawiera informacje
wst
ępne ze wskazanego pliku informacji pomocniczych.
Poni
ższe wyrażenie wywołuje acad_helpdlg i powoduje wyświetlenie tekstu
wst
ępnego opisu z pliku AC_HELP.HLP:
(acad_helpdlg "ac_help" "")
Nast
ępny przykład jest niemal identyczny, ale powoduje pojawienie się okienka,
zawieraj
ącego stronę informacji pomocniczych związanych z hasłem HASŁO:
(acad_helpdlg "ac_help" "hasło")
)bdbe`tu
)bdbe`tu
)bdbe`tu
)bdbe`tusmtpsu!
smtpsu!
smtpsu!
smtpsu!mjtu****
Powoduje uporz
ądkowanie listy łańcuchów tekstowych w porządku alfabetycznym.
Argument list zawiera ła
ńcuchy tekstowe, które mają zostać uporządkowane. Funkcja
acad_strlsort zwraca list
ę tych samych łańcuchów, ale uporządkowanych w kolejności
alfabetycznej.
Je
śli argument list nie jest poprawnie uformowany, lub jeśli brakuje pamięci do wyko-
nania operacji sortowania, funkcja acad_strlsort zwraca nil.
Przykład
Poni
ższe wyrażenie sortuje listę skróconych angielskich nazw miesięcy:
(setq mos '("Jan" "Feb" "Mar" "Apr" "May" "Jun"
"Jul" "Aug" "Sep" "Oct" "Nov" "Dec"))
(acad_strlsort mos)
zwraca nast
ę
puj
ą
c
ą
list
ę
:
("Apr" "Aug" "Dec" "Feb" "Jan" "Jul"
"Jun" "Mar" "May" "Nov" " Oct" "Sep")
Epebufl!C
882
W tej cz
ęści opisane są polecenia AutoCADa, nadające specjalne znaczenie dostępowi
do interpretera AutoLISPu. Polecenia te s
ą dostępne tylko wtedy, gdy wczytany jest
program ACADAPP, napisany w systemie ADS.
)d;hls
)d;hls
)d;hls
)d;hlsftlvk!
ftlvk!
ftlvk!
ftlvk!qu!\tt^!\wfdups^****
)d;c
)d;c
)d;c
)d;cibudi!
ibudi!
ibudi!
ibudi!qu!\tt^!\wfdups^****
Polecenie BHATCH słu
ży do kreskowania wybranego obszaru.
Pierwszym argumentem tej funkcji jest punkt pt, który jest wewn
ętrznym punktem
obszaru do zakreskowania. Je
śli punkt ten jest ważny, powoduje utworzenie Polilinii,
stanowi
ącej granicę kreskowanego obszaru. Argument ss je zbiorem wskazań, zawiera-
j
ącym dodatkowe elementy granicy obszaru. Ostatni argument vector jest listą współ-
rz
ędnych, opisujących wektor kierunkowy wykorzystywany przez BHATCH do ryso-
wania promieni. Przy braku tego argumentu przyjmowany jest on jako (0,0), czyli
metoda „Najbli
ższy”. Jako argument vector akceptowane są listy współrzędnych 2D
i 3D. Je
śli jednak podane są trzy współrzędne, to współrzędna Z jest ignorowana.
Przykłady
(setq
p1 '(3 5)
ss1 (entlast)
Wybiera ostatni utworzony element
);setq
(c:bhatch p1)
Kreskuje obszar zdefiniowany przez graniczn
ą
Polilini
ę, utworzoną przez punkt (3,5)
(c:bhatch p1 ss)
Kreskuje obszar zdefiniowany zarówno przez
graniczn
ą Polilinię, utworzoną przez punkt (3,5),
jak i przez zbiór wskaza
ń ss
(c:bhatch p1 '(1 0))
Kreskuje obszar zdefiniowany przez graniczn
ą
Polilini
ę, utworzoną przez punkt (3,5),
wykorzystuj
ąc rzutowanie promieni +X
Wykorzystywane w argumencie vector warto
ści współrzędnych są liczbami rzeczywi-
stymi i mog
ą przyjmować dowolne wartości. Poniższa tabela zawiera przykłady warto-
ści zgodnych z wartościami używanymi w okienku dialogowym polecenia GKRESKUJ.
883
BvupMJTQ!—!qsbluzd{oz!lvst
Tabela B.20. Kierunki rzutowania promieni i warto
ści argumentu vector
Warto
ść wektora
Kierunek
(0 0)
(Najbli
ższy)
(1 0)
+X (0 stopni)
(0 1)
+Y (90 stopni)
(–1 0)
–X (180 stopni)
(0 –1)
–Y (270 stopni)
(1000 1732)
60 stopni (w przybli
żeniu)
(1 –1)
315 stopni
Zako
ńczone sukcesem działanie funkcji c:bhatch zwraca nazwę utworzonego elementu
rysunkowego Hatch, a w przypadku braku sukcesu funkcja zwraca nil. W przypadku
zako
ńczonego błędem wywołania c:bhatch, komunikat błędu można odczytać przez
wywołanie funkcji bherrs.
)d;hqmj
)d;hqmj
)d;hqmj
)d;hqmjojb!
ojb!
ojb!
ojb!qu!\tt^!\wfdups^****
)d;cqpm
)d;cqpm
)d;cqpm
)d;cqpmz!
z!
z!
z!qu!\tt^!\wfdups^****
Polecenie GPLINIA(BPOLY) słu
ży do definiowania granicznej Polilinii.
Pierwszym argumentem tej funkcji jest punkt pt, który jest wewn
ętrznym punktem
obszaru do zakreskowania. Argument ss jest zbiorem wskaza
ń, zawierającym dodatko-
we elementy granicy obszaru. Ostatni argument vector jest list
ą współrzędnych, opisu-
j
ących wektor kierunkowy wykorzystywany przez GPLINIA do rzutowania promieni.
Przy braku tego argumentu przyjmowany jest on jako (0,0), czyli metoda „Najbli
ższy”.
Jako argument vector akceptowane s
ą listy współrzędnych 2D i 3D. Jeśli jednak podane
s
ą trzy współrzędne, to współrzędna Z jest ignorowana.
Zako
ńczone sukcesem działanie funkcji c:bpoly zwraca nazwę utworzonej Polilinii
granicznej, a w przypadku braku sukcesu funkcja zwraca nil. W przypadku zako
ńczo-
nego bł
ędem wywołania c:bpoly, komunikat błędu można odczytać przez wywołanie
funkcji bherrs.
)cifsst*
)cifsst*
)cifsst*
)cifsst*
Podaje komunikat bł
ędu, generowany przez zakończone błędem wywołanie funkcji
c:bhatch lub c:bpoly. Zako
ńczone sukcesem wywołanie bherrs powoduje podanie
ła
ńcucha komunikatu błędu. W przeciwnym wypadku wynikiem jej działania jest nil.
Epebufl!C
884
Przykład
Po wywołaniu c:bhatch, w programie mo
żna umieścić następujące wyrażenie,
sprawdzaj
ące warunek wystąpienia błędu:
(if (bherrs) (princ (car (bherrs))))
Gdy wywołanie zako
ńczyło się błędem ze względu na brak zainicjowanego wzoru
kreskowania NAZWA_WK, funkcja bherrs zwraca ła
ńcuch "bhatch: niezdefiniowany
wzór kreskowania\n", który za pomoc
ą funkcji princ można wyświetlić w linii zgłoszeń
AutoCADa.
)d;
)d;
)d;
)d;qtezobn!
qtezobn!
qtezobn!
qtezobn!npef****
)d;qtesbh!
)d;qtesbh!
)d;qtesbh!
)d;qtesbh!npef****
Wykorzystuje polecenie PSDYNAM (PSDRAG) do ustalenia warto
ści zmiennej
PSDRAG. Argument mode jest liczb
ą całkowitą, której wartość powinna wynosić 0 lub 1.
Bie
żąca wartość PSDRAG wpływa na interakcyjne wykorzystywanie polecenia PSWE.
Gdy PSDRAG jest równa 1, PSWE generuje obraz w standardzie PostScript w miar
ę jak
u
żytkownik wskazuje dynamicznie parametr jego skalowania. Gdy PSDRAG wynosi 0,
PSWE generuje i rysuje jedynie ramk
ę ograniczającą obraz. Zakończone sukcesem
wywołanie c:psdrag zwraca now
ą wartość PSDRAG, a nil — w przeciwnym wypadku.
Przykład
Poni
ższe wyrażenie włącza tryb PSDRAG, ustawiając wartość zmiennej na 1. Następne
interakcyjne zastosowanie PSWE generuje obraz w standardzie PostScript w miar
ę, jak
u
żytkownik dynamicznie wskazuje parametr jego skalowania.
(c:psdrag 1)
)d;qt
)d;qt
)d;qt
)d;qtxzq!
xzq!
xzq!
xzq!fou!qbuufso!\bsh2!\bsh3^^!
****
)d;qtgjmm!
)d;qtgjmm!
)d;qtgjmm!
)d;qtgjmm!fou!qbuufso!\bsh2!\bsh3^^!
****
Wykorzystuje polecenie PSWYP (PSFILL) do wypełnienia elementu wzorem w stan-
dardzie PostScript. Argument ent jest nazw
ą Polilinii. Argument pattern jest łańcuchem
alfanumerycznym, zawieraj
ącym nazwę wzoru wypełnienia. Łańcuch wzoru musi być
identyczny z nazw
ą wzoru wypełnienia, zdefiniowanym w bieżącym pliku ACAD.PSF.
Argumenty
arg
s
ą argumentami dla wewnętrznej procedury wypełniania w
PostScripcie. Ich ilo
ść i rodzaj odpowiada argumentom wymaganym przez pattern,
zgodnie z definicj
ą w ACAD.PSF. Każdy z argumentów jest albo liczbą całkowitą, albo
rzeczywist
ą. Dla jednego wzoru może być potrzebne od 0 do 25 argumentów. Jeśli w
wywołaniu funkcji podane zostało mniej argumentów, ni
ż jest wymagane dla
wybranego wzoru, dla pozostałych argumentów wykorzystywane s
ą standardowe
warto
ści dla wzoru. Zakończone sukcesem wywołanie c:psfill zwraca T. W przypadku
braku sukcesu funkcja zwraca nil.
885
BvupMJTQ!—!qsbluzd{oz!lvst
Przykład
Wzór wypełnienia Greyscale ma jeden argument. Poni
ższy przykład wykorzystuje
standardow
ą wartość argumentu wzoru Greyscale, równą 50 procent:
(c:psfill ename "Greyscale")
Nast
ępny przykład definiuje natomiast 10-cioprocentową intensywność zaczernienia
(ang. greyscale — skala szaro
ści):
(c:psfill ename "Greyscale" 10)
)d;qtj
)d;qtj
)d;qtj
)d;qtjo!
o!
o!
o!gjmfobnf!qptjujpo!tdbmf****
)d;qtxf!
)d;qtxf!
)d;qtxf!
)d;qtxf!gjmfobnf!qptjujpo!tdbmf****
Wprowadza polecenie PSWE, słu
żące do importowania plików w standardzie encapsu-
lated PostScript (.EPS). Argument filename jest ła
ńcuchem zawierającym nazwę obrazu
w standardzie PostScript (nie ma potrzeby podawa
ć rozszerzenia .EPS nazwy pliku).
Argument position jest punktem, okre
ślającym miejsce wstawienia (anonimowego)
bloku PostScript. Argument scale jest rzeczywist
ą wartością, definiującą współczynnik
skalowania. W razie sukcesu, funkcja c:pswe zwraca nazw
ę nowoutworzonego
elementu rysunkowego. W przypadku bł
ędu wykonania funkcji, zwracane jest nil.
Przykład
Poni
ższy fragment kodu programu importuje plik SAMPLE.EPS w standardzie
PostScript, wstawia go w punkcie (24,9) i skaluje współczynnikiem 25:
(c:pswe "sample" '(24 19) 25)