Rozdział 4
Funkcje AutoLISP-u
Poniższy rozdział zawiera opis wszystkich funkcji dostępnych w AutoLISP-ie.
Składa się on ze streszczenia oraz z katalogu funkcji. W streszczeniu nazwy
funkcji są pogrupowane według przeznaczenia, a po każdej nazwie następu-
je krótki opis. W katalogu funkcje występują w kolejności alfabetycznej i są
opisane szczegółowo.
Streszczenie
Funkcje AutoLISP-u posiadające odpowiedniki w ADS
Obsługa funkcji
(defun sym argument-list expr...)
Definiuje funkcję zewnętrzną (typu Subr).
Obsługa błędów
(*error* string)
Drukuje komunikat błędu.
(alert string)
Wyświetla okno dialogowe, alarmujące użytkownika ko-
munikatem string.
Zapytania i polecenia AutoCAD-a
(command [arguments]...)
Wykonuje jedno lub więcej poleceń AutoCAD-a.
(getvar varname)
Odczytuje bieżącą wartość zmiennej systemowej Auto-
CAD-a.
(setvar varname value)
Ustala wartość zmiennej systemowej AutoCAD-a.
Streszczenie 79
Funkcje AutoLISPu
(findfile filename)
Poszukuje pliku o podanej nazwie.
(getfiled title filename ext flags)
Pyta użytkownika o nazwę pliku, wyświetlając standar-
dowe okno dialogowe AutoCAD-a.
(osnap pt mode-string)
Znajduje punkt 3W spełniający warunki trybu lokalizacji
położenia punktu względem obiektu.
Narzędzia geometryczne
(distance pt1 pt2)
Wyznacza odległość pomiędzy dwoma punktami.
(angle pt1 pt2)
Wyznacza kąt między dwiema liniami.
(polar pt angle dist)
Wyznacza punkt we współrzędnych biegunowych.
(inters pt1 pt2 pt3 pt4 [onsegJ)
Wyznacza punkt przecięcia dwóch linii.
(textbox e//sQ
Zwraca współrzędne końców przekątnej prostokąta, obej-
mującego element rysunkowy Tekst.
Wprowadzanie danych przez użytkownika
(initget [bits] [string])
Określa dopuszczalne rodzaje danych, wprowadzanych
przez użytkownika podczas najbliższego wywołania fun-
kcji z grupy getxxx.
(getreal [prompt])
Żąda od użytkownika wprowadzenia liczby rzeczywistej
(zmiennoprzecinkowej).
(getstring [er] [prompt])
Żąda od użytkownika wprowadzenia łańcucha alfanume-
rycznego.
(getpoint [pt] [prornpt])
Żąda od użytkownika wprowadzenia punktu.
(getcorner pt [prompt])
Żąda od użytkownika wprowadzenia wierzchołka prosto-
kąta.
80 Streszczenie
Rozdział 4
(getdist [pt] [prompt])
Żąda od użytkownika podania odległości.
(getangle [pt] [prompt])
Żąda od użytkownika podania wartości kąta.
(getorient [pt] [prompt])
Funkcja podobna do getangle, ale uwzględnia bieżącą
wartość zmiennej systemowej ANGBASE.
(getkword [prompt])
Żąda od użytkownika podania słowa kluczowego.
(getint [prompt])
Żąda od użytkownika wprowadzenia liczby całkowitej.
Konwersje
(rtos number [modę] precision]])
Formatuje liczbę rzeczywistą (zmiennoprzecinkową) w łań-
cuch alfanumeryczny.
(distof string [modę])
Przekształca łańcuch alfanumeryczny przedstawiający licz-
bę rzeczywistą (zmiennoprzecinkową) na liczbę rzeczywistą
(zmiennoprzecinkową).
(angtos angle [modę [precision]])
Formatuje wartość kąta w łańcuch alfanumeryczny.
(angtof string [modę])
Przekształca łańcuch alfanumeryczny przedstawiający
kąt na liczbę rzeczywistą (zmiennoprzecinkową).
(cvunit value from to)
Dokonuje konwersji jednostek fizycznych.
Transformacje układu współrzędnych
(trans pt from to [disp])
Dokonuje transformacji punktu lub odległości z jednego
układu współrzędnych do innego układu.
Kalibrowanie pulpitu graficznego
(tablet coc/e [row1 row2 row3 direction])
Steruje kalibrowaniem pulpitu graficznego (ang. tablet).
Streszczenie 81
Funkcje AutoLISPu
Sterowanie wyświetlaczem
(prin1 [expr [file-desc]])
Drukuje komunikat na ekranie tekstowym lub w otwar-
tym pliku dyskowym.
(princ [expr [file-desc]})
Drukuje komunikat na ekranie tekstowym lub w otwar-
tym pliku dyskowym.
(print [expr [file-desc]])
Drukuje komunikat na ekranie tekstowym lub w otwar-
tym pliku dyskowym.
(prompt msg)
Wyświetla komunikat w linii zgłoszeń.
(menucmd string)
Wyświetla i uaktywnia menu.
(redraw [ename [modę]])
Przerysowuje bieżący ekran graficzny.
(graphscr)
Wyświetla bieżący ekran graficzny.
(textscr)
Wyświetla bieżący ekran tekstowy.
(textpage)
Działa podobnie jak funkcja textscr lecz wcześniej czyści
ekran tekstowy.
Funkcje graficzne niskiego poziomu
(grciear)
Czyści bieżący ekran graficzny.
(grdraw from to color [highlight])
Rysuje wektor w bieżącej rzutni.
(grvecs vlisł [trans])
Rysuje wiele wektorów w bieżącej rzutni.
(grread [track] [alikeys [curtype]])
Odczytuje stan urządzenia wyjściowego.
(grtext [box text [hightiight]])
Wyświetla tekst w obszarze menu stanu lub trybu na ekra-
nie graficznym.
82 Streszczenie
Rozdział 4
Badanie zgodności łańcuchów ze znakami uniwersalnymi
(wcmatch string pattern)
Porównuje łańcuch z wzorcem ze znakami uniwersalny-
mi.
Zbiory wskazań
(ssget [mode][pt1 [pt2]] [pt-list] [filter-listJ)
Tworzy zbiór wskazań.
(ssadd [ename [ss]])
Dodaje element rysunkowy do zbioru wskazań lub tworzy
nowy zbiór wskazań.
(ssdel ename ss)
Usuwa element rysunkowy ze zbioru wskazań.
(ssiength ss)
Zwraca liczbę elementów w zbiorze wskazań.
(ssname ss /notex)
Zwraca nazwę elementu rysunkowego ze zbioru wskazań.
(ssmemb ename ss)
Sprawdza czy element należy do zbioru wskazań.
Obsługa elementów
(entget ename [applist])
Odczytuje dane definiujące element rysunkowy.
(entmod e//s0
Modyfikuje dane definiujące element rysunkowy.
(entmake [elist])
Tworzy nowy element rysunkowy i dodaje go do bazy da-
nych.
(entdel ename)
Usuwa (lub przywraca usunięte) elementy rysunku.
(entnext [enameJ)
Odnajduje następny element w rysunku.
(entlast)
Odnajduje ostatni element w rysunku.
(handent handle)
Odnajduje element rysunkowy poprzez jego identyfikator.
Streszczenie 83
Funkcje AutoLISPu
(entsel [prompt])
Żąda od użytkownika wybrania elementu przez wskazanie
punktu.
(nentsel [prompt])
Działa podobnie jak entsel, ale zwraca dodatkowo dane
dla elementów zagnieżdżonych.
(nentsełp [prompt] [pt])
Działa podobnie jak nentsel, ale zwraca pełną macierz 3W
4x4 i umożliwia programowi określenie punktu wykorzy-
stanego do wybrania elementu.
(entupd ename)
Aktualizuje wygląd elementu rysunkowego na ekranie.
Dodatkowe dane elementu
(regapp applicatioh)
Rejestruje dane dodatkowe elementu dla aplikacji.
(xdsize lisi)
Zwraca ilość pamięci (w bajtach), jaką zajmie lista danych
dodatkowych elementu.
(xdroom ename}
Zwraca ilość pamięci (w bajtach), dostępnej w danym ele-
mencie dla danych dodatkowych.
Tablice symboli
(tblnext table-name symbol [rewind])
Odnajduje następną pozycję w tablicy symboli.
(tbisearch table-name [setnextJ)
Poszukuje symbolu w tablicy symboli.
Funkcje ogólnego przeznaczenia
Algebraiczne
(+ number number ...)
Zwraca sumę wszystkich liczb.
(- number [number...])
Odejmuje drugą liczbę od pierwszej i zwraca różnicę.
(* number (number ...J)
Zwraca iloczyn wszystkich liczb.
84 Streszczenie
Rozdział 4
(f number [number ...J)
Dzieli pierwszą liczbę przez drugą i zwraca iloraz.
(~ numbel)
Zwraca bitową negację (NOT) number.
(1+ lnumbel)
Zwraca number zwiększoną o l.
(1- numbet)
Zwraca number pomniejszoną o l.
(abs numbel)
Zwraca wartość bezwzględną number.
(atan num1 [num2])
Zwraca wartość funkcji arcus tangens liczby w radianach.
(cos angle)
Funkcja ta zwraca cosinus kąta.
(exp number)
Zwraca wartość e (podstawę logarytmów naturalnych)
podniesioną do potęgi number.
(expt base powel)
Zwraca wartość wyznaczoną z podniesienia liczby base do
potęgi power.
(fix numbel)
Zwraca wynik konwersji liczby na wartość całkowitą.
(float number)
Funkcja zwraca wynik konwersji liczby na wartość zmien-
noprzecinkową (typu real).
(gcd num1 num2)
Zwraca największy wspólny podzielnik dwóch liczb.
(log numbet)
Zwraca logarytm naturalny liczby w formacie zmienno-
przecinkowym.
(logand number number...)
Zwraca wynik wykonania bitowej operacji AND na liście
liczb.
(logior integer...)
Zwraca wynik wykonania bitowej operacji OR na liście
liczb.
Streszczenie 85
Funkcje AutoLISPu
(Ish num1 numbits)
Zwraca wynik operacji przesunięcia bitów argumentu in-
teger o liczbę pozycji równą argumentowi przesunięcia.
(max number number...)
Zwraca największą z podanych liczb.
(min number number...)
Zwraca najmniejszą z podanych liczb.
(minus p item)
Sprawdza czy /'temjest typu real lub integer i wyznacza je-
go wartość ujemną.
P'
Zwraca wartość n.
(rem num1 num2...)
Dzieli dwie liczby i zwraca resztę.
(sin angle)
Zwraca wartość sinusa kąta w formacie zmiennoprze-
cinkowym.
(sqrt numbei)
Zwraca wartość pierwiastka kwadratowego liczby w for-
macie zmiennoprzecinkowym.
(ze rop item}
Sprawdza czy /'temjest liczbą typu real lub integer, której
ewaluacja daje zero.
Obsługa symboli
(atom item)
Sprawdza czy item jest atomem.
(atoms-famiły format [symiist])
Zwraca listę wcześniej zdefiniowanych funkcji
(boundp atom)
Sprawdza czy atom ma przypisaną jakąkolwiek wartość.
(not item)
Sprawdza czy item jest równoważny nil.
(null item)
Sprawdza czy item ma przypisaną wartość nil.
(numberp item)
Sprawdza czy item jest wartością typu real lub integer.
86 Streszczenie
Rozdział 4
(quote exp/-...)
Zwraca wyrażenie bez wyznaczania jego wartości.
(set sym expi)
Przypisuje wartości sym wartość expr.
(setq sym1 expr1 [sym2 expr2]...)
Przypisuje wartość wyrażenia nazwie symbolu lub wię-
kszej liczby symboli.
(type item)
Zwraca typ item.
Łańcuchy tekstowe
(read string}
Zwraca pierwszą listę lub atom uzyskane z łańcucha.
(read-char [file-desc])
Odczytuje pierwszy znak z klawiatury lub otwartego pli-
ku.
(read-line [file-desc])
Odczytuje łańcuch tekstowy, znak z klawiatury lub otwar-
tego pliku.
(strcase string [which])
Zwraca kopię łańcucha po zmianie wszystkich liter na du-
że lub małe.
(strcat stringi [stńng2]...)
Zwraca połączenie dwóch lub więcej łańcuchów teksto-
wych.
(strien [string]...}
Zwraca długość łańcucha liczoną w znakach.
(substr string start [length])
Zwraca podłańcuch łańcucha.
(write-char num [file-desc])
Zapisuje jeden znak, podany w kodzie ASCII, na ekranie
lub w otwartym pliku.
(write-line string [file-desc])
Zapisuje łańcuch alfanumeryczny na ekranie lub w otwar-
tym pliku.
Streszczenie 87
Funkcje AutoLISPu
Konwersje
(ascii string)
Zwraca wynik konwersji pierwszego znaku łańcucha na
odpowiadający mu kod ASCII.
(atof string}
Zwraca wynik konwersji łańcucha na wartość typu real.
(atoi string)
Zwraca wynik konwersji łańcucha na wartość typu inte-
ger.
(chr integel)
Zwraca wynik konwersji liczby całkowitej reprezentującej
kod znakowy ASCII na jednoznakowy łańcuch tekstowy.
(itoa int)
Zwraca wynik konwersji liczby całkowitej na łańcuch te-
kstowy.
Relacje
(= atom atom...)
Funkcja relacji równości.
(/= atom atom ...)
Funkcja relacji nierówności.
{< atom atom ...)
Funkcja relacji mniejszości.
(<= atom atom...)
Funkcja relacji mniejszości lub równości.
(> atom atom...)
Funkcja relacji większości.
(>= atom atom...)
Funkcja relacji większości lub równości.
(and expr...)
Zwraca wynik logicznej operacji AND, wykonanej na liście
wyrażeń.
(Boole func int1 int2 ...}
Uniwersalna bitowa funkcja logiczna (Boole'a).
(cond (test1 resultl...)...)
Główna funkcja warunkowa w AutoLISP-ie.
88 Streszczenie
Rozdział 4
(eq expr1 expr2)
Sprawdza, czy dwa wyrażenia są tożsame.
(equal expr1 expr2 [fuzz])
Sprawdza, czy dwa wyrażenia dają taki sam wynik wyli-
czenia.
(if testexpr thenexpr [elseexprJ)
Warunkowo poddaje ewaluacji wyrażenie.
(or expr...)
Zwraca wynik wykonania na liście wyrażeń logicznej fun-
kcji OR.
(repeat number expr...)
Każde wyrażenie poddaje wyliczeniu podaną ilość razy.
(while testexpr expr...)
Powtarza wyrażenie tak długo, jak długo wyrażenie testo-
we pozostaje prawdziwe.
Operacje na listach
(append expr...}
Pobiera dowolną liczbę list i tworzy z nich jedną listę.
(assoc item alist)
Przeszukuje listę asocjacji, szukając w niej skojarzeń
z elementem item i zwraca znalezioną pozycję.
(car list)
(cdr list)
Zwraca pierwszy element listy.
Zwraca listę zawierającą wszystkie, oprócz pierwszego,
elementy listy.
(caar list}, (cadr list), (cddr lisf), (cadar list), itd.
Dopuszczalne są łączenia do czterech poziomów funkcji.
(cons new-first-element list)
Zwraca listę z nowym elementem, dodanym na jej począt-
ku.
(foreach name list expr...)
Postępuje wzdłuż listy i wyznacza wartość każdego wyra-
żenia dla każdego elementu listy.
(list expr...)
Tworzy listę z dowolnej liczby wyrażeń.
Streszczenie 89
Funkcje AutoLISPu
(listp item)
Sprawdza, czy item jest listą.
(mapcar function list1 ... listn)
Zwraca listę jako wynik wykonania funkcji z argumenta-
mi branymi z dostarczonych list.
(member expr list)
Przeszukuje listę pod kątem występowania w niej podane-
go wyrażenia i zwraca resztę listy, poczynając od
pierwszego wystąpienia wyrażenia.
(nth n list)
Zwraca n-ty element listy.
(reverse lis f)
Zwraca listę o odwróconej kolejności elementów listy.
(subst newitem olditem lisi)
Zwraca kopię listy, w której każde wystąpienie obiektu
olditem jest zastąpione przez newitem.
Obsługa plików
(close file-desc)
Zamyka plik.
(load filename [onfailure])
Wczytuje plik z wyrażeniami AutoLISP-u.
(open filename modę)
Otwiera plik, udostępniając jego deskryptor funkcjom
We/Wy AutoLISP-u.
Obsługa aplikacji ADS
(ads)
Zwraca listę zawierającą aktualnie wczytane programy
użytkowe systemu ADS (AutoCAD Development System).
(xload application [onfailure])
Wczytuje program użytkowy systemu ADS (AutoCAD De-
velopment System).
(xunload application [onfailure])
Usuwa program użytkowy ADS z pamięci komputera.
90 Streszczenie
Rozdział 4
Wyświetlacz
(terpri)
(vports)
Wypisuje na ekranie nową linię.
Zwraca listę deskryptorów rzutni dla aktualnej konfigura-
cji rzutni.
Obsługa funkcji
(appły funkcion list)
Wykonuje funkcję z podanym argumentem.
(eval expi)
Zwraca wynik wyliczenia dowolnego wyrażenia AutoLISP-u.
(exit)
Wymusza zakończenie działania bieżącej aplikacji.
(lambda arguments expr...)
Definiuje funkcję anonimową.
(progn expr...)
Funkcja wyznacza kolejno wartość każdego wyrażenia.
(tracę funkcion...)
Ustawia znacznik śledzenia dla wskazanej funkcji.
(quit)
Wymusza wyjście z bieżącej aplikacji.
(untrace funkcion ...)
Usuwa znacznik śledzenia dla wskazanych funkcji.
Obsługa pamięci
(alloc numbei)
Ustala rozmiar segmentu na podaną liczbę węzłów.
(expand numbei)
Przydziela obszar węzłów, żądając podanej liczby segmen-
tów.
(gc)
(mem)
Wymusza odzyskiwanie pamięci.
Wyświetla bieżący stan pamięci AutoLISP-u.
Streszczenie 91
Funkcje AutoLISPu
Różne
(getenv variable-name)
Zwraca wartość typu string przypisaną do systemowej
zmiennej środowiska systemu operacyjnego.
(ver)
Zwraca łańcuch alfanumeryczny zawierający wykorzysty-
waną wersję AutoLISP-u.
Funkcje AutoLISP-u zdefiniowane w ADS
(acad_colordlg colornum [flag])
Wyświetla standardowe okno dialogowe AutoCAD-a, słu-
żące do wyboru koloru.
(acad_helpdlg helpfile topie}
Wyświetla standardowe okno dialogowe AutoCAD-a, za-
wierające informacje pomocnicze.
(acad_strlsort list)
Sortuje listę łańcuchów alfanumerycznych.
Polecenia zdefiniowane w ADS
(c:bhatch pt [ss [vector]])
Wywołuje polecenie GKRESKUJ (JBHATCH) i wykonuje
kreskowanie obszaru ograniczonego granicami.
(c:bpoly pt [ss [vector]])
Wywołuje polecenieGPLINIA (_BPOLY) i tworzy Polilinię
ograniczającą obszar.
(bherrs)
Pobiera komunikat błędu generowany przez zakończone
błędem wywołanie c:bhatch lub c:bpoly.
(c:psdrag modę)
Wywołuje polecenie PSDYNAM (PSDRAG) i ustala war-
tość całkowitą modę.
(c:psfill ent pattern arg1 [arg2]...)
Wypełnia Polilinię wzorem kreskowania w standardzie
Postscript.
(c:psin filename position scalę)
Wczytuje plik w standardzie encapsulated Postscript.
92 Streszczenie
Rozdział 4
Funkcje programowalnych okien dialogowych
Dokładny opis poniższych funkcji AutoLISP-u, obsługujących definiowane
przez użytkownika okna dialogowe, jest umieszczony w rozdziale 9
AutoCAD Podręcznik Adaptacyjny.
W tej części dokonano podsumowania funkcji w pakiecie programowalnych
okien dialogowych PDB (Programmable Dialog Boxes), grupując je według
spełnianych zadań. Funkcje te wywołują związany z nimi plik DCL (Dialog
Control Language), w celu wyświetlenia pożądanego okna dialogowego. Dla
każdej funkcji pokazano wymagane przez nią argumenty.
Otwieranie i zamykanie plików DCL
(load_dialog filename)
Wczytuje wskazany plik DCL.
(unIoacLdialog dcl_id)
Usuwa z pamięci wskazany plik DCL.
Otwieranie i zamykanie okien dialogowych
(new_dialog digname dcIJd [[action-expression] screen-płJ)
Inicjuje i wyświetla okno dialogowe.
(start_dialog)
Rozpoczyna pobieranie informacji od użytkownika z okna
dialogowego zainicjowanego przez wywołanie funkcji
new_dialog.
(done_dialog [status])
Kończy działanie i wyświetlanie bieżącego okna dialogo-
wego. Musi być wywołana z wnętrza wyrażenia akcji lub
funkcji zwrotnej. Funkcja ta zwraca także bieżące położe-
nie (X, Y) okna dialogowego.
(term_dialog)
Kończy działanie wszystkich bieżących okien dialogowych,
tak jakby użytkownik je anulował.
Inicjowanie wyrażeń akcji lub funkcji zwrotnych
(action_tile key action-expression)
Wiąże określony wycinek z wyrażeniem akcji lub funkcją
zwrotną.
Obsługa wycinka i atrybutów
(mode_tile key modę}
Ustala modę dla określonego wycinka.
Streszczenie 93
Funkcje AutoLISPu
(get_attr key ałtribute)
Uzyskuje wartość DCL określonego atrybutu.
(get_tile key)
Uzyskuje wartość przetwarzania dla określonego wycin-
ka.
(set_tile key value)
s Ustala wartość przetwarzania dla określonego wycinka.
Ustalanie okien kartotekowych i kartotek rozwijalnych
(startJist key [operation [index]J)
Rozpoczyna przetwarzanie określonego okna kartoteko-
wego lub kartoteki rozwijalnej.
(addJist item)
Dodaje określony łańcuch do bieżącej listy.
(endJist)
Kończy przetwarzanie bieżącej listy.
Tworzenie obrazów
(dimx_tile key)
(dimy_tile key)
Odczytuje wymiary określonego wycinka.
(startJmage key)
Rozpoczyna tworzenie określonego obrazu.
(vector_image x1 y1 x2 y2 co/o/)
Rysuje wektor w aktualnie aktywnym obrazie.
(filIJmage x1 y1 x2 y2 kolor)
Rysuje wypełniony prostokąt w aktualnie aktywnym ob-
razie.
(slideJmage x1 y1 x2 y2 sidname)
Rysuje slajd AutoCAD-a w aktualnie aktywnym obrazie.
(endJmage)
Kończy tworzenie aktualnie aktywnego obrazu.
Dane specyficzne dla aplikacji
(client_data_tile key clientdata)
Wiąże dane obsługiwane przez program użytkownika
z określonym wycinkiem.
94 Streszczenie
Rozdział 4
Katalog funkcji AutoLISP-u
Rozdział ten zawiera opis podstawowych funkcji AutoLISP-u.
(+ number number...)
Funkcja ta realizuje arytmetyczną operację dodawania i zwraca w wyniku
sumę wszystkich argumentów number. Składniki sumy mogą być zarówno
liczbami rzeczywistymi typu realJak i wartościami typu integer. Jeżeli wszy-
stkie 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 zosta-
ną zamienione na rzeczywiste i wynik też będzie liczbą rzeczywistą. Przy-
kładowo:
(+ 1 2) zwraca 3
(+123 4.5) zwraca 10.5
(+123 4.0) zwraca 10.0
(- number [number]...)
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 ostat-
niej 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. Ar-
gumentami mogą być zarówno wartości całkowitoliczbowe typu integer jak
i liczby rzeczywiste, przy ogólnie przyjętych zasadach konwersji 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
(* number [number] ...)
Funkcja ta realizuje arytmetyczną operację mnożenia i zwraca iloczyn wszy-
stkich 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
Katalog funkcji AutoLISP-u 95
Funkcje AutoLISPu
(/ number [number] ...)
Funkcja ta realizuje arytmetyczną operację dzielenia i zwraca iloraz pier-
wszego argumentu number przez drugi. Jeżeli lista argumentów zawiera
więcej niż dwie liczby, to wartością zwracaną przez funkcję jest wynik dzie-
lenia pierwszej liczby przez iloczyn pozostałych. Argumentami mogą być za-
ró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 l. Przykładowo:
(/-l 00 2) zwraca 50
(/100 2.0) zwraca 50.0
(/100 20.0 2) zwraca 2.5
(/100 20 2) zwraca 2
(/135 360) zwraca O
(/135 360.0) zwraca 0.375
(/ 4) zwraca 4
(= atom atom...)
Jest to funkcja sprawdzająca relacje 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
(/= atom atom...)
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 nie-
określona. Przykładowo:
(/= 10 20) zwraca T
(/= "ona" "ona") zwraca nil
(/= 5.43 5.44) zwraca T
(< atom atom...)
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 argumentó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:
96 Katalog funkcji AutoLISP-u
Rozdział 4
(<1020) zwraca T
(< "b" "c") zwraca T
(< 357 33.2) zwraca nil
(< 2 3 88) zwraca T
(< 2 3 4 4) zwraca nil
(<= atom atom...)
Jest to funkcja sprawdzająca relację mniejszy równy. Jeżeli pierwszy atom
jest numerycznie mniejszy lub równy drugiemu, to funkcja zwraca T; w wy-
padku przeciwnym nil. Jeżeli lista argumentów zawiera więcej niż dwa ato-
my, 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
(<= 299) zwraca T
(<= 2 9 4 5) zwraca nil
(> atom atom...)
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 przeciw-
nym 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
(>= atom atom...)
Jest to funkcja sprawdzająca relacje większy równy. Jeżeli pierwszy atom
jest numerycznie większy lub równy drugiemu, to funkcja zwraca T; w wy-
padku przeciwnym 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
Katalog funkcji AutoLISP-u 97
Funkcje AutoLISPu
(~ number)
Funkcja ta zwraca bitową negację (dopełnienie do jedynki) argumentu num-
ber, otrzymywaną w wyniku działania jednoargumentowego operatora logi-
cznego NOT (NIE) na bitach argumentu number. Funktor ten zamienia każ-
dy bit l na O i odwrotnie. Argument musi być liczbą stałopozycyjną typu in-
teger (wartością całkowitoliczbową). Przykładowo:
(~ 3) zwraca -4
(~ 100) zwraca -101
(~ -4) zwraca 3
(1+ number)
Funkcja ta zwraca wartość argumentu number zwiększoną o l. Argument
może być wartością liczbową typu integer lub real. Przykładowo:
(1+5) zwraca 6
(1+-17.5) zwraca -16.5
(l- number)
Funkcja ta zwraca wartość argumentu number zmniejszoną o l.
(1-5) zwraca 4
(1--17.5) zwraca -18.5
(abs number)
Funkcja ta zwraca wartość bezwzględną argumentu number. Argument mo-
że być wartością liczbową typu integer lub real. Przykładowo:
(abs 100) zwraca 100
(abs-100) zwraca 100
(abs -99.25) zwraca 99.25
(ads)
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/PROGi" "PROG2")
Informacje uzupełniające: patrz funkcje xload i xunload pod koniec tego
rozdziału.
98 Katalog funkcji AutoLISP-u
Rozdział 4
(alert string ...)
Funkcja alert 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.")
Dzięki wykorzystaniu w łańcuchu znaku nowej linii można definiować ko-
munikaty składające się z wielu linii tekstu.
(alert "Taka funkcja\nnie istnieje.")
Uwagw 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.
(alloc number)
Ustala rozmiar segmentu na podaną liczbę węzłów. Dalsze informacje o fun-
kcji alloc zawiera część "Sterowanie przydziałem pamięci" na stronie 200.
(and expr...)
Funkcja ta zwraca wartość logicznego iloczynu argumentów expr, utworzo-
nego za pomocą 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 wy-
rażenie zwraca nil. W przeciwnym 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
(angle ptl pt2)
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 konstru-
kcyjnej LUW w radianach, 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ę kon-
strukcyjną. Przykładowo:
(angle '(1.0 1.0) '(1.0 4.0)) zwraca 1.5708
(angle'(5.01.33)'(2.4 1.33)) zwraca 3.14159
Katalog funkcji AutoLISP-u 99
Funkcje AutoLISPu
(angtof string [modę])
Funkcja angtof wykonuje konwersję łańcucha string, reprezentującego kąt
w formacie wyświetlanym określonym przez argument modę, na wartość
zmiennoprzecinkową (typu real). Funkcja angtof zwraca wynik wyrażony
w radianach.
Argument modę określa jednostki, w których sformatowany jest łańcuch
string. Wartość tego argumentu powinna być zgodna z wartościami dopusz-
czalnymi dla zmiennej systemowej AutoCAD-a AUNITS, pokazanymi w po-
niższej tabeli. Jeśli argument tryb jest pominięty, funkcja angtof wykorzy-
stuje bieżącą wartość zmiennej AUNITS.
Tabela 4-1. Wartości jednostek kątowych
Wartość
argumentu tryb
Format łańcucha
stopnie
stopnie/minuty/sekundy
grady
radiany
jednostki geodezyjne
String musi być takim łańcuchem, który może być poprawnie i zgodnie z po-
danym trybem zanalizowany przez angtof. Może być takiej samej postaci, ja-
ką angtof ma zwrócić, albo w postaci dopuszczanej przez AutoCAD dla da-
nych podawanych z klawiatury. Funkcje angtof i angtos s ą komplementar-
ne: 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 wy-
padkach podano tę samą wartość argumentu modę).
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.
(angtos angle [modę [precision]])
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 modę, precision, od wartości zmiennej
systemowej UNITMODE AutoCAD-a oraz od wartości zmiennej wymiaro-
wania DIMZIN. Argumenty modę i precision są liczbami typu integer, które
określają rodzaj jednostek i dokładność wartości kątowych.
Dopuszczalne wartości argumentu modę są takie same, jak podane w tabeli
4-1 (patrz opis poprzedniej funkcji).
Argument precision jest liczbą typu integer, która ustala wymaganą dokład-
ność wartości kątowych, określając ilość miejsc dziesiętnych po przecinku.
Argumenty modę i precision są odpowiednikami zmiennych systemowych
AUNITS i AUPREC programu AutoCAD. Jeżeli argumenty te zostaną po-
minięte, to zostaną użyte aktualne wartości zmiennych AUNITS i AUPREC.
100 Katalog funkcji AutoLISP-u
Rozdział 4
Funkcja angtos akceptuje ujemne wartości argumentu angle, lecz zawsze
przed wykonaniem podanej konwersji sprowadza go do wartości nieujemnej
z przedziału od zera do 2n radianów. Na przykład:
(angtos 0.785398 O 4) zwraca "45.0000"
(angtos-0.785398 O 4) zwraca "315.0000"
Zmienna systemowa UNITMODE wpływa na zwracany łańcuch znaków
tekstowych wtedy, gdy wybrane zostały jednostki geodezyjne (argument
modę równy 4). Jeżeli UNITMODE=0, to łańcuch zawiera spacje (np. "N 45d
E"); jeżeli natomiast UNITMODE=1, to łańcuch nie zawiera spacji (np.
"N45dE").
Uwago: Procedury wykorzystujące funkcję angtos do wyświetlania dowol-
nie obranych kątów (dla których wartość zmiennej systemowej ANGBASE
nie stanowi kąta odniesienia) powinny sprawdzać i brać pod uwagę wartość
ANGBASE.
Informacje dodatkowe: "Konwersje łańcuchów alfanumerycznych" na
stronie 37.
(append expr...)
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.
(appły function list)
Wykonywana jest funkcja określona przez argument function, a jej argumen-
tami są elementy, które zawiera list. Przykładowo:
(appły'+ '(1 2 3)) zwraca 6
(appły 'strcat '("a" "b" "c")) zwraca "abc"
Funkcja appły 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.
(ascii string}
Funkcja ta zwraca liczbę typu integer, otrzymaną w wyniku konwersji pier-
wszego znaku w łańcuchu alfanumerycznym sfr/ng na jego kod ASCII. Fun-
kcja ta jest podobna do funkcji ASC w języku BASIC. Przykładowo:
(ascii "A") zwraca 65
(ascii "a") zwraca 97
(ascii "BIG") zwraca 66
Katalog funkcji AutoLISP-u 101
Funkcje AutoLISPu
(assoc item alist)
Funkcja ta przeszukuje listę asocjacji alist, szukając w niej skojarzeń z ele-
mentem item, pełniącym tu funkcję elementu kluczowego. Asocjacja ta (lista
złożona z pary skojarzonych 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 "marła" zawie-
ra następujące asocjacje:
((oczy piwne) (wzrost 171) (waga 56) (wiek 16))
Wtedy:
(assoc 'wzrost marła)
(assoc 'nr-butów marta)
zwraca (WZROST 171)
zwraca nil
Listy asocjacji są często używane do przechowywania danych dostępnych po-
przez identyfikujący je klucz. Jest to podobne do stosowanych w innych ję-
zykach programowania tablic lub struktur. Opisywana dalej w tym rozdzia-
le funkcja subst umożliwia łatwą wymianę wartości skojarzonej w liście aso-
cjacji z danym kluczem.
(atan numi [num2])
Przy braku argumentu num2 funkcj a zwraca wyrażoną w radianach wartość
arcus tangens argumentu num1; gdzie num1 może być ujemna; zwracane
wartości kątów zawierają się w zakresie od -n/2 do +n/2 radianów. Przykła-
dowo:
(atan 0.5)
(atan 1.0)
(atan -1.0)
(antgos (atan -1.0) O 4)
zwraca 0.463648
zwraca 0.785398
zwraca -0.785398
zwraca "315.0000"
Jeżeli podano obydwa argumenty num1 i num2, to funkcja zwraca wyrażoną
w radianach wartość arcus tangens ilorazu num 11 num2. Jeżeli num2 jest
równa zeru, to funkcja zwraca wartość +1.570796 lub -1.570796 radianów
(+90 lub -90), zależnie od znaku argumentu num1. Przykładowo:
(atan 2.0 3.0) zwraca 0.588003
(angtos (atan 2.0 3.0) O 4) zwraca "33.6901"
(atan 2.0 -3.0) zwraca 2.55359
(angtos (atan 2.0-3.0) O 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"
Uwagd: Pokazane powyżej wywołania funkcji angtos ilustrują sposób kon-
wersji zwracanych przez atan wartości podanych w radianach na łańcuchy
tekstowe typu string.
102 Katalog funkcji AutoLISP-u
Rozdział 4
(atof string)
Funkcja zwraca wynik konwersji łańcucha tekstowego string na wartość typu
redl (liczba rzeczywista). Przykładowo:
(atof "97.1") zwraca 97.1
(atof "3") zwraca 3.0
(atoi string)
Funkcja zwraca wynik konwersji łańcucha tekstowego string na liczbę całko-
witą typu integer. Przykładowo:
(atoi "97") zwraca 97
(atoi "3") zwraca 3
(atoi "3.9") zwraca 3
(atom item)
Jeżeli argument /Yemjest listą, to funkcja ta zwraca nil, a w wypadku prze-
ciwnym zwraca T. Każdy obiekt, który nie jest listą, jest uważany za atom.
Przykładowo, jeżeli przypisano:
(setą 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 LISP-u w odmienny sposób interpretują pojęcie atom i z te-
go powodu należy zachować ostrożność przy konwersji programów.
(atoms-famiły format [symiist])
Funkcja ta zwraca listę symboli wbudowanych oraz wszelkich symboli zde-
finiowanych podczas bieżącej sesji edycyjnej. Pierwszy argument formatjest
wartością całkowitą O lub l. Dla wartości O, zwracana jest lista aktualnie
zdefiniowanych symboli. Jeśli format]est równy l, symbole w liście są zwra-
cane jako łańcuchy (typu string).
(atoms-famiły 0) zwraca listę aktualnie zdefiniowanych symboli
Funkcja atoms-famiły może także poszukiwać listy nazw symboli. Jeśli po-
dany jest opcjonalny argument symiist, 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ć:
Katalog funkcji AutoLISP-u 103
Funkcje AutoLISPu
(atoms-famiły 1 '("CAR" "CDR" "XYZ"))
Funkcja atoms-famiły zwraca listę typu określonego przez format (symbole
lub łańcuchy alfanumeryczne) zawierającą nazwy tych symboli, które są zde-
finiowane oraz 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)
Uwaga: Przed Wydaniem 12 AutoCAD-a, atomlist był symbolem, który mógł
być redefiniowany lub usuwany. Tak więc stare programy użytkownika
w AutoLISP-ie, w których atomlist jest traktowane jako symbol, nie będą
prawidłowo działały w Wydaniu 12 AutoCAD-a.
(boole func inti int2 ...)
Jest to uogólniona funkcja bitowa, realizująca dwuargumentowe operacje lo-
giczne (boole'owskie). Argument funcjest liczbą typu integer z zakresu od O
do 15, która reprezentuje jeden z 16 możliwych funktorów boole'owskich.
Odpowiadające sobie bity kolejnych argumentów typu integer są argumen-
tami operacji logicznych, w wyniku których zwracana jest nowa liczba typu
integer. Jej bity stanowią logiczne kombinacje bitów argumentów składo-
wych, określone rodzajem argumentu func i bazujące na przedstawionej po-
niżej tablicy prawdziwości.
Tabela 4-2. Tablica stanów logicznych
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 O lub l, stosownie do wartości odpowiadającego im w wierszu bi-
tu func. Pewnym wartościom argumentu func odpowiadają standardowe
operacje Boole'owskie AND, OR, KOR, NOT i NAND. Pokazano to poniżej:
104 Katalog funkcji AutoLISP-u
Rozdział 4
Tabela 4-3. Wartości bitów funkcji Boole'a
AND obydwa bity są jedynkami.
XOR jeden i tylko jeden z bitów jest jedynką.
OR przynajmniej jeden z bitów jest jedynką.
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.
(boole 1125) daje w wyniku 4
Wyznaczenie funkcji logicznej KOR dla liczb 6 i 5.
(boole 665) 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 wy-
nikowe są jedynkami wtedy, gdy odpowiadające im bity są jedynkami w ar-
gumencie int2 i zerami dla int1. Tak więc wyrażenie:
(boole 4 3 14) zwróci 12.
(boundp atom)
Funkcja ta zwraca T, jeżeli atom ma przypisaną określoną wartość (dowol-
nego 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)
(boundp 'b)
zwraca
zwraca
T
nil
Funkcja atoms-famiły oferuje alternatywną metodę określania istnienia
symbolu, bez jego automatycznego tworzenia.
(car list)
Funkcja ta zwraca pierwszy element argumentu list. Jeżeli lista jest pusta,
to funkcja zwraca nil. Przykładowo:
Katalog funkcji AutoLISP-u 105
Funkcje AutoLISPu
(car '(a b c)) zwraca A
(car '((a b) c)) zwraca (A B)
(car'()) zwraca nil
(cdr list)
Funkcja ta zwraca listę zawierającą wszystkie elementy argumentu list
oprócz pierwszego elementu. Jeżeli argument //sfjest 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 //sta 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"
(caar list), (cadr list), (cddr list), (cadar list), itd.
W AutoLISP-ie możliwe jest łączenie funkcji car i cdr, przy czym superpo-
zycja ta może sięgać do czterech poziomów w głąb. Przykładowo, jeżeli przy-
pisano:
(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 AutoLISP-ie 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 uzyska-
nia 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)
(cadr pkt2)
(caddr pkt2)
(car pkt3)
(cadr pkt3)
(caddr pkt3)
zwraca 5.25
zwraca 1.0
zwraca nil
zwraca 5.25
zwraca 1.0
zwraca 3.0
106 Katalog funkcji AutoLISP-u
Rozdział 4
(chr number)
Funkcja ta zwraca wynik konwersji liczby typu integer, reprezentującej kod
ASCII, na odpowiadający temu kodowi znak, przedstawiony jako jednozna-
kowy ł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"
(close file-desc)
Funkcja zamyka plik i zwraca nil. Argument ff/e-otescjest deskryptorem pli-
ku 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.
(command [arguments] ...)
Funkcja ta wywołuje polecenia AutoCAD-a z programu napisanego w języ-
ku AutoLISP i zawsze zwraca nil. Argumentami są polecenia programu Au-
toCAD i ich opcje.
Każdy z argumentów podlega ewaluacji i jest wysyłany do AutoCAD-a w od-
powiedzi na kolejne zgłoszenia gotowości. Nazwy poleceń i opcji są danymi
typu string, punkty 2W są listami zawierającymi dwie liczby rzeczywiste ty-
pu real, a punkty 3W są listami zawierającymi trzy liczby typu real. Nazwy
poleceń są rozpoznawane przez AutoCAD tylko wtedy, gdy wcześniej uka-
zało się zgłoszenie gotowości Polecenie:; Przykładowo:
(setq pkt-1 '(1.45 3.23) pkt2 '(1 5))
(command "linia" 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 AutoCAD-a. Pusty łańcuch ("")jest równoważny naciśnięciu
na klawiaturze klawisza Enter. Wywołanie funkcji command bez argumen-
tów jest równoważne wciśnięciu klawiszy Ctri+C i powoduje to przerwanie
wykonywania większości poleceń AutoCAD-a.
Jeżeli zmienna systemowa AutoCAD-a CMDECHO (dostępna przy użyciu
funkcji setvar i getvar) ma wartość O, to na ekranie nie pojawia się echo po-
leceń wywoływanych funkcją command. Użycie funkcji command jest pod-
stawową metodą wywoływania poleceń AutoCAD-a z poziomu AutoLISP-u.
Uwaga: 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 spowo-
Katalog funkcji AutoLISP-u 107
Funkcje AutoLISPu
duje pojawienie się komunikatu:
"błqd: AutoCAD rejected function"
i przerwanie wykonywania wywoływanej funkcji. Jeżeli konieczne jest
wprowadzenie danych przez użytkownika, to funkcję getxxx należy wprowa-
dzić przed wywołaniem funkcji command (tak jak miało to miejsce w poprze-
dnim przykładzie) lub należy użyć jej pomiędzy kolejnymi wywołaniami
command.
W przypadku poleceń AutoCAD-a wymagających wybierania obiektów (jak
np. polecenia PRZERWIJ lub UTNIJ) zamiast punktów służących do wska-
zywania elementów może zostać użyta lista otrzymana przy użyciu funkcji
entsel. Patrz na przykład "Przesyłanie wskazań punktów do poleceń Auto-
CAD-a" w rozdziale 2.
Ograniczenia,- Polecenia AutoCAD-a DTEKST i SZKICUJ czytają dane
bezpośrednio z klawiatury i digitizera. Z tego powodu nie mogą być wywo-
ływane przez funkcję command. Jeśli funkcja command wywołuje polecenie
SCRIPT, to powinno to być ostatnie wywołanie funkcji w procedurze Auto-
LISP.
Jeżeli w trakcie wykonywania polecenia AutoCAD-a zostanie napotkany
zdefiniowany w AutoLISP-ie symbol PAUSE, wprowadzony jako jeden z ar-
gumentów funkcji command, to wykonywanie polecenia zostanie zawieszo-
ne, w celu umożliwienia użytkownikowi wprowadzenia danych.
Symbol PAUSE jest zdefiniowany jako łańcuch składający się z pojedyn-
czego znaku "\". Zamiast używania symbolu PAUSE, możliwe jest więc
bezpośrednie wprowadzanie tego znaku do listy argumentów. Jeżeli jed-
nak 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 AutoLISP-u.
Możliwe jest również, że w przyszłych wersjach AutoLISP-u 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 Au-
toCAD zawiesi realizację polecenie 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 powo-
duje wstrzymania działania programu w celu umożliwienia wczytania
danych wejściowych.
Funkcja command oczekująca na wprowadzenie danej przez użytkowni-
ka jest wciąż uważana za aktywną; nie można więc w tym momencie
wprowadzić innego wyrażenia AutoLISP-u do wartościowania.
Oto przykład użycia symbolu PAUSE:
(setq bik "MÓJBLOK")
(setq oldJay (getvar "clayer"))
(command "warstwa" "ustal" "NOWA_WAR" "")
(command "wstaw" bik pause """" pause)
108 Katalog funkcji AutoLISP-u
Rozdział 4
(command "warstwa" "ustal" oldJay "")
Powyższy fragment kodu ustala warstwę bieżącą na NOWA_WAR, oczekuje
na podanie przez użytkownika punktu wstawienia bloku MÓJBLOK (który
będzie wstawiony ze współczynnikami skali w kierunkach X i Y równymi l)
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 WYBIERZ gdy aktywny
jest zbiór PICKFIRST, polecenie WYBIERZ odczytuje zbiór PICKFIRST bez
oczekiwania na wprowadzenie danych przez użytkownika.
Uwaga: Opcje Promień i Średnica polecenia Wymiar, w niektórych sytu-
acjach wykorzystują dodatkowe zgłoszenia gotowości. W działaniu progra-
mów w AutoLISP-ie, utworzonych dla wersji wcześniejszych niż Wydanie 11
i wykorzystujących te polecenia, mogą wystąpić błędy.
Patrz także: Dodatkowe informacje na temat funkcji command można
znaleźć także w części "Przesyłanie poleceń" na stronie 23.
(cond (testl resultl...)...)
Argumentami funkcji może być dowolna liczba list. Funkcja testuje wyraże-
nia test-n, wyznaczając wartość pierwszych elementów każdej kolejnej listy
podrzędnej (w podanym 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 przetestowanym 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 war-
tość wyrażenia test. Funkcja cond jest główną funkcją warunkową
w AutoLISP-ie. Przykładowo, poniższe wyrażenie prezentuje zastoso-
wanie funkcji cond do obliczenia wartości bezwzględnej:
(cond ((minusp a) (- a))
(ta)
)
Jeżeli zmiennej a przypisano wartość -10, to wyrażenie to zwraca 10. Jak po-
kazano, funkcja cond może być użyta w charakterze funkcji typu case. Zwy-
kle jako ostatnie wyrażenie test używa się T (jest ono uwzględniane w przy-
padku braku pozytywnego wyniku testowania wszystkich poprzednich). Oto
kolejny prosty przykład. Funkcja testuje wprowadzany przez użytkownika
łańcuch znaków tekstowych, przypisany zmiennej s i zwraca l, jeżeli wpro-
wadzono T lub t. Jeżeli wprowadzono N lub n, to funkcja zwraca O, oraz nil
w każdym innym przypadku.
(cond ((=s "T") 1)
((=s"t")1)
((= s "N") 0)
((= s "n") 0)
(t nil)
Katalog funkcji AutoLISP-u 109
Funkcje AutoLISPu
(cons new-first-element list)
Jest to podstawowa funkcja służąca do tworzenia list. Argument new-first-
elementjest wprowadzany jako pierwszy argument listy list określonej przez
argument. 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ę zna-
ną w języku LISP jako para kropkowa. Pomiędzy pierwszym i drugim ele-
mentem pary kropkowej znaj duje 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 ja-
ko argument przez niektóre funkcje, które operują na zwykłych listach.
(cos angle)
Funkcja ta zwraca cosinus wyrażonego w radianach argumentu angle. Przy-
kładowo:
(cos 0.0) zwraca 1.0
(cos pi) zwraca -1.0
(cvunit value from to)
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 zo-
stał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 przeli-
czenia. Może ona być również listą, zawierającą dwie lub trzy liczby do prze-
liczenia (punkt 2W lub 3W). Argument from określa jednostki, w których po-
dana jest wielkość, a argument to określa jednostki, na które wielkość ma
zostać przeliczona. Argumenty from i to mogą być nazwami dowolnych jed-
nostek, zapisanymi w pliku acad.unt.
110 Katalog funkcji AutoLISP-u
Rozdział 4
Przykłady
(cvunit 1 "min" "s") zwraca 60.0
(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)
Zalecenie: Jeżeli w programie zachodzi konieczność dokonywania przeli-
czeń większej ilości danych według tego samego schematu, to znacznie bar-
dziej efektywną metodą jest dokonanie jednorazowego przeliczenia wielkości
1.0, a następnie stosowanie uzyskanego współczynnika do skalowania pozo-
stałych wartości. Sposób ten nadaje się do wszystkich jednostek zdefiniowa-
nych w pliku acad.unt, oprócz jednostek temperatury; w tym przypadku do-
chodzi jeszcze przesunięcie skali.
Informacje dodatkowe: "Jednostki w świecie fizycznym" na stronie 39.
(defun sym argument-list expr ...)
Funkcja defun definiuje funkcję o nazwie sym (należy zwrócić uwagę, że na-
zwa 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 fun-
kcji, 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 na-
zwie funkcji należy wpisać same nawiasy.
Poniższe przykłady argumentu argument-list ukazują wartości ważne i nie-
ważne:
(defun ela (x y) ...)
(defun ela (/ a b) ...)
(defun ela (x / temp)... )
(defun ela ()...)
Funkcja ma dwa argumenty
Funkcja ma dwa symbole lokalne
Jeden argument i jeden symbol lokalny
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 identy-
cznej, jak nazwa innej zmiennej lokalnej lub nazwa jednego z argumentów,
na przykład:
(defun fubar (aa/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.
Uwaga: 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 argu-
mentów i są one przypisywane odpowiednim symbolom. Symbole lokalne
mogą być używane wewnątrz wywoływanej funkcji bez powodowania zmian
Katalog funkcji AutoLISP-u 111
Funkcje AutoLISPu
ich wartości na poziomach zewnętrznych. Funkcja ta zwraca wartość ostat-
niego 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 ukazują wartości, zwracane przez nowe funkcje:
(defun dodaj10 (x)
(+ 10 x)
) zwraca DODAJ10
(dodaj10 5) zwraca 15
(dodaj10-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"
Ostrzeżenie: Jako argumentu sym nigdy nie należy używać nazw funkcji
lub symboli wewnętrznych; uniemożliwiłoby to dostęp do funkcji wewnętrz-
nej . Aby uzyskać listę wewnętrznych i zdefiniowanych wcześniej funkcji, na-
leży wykorzystać opisaną wcześniej funkcję atoms-famiły.
Informacje dodatkowe: W punkcie "Biblioteki funkcji - wczytywanie auto-
matyczne" w rozdziale l podano więcej informacji na temat bibliotek funkcji.
Należy także przeczytać opis funkcji setq i zawarte w nim przykłady sym-
boli lokalnych i globalnych
(distance pf 2 pt2)
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ą.
Informacje dodatkowe: "Narzędzia geometryczne" na stronie 28.
(distof string [tryb])
Funkcja distof wykonuje konwersję łańcucha string, zawierającego wartość
rzeczywistą (zmiennoprzecinkową) w formacie wyświetlania określanym
przez modę, na wartość typu real.
Argument modę określa jednostki, w których sformatowany jest łańcuch
string. Jego wartość powinna być zgodna z wartościami dopuszczalnymi dla
zmiennej systemowej AutoCAD-a LUNITS, ukazanym w poniższej tabeli.
Ponadto, jeśli modę jest pominięty, distof wykorzystuje bieżącą wartość
112 Katalog funkcji AutoLISP-u
Rozdział 4
zmiennej LUNITS.
Tabela 4-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 stringmusi być łańcuchem, który distof będzie w stanie właściwie
zinterpretować, zgodnie z formatem określonym przez argument modę. Mo-
że on mieć taką samą postać, jaką zwraca funkcja rtos, albo taką, jaką można
wprowadzić z klawiatury w odpowiedzi na zgłosznie AutoCAD-a. Funkcje
distof i rtos są komplementarne: jeśli argumentem stringdla 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 parametru modę są takie sa-
me).
Uwaga: Funkcja distof nie rozróżnia trybów 3 i 4 i traktuje je tak samo. Oz-
nacza to, że jeśli modę jest równy 3 (stopy i dziesiętne ułamki cala) lub 4 (sto-
py i zwykłe ułamki cala), a stńngjest określony w którymkolwiek z tych for-
matów, to distof zwróci poprawną wartość rzeczywistą.
W wyniku sukcesu wywołania funkcji distof zwracana jest liczba rzeczywi-
sta. W wypadku przeciwnym funkcja zwraca nil.
(entdel ename)
Element wskazywany przez argument enamejest wymazywany, jeżeli aktu-
alnie znajduje się na rysunku lub odtwarzany i umieszczany w rysunku, je-
żeli uprzednio został z niego wymazany. Tego rodzaju operacje mogą być do-
konywane bez utraty elementu tylko w czasie tej samej sesji w edytorze gra-
ficznym; 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 ele-
mentu nadrzę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
utworzenie definicji na nowo (z pominięciem elementu, który chcemy usu-
nąć) z użyciem funkcji entmake.
Przykład:
(setą e1 (entnext))
(entdel e1)
(entdel e1)
przypisuje e1 nazwę pierwszego elementu rysunku
usuwa element e1
odtwarza usunięty element e1
Katalog funkcji AutoLISP-u 113
Funkcje AutoLISPu
(entget ename [applist])
Element rysunku, którego nazwą jest ename, jest odszukiwany w rysunko-
wej bazie danych i zwracany w postaci listy, która zawiera definiujące go da-
ne. Jeżeli wyrażenie zawiera również opcjonalny argument applist, zawiera-
ją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
LISP-u list asocjacji, z których mogą być wyciągane przy pomocy funkcji as-
soc. 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 ele-
ment danych.
W poniższym przykładzie przyjęto następujące założenia:
aktualną warstwą rysunkową jest "O",
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 Linia):
Polecenie: linia
Od punktu: 1,2
Do punktu: 6,6
Do punktu; Enter
Dane elementu dla tego odcinka można otrzymać przez wprowadzenie wy-
rażenia:
Polecenie: (setq a (entget (entlast)))
co powoduje przypisanie zmiennej a listy podobnej lub takiej samej, jak po-
niższa:
((-1 .
)
(O . "LINĘ") Typ elementu
(8 . "O") 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 -l zawiera na-
zwę elementu, którego dotyczą przedstawione w liście dane. Opisywana da-
lej funkcja entmod korzysta z tej nazwy przy identyfikowaniu elementu,
który ma być zmodyfikowany.
Poszczególne pary kropkowe, reprezentujące konkretne wartości, mogą zo-
stać w łatwy sposób wyodrębnione z listy za pomocą funkcji assoc, a same
wartości można z nich potem wyciągnąć z użyciem funkcji Cdr. Kody skła-
dających się na definicję elementu danych są takie same, jakie stosuje się
w formacie DXF. Są one opisane w rozdziale 11 w podręczniku AutoCAD
Podręcznik Adaptacyjny.
Podobnie jak w przypadku plików DXF, pozycje nagłówkowe elementu (kolor
114 Katalog funkcji AutoLISP-u
Rozdział 4
i rodzaj linii rysunkowej, grubość, znacznik poprzedzający atrybuty oraz
identyfikator elementu) są podawane tylko wtedy, gdy mają wartości różne
od standardowych propozycji AutoCAD-a. 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.02.00.0), a nie występująjako oddziel-
ne 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 war-
tość 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 wspo-
mnianej konwencji.
Przed wykonaniem funkcji entget lub entmod na elementach Vertex (Wie-
rzchołek Polilinii), należy odczytać lub zapisać nagłówek (element Połyline)
Polilinii, do której wierzchołki te należą. Jeśli ostatnia przetwarzana Poli-
liniajest 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 -l umożliwia zaakceptowanie listy elementów
przez modyfikujące je operacje oraz pozwala uniknąć konieczności równole-
głego utrzymywania nazwy elementu w dodatkowej 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 zo-
stać 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 przeciwnym do ruchu wskazówek zegara, oraz
że identyfikatory elementów są odblokowane.
Polecenie: rodzlin
7/Definiuj/Wczytaj/Ustal: ustal
Nowy rodzaj linii dla elementów (albo ?) : dashed
7/Definiuj/Wczytaj/Ustal: Enter
Polecenie: kolor
Nowy kolor elementów ; niebieski
Polecenie: warstwa
7/Twórz/Ustal/Nowa/Widoczna/UKryta/Kolor/Rodzlin/Zablok/Odblok/
/zaMkn/OTw: twórz
Katalog funkcji AutoLISP-u 115
Funkcje AutoLISPu
Nowa warstwa aktualna <0>: komentarze
7/Twórz/Ustal/Nowa/Widoczna/UKryta/Kolor/Rodzlin/Zablok/Odblok/
/zaMkn/OTw: Enter
Polecenie: tekst
Just/STyl/: 2,2
Wysokość <0.2000>: .3
Kqt 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. Znaczenie tej listy stanie
się jasne po skorzystaniu z informacji zawartych w rozdziale 11 podręczni-
ka AutoCAD Podręcznik Adaptacyjny.
( (-1 . )
(O . "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źniki 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ła-
skich powierzchni 3W (rysowanych poleceniem 3WPOW), siatek przestrzen-
nych (polecenie 3WSIATKA) i elementów wymiarowych, UWE jest równo-
ważny GUW (punkty elementu są punktami wyrażonymi we współrzędnych
globalnych). Dla wszystkich innych elementó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), koniecz-
na 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 po-
wyższego elementu Tekst w charakterze przykładu:
(setq p (cdr (assoc 10 ed))) zwracano 2.0 0.0)
i przypisze zmiennej p punkt początkowy tekstu, wyrażony we współrzęd-
nych 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.28558)
116 Katalog funkcji AutoLISP-u
Rozdział 4
Wyrażenie to wykorzystuje symbol e (nazwa elementu tekstu) w celu wska-
zania 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).
(entlast)
Funkcja zwraca nazwę elementu, który jest ostatnim niewymazanym ele-
mentem głównym w rysunkowej bazie danych. Funkcja ta jest często wyko-
rzystywana 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))
(setq e2 (entnexte1))
przypisuje e1 nazwę ostatniego ele-
mentu z bazy danych rysunku
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
(while (setq b (entnext a)) on elementy podrzędne, to bierz je ko-
(setq a b) lejno i sprawdzaj w pętli, czy są
) następne, aż trafisz na ostatni
)
a Zwróć ostatni element główny l pod-
) rzędny
(entmake [elist])
Funkcja ta tworzy w rysunku nowy element. Jeżeli operacja tworzenia ele-
mentu się powiedzie, to funkcja zwraca listę zawierającą definiujące ten ele-
ment dane. Jeżeli natomiast element nie może zostać z jakichkolwiek powo-
dów utworzony (np. z powodu nieprawidłowych danych), wówczas funkcja
zwraca nil.
Argument elistmusi być listą zawierającą definiujące element dane, której
format jest podobny do listy zwracanej przez funkcję entget. Musi on zawie-
rać wszystkie informacje niezbędne do zdefiniowania elementu. Gdy jakiej-
kolwiek z wymaganych informacji brakuje, to generowany jest komunikat
błędu i element jest odrzucany. W przypadku opuszczenia danych podawa-
nych 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 ent-
make.
Katalog funkcji A utoLISP-u 117
Funkcje AutoLISPu
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 entmake sprawdza również, jeżeli typ elementu te-
go wymaga, obecność takich danych jak nazwy bloków, stylów wymiarowa-
nia, stylów tekstu oraz nazwy symboli (w tym wypadku chodzi o elementy
rysunku wprowadzane poleceniem SYMBOL).
Rodzaj elementu rysunku (tzn. Circie, Linę itp.) musi być pierwszym lub dru-
gim elementem listy elist. Jeżeli rodzaj elementu jest podany na drugim miej-
scu, to na pierwszym może być tylko nazwa elementu. Jest to postać listy
analogiczna do zwracanej 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 promieniu l. Opcjonalne pola warstwy i rodzaju linii zostały pominię-
te, co oznacza przyjęcie wartości obowiązujących.
(entmake '( (O . "CIRCLE") Typ elementu
(62 . 1) Kolor
(104.04.00.0) Środek
(40.1.0) Promień
)
)
Uwagd: Elementy utworzone w warstwie zablokowanej nie są regenerowa-
ne aż do odblokowania warstwy.
Elementy złożone
Do zdefiniowania elementu złożonego (definicja Bloku, Polilinia lub wsta-
wiony do rysunku odnośnik do Bloku z Atrybutami) konieczne jest wielo-
krotne wywoływanie funkcji entmake i zdefiniowanie ich elementów pod-
rzędnych (atrybutów lub wierzchołków). Gdy entmake zorientuje się, że two-
rzony jest element złożony, zakłada tymczasowy plik dyskowy przechowują-
cy dane definiujące. Przy każdym wywołaniu entmake sprawdzana jest obe-
cność tego pliku (oznaczająca tworzenie elementu złożonego); jeżeli plik taki
istnieje, dodawane są do niego nowe dane. Po zakończeniu definiowania no-
wego elementu złożonego (po dodaniu kończącego sekwencję elementu Se-
qend lub Endbik), podane dane są ponownie sprawdzane i do rysunku do-
dawany jest nowy element złożony. Zakończenie tworzenia definicji bloku
(przez wywołanie funkcji entmake w celu zdefiniowania elementu Endbik)
powoduje zwrócenie nazwy bloku, a nie jak zazwyczaj listy zawierającej de-
finiujące element dane.
Jeżeli podczas tworzenia elementu złożonego podane zostaną dane niezgod-
ne z typem definiowanego elementu, wówczas odrzucana jest definicja za-
ró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 defi-
nicji bloku odwołań do definicji innych bloków.
Kod grupy 66 (sygnalizujący wystąpienie atrybutów) jest uwzględniany jedy-
nie w przypadku bloków wstawionych w rysunek ("INSERT"). W przypadku
Polilinii, dla kodu grupy 66 wymuszana jest wartość l (oznaczająca istnienie
wierzchołków), a dla elementów wszystkich innych typów wymuszana jest
118 Katalog funkcji AutoLISP-u
Rozdział 4
standardowa wartość zero. Jedynym elementem, który ma prawo występo-
wać po elemencie Połyline (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 opera-
cji definiowania elementu złożonego uzyskuje się przez wywołanie funkcji
entmake bez argumentów. Powoduje to usunięcie zawartości pliku tymcza-
sowego i zwrócenie nil.
Wszystkie elementy podrzędne wchodzące w skład elementu złożonego mu-
szą być utworzone dla tego samego obszaru. Elementy składowe mogą ist-
nieć albo w obszarze papieru, albo w obszarze modelu, ale nie mogą to być
elementy z różnych obszarów. Przykładowo, elementy Połyline, Vertex i Se-
qend muszą leżeć w tym samym obszarze. To samo dotyczy elementów In-
sert, Attrib i Seqend.
Do utworzenia nowej definicji bloku można wykorzystać elementy Błock
i Endbik. 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 AutoCAD-a narzuca jed-
nak ograniczenie w zakresie liczby wierzchołków, które można podać dla jed-
nego elementu płaskiej powierzchni (ściany). Bardziej skomplikowane wie-
loboki 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ć niewidocznymi, aby zapobiec
rysowaniu linii podziałów; nie powinny być one widoczne. Polecenie PPOW
wykonuje ten podział automatycznie, ale jeżeli program użytkowy samo-
dzielnie 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ą. Pro-
gram użytkowy określa ten parametr na podstawie wartości zmiennej syste-
mowej 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.
Ostrzeżenie: Blok tworzony przez funkcję entmake może zastąpić blok już
istniejący. Funkcja entmake nie sprawdza konfliktu nazw w tablicy defini-
cjach bloków i dlatego przed użyciem jej, w celu utworzenia bloku, należy za
pomocą funkcji tbisearch 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 wymiarowania 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.
Katalog funkcji AutoLISP-u 119
Funkcje AutoLISPu
Nazwą bloku anonimowego (grupa o kodzie 2) jest *Vnnn, gdzie nnnjest nu-
merem generowanym przez AutoCAD-a. 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 rozpo-
czyna 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 ignoro-
wany. Po utworzeniu bloku, entmake zwraca jego nazwę. Jeżeli podczas two-
rzenia bloku funkcja entmake jest wywoływana wielokrotnie, to nazwa blo-
ku jest zwracana po zakończonym sukcesem wywołaniu:
(entmake "endbik")
(element Endbik kończy sekwencję elementów podrzędnych w przypadku
bloku).
Przy każdym wprowadzaniu rysunku do edytora graficznego, wszystkie
niewykorzystywane w nim bloki bez nazwy są usuwane z tablicy zawiera-
ją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ć wyko-
rzystana do utworzenia wstawienia bloku bez nazwy (element Insert). Na-
leż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 ele-
ment rysunku) mogą być modyfikowane za pomocą funkcji entmod.
Ostrzeżenie: Chociaż wstawiany blok bez nazwy, staje się stałym składni-
kiem rysunku, to jednak jego nazwa może ulegać zmianie w kolejnych se-
sjach edycyjnych. Dlatego programy użytkowe nie mogą zakładać, że nazwy
bloków anonimowych są stałe.
(entmod elist)
Funkcja entmod operuje na argumencie elist, który jest listąw postaci zwra-
canej przez funkcję entget, i aktualizuje informacje w bazie danych związa-
ne z elementem, którego nazwa jest określona w tej liście w grupie o kodzie
-l. Tak więc, podstawowy sposób uaktualniania bazy danych przez Auto-
LISP polega na wydobywaniu informacji o elemencie 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 aktu-
alizowaniu informacji o elemencie w bazie danych za pomocą entmod.
Przykład
(setq en (entnext))
(setq ed (entget en))
(setq ed
(subst(cons 8 "O")
(assoc 8 de)
de
)
)
(entmod ed)
przypisuje en nazwę pierwszego ele-
mentu rysunku
Przypisuje ed dane elementu o nazwie
en
zmienia warstwę w danych ed na war-
stwę "O"
modyfikuje warstwę elementu en w ry-
sunku
120 Katalog funkcji AutoLISP-u
Rozdział 4
Istnieje kilka ograniczeń na zmiany dokonywane przy użyciu funkcji
entmod. Przede wszystkim nie może być zmieniany typ elementu ani je-
go identyfikator (jeżeli chcemy to zrobić, należy po prostu wymazać ten ele-
ment 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 ele-
mentu, muszą być znane AutoCAD-owi 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 parametrach standardowych dla polecenia WARSTWA
z opcją Nowa.
Dla pól przeznaczonych na dane elementu o wartościach zmiennoprzecinko-
wych (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 błąd na tyle poważny, że baza danych nie może być ua-
ktualniona, funkcja zwraca nil. W przeciwnym wypadku funkcja entmod
zwraca listę będącą j ej argumentem, entmod nie może zmieniać pól wewnę-
trznych, takich jak nazwa elementu w grupie -2 elementu Seqend. Próby do-
konania 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 wyko-
rzystaniu entmod uaktualniany jest element podrzędny (wierzchołek Poli-
linii 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 (Wie-
rzchołek Polilinii), należy odczytać lub zapisać nagłówek (element Połyline)
Polilinii, do której wierzchołki te należą. Jeśli ostatnia przetwarzana Poli-
liniajest 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 mody-
fikacji elementu typu Rzutnia. Możliwa jest zmiana na O lub na l pola de-
terminują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.
Ostrzeżenie: Funkcja entmod może być wykorzystana do modyfikacji ele-
mentów wewnątrz definicji bloku. Tak wprowadzone modyfikacje dotyczą
tym samym wszystkich wywołań bloku w rysunku. Tą drogą można utwo-
rzyć blok wywołujący sam siebie. Nie należy tego robić; prawdopodobnie spo-
woduje to załamanie się pracy AutoCAD-a.
Katalog funkcji AutoLISP-u 121
Funkcje AutoLISPu
(entnext [ename])
Jeżeli funkcja jest wywoływana bez argumentów, to zwraca ona nazwę pier-
wszego niewymazanego elementu z rysunkowej bazy danych. Jeżeli wyraże-
nie 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ępnego elementu
rysunkowego, to funkcja zwraca nil. Funkcja entnext zwraca zarówno ele-
menty główne, jak również ich elementy podrzędne.
Elementy rysunku wybierane przy wykorzystaniu funkcji ssget są elemen-
tami głównymi. Nie zaliczają się do nich atrybuty Bloków ani wierzchołki Po-
lilinii. 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 ele-
mentu 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 pomo-
cą entnext, to nazwę elementu wobec niego nadrzędnego można uzyskać
przez powtarzanie entnext aż do momentu dojścia do elementu SEQEND.
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 sekwen-
cji. Przykład:
(setq e1 (entnext)) Przypisuje e1 nazwę pierwszego elementu
rysunku
(setq e2 (entnext e1)) Przypisuje e2 nazwę następnego elementu
po e1
(entsel [prompt])
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 ta-
kich sytuacji w programie AutoCAD można znaleźć przy lokalizowaniu po-
łożenia punktów względem obiektów oraz przy poleceniach PRZERWIJ, UT-
NIJ i WYDŁUŻ. Programy AutoLISP-u mogą wykonywać podobne zadania
dzięki funkcji entsel; entsel wybiera pojedynczy element, przy czym konie-
czne 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 lokalizacji), chyba że specjalnie zażądamy inaczej pod-
czas wykonywania funkcji. Funkcja entsel uwzględnia słowa kluczowe, zde-
finiowane w ostatnim wywołaniu funkcji initget.
Funkcja entsel zwraca listę, której pierwszym elementem jest nazwa wybra-
nego elementu. Drugim jej elementem jest lista współrzędnych punktu uży-
tego do wskazania elementu (o wartościach odniesionych do aktualnie obo-
wią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ę stan-
dardowe zgłoszenie Wskaż obiekty:. Przedstawiona poniżej sekwencja dia-
logu z programem AutoCAD ilustruje sposób użycia funkcji entsel. Zwraca-
122 Katalog funkcji AutoLISP-u
Rozdział 4
na lista jest podobna lub taka sama, jak pokazana poniżej:
Polecenie: linia
Od punktu: },}
Do punktu: 6,6
Do punktu: Enter
Polecenie: (setq e (entsel "Uprzejmie proszę wybrać element:"))
Uprzejmie proszę wybrać element: 3,3
( (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).
Zagadnienia związane tematycznie: Patrz opis funkcji initget.
(entupd ename)
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, przebie-
gałoby w niedopuszczalnie wolnym tempie. Aktualizację wyglądu modyfiko-
wanej polilinii lub bloku można więc wymusić dopiero przez użycie funkcji
entupd. Argumentem funkcji entupd jest nazwa dowolnego jednego elemen-
tu 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.
Uwaga: Jeżeli funkcja entupd jest stosowana wobec elementu zagnieżdżo-
nego (elementu w Bloku) lub Bloku zawierającego elementy zagnieżdżone,
to regeneracja może nie dotyczyć wszystkich zagnieżdżonych elementów Blo-
ku. Aby uzyskać pewność, że wszystkie bloki i ich elementy zagnieżdżone zo-
stały poddane regeneracji, należy wywołać polecenie REGEN. Można to rów-
nież zrealizować w AutoLISP-ie wprowadzając (command "regen").
Przykład
Przy założeniu, że pierwszym elementem w bazie danych rysunku jest po-
lilinia o kilku wierzchołkach:
(setq e1 (entnext)) Przypisuje e1 nazwę elementu dla tej polilinii
Przypisuje e2 jej pierwszy wierzchołek
(setq e2 (entnext e1)) Przypisuje ed dane wierzchołka
(setq ed (entget e2))
(setq ed
(subst'(10 1.0 2.0) Zmienia położenia wierzchołka w ed na punkt
(assoc 10 ed) o współrzędnych 1,2
ed
)
)
(entmod ed) Przesuwa wierzchołek na rysunku
(entupd e1) Regeneruje element e1 (polilinie)
Katalog funkcji AutoLISP-u 123
Funkcje AutoLISPu
(eq exprl expr2)
Funkcja określa, czy argumenty exprl 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ą iden-
tyczne. W przeciwnym razie funkcja zwraca nil. Funkcja ta jest zazwyczaj
używana przy sprawdzaniu, czy dwie listy są w rzeczywistości takie same.
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.
(equal exprl expr2 [fuzz])
Funkcja ta określa, czy argumenty exprl i expr2 są sobie równe; należy przez
to rozumieć, że wartościowanie obu daje taki sam wynik. Przykładowo wy-
znaczanie wartości przypisania:
(setq f1 '(a b c))
(setq f2 '(a b c))
(setq f3 f2)
to otrzymuje się wyniki:
(equal f1 f3) zwraca T wyniki ewaluacji f1 i f3 są takie same
(equal f3 f2) zwraca T f3 i f2 sq dokładnie tą samą listą
Należy zauważyć, że dwie listy, dla których funkcja equal zwraca T, funkcja
eq może traktować jako różne. Różnica taka nie wystąpi w przypadku ato-
mó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. wpół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 zo-
stały obliczone z użyciem różnych metod. Dlatego też funkcja equal może za-
wierać dodatkowy argument fuzz, który określa maksymalną dopuszczalną
różnicę między argumentami exprl 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.
124 Katalog funkcji AutoLISP-u
Rozdział 4
(*error* string)
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 AutoLISP-u. Jedynym jej argumentem jest łańcuch alfanume-
ryczny 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 AutoLISP-u, tzn.
spowodowałaby zapisanie na ekranie komunikatu Błqd: 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żnie-
nie poprzedniej funkcji AutoCAD-a, wywołanej poprzez funkcję command.
Informacje dodatkowe: "Obsługa błędów" w rozdziale 5 opisuje procedurę
obsługi błędu, testującą łańcuch alfanumeryczny zwracany przez funkcje
exit i quit.
(evalexpr)
Funkcja ta zwraca wynik wyznaczenia wartości argumentu expr, który jest
dowolnym wyrażeniem LISP-u. Przykładowo, jeżeli:
(setq a 123)
(setq b 'a)
to:
(eval 4.0)
(eval (abs-10))
(eval a)
(eval b)
zwraca 4.0
zwraca 10
zwraca 123
zwraca 123
(exit)
Funkcja exit wymusza zakończenie działania bieżącego programu użytko-
wego. Po wywołaniu exit, zwraca ona komunikat błędu informujący o prze-
rwaniu działania wykonywanego programu i przywraca na ekranie standar-
dowe zgłoszenie AutoCAD-a Polecenie:
Informacje uzupełniające: Patrz także opis funkcji quit.
Katalog funkcji AutoLISP-u 125
Funkcje AutoLISPu
(exp number)
Funkcja ta zwraca wartość typu real otrzymaną w wyniku podniesienia li-
czby 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
(expand number)
Przydziela obszar węzłów, żądając określonej liczby segmentów. Patrz także
część pod tytułem "Ręczne przydzielanie pamięci" w rozdziale 5, gdzie są po-
dane dalsze informacje na temat funkcji expand.
(expt basepower)
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 in-
nym wypadku zwraca liczbę rzeczywistą. Przykładowo:
(expt 2 4) zwraca 16
(expt 3.0 2.0) zwraca 9.0
(findfile filename)
Funkcja findfile poszukuje określonego pliku w bibliotecznej ścieżce poszu-
kiwań AutoCAD-a 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 kolej-
ności:
Katalog bieżący
Katalog zawierający plik bieżącego rysunku
Katalogi określone przez zmienną środowiskową ACAD
Katalog zawierający pliki programu AutoCAD
Uwaga: W zależności od bieżącego środowiska, dwa lub więcej tych katalo-
gów, może być w rzeczywistości tym samym katalogiem.
Funkcja findfile nie stosuje żadnych założeń związanych z typem pliku file-
name 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 po-
dano pełną nazwę pliku (razem ze ścieżką dostępu), to AutoCAD przeszukuje
tylko wskazany katalog. W przykładach przedstawionych niżej separatorem
126 Katalog funkcji AutoLISP-u
Rozdział 4
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 lacad, zawiera on plik abc.lsp, dokony-
wana jest edycja rysunku umieszczonego w katalogu lacad /rysunki, zmien-
nej środowiskowej ACAD przypisano wartość / acad tsupport, plik xyz. txt ist-
nieje tylko w katalogu lacad/support, a w żadnym z wyżej wymienionych
katalogów nie ma pliku bzdury. Wówczas:
(findfile "abc.lsp")
(findfile "xyz.txt")
(findfile "bzdury")
zwraca "/acad/abc.lsp"
zwraca 7acad/support/xyz.txt"
zwraca nil
Pełna nazwa ze ścieżką dostępu zwracana przez findfile, jest możliwa do wy-
korzystania przez funkcję open.
Informacje dodatkowe: "Szukanie pliku" w rozdziale 2.
(fix number)
Funkcja ta zwraca wynik konwersji argumentu number na liczbę typu inte-
ger. 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
Uwaga: 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 trans-
ferowane pomiędzy AutoLISP-em i AutoCAD-em są ograniczone do wartości
16-bitowych).
(float number)
Funkcja zwraca wynik konwersji argumentu numbema liczbę zmiennoprze-
cinkową typu real. Argument number może być typu real lub integer. Przy-
kładowo:
(float 3) zwraca 3.0
(float 3.75) zwraca 3.75
(foreach name list expr...)
Kolejne elementy argumentu list są przypisywane zmiennej name, a nastę-
pnie każde exprjest poddawane ewaluacji dla każdego elementu listy. Do-
zwolone jest podanie dowolnej liczby argumentów expr. Funkcja foreach
zwraca rezultat ostatniego wyliczonego wyrażenia. Przykładowo:
(foreach n '(a b c) (print n))
Katalog funkcji AutoLISP-u 127
Funkcje AutoLISPu
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.
(gc)
Jest to funkcja wymuszająca czyszczenie pamięci przez zwolnienie obszaru
niewykorzystywanych węzłów. Szersze objaśnienie procesu zwalniania pa-
mięci jest podane w części "Obszar węzłów" w rozdziale 5.
(gcd numi num2)
Wartością zwracaną przez funkcję gcd jest największy wspólny podzielnik
argumentów num 1 i num2. Oba argumenty muszą być liczbami typu integer.
Przykładowo:
(gcd 81 57) zwraca 3
(gcd 12 20) zwraca 4
(getangle [pt] [prompt])
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 O radianów kąt określony przez
wartość zmiennej systemowej ANGBASE i kierunek narastania kątów prze-
ciwny 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 promptjest opcjonalnym łańcuchem alfanumerycznym, wyświet-
lanym jako zgłoszenie gotowości, a ptjest 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 for-
macie zapisu miar kątowych AutoCAD-a. Chociaż jednostkami mogą być
aktualnie stopnie, grady lub inne jednostki, funkcja ta zawsze zwraca war-
tość kąta w radianach.
Inną metodą jest pokazanie kąta przez wskazanie dwóch punktów 2W na
ekranie graficznym. 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 pier-
wszy z tych punktów; pozwala to pokazać kąt przez wskazanie drugiego pun-
ktu. 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 konstru-
kcyjnej.
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 mie-
128 Katalog funkcji AutoLISP-u
Rozdział 4
rzonymi z uwzględnieniem aktualnych wartości zmiennych systemowych
ANGDIR i ANGBASE. Jednak, gdy kąt zostanie już wprowadzony, jego war-
tość jest mierzona w kierunku przeciwnym do ruchu wskazówek zegara (nie-
zależ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 AutoLISP-ie. 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 ilustracją i opi-
sem dla funkcji getorient. Patrz również opis initget.
(getcorner pt [prompt])
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żeniem wyświetlanego na ekranie krzyża nitkowe-
go. 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 zo-
stanie podany punkt 3W, to jego współrzędna Z jest pomijana; jako współ-
rzędna Z punktu bazowego przyjmowana jest zawsze wartość aktualnego po-
ziomu.
Kąt nie może być wprowadzony do getcorner w postaci innego wyrażenia
w AutoLISP-ie.
Informacje uzupełniające: Patrz również opis funkcji getpoint i initget.
(getdist [pt] [prompt])
Funkcja ta powoduje przerwę na podanie przez użytkownika wartości wy-
miaru liniowego lub dwóch punktów; getdist zwraca następnie liczbę rzeczy-
wistą, 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 aktual-
nym obowiązującym układzie jednostek miar liniowych AutoCAD-a. Jednak,
nawet gdy aktualnie obowiązującym układem jednostek są stopy i cale, war-
tością zwracaną przez funkcję jest zawsze liczba typu real.
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ą li-
nię pomocniczą między pierwszym punktem, a aktualnym położeniem ekra-
nowego krzyża nitkowego, co pomaga w wizualnej ocenie wprowadzanej
wielkości. Argument pfjest opcjonalnym bazowym punktem 2W lub 3W wy-
rażonym we współrzędnych aktualnie obowiązującego LUW. Jeżeli jest po-
Katalog funkcji AutoLISP-u 129
Funkcje AutoLISPu
dany, staje się pierwszym z dwóch wyznaczających wartość odległości pun-
któ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]est opcjonalnym ciągiem znaków alfanumerycznych, wy-
świetlanym jako zgłoszenie gotowości.
Uwaga: 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.
(getenv variable-name)
Funkcja ta zwraca wartość typu string w postaci łańcucha alfanumeryczne-
go przypisanego do systemowej zmiennej środowiskowej. Argument veriab-
/e-namejest łańcuchem określającym nazwę zmiennej, której wartość ma być
odczytana. Jeśli taka zmienna nie istnieje, to funkcja getenv zwraca nil.
Przykładowo, jeżeli zmiennej środowiskowej ACAD przypisano wartość
/acad/support, a zmienna BRAK nie istnieje, to:
(getenv "ACAD") zwraca "/acad/support"
(getenv "BRAK") zwraca nil
Uwagd: Należy pamiętać o tym, że w środowiskach bazujących na systemie
operacyjnym UNDC, łańcuchy ACAD i acad odnoszą się do dwóch różnych
zmiennych środowiskowych, gdyż system UNEC rozróżnia duże i małe litery.
(getfiled title difault ext flags)
Funkcja getfiled wyświetla okno dialogowe, zawierające listę dostępnych pli-
ków o podanym 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 standar-
dowe okno plików AutoCAD-a. Argument title określa nagłówek całego okna
dialogowego, argument difault definiuje standardową (proponowaną) nazwę
pliku (może to być łańcuch pusty""), a argument exł]est standardowym (pro-
ponowanym) rozszerzeniem nazwy pliku (podanie tu łańcucha pustego ""jest
równoważne proponowanemu rozszerzeniu *). Pokazana ilustracja przed-
stawia 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.
130 Katalog funkcji AutoLISP-u
Rozdział 4
Przykład
Widoczne poniżej okno dialogowe ukazuje się po następującym wywołaniu
funkcji getfiled:
(getfiled "Wybierz plik LSP" "/acad/support/" "Isp" 8)
ustalony przez argument title
ustalony przez argument ext
Uzór: Kalało Kalało gi
. Isp
D:SCADSACAD12SSUPPORT Pliki:
S<ń:> 3D 3DARRńV ńCADRIZ 01 UTILS APPLOAD ńSCOMMON ASCTEXT CISĘ CHGTEXT CHROMA i
r^n>
StArtPlik:
l TńK | l "" | Ponoć...
ustalony przez część argumentu
default, określającą nazwę
katalogu; jeżeli default nie określa
ścieżki, to jest to katalog aktualny
niedostępny, jeżeli wartość bitu 2
wykorzystano w argumencie flags
dostępny, jeśli podano
standardową nazwę pliku
ustalony przez część argumentu
default, określającą nazwę pliku
Rysunek 4-1. Przykładowe okno dialogowe funkcji getfiled
Argument flags jest wartością typu integer (pole zakodowane bitowo), ste-
rują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ść argumentu flags z zakresu od O do 15. Wartości i zna-
czenie argumentu flags są następujące:
Tabela 4-5. Parametr flags funkcji getfiled
Oznacza żądanie utworzenia nowego pliku
Blokuje przycisk Wpisz
Pozwala użytkownikowi wprowadzić dowolne rozszerzenie
nazwy pliku
Wykonuje szukanie pliku o podanej nazwie w ścieżce
poszukiwania bibliotek AutoCAD-a
Poszczególne znaczenia wartości argumentu flags są poniżej opisane bar-
dziej szczegółowo.
Wartość=1 (bit 0)
Bit O powinien być ustawiony wówczas, gdy program
ma domagać się od użytkownika podania nazwy no-
wego 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 nie-
istniejącego powoduje wyświetlenie komunikatu
błędu w dolnej części okna dialogowego.
Jeśli bit O jest ustawiony i użytkownik wybierze plik
już istniejący, AutoCAD wyświetli okienko ostrze-
gawcze i zaoferuje możliwość przerwania operacji
lub jej kontynuowania z podanymi danymi. Na ry-
Katalog funkcji AutoLISP-u 131
Funkcje AutoLISPu
sunku pokazane jest okno alarmowe.
Wartość=2 (bit 1)
Wartość=4 (bił 2)
Wartość=8 (bit 3)
Blokuje możliwość użycia przycisku Napisz. Bit l
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 dialogo-
wego).
Jeśli bit ten nie jest ustawiony, korzystanie z przy-
cisku Napisz jest możliwe. Gdy użytkownik wskaże
ten przycisk, okno dialogowe znika, a funkcja getfi-
led zwraca wartość l.
Pozwala użytkownikowi ustalić dowolne rozszerze-
nie 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:.
Jeśli jednocześnie bit Sjest ustawiony, a bit O nie jest
ustawiony, to funkcja getfiled poszukuje pliku o po-
danej nazwie w ścieżce poszukiwania bibliotek
AutoCAD-a. Jeśli plik i jego katalog zostaną znale-
zione w ścieżce poszukiwania bibliotek AutoCAD-a,
ścieżka do pliku zostaje odcięta i getfiled zwraca tyl-
ko samą nazwę pliku. (Ścieżka nie zostanie odcięta
w wypadku, gdy znaleziony zostanie plik o tej samej
nazwie, ale znajdujący się w innym katalogu dysko-
wym.)
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.
(getint [prompt])
Funkcja ta powoduje przerwę, która umożliwia użytkownikowi wprowadze-
nie 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. Argu-
ment prompt]est opcjonalnym ciągiem alfanumerycznym, który ma być wy-
132 Katalog funkcji AutoLISP-u
Rozdział 4
świetlany jako zgłoszenie gotowości. Przykładowo:
(setq num (getint))
(setq num (getint "Liczba typu integer: "))
Uwago: Funkcja getint nie akceptuje danych wprowadzanych z użyciem in-
nych wyrażeń języka AutoLISP.
Informacje uzupełniające: Patrz "Funkcje (getxxx) pobierające dane od
użytkownika" oraz opis funkcji initget.
(getkword [prompt])
Funkcja getkword wymaga, aby użytkownik wprowadził słowo kluczowe. Li-
sta aktualnie branych pod uwagę słów kluczowych jest ustalana przed wy-
wołaniem getkword, poprzez wywołanie funkcji initget. Opcjonalny argu-
ment prompt jest łańcuchem alfanumerycznym, wyświetlanym jako zgłosze-
nie programu.
Funkcja getkword zwraca słowo kluczowe, odpowiadające wprowadzonemu
przez użytkownika łańcuchowi alfanumerycznemu. AutoCAD umożliwia po-
nawianie 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 zablokowanie możliwości podania odpowiedzi pustej (argument bits równy
l) przez wywołanie funkcji initget, stwarzającej warunki do wywołania fun-
kcji getkword:
(initget 1 "Tak Nie")
(setq x (getkword "Czy jesteś pewny? (Tak lub Nie)"))
Powyższy fragment kodu programu w AutoLISP-ie 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 po-
krywa 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 argu-
ment prompt jest pominięty, AutoCAD wyświetla zgłoszenie:
Spróbuj jeszcze raz:
Funkcja getkword nie akceptuje danych wprowadzanych z użyciem innych
wyrażeń języka AutoLISP.
Informacje uzupełniające: Patrz "Funkcje (getxxx) pobierające dane od
użytkownika" oraz opis funkcji initget.
(getorient [pt] [prompt])
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
Katalog funkcji AutoLISP-u 133
Funkcje AutoLISPu
zwraca kąty mierzone w radianach. Kierunkiem zerowym jest zawsze kie-
runek w prawo (wschód), a wartość kąta wzrasta przeciwnie do kierunku ru-
chu wskazówek zegara. Podobnie jak getangle, funkcja getorient wyraża
zwracane kąty w radianach, w odniesieniu do aktualnej płaszczyzny kon-
strukcyjnej.
Argumenty pt i prompt mają znaczenie takie samo, jak dla funkcji getangle.
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 sy-
stemowych ANGDIR i ANGBASE. Jednak po wprowadzeniu, wartość kąta
jest mierzona w kierunku przeciwnym do ruchu wskazówek zegara, poczy-
nając od kierunku zerowego wskazującego w prawo (niezależnie od wartości
zmiennych ANGDIR i ANGBASE).
Z tego powodu, jeżeli zdefiniowano inny kierunek zerowy lub inny kierunek
wzrostu kątów (za pomocą polecenia JEDN lub przez zmianę wartości zmien-
nych systemowych ANGBASE i ANGDIR), to konieczne staje się wykonanie
odpowiedniej konwersji wartości kątowych.
Funkcja getangle powinna być wykorzystywana do określania wielkości ob-
rotu (względna wartość kąta), a getorient do ustalania orientacji (bezwzględ-
na wartość kąta).
Funkcja getorient nie akceptuje danych wprowadzanych z użyciem innych
wyrażeń języka AutoLISP.
Informacje uzupełniajcie: Patrz "Funkcje (getxxx) pobierające dane od
użytkownika" oraz opis funkcji getangle i initget.
(getpoint [pt] [prompt])
Funkcja ta powoduje przerwę przeznaczoną na umożliwienie użytkownikowi
wprowadzenia punktu. Argument p? 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 for-
macie zapisu jednostek lub można go wskazać na ekranie. Jeżeli podany zo-
stanie punkt bazowy w postaci argumentu, to AutoCAD wyświetla na ekra-
nie ruchomą linię pomocniczą, ciągnącą się od tego punktu do punktu odpo-
wiadają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 ą war-
tości określone w aktualnym LUW.
Uwaga: Funkcja getpoint nie akceptuje danych wprowadzanych z użyciem
innych wyrażeń języka AutoLISP.
Informacje uzupełniające: Patrz "Funkcje (getxxx) pobierające dane od
użytkownika" oraz opis funkcji getcorner i initget.
134 Katalog funkcji AutoLISP-u
Rozdział 4
(getreal [prompt])
Funkcja ta powoduje przerwę, która umożliwia użytkownikowi wprowadze-
nie liczby typu real, a następnie zwraca tę liczbę. Argument prompt jest
opcjonalnym łańcuchem alfanumerycznym, który ma być wyświetlonym na
ekranie jako zgłoszenie gotowości tekstem. Przykładowo:
(setq val (getreal))
(setq val (getreal "Skala rysunku: "))
Uwaga,' Funkcja getreal nie akceptuje danych wprowadzanych z użyciem
innych wyrażeń języka AutoLISP.
Informacje uzupełniające: Patrz "Funkcje (getxxx) pobierające dane od
użytkownika" oraz opis funkcji initget.
(getstring [er] [prompt])
Funkcja ta powoduje przerwę, która umożliwia użytkownikowi wprowadze-
nie danej typu string, a następnie zwraca ten łańcuch znaków alfanumery-
cznych. W przypadku, gdy tekst jest dłuższy niż 132 znaki, zwracane są tyl-
ko 132 pierwsze znaki. Występujący we wprowadzanym tekście pojedynczy
lewy ukośnik (\) podlega konwersji na dwa lewe ukośniki (\ \). Zostało to
wprowadzone ze względu na to, żeby zwracana wartość mogła zawierać na-
zwę pliku ze ścieżką dostępu i mogła być wykorzystywana przez inne fun-
kcje.
Jeżeli użyty zostanie różny od nil opcjonalny argument er, 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]est opcjonalnym łańcu-
chem alfanumerycznym, który ma być wyświetlony na ekranie jako zgłosze-
nie 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"
Uwaga: Jeżeli wprowadzany przez użytkownika łańcuch alfanumeryczny
Katalog funkcji AutoLISP-u 135
Funkcje AutoLISPu
musi być jednym ze słów kluczowych (np. nazwą opcji), to można wykorzy-
stać opisaną poprzednio funkcję getkword.
Funkcja getstring nie akceptuje danych wprowadzanych z użyciem innych
wyrażeń języka AutoLISP.
Informacje uzupełniające: Patrz opis funkcji getkword.
(getvar varname)
Funkcja ta daje dostęp do wartości przypisanych zmiennym systemowym
AutoCAD-a. Nazwa zmiennej musi być ujęta w podwójne cudzysłowy. Przy-
kładowo, jeżeli ostatnio ustalony promień zaokrąglenia ma wartość 0.25 jed-
nostki, to wyrażenie:
(getvar "FILLETRAD") zwraca 0.25
Jeżeli w wyrażeniu podana zostanie nazwa zmiennej nieznanej dla progra-
mu AutoCAD, to funkcja getvar zwróci nil. Aktualną listę zmiennych syste-
mowych podaje AutoCAD Podręcznik Użytkownika w dodatku A.
Informacje uzupełniające: Patrz opis funkcji setvar.
Patrz także: "Zmienne systemowe i środowiskowe".
(graphscr)
Gdy AutoCAD pracuje w systemie z jednym monitorem, funkcja graphscr
przełącza tryb pracy ekranu z tekstowego na graficzny. Działanie jest identy-
czne jak działanie polecenia GEKRAN AutoCAD-a, lub klawisza sterującego
przełączaniem trybu pracy ekranu (jeśli ekran jest aktualnie w trybie teksto-
wym).
Funkcja graphscr zawsze zwraca nil.
L
Informacje uzupełniające: Patrz opisy funkcji textscr i textpage.
(grciear)
Funkcja ta wymazuje (czyści) zawartość aktualnej rzutni. W systemach
z jednym monitorem nastąpi najpierw automatyczne przełączenie z ekranu
tekstowego na graficzny. Niezmieniony pozostaje stan pól poleceń/komuni-
katów, linia stanu oraz obszary menu. Pierwotna zawartość ekranu może zo-
stać przywrócona za pomocą funkcji redraw. Funkcja grciear zawsze zwraca
nil.
Informacje uzupełniające: Patrz opis funkcji textscr i textpage.
(grdraw from to color [highlight])
Funkcja grdraw rysuje wektor między dwoma danymi punktami w aktual-
nej 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 obowiązującego LUW. AutoCAD obcina wektor
136 Katalog funkcji AutoLISP-u
Rozdział 4
tak, aby zmieścił się na ekranie. Jest on rysowany w kolorze określonym
przez argument co/o/"(typu integer). Wartość -l oznacza tu tzw. kolor KOR,
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 po-
nownym 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.
(grread [trach] [alikeys [curtype]])
Funkcja grread bezpośrednio odczytuje najbliższą odpowiedź użytkownika,
wprowadzoną za pomocą dowolnego urządzenia wejściowego AutoCAD-a.
Opcjonalnie może ona także dynamicznie śledzić zmiany położenia urządzeń
wskazujących. Poniżej opisano sposób wykorzystania przez AutoCAD meto-
dy dynamicznych przesunięć.
Uwaga: Funkcja ta będzie potrzebna tylko w bardzo szczególnych proce-
durach AutoLISP-u. Większość danych powinna być wprowadzana do Auto-
LISP-u przy wykorzystaniu różnych funkcji typu getxxx, takich jak ge-
tstring, getreal i podobnych.
Użycie różnego od nil argumentu track, uruchamia zwracanie współrzędnych
z poruszającego się urządzenia wskazującego, bez konieczności wciskania
przycisku wybierającego. Argument alikeys jest opcjonalną wartością całko-
witą (kodowaną bitowo). Jeśli argument allkeys]est podany, grread spełnia
różne funkcje, w zależności od wartoś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.
alikeys Jeśli argument alikeys jest podany, to musi być liczbą typu
integer, zdefiniowaną następująco:
Wartość = 1 (bit 0) Zwraca współrzędne w trybie przesu-
nięć dynamicznych. Jeśli bit O jest ustawiony i użytkownik
przesuwa urządzenie wskazujące zamiast wybrania przyci-
sku 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żącego
położenia urządzenia wskazującego (myszki lub digitizera).
Na tym polega wykorzystanie przez AutoCAD trybu dyna-
micznych przesunięć.
Wartość = 2 (bit 1) Zwraca wszystkie wartości klawiszy,
włącznie z klawiszami funkcyjnymi i klawiszami kursora
i nie przesuwa kursora, gdy użytkownik naciska klawisz
kursora.
Wartość = 4 (bit 2) Wykorzystuje wartość argumentu
Katalog funkcji AutoLISP-u 137
Funkcje AutoLISPu
curtype do sterowania wyświetlanym kursorem. Opcje są po-
kazane poniżej.
Wartość = 8 (bit 3) Nie wyświetla komunikatu błqd: prze-
rwanie z konsoli po przyciśnięciu przez użytkownika
klawiszy Ctri+C. WartoŚĆ= 16 (bit 4) Blokuje menu rozwi-
jane
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:
O Wyświetla zwykły krzyż nitkowy
1 Nie wyświetla żadnego kursora (również krzyża nitkowe-
go)
2 Wyświetla kursor "z celownikiem", wykorzystywany pod-
czas wybierania elementów rysunkowych.
Uwaga: Argument curtype wpływa na kursor jedynie pod-
czas bieżącego wywołania funkcji grread.
Uwagd: Należy mieć na uwadze, że w przyszłych wersjach AutoCAD-a mo-
gą być zdefiniowane dodatkowe bity sterujące.
Funkcja grread zwraca listę, której pierwszym elementem jest kod określa-
ją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 wprowadza-
nych danych. Zwracane kody mogą przybierać przedstawione poniżej war-
tości:
Tabela 4-6. Wartości zwracane przez grread
Dane z klawiatury Zmienna Kod znaku
Wybrany punkt Punkt 3W Współrzędne punktu
Pozycja menu
ekranu/menu
rozwijanego (z
urządzenia
wskazującego)
O 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
Urządzenie
wskazujące
(informacja ta jest
zwracana tylko wtedy,
gdy uaktywnione jest
śledzenie dynamiczne)
Punkt 3W
Współrzędne w trybie
dynamicznych przesunięć
f ^ f. . " ,., ri ..-. -^ . .' X -' . ^, ' ^^"^ -^r-' -^- " -? ^^'"'^.'h*
138 Katalog funkcji AutoLISP-u
Rozdział 4
Pozycja menu
BUTTONS
O 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
Pole menu TABLET1 O do 32767 Numer pola digitizera
Pole menu TABLET2 O do 32767 Numer pola digitizera
Pole menu TABLET3 O do 32767 Numer pola digitizera
10 Pole menu TABLET4 O do 32767 Numer pola digitizera
11
Pole menu AUX O 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 wymu-
szone z klawiatury przerwanie realizacji programu AutoLISP-u, z sygnali-
zacją przerwania z klawiatury (chyba że argument alikeys 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 wskazują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 grafi-
cznym 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óżnie-
nie 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 strumie-
Katalog funkcji AutoLISP-u 139
Funkcje AutoLISPu
ma wejściowego z urządzenia.
Uwaga: 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 Instala-
cyjny.
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ów-
nież na tych samych komputerach, podwójne przyciśnięcie przycisku my-
szy zwraca kod 11 (a nie kod 6), po którym (o ile wybór nastąpił w bieżącej
rzutni) 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.
(grtext [box text [highlight]])
Funkcja grtext pozwala na pisanie w obszarach tekstowych ekranu graficz-
nego AutoCAD-a. Jeżeli argumentem box jest liczba z zakresu od zera do po-
mniejszonego o l najwię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 po-
lu. Przy pisaniu w obszarach menu, tekst musi zostać najpierw wpisany bez
argumentu highlight i dopiero potem może zostać wyróżniony. Wyróżnienie
jednego pola powoduje automatycznie zaprzestanie wyróżniania jakiegokol-
wiek pola wyróżnianego poprzednio. Zerowa wartość argumentu highlight li-
kwiduje wyróżnienie wskazanej pozycji menu. Ujemna wartość argumentu
highlight jest ignorowana.
Należy zwrócić uwagę na to, że funkcja ta powoduje tylko wyświetlenie te-
kstu w danym polu menu nie powoduje to zmiany umieszczonej w tym miej-
scu pozycji tego menu.
Wywołanie grtext z numerem obszaru -l spowoduje wpisanie tekstu w ekra-
nowej 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 pole ma wartość -2, to grtext wpisuje tekst w linii stanu w ob-
szarze współrzędnych. Jeżeli włączony jest tryb śledzenia bieżących współ-
rzędnych, to wpisany w to pole tekst zostanie zastąpiony współrzędnymi na-
tychmiast po tym, jak kursor graficzny przekaże nowe ich wartości. Argu-
ment highlight jest ignorowany zarówno w wypadku obszaru o numerze -l,
jak i -2.
Funkcja grtext może być także wywoływana bez argumentów. Powoduje wte-
dy przywrócenie pierwotnej zawartości wszystkim obszarom tekstowym na
ekranie.
Do określenia liczby pól menu ekranowego dostępnych w poszczególnych in-
140 Katalog funkcji AutoLISP-u
Rozdział 4
stalacjach AutoCAD-a można wykorzystać informacje przechowywane pod
zmienną systemową SCREENBOXES.
(grvecs vlist [trans])
Jest to funkcja przeznaczona do rysowania wielu wektorów w graficznym obsza-
rze ekranu. Argument vlist jest listą, składającą się z ciągu opcjonalnych kodów
całkowitych koloru i list dwóch punktów. Format argumentu l/fefjest następu-
jący:
([kolon ](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 AutoCAD-zie zawierają
się w przedziale od O do 255. Jeśli wartość kodu koloru jest większa od 255,
występujące po niej wektory są rysowane kolorem KOR, czyli kolorem dopeł-
niającym w stosunku do innych elementów rysunku, na tle których rysowa-
ny jest wektor i powodującym wymazanie wektora po jego ponownym nary-
sowaniu. 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świet-
lają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.
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 pio-
nowych linii, każdej w innym kolorze:
(grvecs '( 1 (1 2)(1 5)
2 (2 2)(2 5)
3 (3 2)(3 5)
4 (4 2)(4 5)
5 (5 2)(5 5) )
)
Rysuje czerwoną linię od (1,2) do (1,5)
Rysuje żóttą linię od (2,2) do (2,5)
Rysuje zieloną linię od (3,2) do (3,5)
Rysuje błękitną linię od (4,2) do (4,5)
Rysuje niebieską linię od (5,2) do (5,5)
Opcjonalny argument trans jest macierzą transformacji, pozwalającą zmie-
niać położenie i proporcje wektorów zdefiniowanych w liście wektorów. Ma-
cierz ta jest listą czterech list, z których każda zawiera cztery liczby rzeczy-
wiste. Na przykład, pokazana poniżej macierz powoduje jednakowe, równe
l, przeskalowanie we wszystkich kierunkach i przesunięcie o 5.9,5.0,0.0:
'( (1.00.00.05.0)
(0.0 1.00.05.0)
(0.00.01.00.0)
(0.00.00.01.0)
Katalog funkcji AutoLISP-u 141
Funkcje AutoLISPu
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 nentsełp, zawierający wię-
cej informacji na temat macierzy transformacji.
(handent handle)
Nazwy elementów mogą być inne w każdej kolejnej sesji edycyjnej. Zmianom
nie ulegają natomiast, dopóki istnieją, identyfikatory elementów. Przyjmij-
my, że łańcuch alfanumeryczny będący identyfikatorem elementu, jest argu-
mentem handle. Funkcja handent zwraca wtedy obowiązującą w aktualnej
sesji edycyjnej nazwę elementu związanego z tym identyfikatorem. Gdy na-
zwa elementu jest już znana, może być wykorzystana do wykonywania w od-
niesieniu do elementu różnych operacji, uruchamianych z użyciem dowolnej
z przeznaczonych do tego funkcji.
Przykład
w konkretnej sesji edycyjnej, wyrażenie:
(handent "5A2") może zwrócić
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 pozo-
staje 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 zo-
stały usunięte podczas aktualnej sesji edycyjnej; można je więc w razie po-
trzeby odtworzyć, wykorzystując w tym celu funkcję entdel (patrz opis fun-
kcji entdel).
(if testexpr thenexpr [elseexpr])
Jest to funkcja warunkowej ewaluacji wyrażeń. Jeśli wyrażenie testexprnie
zwraca nil, to wyliczeniu podlega wyrażenie thenexpr, w przeciwnym razie
wyznaczana jest wartość wyrażenia elseexpr. Ostatnie wyrażenie jest argu-
mentem występującym opcjonalnie. 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")
(if(=,2 (+1 1)) "TAK!!")
(if (= 2 (+ 3 4)) "TAK!!")
zwraca "nie"
zwraca "TAK!!"
zwraca nil
Informacje uzupełniające: Patrz opis funkcji progn.
142 Katalog funkcji AutoLISP-u
Rozdział 4
(initget [bits] [string])
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 4-7. Opcje wprowadzania danych, ustalane przez initget
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ą
64 Ignorowane są współrzędne Z punktów 3W (dotyczy tylko funkcji getdist)
128 Zwracana jest dowolna odpowiedź z klawiatury
Ostrzeżenie: Przyszłe wersje AutoCAD-a mogą wykorzystywać dodatkowe
bity sterujące funkcją initget, tak więc należy unikać ustawiania bitów nie
pokazanych w tabeli 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 4-8. Funkcje pobierające dane od użytkownika i bity sterujące
Funkcja Honorowane słowa kluczowe Uwzględniane bity sterujące
Bez odpowiedzi pustej Bez zera Bez liczb ujemnych Bez granic Użyj kreski^^/''aftY:.^ :. Odległość 2W Odpowiedź dowolna
:t|^^i|||,i^^|;|a|;^3BS^Sii: ^BiSSi^^iSwSBBiBBsa WsmwiiisHSSs
getint
getreal
getdist
getangle
getorient
getpoint
getcorner
getkword
Katalog funkcji AutoLISP-u 143
Funkcje AufoLISPu
Funkcja Honorowane słowa kluczowe Uwzględniane bity sterujące
Bez odpowiedzi pustej (1) Bez zera(2) Bez liczb ujemnych (4) Bez granic(8) Użyj kreski(32) Odleg- Odpo-łość wiedź 2W ' dowolna (64) (128)
getstring
entsel
nentsel
nentsełp
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 w odpowie-
dzi wartości zero.
Zapobiega podaniu przez użytkownika w odpowie-
dzi wartości ujemnej.
Wartość = 4 (bił 2)
Pozwala na wprowadzenie przez użytkownika pun-
ktu położonego poza bieżącymi granicami rysunku.
Warunek ten obowiązuje dla najbliższego wywoła-
nia funkcji pobierającej odpowiedź od użytkownika
nawet wtedy, gdy zmienna systemowa AutoCAD-a
LIMCHECKjest ustawiona na sprawdzanie położe-
nia punktów w granicach.
Wartość = 8 (bit 3)
Aktualnie niewykorzystana.
Wartość = 16 (bit 4)
Wartość = 32 (bit 5)
W przypadku funkcji pozwalających użytkownikowi
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ę rysowana linią kreskową,
a nie ciągłą (niektóre typy wyświetlaczy zamiast li-
nii kreskowej wykorzystują wyróżniający kolor).
AutoCAD ignoruje stan tego bitu, jeśli zmienna sy-
stemowa POPUPS ma wartość zero.
Zapobiega podaniu przez użytkownika współrzędnej
Z w odpowiedzi na zgłoszenie funkcji getdist. Po-
zwala to na zagwarantowanie w programie
użytkowym, że funkcja ta zwróci odległość 2W.
Wartość = 64 (bit 6)
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 kluczo-
we. 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
144 Katalog funkcji AutoLISP-u
Rozdział 4
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.
Definiowanie słów kluczowych
Opcjonalny argument string definiuje listę słów kluczowych, które mają być
sprawdzane przy następnym użyciu funkcji entsel, nentsel, nentsełp 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 znajdują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 na-
stę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:
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ść Wyso-
kość Głębokość" definiuje trzy słowa kluczowe.
Legalne słowo kluczowe może zawierać litery, cyfry i myślniki (-). Każdy
wykaz słów kluczowych może nakazywać AutoCAD-owi 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łymi. Skrót zaznaczony dużymi literami może
znajdować siew dowolnej części słowa (na przykład: "RLinii", "koNiec",
"aplikoM").
Słowa kluczowego są podane dużymi literami, a po niej, po przecinku,
powtó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,0" jest błędna.
(Druga metoda jest przeznaczona do wykorzystania w programach
użytkowych pisanych 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: "RLininii" i "RLINII,RL" są równoważne. Jeśli użyt-
kownik poda RL (małymi lub dużymi literami), to wystarczy to do jednozna-
cznego zidentyfikowania słowa kluczowego.
Użytkownik może wprowadzać znaki występujące po wymaganej części sło-
wa 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ło-
wa 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ęść
Katalog funkcji AutoLISP-u 145
Funkcje AutoLISPu
słowa, AutoCAD rozpozna słowo kluczowe tylko wtedy, gdy użytkownik
wprowadzi je w całości.
Ważna informacja: Wprowadzone przez initget bity sterujące oraz lista
słów kluczowych dotyczą tylko następnego wywołania funkcji entsel,
nentsel, nentsełp lub getxxxi zaraz potem są automatycznie unieważ-
niane. Unika się w ten sposób konieczności anulowania tych specjalnych
warunków przy kolejnym wywoływaniu tych funkcji.
(inters ptl pt2 pt3 pt4 [onseg])
Funkcja inters wykonuje operację sprawdzenia dwóch odcinków prostolinio-
wych i zwraca punkt ich przecięcia. Jeżeli punkt taki nie istnieje, to funkcja
zwraca nil. Argumenty ptl 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 aktualne-
go LUW. Jeżeli wszystkie cztery argumenty są punktami 3W, wówczas fun-
kcja inters wyznacza 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 ja-
ko proste o nieskończonej długości. Funkcja inters zwraca wtedy punkt prze-
cięcia nawet wtedy, gdy jest on położony na zewnętrz jednego lub obu odcin-
kó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:
(setqa'(1.0 1.0) b'(9.0 9.0))
(setqc'(4.0 1.0) d'(4.0 2.0))
to:
(inters a b c d)
(inters a b c d T)
(inters a b c d nil)
zwraca .nil
zwraca .nil
zwraca (4.0 4.0)
(itoa int)
Funkcja ta zwraca wynik konwersji liczby typu integer na łańcuch cyfr (war-
tość typu string). Przykładowo:
(itoa 33) zwraca ."33"
(itoa-17) zwraca "-17"
(lambda arguments expr ...)
Funkcja lambda definiuje nie posiadającą nazwy funkcję anonimową. Naj-
częściej jest to stosowane wtedy, gdy definiowanie nowej funkcji nie jest uza-
sadnione przyszłymi potrzebami w innych zastosowaniach. Wprowadzenie
definicji funkcji bezpośrednio w miejscu, w którym ma być ona używana po-
woduje także, że intencje programisty są bardziej czytelne. Funkcja lambda
146 Katalog funkcji AutoLISP-u
Rozdział 4
zwraca wartość ostatniego argumentu expr. Jest ona często używana w po-
łączeniu z appły i/lub mapcar w celu wykonania funkcji na obiekcie typu li-
sta. Przykładowo:
(appły '(lambda (x y z)
(*x(-yz))
)
'(520 14)
) zwraca 30
oraz:
(setq counter 0)
(mapcar '(lambda (x)
(setq counter (1+ counter))
(*x5)
)
'(2 4 -6 10.2)
) zwraca (1020-3051.0)
(last list)
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.
Uwaga: Na pierwszy rzut oka, funkcja last może się wydawać idealnym spo-
sobem 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.
(length list)
Funkcja ta zwraca liczbę typu integer, określającą liczbę elementów argu-
mentu list. Przykładowo:
(length '(a b c d)) zwraca 4
(length '(a b (c d))) zwraca 3
(length'()) zwraca O
(list expr...)
Funkcja list łączy dowolną liczbę argumentów exprw 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)
Katalog funkcji AutoLISP-u 147
Funkcje AutoLISPu
W AutoLISP-ie funkcja ta jest często używana do definiowania zmiennych
reprezentujących punkty 2W i3W (listy dwóch lub trzech liczb typu real).
Uwaga: Jeśli w liście nie ma zmiennych lub niezdefiniowanych wyrażeń, do
tworzenia listy można wykorzystać alternatywną metodę, polegającą na pro-
stym oznaczeniu listy znakiem cytatu.
'(3.9 6.7) ma takie samo znaczenie, jak (list 3.9 6.7)
Jest to bardzo wygodny sposób tworzenia listy asocjacji lub definiowania
punktów. Więcej informacji zawiera opis funkcji quote.
(listp item)
Funkcja ta zwraca T, jeżeli argument /'temjest listą, a nil w przeciwnym przy-
padku. Przykładowo:
(listp '(a b c)) zwraca T
(listp 'a) zwraca nil
(listp 4.343) zwraca nil
(load filename [onfailure])
Funkcja wczytuje plik zawierający wyrażenia AutoLISP-u i wyznacza ich
wartość. Argument filename jest łańcuchem alfanumerycznym (wartość typu
string), który reprezentuje nazwę pliku bez rozszerzenia (zakładane jest roz-
szerzenie .Isp). Ponadto filename może zawierać przedrostek określający
ścieżkę dostępu, np. lkarollacad_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ć trze-
ba 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ą AutoCAD-a w podobny sposób
jak funkcja findfile (ścieżka poszukiwania plików bibliotecznych AutoCAD-a
jest opisana wraz z funkcją findfile, na stronie 126). Jeżeli na tej ścieżce zo-
stanie znaleziony podany plik, to funkcja load wczyta go do pamięci.
Jeżeli operacja zakończyła się sukcesem, load zwraca wartość ostatniego wy-
rażenia w pliku, które często jest nazwą ostatniej zdefiniowanej w pliku fun-
kcji. Jeżeli operacja load zakończyła się porażką, to zwykle wynika to z błędu
AutoLISP-u i powoduje wyświetlenie odpowiedniego komunikatu. Jeżeli
jednak wyrażenie zawiera argument onfailure, to funkcja zwraca wartość te-
go argumentu. Umożliwia to tworzenie aplikacji (programów użytkowych)
AutoLISP-u, które w przypadku nieudanej operacji load wykonują inne
działanie alternatywne.
Oczywiście wartość argumentu onfailure powinna być inna niż wartość ostat-
niego wyrażenia w pliku. W przeciwnym wypadku wartość zwrócona przez
funkcję load będzie niejednoznaczna. Należy zauważyć, że jeśli argument
onfailureJest poprawnie użytą funkcją AutoLISP-u, to zostanie ona poddana
wyliczeniu. Z tego powodu, w większości przypadków argument onfailure po-
winien być łańcuchem tekstowym lub atomem.
Zakładając przykładowo, że plik łkarolltestl.lsp zawiera:
148 Katalog funkcji AutoLISP-u
Rozdział 4
(defun FUNKCJA-1 (x)
...definicja funkcji...
)
(defun FUNKCJA2 (x)
...definicja funkcji...
)
oraz, że plik test2.lsp nie istnieje, otrzymamy następujące wyniki:
(load7karol/test1") zwraca FUNKCJA2
(load"\\karol\\test1") zwraca FUNKCJA2
(load7karol/test1" "fatalnie") zwraca FUNKCJA2
(load "test2" "Błąd") zwraca "Błąd"
(load "test2") błąd AutoLISP-u
Funkcja load może być użyta wewnątrz innej funkcji AutoLISP-u, 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 mo-
mencie chcemy automatycznie spowodować wykonywanie serii poleceń
AutoCAD-a lub funkcji AutoLISP-u, to należy zdefiniować w pliku
acad.lsp specjalną funkcję S::STARTUP. Gdy jest ona w pliku, AutoCAD wy-
konuje ją automatycznie na początku sesji rysunkowej. W rozdziale 8 pod-
ręcznika AutoCAD Podręczna AdajOtacy/^ plik acad. Isp i użycie funkcji
load są omawiane szerzej.
Informacje uzupełniające: Patrz opis funkcji defun oraz "Definiowanie
funkcji i wczytywanie automatyczne".
(log number)
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
(logand number number...)
Funkcja ta zwraca liczbę będącą wynikiem dwuargumentowych operacji ko-
niunkcji (iloczyn logiczny), wykonywanych za pomocą funktora AND na
odpowiadających sobie bitach kolejnych argumentów number. Muszą być
one wartościami całkowitoliczbowymi. Przykładowo:
(logand 7153) zwraca 3
(logand 2315) zwraca 2
(logand 834) zwraca O
Katalog funkcji AutoLISP-u 149
Funkcje AutoLISPu
(logior integer...)
Funkcja ta zwraca liczbę, będącą wynikiem dwuargumentowych operacji alter-
natywy niewykluczającej, zwanej inaczej sumą logiczną, wykonywanych za po-
mocą mnktora OR na odpowiadających sobie bitach kolejnych argumentów in-
teger. Muszą być one wartościami całkowitoliczbowymi. Przykładowo:
(logior 124) zwraca 7
(logior 9 3) zwraca 11
(Ish numi numbits)
Funkcja ta zwraca liczbę, będącą wynikiem operacji przesunięcia bitów ar-
gumentu 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 pra-
wo. 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 l jest przesu-
wany na lub poza pozycję najwyższego bitu argumentu 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
(Ish 21)
(Ish 2-1)
(Ish 40 2)
zwraca 4
zwraca 1
zwraca 160
Uwaga: Wyrażenie (Ish 16384 1) zwraca -32768 w przypadku komputerów
16-bitowych, lub 32768 w przypadku komputerów 32-bitowych.
(mapcar function listl... listn)
Wyrażenie z funkcją mapcar zwraca listę, której elementami są wyniki ewa-
luacji wyrażenia function z argumentami branymi z kolejnych pozycji po-
szczególnych list poczynając od argumentu listl do listn. Liczba argumentów
listn musi odpowiadać liczbie argumentów, której wymaga function. Przykła-
dowo:
(setqa 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)
(1+ c)
z tą różnicą, że mapcar zwraca wyniki w postaci jeden listy. Podobnie:
(mapcar'+ '(10 20 30) '(4 3 2)) zwraca (14 23 32)
750 Katalog funkcji AutoLISP-u
Rozdział 4
co odpowiada sekwencji wyrażeń:
(+ 104)
(+ 20 3)
(+ 30 2)
Funkcją, która ma być wykonywana przy wywołaniu mapcar, może być fun-
kcja anonimowa, zdefiniowana za pomocą funkcji lambda. Jest to przydatne,
gdy część argumentów funkcji ma wartości stałe lub podawane w inny spo-
sób. Przykładowo:
(mapcar '(lambda (x)
(+x3)
)
'(102030)
)
zwraca
(132333)
oraz:
(mapcar '(lambda (x y z)
(* x (- y z))
)
'(5 6)'(20 30)'(14 5.0)
)
zwraca
(30 150.0)
(max number number...)
Funkcja ta zwraca największą liczbę z argumentów number. Mogą to być li-
czby typu real i integer. Jeżeli wszystkie argumenty number są wartościami
całkowitoliczbowymi, to funkcja zwraca liczbę typu integer. Jeżeli którykol-
wiek 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)
(max-88 1952)
(max -2.1 482)
zwraca 4.07
zwraca 19
zwraca 8.0
(lnem)
Wyświetla aktualny stan pamięci przydzielonej dla AutoLISP-u. Więcej in-
formacji na temat funkcji mem zawiera część "Statystyka pamięci" w roz-
dziale 5.
Katalog funkcji AutoLISP-u 151
Funkcje Auto LI S Pu
(member expr list)
Funkcja ta wyszukuje wśród elementów argumentu list przypadki występo-
wania obiektu expr. Wprzypadku występowania obiektu expr, zwracana jest
lista, której pierwszym elementem jest właśnie ten element oraz list, zawie-
rająca resztę elementów argumentu aż do jej końca. Jeżeli exprnie występuje
w przeszukiwanej liście, to wyrażenie z funkcją member zwraca nil. Przy-
kładowo:
(member 'c '(a b c d e))
(member 'q '(a b c d e))
zwraca
zwraca
(C D E)
nil
(menucmd string)
Funkcja menucmd umożliwia programom LISP-u przełączanie stron pod-
rzędnych menu programu AutoCAD. W ten sposób, program przygotowany
w języku AutoLISP, może współpracować ze skojarzonym z nim plikiem me-
nu, 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 podmenu 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 poka-
zane w poniższej tabeli.
Tabela 4-9. Wartości części section argumentu string
S dla menu SCREEN
B1-B4 dla menu BUTTONS1 do BUTTONS4
l dla menu ICON
PO-P16 dla menu rozwijanych POPO 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
Uwago: Aby zachować zgodność z poprzednimi wersjami AutoLISP-u, "B"
podane jako łańcuch zawierający nazwę sekcji jest interpretowane jako "Bl".
Informacje uzupełniające: Rozdział 6 w AutoCAD Podręcznik Adaptacyj-
ny oraz część "Interakcyjne wyprowadzanie informacji" w niniejszym podrę-
czniku zawierają więcej informacji i przykłady.
152 Katalog funkcji AutoLISP-u
Rozdział 4
(min number number ...)
Funkcja ta zwraca najmniejszą liczbę z argumentów number. Mogą nimi
być liczby typu rea/ i integer. Jeżeli wszystkie argumenty number są war-
tościami całkowitoliczbowymi, to funkcja zwraca liczbę typu integer. Jeżeli
którykolwiek z argumentów jest liczbą rzeczywistą, to argumenty typu in-
teger 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
(minusp item)
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
(nentsel [prompt])
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żytkowniko-
wi 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 wykony-
wania funkcji. W celu udostępnienia dodatkowych możliwości odpowiedzi
na zgłoszenie Polecenie:; nentsel może opcjonalnie honorować słowa klu-
czowe, zdefiniowne przez wcześniejsze wywołanie funkcji initget.
Opcjonalny argument zgłoszenie, jeżeli występuje w wyrażeniu, musi być
łańcuchem alfanumerycznym (wartość typu string). Jeżeli jest on pominięty,
pojawia się standardowe 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 wy-
brany element jest Polilinią, to nentsel zwraca listę zawierającą nazwę ele-
mentu podrzędnego (wierzchołka) oraz współrzędne użytego do jej wskaza-
nia 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 na-
główkowym elementem Polilinii. Funkcja nentsel zawsze zwraca ten z wie-
rzchołków Polilinii, który stanowi początek wybranego segmentu Polilinii.
Przykładowo, wskazanie trzeciego segmentu spowoduje zwrócenie trzeciego
wierzchołka. W przypadku Polilinii, nentsel nigdy nie zwraca kończącego
Katalog funkcji AutoLISP-u 153
Funkcje AutoLISPu
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 ry-
sunku.
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ółrzęd-
nych punktów definiujących element z odniesionych do wewnętrznego ukła-
du współrzędnych, zwanego Układem Współrzędnych Modelu (UWM), na
współrzędne odniesione do Globalnego Układu Współrzędnych (GUW). Po-
czątek UWM wyznacza bazowy punkt wstawienia Bloku, który zawiera wy-
brany 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żo-
ny 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
(Px Py Pz) Wskazany punkt
( (X0 YO ZO) Macierz transformacji UWM na GUW
(X1 Y1 Z1)
(X2 Y2 Y2)
(X3 Y3 Z3)
)
( Nazwa najgłębiej zagnieżdżonego blo-
ku z wybranym elementem
( ) Nazwa bloku najbardziej zewnętrzne-
) go 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 współrzędnych punktów odniesionych do
UWM, należy skorzystać z funkcji entget i assoc w odniesieniu do nazwy
elementu.
154 Katalog funkcji AutoLISP-u
Rozdział 4
Macierz zwracana przez nentsel ma takie samo przeznaczenie, jak macierz
zwracana przez nentsełp, 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. Transformacja jest opisana przez następujące mnożenie
macierzy:
[ x'r z'1.0 ]= [ XYZI.O ]
Moo MOI Mo2
Mio Mu Mi2
M20 M21 M22
MSO Mai Ms2
Z tego wynikają następujące równania określające nowe współrzędne:
X' = XMoo+ YMio + ZM20 + Mso
Y'= XMoi+ YMu + ZM2i + Msi
Z' = XMo2+ YMl2 + ZM22 + M32
Współczynniki My, gdzie O <= i, j <= 2, są elementami macierzy transformacji
UWM na GUW, X, Y i Z określają punkt w układzie UWM, definiujący ele-
ment rysunkowy, a -X', V i Z' określają wynikowy punkt definiujący element
rysunkowy w układzie GUW.
Uwagd: Jest to jedyna funkcja AutoLISP-u, wykorzystująca tego typu ma-
cierz. Funkcja nentsełp zwraca macierz podobną do macierzy wykorzysty-
wanych przez inne funkcje AutoLISP-u i ADS.
Informacje uzupełniające: "Funkcje nazw i danych obiektów rysunko-
wych", opis funkcji entsel i initget.
(nentsełp [prompt] [pt])
Funkcja nentsełp, podobnie jak nentsel, zapewnia dostęp do danych definiu-
jących elementy wchodzące w skład wstawionego do rysunku elementu zło-
żonego (Bloku). Oprócz opcjonalnego argumentu prompt, nentsełp akceptuje
także punkt wybierający element rysunkowy, podawany jako dodatkowy ar-
gument opcjonalny. Umożliwia to wybieranie obiektów bez interakcyjnego
współdziałania z użytkownikiem. Funkcja nentsełp zwraca macierz trans-
formacji o rozmiarze 4x4, zdefiniowaną następująco:
Moo MOI Mo2 MOS MIO MU Mi2 Mi3 M20 M21 M22 M23 MSO MB l M32 M33
Trzy pierwsze kolumny macierzy określają skalowanie i obrót. Czwarta ko-
lumna macierzy transformacji jest wektorem przesunięcia.
Funkcje wykorzystujące macierze tego typu traktują punkt jako wektor - ko-
lumnę, o rozmiarze 4. Punkt jest wyrażony we współrzędnych jednorodnych,
gdzie czwarty element wektora punktu jest współczynnikiem skali, ustawio-
nym zazwyczaj na 1.0. Ostatni wiersz macierzy - wektor [Mso Mai Ms2 Mas]
- ma nominalną wartość [O O O l] i aktualnie jest ignorowany przez funkcje
Katalog funkcji AutoLISP-u 155
Funkcje AutoLISPu
wykorzystujące ten format macierzy. W konwencji tej zastosowanie trans-
formacji do punktu jest równoważne następującemu mnożeniu macierzy:
X' ~ Moo Moi Mo2 MOS X ~
Y Mio Mu Mi2 Mis Y
Z' M20 M21 M22 M23 * Z
1.0 0.0 0.0 0.0 1.0 1.0
W wyniku tego mnożenia otrzymujemy poszczególne współrzędne punktu:
X' = XMoo + YMoi + ZMo2 + Mo3 (1.0)
Y = XMu + YMn + ZMi2 + Mis (1.0)
Z' = XMw + YM2i + ZM22 + M23 (1.0)
Jak pokazują powyższe wzory, współczynnik skali oraz ostatni wiersz ma-
cierzy nie mają znaczenia i są ignorowane.
Informacje uzupełniajcie: Więcej informacji zawiera rozdział "Macierze
transformacji" w rozdziale l ADS Przewodnik Programisty.
(not item)
Funkcja ta zwraca T, jeżeli wy liczenie wyrażenia item daje nil, a nil w wypad-
ku przeciwnym. Zazwyczaj do list używana jest funkcja null, natomiast fun-
kcja not jest stosowana dla innych typów danych, łącznie z którąś z funkcji
sterujących. Przykładowo, jeżeli dokonano następujących przypisań:
(setq a 123)
(setq b "Jan Kowalski")
(setq c nil)
to:
(not a)
(not b)
(not c)
(not'())
zwraca
zwraca
zwraca
zwraca
nil
nil
(nth n list)
Funkcja nth zwraca n-ty element argumentu list, gdzie n jest numerem zwra-
canego 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))
(nth O '(a b c d e))
(nth 5 '(a b c d e))
zwraca D
zwraca A
zwraca nil
156 Katalog funkcji AutoLISP-u
Rozdział 4
(null item)
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)
(null b)
(null c)
(null'())
zwraca nil
zwraca nil
zwraca T
zwraca T
(numberp item)
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)
(numberp 3.8348)
(numberp "Marta")
(numberp 'a)
(numberp a)
(numberp b)
(numberp (eval b))
zwraca T
zwraca T
zwraca nil
zwraca nil
zwraca T
zwraca nil
zwraca T
(open filename modę)
Wyrażenie z tą funkcją otwiera plik, umożliwiając dostęp do jego zawartości
dla funkcji Wejścia/Wyjścia AutoLISP-u. Funkcja open zwraca deskryptor
pliku, który jest przeznaczony 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 mootejest znacznikiem
odczytu/zapisu i musi być łańcuchem zawierającym jedną literę napisaną
minuskułą (małą). Lista możliwych trybów dostępu przedstawiono w poniż-
szej tabeli:
Katalog funkcji AutoLISP-u 157
Funkcje AutoLISPu
Tabela 4-10. Dopuszczalne argumenty modę dla funkcji open
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.
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ć tryb "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
(setq f (open "inny.fil" "r")) zwraca nil
(setq f (open "plik" "a")) zwraca
Argument filename może zawierać przedrostek określający ścieżkę dostępu,
np. laplikomlacad-pnlfunkcja.1, a w systemach MS-DOS/PC-DOS rów-
nież 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 zo-
stał wstawiony jeden ukośnik lewy \, należy użyć znaku zdublowanego \ \.
Przykładowo:
(setq f (open "/x/nowy.tst" "w"))
(setq f (open "brak_pl.iku" "w"))
zwraca
zwraca nil
(or expr ...)
Funkcja or zwraca wynik sumy logicznej argumentów expr. Są one podda-
wane wartościowaniu kolejno od lewej do prawej, w poszukiwaniu wyraże-
nia 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 wszy-
stkie wyrażenia zwracają nil, to funkcja or zwraca nil. Przykładowo:
(or nil 45'())
(or nil '())
zwraca T
zwraca nil
158 Katalog funkcji AutoLISP-u
Rozdział 4
(osnap pf mode-string)
Funkcja ta zwraca punkt 3W, otrzymany w wyniku zastosowania dla argu-
mentu pt opisanych przez mode-string sposobów lokalizacji położenia punktu
względem obiektu. Argument mode-stringjest łańcuchem alfanumerycznym,
który zawiera jeden lub. więcej prawidłowych identyfikatorów trybów loka-
lizacji, takich jak np. centrum, symetria, rozdzielonych przecinkami. Przykła-
dowo:
(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). Dalsze szczegóły znajdują się w AutoCAD Podręcznik Użytkow-
nika.
Informacje uzupełniające: Patrz także część "Lokalizowanie punktu
względem obiektu", w tym podręczniku.
Nie jest to właściwie funkcja, lecz raczej stała n. Symbolowi przypisano war-
tość równą w przybliżeniu 3.1415926.
(polarpt angle distance)
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 di-
stance i angle. Wartość angle Jest mierzona w radianach od osiXw kierunku
przeciwnym do kierunku ruchu wskazówek zegara.Chociaż argument pomo-
że być punktem 3W, to ang/ejest zawsze mierzony w aktualnej płaszczyźnie
konstrukcyjnej. Przykładowo:
(polar '(1.01.03.5) 0.785398 1.414214) zwraca (2.0 2.0 3.5)
(prini [expr [file-desc]])
Funkcja wypisuje expr na ekranie monitora i zwraca je jako wynik. Argu-
ment expr może być dowolnego typu; nie musi to być łańcuch alfanumery-
czny. W przypadku występowania argumentu file-desc, jeżeli jest to deskryp-
tpr pliku otwartego do zapisu, exprjest zapisywane do pliku dokładnie w ta-
kiej formie, w jakiej pojawiłoby się na ekranie monitora. Zapisywane jest tyl-
ko podane expr, bez dodanych znaków spacji lub nowej linii. Przykładowo,
jeżeli dokonane zostały przypisania:
(setq a 123)
(setq b '(a))
to
(prini 'a) wypisuje A i zwraca A
Katalog funkcji AutoLISP-u 159
Funkcje AutoLISPu
(prin1 a) wypisuje
(prin1 b) wypisuje
(prin1 "Cześć!") wypisuje
123 i zwraca 123
(A) i zwraca (A)
"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 exp/"zawiera znaki sterujące, to zostaną one przez prin1 po-
przedzone znakiem lewego ukośnika \, tak jak przedstawiono to poniżej:
Tabela 4-11. Znaki sterujące
\\ oznacza znak\
\" oznacza znak"
\e oznacza znak escape
\n oznacza znak newline
\r oznacza znak retum
\t oznacza znak tab
\nnn oznacza nnn znak o kodzie ósemkowym
Zatem:
(prin1 (chr 2))
(prin1 (chr 10))
wypisuje
wypisuje
"\002"
"\n"
i zwraca "\002"
inzwraca "\n"
Wyrażenie z funkcją prin1 bez argumentów zwraca (i wypisuje) łańcuch pu-
sty. Jeżeli prin1 bez żadnego argumentu zostanie użyta w zdefiniowanej fun-
kcji użytkowej jako ostatnie wyrażenie, to po jej zakończeniu zostanie wy-
pisana tylko pusta linia, co umożliwia "niezauważalne" zakończenie realiza-
cji funkcji. Przykładowo, jeżeli mamy definicję:
(defun C:PARAMETRY ()
(setvar "LUNITS" 4)
(setvar "BLIPMODE" 0)
(prin1)
to:
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.
Informacje uzupełniające: Patrz część "Interakcyjne wyprowadzanie in-
760 Katalog funkcji AutoLISP-u
Rozdział 4
formacji"
(princ [expr [file-descj])
Jest to funkcja działająca tak jak prin1, z tą różnicą, że znaki sterujące w ar-
gumencie 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, pod-
czas gdy princ pisze wyrażenia w sposób czytelny dla funkcji takich jak re-
ad-line.
(print [expr [file-desc]])
Funkcja działa tak jak prin1 z tą różnicą, że argument expr poprzedza zna-
cznik nowej linii, a po expr wstawiana jest spacja.
Informacje uzupełniające: Patrz część "Interakcyjne wyprowadzanie in-
formacji".
(progn expr ...)
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))
)
)
Funkcja if, w przypadku gdy wyrażenie testowe przyjmuje wartość różną od
nil, wyznacza normalnie wartość tylkojednegowyrażenia/esZi. W powyższym
przykładzie, funkcja progn została użyta do spowodowania ewaluacji dwóch
wyrażeń.
(prompt msg)
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.
Informacje uzupełniające: Patrz część "Interakcyjne wyprowadzanie in-
formacji".
Katalog funkcji AutoLISP-u 161
Funkcje AutoLISPu
(quit)
Funkcja quit wymusza zakończenie działania bieżącego programu użytko-
wego. 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 AutoCAD-a Polecenie:.
Informacje uzupełniające: Patrz także opis funkcji exit.
(quote expr)
Zwraca exprbez wyliczania wartości. Poprawny jest również zapis:
'expr
Przykładowo:
(quote a)
(quote aplikom)
(quote (a b))
'a
'aplikom
(a b)
zwraca A
zwraca APLIKOM
zwraca (A B)
zwraca A
zwraca APLIKOM
zwraca (A B)
Ostatnie trzy wyrażenia nie mogą być wprowadzone bezpośrednio z klawia-
tury w odpowiedzi na zgłoszenie AutoCAD-a. Należy pamiętać, że odpowiedź
rozpoznawana jako wyrażenie LISP-u, musi rozpoczynać się lewym nawia-
sem "(" lub wykrzyknikiem "!".
(read string)
Funkcja ta zwraca pierwszy obiekt typu lista lub atom napotkany w argu-
mencie 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 odpowied-
ni typ danych, tak jak pokazują to poniższe przykłady:
(read "cześć")
(read "Cześć Karol")
(read "\"Cześć Marta!\"")
(read "a b c")
(read "(a b c) (d)")
(read "1.2300")
(read "87")
(read "87 3.2")
zwraca atom CZEŚĆ
zwraca string CZEŚĆ
zwraca string "Cześć Marta!"
zwraca listę (A B C)
zwraca listę (A B C)
zwraca real 1.23
zwraca integer 87
zwraca integer 87
(read-char [file-desc])
Funkcja ta odczytuje jeden znak z wejściowego bufora klawiatury lub z otwar-
tego pliku wskazywanego przez file-desc. Funkcja zwraca kod ASCII odczyta-
nego znaku (liczba typu integer) (listę kodów ASCII zawiera dodatek F).
162 Katalog funkcji AutoLISP-u
Rozdział 4
Jeżeli w wyrażeniu nie ma argumentu deskryptor-pliku i w wejściowym bu-
forze klawiatury nie ma żadnego znaku, to read-char czeka na wprowadze-
nie 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ło-
wo 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 AutoLISP mogą pracować pod kontrolą różnych systemów ope-
racyjnych, w których z kolei mogą być używane różne konwencje sygnalizo-
wania końca linii w pliku tekstowym ASCII. Przykładowo, w systemie ope-
racyjnym UNDC wykorzystywany 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-retum) w połączeniu ze znakiem nowej linii LF, których koda-
mi ASCII są liczby 13 i 10. Aby ułatwić przenoszenie programów AutoLISP-u
pomiędzy wszystkimi systemami operacyjnymi, funkcja read-char akceptu-
je wszystkie te konwencje, a po napotkaniu znaku nowej linii zawsze zwraca
10 (kod ASCII dla znaku LF).
(read-line [file-desc)
Funkcja ta odczytuje łańcuch alfanumeryczny (wartość typu string), z kla-
wiatury 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 wy-
padku 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).
(redraw [ename [modę]])
Efekt działania funkcji zależy od liczby podanych argumentów. Jeżeli
funkcja wywołana jest bez argumentów:
(redraw)
to powoduje przerysowanie rysunku w aktualnej rzutni, tak jak w przypad-
ku wywołania polecenia AutoCAD-a PRZERYS. Jeżeli w wyrażeniu podano
jako argument ename:
(redraw ename}
to przerysowany zostanie wybrany element rysunku AutoCAD-a. Jest to uży-
teczne, jako metoda identyfikacji elementów na ekranie po użyciu grdear,
wymazującego zawartość ekranu. Nazwy elementów są opisywane w części
"Funkcje operujące na nazwach obiektów", w rozdziale 3.
Katalog funkcji AutoLISP-u 163
Funkcje AutoLISPu
Pełną kontrolę nad przerysowywaniem elementów uzyskuje się przez wywo-
łanie funkcji redraw z dwoma argumentami:
(redraw ename modę)
gdzie ename odnosi się do przerysowywanego elementu, a modę jest liczbą
typu integer, która może mieć jedną z następujących wartości:
Tabela 4-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 atrybu-
tami), a argument mootejest liczbą dodatnią, to zostanie przetworzony ele-
ment główny i wszystkie jego elementy składowe. Jeżeli modę ma wartość
ujemną, to przerysowany zostanie tylko element główny.
Funkcja redraw zawsze zwraca nil.
(regapp application)
Funkcja ta rejestruje nazwę aplikacji (programu użytkowego) w aktualnym
rysunku AutoCAD-a. Nazwa programu użytkowego jest podstawowym pa-
rametrem wykorzystywanym do grupowania, przechowywania, uzyskiwa-
nia i modyfikowania zdefiniowanych przez taki program dodatkowych da-
nych elementów. Aby zorganizować dodatkowe 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 ap-
likacji.
Po zakończonej sukcesem rejestracji, nazwa aplikacji zostaje umieszczona
w tablicy symboli APPID. Tablica ta przechowuje listę aplikacji, które wy-
korzystują dodatkowe dane elementów w danym rysunku. Pozwala to pro-
gramowi użytkowemu odróżnić własne dodatkowe dane elementów od da-
nych przeznaczonych dla innych aplikacji. Aplikacjami, które dodają lub mo-
dyfikują dodatkowe dane elementów mogą być zarówno programy użytkowe
napisane w języku AutoLISP, jak i programy użytkowe systemu ADS (Au-
toCAD 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.
164 Katalog funkcji AutoLISP-u
Rozdział 4
Przykład
(regapp "APLIKOM_18011976")
(regapp "ACAD_PN-v1.11-10101949")
Uwaga: Zalecamy branie takich nazw aplikacji, które gwarantują swoją nie-
powtarzalność. Jedną z dróg do tego celu jest przyjęcie zasady, że część na-
zwy 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żytko-
wy w oddzielnym polu numerycznym typu integer lub real, np. (1040 1.11).
Informacje uzupełniające: Informacje o dodatkowych danych elementów
można znaleźć w podręczniku AutoCAD Podręcznik Użytkownika, a infor-
macje na temat ADS w podręczniku ADS Przewodnik Programisty.
(rem nufni num2 ...)
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 O
(repeat number expr...)
W funkcji tej argument number ]est dowolną dodatnią liczbą typu integer.
Funkcja dokonuje wartościowania każdego argumentu expr tyle razy, ile
określa number i zwraca wartość ostatniego z nich. Przykładowo, po doko-
naniu podstawień:
(setq a 10)
(setqb 100)
wyrażenie
(repeat 4
(setq a (+ a 10))
(setq b (+ b 100))
) ustala wartość a na 50, b na 500, i zwraca 500.
(reverse list)
Funkcja zwraca listę, która jest tworzona przez odwrócenie kolejności ele-
mentów argumentu list. Przykładowo:
(reverse '((a) b c)) zwraca (C B (A))
Katalog funkcji AutoLISP-u 165
Funkcje AutoLISPu
(rtos number [modę [precision]])
Funkcja zwraca łańcuch alfanumeryczny, który reprezentuje argument num-
ber (wartość typu real) w sposób zależny od argumentów modę, precision,
wartości zmiennej systemowej UNITMODE oraz zmiennej wymiarowania
DIMZIN programu AutoCAD; modę i precision są typu integer i określają sy-
stem i dokładność zapisu jednostek liniowych. Dopuszczalne wartości argu-
mentu modę przedstawiono w tabeli.
Tabela 4-13. Wartości dla jednostek liniowych
Zapis wykładniczy
Ułamki dziesiętne
Stopy, cale i dziesiętne
ułamki cali
Stopy, cale i ułamki zwykłe
cali
Dowolne ułamki zwykłe
Argumenty modę i precision odpowiadają znaczeniem zmiennym systemo-
wym 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 dowolnymi ułamkami zwykłymi (wartość argumentu
modę równa odpowiednio 3, 4 lub 5). Przykłady poniżej.
Informacje uzupełniajcie: Patrz także część pod tytułem "Konwersje łań-
cuchów alfanumerycznych", w której znajduje się ciąg dalszy omówienia fun-
kcji rtos.
(set sym expr)
Funkcja set przypisuje argumentowi sym, będącemu wynikiem użycia fun-
kcji quote dla nazwy symbolu, wartość argumentu expr, a następnie zwraca
tę wartość. Przykładowo:
(set 'a 5.0) (set (quote b) 'a)
zwraca 5.0 i ustala wartość symbolu 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 przedstawionych przykładów:
(set b 640) zwraca 640
i powoduje przypisanie wartości 640 symbolowi a (gdyż jest on wartością
766 Katalog funkcji AutoLISP-u
Rozdział 4
symbolu b).
Informacje uzupełniajcie: Patrz także opis funkcji setq.
(setq symi exprl [sym2 expr2] ...)
Funkcja przypisuje wartość argumentu exprl symbolowi sym1, wartość
expr2 symbolowi sym2, itd. Jest to podstawowa dla AutoLISP-u funkcja słu-
żąca do przypisania wartości. Przy jednokrotnym wywołaniu funkcja setq
może dokonać wielu przypisań, lecz zwraca tylko wartość ostatniego argu-
mentu 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ścio-
wanie symbolu a daje w wyniku 5.0 (liczba typu real). Inne przykłady:
(setq b 123 c 4.7)
(setq s "Marta")
(setq x '(a b))
zwraca 4.7
zwraca "Marta"
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łu-
goś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 teksto-
wych, 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 war-
tości argumentowi funkcji lub symbolowi zadeklarowanemu jako lokalny dla
tego wyrażenia. Przykładowo:
(setq glo1 123) Tworzy symbol globalny
(defun demo (arg1 arg2 / loki lok2)
(setq arg1 234) Przypisanie lokalne
(setq loki 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 przez tę funkcję). Argumenty fun-
kcji mogą być używane jako symbole lokalne; funkcja może zmienić ich war-
tości, ale zmiany te są anulowane po wyjściu z funkcji.
Ostrzeżenie: Funkcje set i setq mogą przypisać nowe wartości wewnętrz-
nym symbolom oraz nazwom funkcji AutoLISP-u, przez co stracą znaczenie
ich pierwotne przypisania lub też staną się one niedostępne. Niektórym
użytkownikom zdarzyło się już pechowo przypisać:
Katalog funkcji AutoLISP-u 167
Funkcje AutoLISPu
(setq angle (...))
(setq length (...))
(setq max (...))
(setq t (...))
(setq pi 3.0)
Fatalnie!
Fatalnie!
Fatalnie!
Fatalnie!
Fatalnie!!.'
W celu uniknięcia wszelkiego rodzaju trudnych do wyjaśnienia błędów, na-
leż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 Po-
lecenie: należy wprowadzić następujące wyrażenie (zakładając, że spraw-
dzamy unikalność symbolu mysym):
Polecenie: (atoms-famiły O 'fmysym"))
Wyrażenie to powinno zwrócić
(nil)
jeśli wskazany symbol nie jest aktualnie zdefiniowany. Więcej informacji na
temat wykorzystania funkcji atoms-famiły podano przy jej opisie.
(setvar varname value)
Funkcja ta nadaje zmiennej systemowej AutoCAD-a varname daną wartość
value i zwraca tę wartość. Nazwa zmiennej systemowej musi być ujęta w cu-
dzysłó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 AutoCAD-a 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ść zmien-
nej może nie dać efektu, aż do wprowadzenia następnego polecenia AutoCAD-a.
Uwaga,' Przy nadawaniu za pomocą funkcji setvar nowej wartości zmiennej
systemowej ANGBASE, wartość argumentu jest interpretowana jako poda-
na w radianach. Jest to różnica w stosunku do polecenia AutoCAD-a
ZMSYS, które interpretuje ten argument, jako podany w stopniach. Podob-
nie, przy nadawaniu za pomocą funkcji setvar nowej wartości zmiennej sy-
stemowej SNAPANG, wartość argumentu jest interpretowana jako podana
w radianach w odniesieniu do standardowego dla AutoCAD-a kierunku ze-
rowego, którym jest kierunek na wschód (lub inaczej mówiąc, kierunek wska-
zywany 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 O ustalonego poprzez zmienną ANGBASE.
Ostrzeżenie: Polecenie COFAJ nie cofa skutków zmian zmiennej systemo-
wej CVPORT, wykonanych przez funkcję setvar.
Aktualną listę zmiennych systemowych AutoCAD-a zawiera AutoCAD Pod-
ręcznik Użytkownika w dodatku A.
168 Katalog funkcji AutoLISP-u
Rozdział 4
Informacje uzupełniające: Patrz także opis funkcji getvar.
(sin angle)
Funkcja ta zwraca wartość sinusa argumentu angle (miara kątowa wyrażo-
na w radianach) w postaci liczby typu real. Przykładowo:
(sin 1.0) zwraca 0.841471
(sin 0.0) zwraca 0.0
(sqrt number)
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
(ssadd [ename [ss]])
Jeżeli funkcja ssadd jest wywoływana bez argumentów, to tworzony jest no-
wy zbiór wskazań, który nie zawiera żadnego elementu. Jeżeli funkcja jest
wywoływana z argumentem 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 ry-
sunku. Funkcja ssadd zawsze zwraca więc albo nowoutworzony zbiór wska-
zań 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 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
(ssdel ename ss)
Funkcja ssdel powoduje wymazanie nazwy elementu ename ze zbioru wy-
branych 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 zbio-
rze 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
Katalog funkcji AutoLISP-u 169
Funkcje AutoLISPu
(ssget [modę] [ptl [pt2J] [pt-list] [filter-list])
Funkcja ssget zwraca utworzony zbiór wskazań (zbiór wybranych elemen-
tów). Opcjonalny argument modę jest wartością typu string, która określa
sposób dokonywania wyboru elementów. Może on przyjmować wartości
związane z odpowiednimi trybami wybierania elementów rysunkowych: "O"
(Okno), "ÓW" (OWbok), "Z" (przecięcie), "ZW" (ZWbok), "S" (oStatni), "P" (Po-
przedni), "U" (Uchwycony) i "K" (Krawędź). Możliwa jest jeszcze wartość "x"
argumentu tryb, powodująca wybranie całej zawartości bazy danych rysun-
ku. Argumenty pł1 i pt2 określają punkty interpretowane odpowiednio do
zadeklarowanego trybu tworzenia zbioru wskazań. Jeżeli w wyrażeniu po-
dany jest punkt, a pominięto argument modę, to jest to równoważne wybra-
niu jednego elementu przez wskazanie jednego punktu (tzw. metodą punkto-
wania). Bieżące tryby lokalizowania punktów względem obiektów są igno-
rowane przez tę funkcję, chyba że zostaną specjalnie uruchomione podczas
aktywności tej funkcji. Ponadto do tworzenia zbiorów wskazań można wy-
korzystywać 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ło-
szenia Wskaż obiekty:, umożliwiając użytkownikowi skorzystanie z normal-
nego dla AutoCAD-a interakcyjnego tworzenia zbioru wskazań.
Zbiory wskazań mogą zawierać elementy wybrane zarówno z obszaru papie-
ru, jak i z obszaru modelu. Jednak w sytuacji, gdy zbiór wskazań jest wyko-
rzystywany podczas jakiejś operacji, to elementy z obszaru aktualnie nie-
aktywnego nie są brane pod uwagę (zostają odfiltrowywane). Dotyczy to rów-
nież wszystkich poleceń AutoCAD-a.
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)
(ssget"P")
(ssget"S")
(ssget "l")
Wyświetla zgłoszenie Wskaż obiekty:
Wybiera obiekty poprzednio wybrane
Wybiera element ostatnio dodany do bazy danych
Tworzy zbiór wskazań z elementów z Implied zbioru
wskazań (wybranych podczas stanu aktywności
PICKFIRST)
Wybiera element przechodzący przez punkt 2,2
Wybiera elementy w oknie o narożnikach 0,0 i 5,5
Wybiera elementy przecinające ramkę o narożnikach
0,0 i 1,1
(ssget '(2 2))
(ssget "O" '(O 0) '(5 5))
(ssget "Z" '(O 0) '(1 1))
(ssget "X" filtr)
(ssget "X")
(ssget "X" lista-filtr)
(ssget lista-filtr)
Wybiera elementy zgodne z filtrem
Tworzy zbiór wskazań zawierający wszystkie ele-
menty z bazy danych
Przeszukuje bazę danych i tworzy zbiór wskazań
z elementami zgodnymi z argumentem lista_filtr
Żąda od użytkownika wskazywania elementów i bie-
rze do zbioru wskazań tylko te, które są zgodne
z argumentem lista_filtr
Tworzy zbiór wskazań z ostatnio wybranych elemen-
tów, zgodnych z argumentem lista_filtr
(ssget "P" lista-filtr)
Następne przykłady użycia funkcji ssget wymagają podania w argumen-
170 Katalog funkcji AutoLISP-u
Rozdział 4
tach listy punktów.
(setq lista-pkt '((1 1)(3 1)(5 2)(2 4)))
(ssget "ÓW" lista-pkt) Tworzy zbiór wskazań składający się
ze wszystkich elementów wewnątrz
wielokąta o wierzchołkach określo-
nych przez pt_list
(ssget "ZW" lista-pkt) Tworzy zbiór wskazań składający się
ze wszystkich elementów przecinają-
cych boki i zawartych całkowicie
wewnątrz wielokąta o wierzchołkach
określonych przez pt_list
(ssget "K" lista-pkt) Tworzy zbiór wskazań składający się
ze wszystkich elementów przecinają-
cych kierownicę zdefiniowaną przez
ptJist
(ssget "ÓW" lista-pkt lista-filtr) Tworzy zbiór wskazań składający się
ze wszystkich elementów wewnątrz
wielokąta o wierzchołkach określo-
nych przez ptJist i zgodnych z listą
filtrującą
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 stano-
wi tu rozwiązanie alternatywne). Zbiory wskazań zajmują obszary pamięci
przeznaczone dla pliku tymczasowego AutoCAD-a, w związku z czym liczba
jednocześnie otwartych zbiorów jest dla AutoLISP-u 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 AutoCAD-a 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 try-
bó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 ele-
mentów, które mają być badane oraz wartości, które cechy te powinny posia-
dać.
Wykorzystując ten mechanizm można uzyskać zbiór wskazań zawierający
wszystkie elementy wybranego typu, położone w wybranej warstwie rysun-
kowej, 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 "J" '((O . "LINĘ") (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ą aplika-
Katalog funkcji AutoLISP-u 171
Funkcje AutoLISPu
cją. Osiąga się to poprzez użycie kodu grupy -3, tak jak w wyrażeniu
(ssget "P" '((O . "CIRCLE") (-3 ("NAZWA-APL"))))
Wyrażenie takie spowodowałoby wybranie wszystkich Okręgów (elementów
Circie), zawierających dane dodatkowe dla programu użytkowego (aplikacji)
"NAZWA-APL".
Informacje uzupełnicyące: Patrz także część "Lista filtrów dla zbiorów
wskazań" oraz "Filtrowanie dodatkowych danych elementu".
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, rze-
czywiste, 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" '((O . "CIRCLE") (-4 . ">=") (40 . 2.0)))
powoduje wybranie wszystkich Okręgów (elementów Circie), których pro-
mień (kod grupy 40) jest większy lub równy 2.0. Poniższa tabela ukazuje
wszystkie dopuszczalne operatory relacji:
Tabela 4-14. Operatory relacji dla listy filtrującej funkcji ssget
"*" Relacja dowolna (zawsze prawdziwe)
"=" Równe
.,,. Nierówne
"/="
"0"
"<" Mniejsze
"<=" Mniejsze lub równe
">" Większe
">=" Większe lub równe
"&" Bitowe AŃ D (tylko grupy typu integer)
"&=" Równe pod v typu integer) względem bitowej maski (tylko grupy
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 & fil-
ter) /= 0), a więc wtedy, gdy każdy bit ustawiony w masce jest także usta-
wiony w grupie całkowitej. Równość pod względem bitowej maski ("&=")
jest prawdziwa, jeśli ((integer-group & filter) = filter), a więc wtedy, gdy
172 Katalog funkcji AutoLISP-u
Rozdział 4
wszystkie bity ustawione w masce są także ustawione w grupie całkowi-
tej (pozostałe bity w integer_gróup mogą być ustawione, ale nie podlegają
sprawdzaniu).
Dla grup punktowych, testowanie X, Y i Z może być połączone w testowa-
nie jednego łańcucha, składającego się z operatorów oddzielonych prze-
cinkami (na przykład ">,>,*"). Jeśli któryś z operatorów zostanie
pominięty w łańcuchu (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ńcu-
chó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.
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ń boole-
'owskich, wykorzystujących operatory grupujące ukazane w poniższej tabe-
li. 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ą obejmo-
wać te operatory, zależy od operacji. Ukazuje to następująca tabela.
Tabela 4-15. Operatory grupujące dla listy filtrującej zbiory wskazań
"
Jeden lub więcej
operandów
"AND>"
"
Jeden lub więcej
operandów
"OR>"
""
""
Dla operatorów grupujących, operandem może być grupa pola elementu, ope-
rator relacji, po którym występuje grupa pola elementu lub wyrażenie za-
gnieżdżone zbudowane z tych operatorów.
Poniżej podany jest przykład wykorzystania w liście filtrującej operatorów
grupujących:
(ssget "X"'((-4 . "(-4 . "
(O . "Cl RCLE")
(40. 1.0)
(-4 . "AND>")
(-4 . "
(O . "LINĘ")
(8 . "ABC")
(-4 . "AND>")
(-4 . "OR>"))
Katalog funkcji AutoLISP-u 173
Funkcje AutoLISPu
Przykład ten spowodowałby wybranie wszystkich Okręgów o promieniu 1.0
oraz wszystkich 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: "",
"", "", "".
(ssiength ss)
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
(ssiength z) zwraca l
(ssmemb ename ss)
Funkcja ssmemb sprawdza, czy argument ename należy do zbioru wybra-
nych elementów ss. Jeżeli tak jest, to ssmemb zwraca nazwę elementu
(ename). W przeciwnym 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
(ssname ss index)
Funkcja zwraca nazwę elementu należącego do zbioru wybranych elemen-
tów ss i mającego w nim numer porządkowy index. Jeżeli index]est 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 ele-
mentó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))
(setq e1 (ssname z 0))
(setq e4 (ssname z 3))
Tworzy zbiór wskazań o nazwie z
Przypisuje e1 nazwę 1-go elementu z
Przypisuje e4 nazwę 4-go elementu z
Aby uzyskać dostęp do elementów zbioru o indeksie większym od 32676, na-
leży argument index wprowadzić jako liczbę typu real. Przykładowo:
(setq ex (ssname z2 50843.0)) przypisuje ex nazwę 50844-go elemen-
tu z2
174 Katalog funkcji AutoLISP-u
Rozdział 4
(strcase string [which])
Funkcja strcase bierze łańcuch znaków alfanumerycznych string i zwraca go
po dokonaniu konwersji wszystkich liter alfabetu na duże lub małe (maju-
skuła lub minuskuł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"
Funkcja strcase właściwie obsługuje konwersję wybranego do pracy zesta-
wu znaków (patrz "Obsługa różnych języków").
(strcat stringi [string2] ...)
Funkcja zwraca łańcuch powstały w wyniku konkatenacji (połączenia) argu-
mentów stringi, string2 itd. Przykładowo: (strcat "M" "arta")
(strcat "a" "b" "c") zwraca "Marta"
(strcat "a""" "c") zwraca "abc"
zwraca "ac"
(strien [string] ...)
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óce-
nie liczby O (typ integer). Przykładowo:
(strien "abcd") zwraca 4
(strien "ab") zwraca 2
(strien "raz" "dwa" "trzy") zwraca 10
(strien) zwraca O
(strien "") zwraca O
(subst newitem olditem Ust)
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 nie-
zmienionej postaci. Przykładowo, jeżeli dokonamy podstawień:
(setq test '(a b (c d) b))
to:
Katalog funkcji AutoLISP-u 175
Funkcje AutoLISPu
(subst 'qq 'b test)
(subst 'qq 'z test)
(subst 'qq '(c d) test)
(subst '(qq rr) '(c d) test)
(subst '(qq rr) 'z test)
zwraca (A QQ (C D) QQ)
zwraca (A B (C D) B)
zwraca (A B QQ B)
zwraca (A B (QQ RR) B)
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)
)
(setq a2 '(a j.))
(subst a1 a2 kto)
(substr string start [length])
zwraca (A JAN)
zwraca (A J.)
zwraca ((A J.) (B F.) (C KOWALSKI))
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 zwracany łańcuch zawiera znaki aż do końca argumentu
string. Argumenty string i length muszą być dodatnimi liczbami typu integer.
Istotne jest zwrócenie uwagi na to, że pierwszy znak w łańcuchu string ma
numer l. Jest to różnica w stosunku do wszystkich innych funkcji, operują-
cych na elementach list (takich jak nth, ssname i inne), które pozycję pier-
wszego elementu listy liczą jako pozycję 0.
Przykład
(substr "abcde" 2)
(substr "abcde" 2 1)
(substr "abcde" 3 2)
zwraca "bcde"
zwraca "b"
zwraca "cd"
(tablet code [rowi row2 row3 directionJ)
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 tworzenia nowych transformacji tabletu.
W zależności od wartości argumentu całkowitego code, funkcja tablet od-
twarza bieżącą kalibrację digitizera (pulpitu), albo ustanawia nową kalibra-
cję. Gdy code jest równy O, tablet zwraca bieżącą kalibrację. Gdy argument
code jest równy l, muszą po nim wystąpić nowe parametry kalibracji: row1,
row2, row3 i direction.
COde Liczba całkowita (typu integer).
Gdy code jest równy O, tablet zwraca bieżącą kalibrację.
W tym wypadku wszystkie pozostałe argumenty muszą być
pominięte. Gdy /cocfjest równy l, tablet ustala nową kalibra-
176 Katalog funkcji AutoLISP-u
Rozdziel 4
cję, zgodnie z podanymi nowymi parametrami. W tym wy-
padku pozostałe argumenty muszą wystąpić.
rowi, 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 Glo-
balnego Układu Współrzędnych GUW), normalny do
płaszczyzny reprezentującej powierzchnię tabletu.
Uwaga: 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ć za-
wsze równy l. tablet zwraca ten parametr jako zawsze równy l, 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 C). 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 trans-
formacja tożsamościowa:
(tablet 1 '(1 O 0) '(O 1 0) '(O O 1) '(O O 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.
Uwaga,' Zmienna systemowa TABMODE umożliwia programom w Auto-
LISP-ie włączanie i wyłączanie trybu pulpitowego.
Informacje uzupełniające: W części "Kalibrowanie pulpitu graficznego"
podane są dodatkowe informacje na temat macierzy transformacji pulpitu.
(tblnext table-name [rewind])
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" (tab-
lica warstw), "LTYPE" (tablica rodzajów linii), "VI EW" (tablica widoków),
"STYLE" (tablica stylów pisma), "BŁOCK" (tablica bloków), "UCS" (tablica lo-
kalnych 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 tbisearch).
Jeżeli jednak podano również argument rewind, który po ewaluacji daje war-
tość różną od nil, to tablica symboli jest ponownie odczytywana od pierwszej
wprowadzonej do niej pozycji. W przypadku, gdy w tablicy nie ma już więcej
zapisanych pozycji, funkcja zwraca nil. Nigdy nie są zwracane pozycje usu-
nięte z tablicy.
Po znalezieniu wpisanej do tablicy pozycji, funkcja zwracają w postaci listy
Katalog funkcji AutoLISP-u 177
Funkcje AufoLISPu
par kropkowych zawierających kody grup i wartości w standardzie DXF. Li-
sta ta jest bardzo podobna do zwracanej przez entget. Przykładowo:
(tblnext "layer" T) Dane pierwszej warstwy
może zwrócić następującą listę:
((O . "LAYER") Typ symbolu
(2 . "O") Nazwa symbolu
(70 . 0) Wskaźniki
(62 . 7) Numer koloru, ujemny gdy warstwa
(6 . "CONTINUOUS") ukryta
) Nazwa rodzaju linii rysunkowej
Należy zwrócić uwagę na brak grupy -1. AutoCAD pamięta ostatnią zwra-
caną pozycję z każdej tablicy i przy kolejnym wywołaniu funkcji tblnext dla
danej tablicy, zwracana jest następna wpisana do niej pozycja. Rozpoczyna-
ją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 Błock 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 "błock") Odczytuje definicję Bloku
może zwrócić:
((O . "BŁOCK") Typ symbolu
(2 . "RAMKA") Nazwa symbolu
(70 . 0) Wskaźniki
(10 9.0 2.0 0.0) Początek X,Y,Z
(-2 . ) 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 ele-
mentó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.
Uwaga: Jeśli Blok nie zawiera żadnych elementów, zwracana przez tblnext
grupa -2 jest nazwą elementu Endbik tego Bloku.
(tbisearch table-name symbol [setnext])
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ą auto-
matycznie zamieniane na duże. Jeżeli zostanie znaleziony wpis dla określo-
nej nazwy symbolu, to pozycja ta jest zwracana w formacie opisanym dla
tblnext. W przeciwnym wypadku, funkcja zwraca nil. Przykładowo:
(tbisearch "style" "standard") Parametry stylu pisma
Katalog funkcji AutoLISP-u
Rozdział 4
może zwrocie:
((O."STYLE")
(2 . "STANDARD")
(70 . 0)
(40 . 0.0)
(41 . 1.0)
(50 . 0.0)
(71 . 0)
(3 . "txt")
(4 . ")
)
Typ symbolu
Nazwa symbolu
Wskaźniki
Stała wysokość znaków
Współczynnik szerokości
Kąt pochylenia
Wskaźniki generowania
Podstawowy plik kroju czcionki
Plik wieloznakowy
Zwykle tbisearch nie ma wpływu na kolejność odczytywania pozycji tablicy
przez tblnext. Jeżeli jednak użycie tbisearch skończyło się odnalezieniem
szukanego wpisu i wprowadzony został różny od nil argument setnext, to li-
cznik 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 fun-
kcji tbisearch.
Informacje uzupełniające: Patrz także "Dostęp do tablicy symboli".
(terpri)
Funkcja ta wypisuje na ekranie nową linię i zwraca nil. Funkcja terpri nie
jest stosowana w operacjach wejścia/wyjścia na plikach. Aby wpisać do pliku
nową linię, należy użyć funkcji print lub princ.
(textbox elist)
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, wyko-
rzystywane są bieżące (lub standardowe) parametry. Zakończone sukcesem
wywołanie funkcji textbox powoduje zwrócenie dwóch punktów. W przeciw-
nym wypadku funkcja zwraca nil.
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, piono-
wym, 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 definiu-
je prawy górny wierzchołek tego prostokąta. Niezależnie od orientacji mie-
rzonego Tekstu, zwracana lista punktów zawsze wskazuje lewy dolny i pra-
Katalog funkcji AutoLISP-u 179
Funkcje AutoLISPu
wy górny wierzchołek obejmującego prostokąta.
Informacje uzupełniające: Patrz także "Funkcja narzędziowa textbox"
(textpage)
W jednomonitorowych instalacjach AutoCAD-a, funkcja ta wymazuje za-
wartość tekstowego okna AutoCAD-a 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.
(textscr)
W systemie z jednym monitorem funkcja textscr powoduje przełączenie
ekranu z trybu graficznego w tryb tekstowy (podobnie jak klawisz funkcyjny
AutoCAD-a Przełącz Ekran). Funkcja textscr zawsze zwraca nil.
Informacje uzupełniające: Patrz opisy funkcji textpage i graphscr.
(tracę function...)
Funkcja tracę jest narzędziem pomocniczym do tzw. uruchamiania progra-
mów, przez co należy rozumieć ich testowanie w poszukiwaniu błędów. Usta-
wia ona znaczniki, które pozwalają na śledzenie przebiegu wskazanych ar-
gumentów function i zwraca nazwę ostatniej funkcji. Za każdym razem, gdy
wskazana function jest poddawana ewaluacji, na ekranie pojawia się infor-
macja o tym fakcie, wraz z podaniem stopnia zagłębienia wywołań, oraz wy-
pisywany jest wynik zwracany przez tę funkcję. Przykładowo:
(tracę test) zwraca TEST
i ustawia znacznik umożliwiający śledzenie przebiegu funkcji TEST.
Funkcja tracę zwraca nazwę ostatniej napotkanej funkcji.
Informacje uzupełniające: Patrz opis funkcji untrace.
(trans pt from to [disp])
Funkcja ta dokonuje transformacji układu współrzędnych. Argument ptjest
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ęd-
nych argumentu pt, a to jest kodem układu współrzędnych, do którego od-
noszą się wartości zwracane przez funkcję. Jeżeli w wyrażeniu podano opcjo-
nalny argument of/spijest on różny od nil, to argument p? 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.
180 Katalog funkcji AutoLISP-u
Rozdział 4
Tabela 4-16. Kody układów współrzędnych
llgg
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ędnych: EUW dla aktualnej rzutni, z użyciem kodu 0 lub 1 EUW 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 rozdziale 4 fun-
kcje entnext, entlast, entsel, nentsel i ssname. Umożliwia to transfor-
mację 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 elementem 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 ele-
mentów, dla których UWE i GUW są równoważne.
Funkcja trans zwraca listę współrzędnych punktu 3W (lub wektora prze-
sunięcia), które są wyrażone w układzie współrzędnych układ-2. Przykła-
dowo, 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) 01)
(trans'(1.0 2.0 3.0) 1 0)
zwraca (2.0-1.03.0)
zwraca (-2.0 1.0 3.0)
Układy współrzędnych są bardziej szczegółowo omówione w części
"Transformacje układów współrzędnych", w rozdziale 2.
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 \.ext-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:
Katalog funkcji AutoLISP-u 181
Funkcje AutoLISPu
(trans '(1 2 3) 1 okrąg-nazwa-elementu)
Następnie należy dodać otrzymane przesunięcie do punktu będącego środ-
kiem okręgu.
Przykładowo, jeżeli chcemy sprawdzić, bliżej którego końca danego elemen-
tu 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ć pod-
dany konwersji jako punkt czy jako przesunięcie. Jeśli wartość ma być trans-
formowana 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 4-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
UWE 0.0
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)
182 Katalog funkcji AutoLISP-u
Rozdział 4
(type item)
Funkcja ta zwraca określenie typu argumentu item, gdzie typ jest jedną z po-
niższych pozycji (jako atom). Jeżeli argument item w wyniku ewaluacji daje
nil, funkcja zwraca nil.
REAL
Liczby
zmiennoprzecinkowe
EXSUBR
Funkcje zewnętrzne
(ADS)
FILE Deskryptory plików PICKSET Zbiory wskazań
STR Łańcuchy tekstowe ENAME Nazwy elementów
INT
SYM
Liczby całkowite
Symbole
PAGETB
Tablice stronicowania
funkcji
LIST
Listy i funkcje
użytkownika
SUBR Funkcje wewnętrzne
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)
(type a)
(type f)
(type r)
(type s)
(type x)
(type +)
(type nil)
zwraca
zwraca
zwraca
zwraca
zwraca
zwraca
zwraca
zwraca
SYM
INT
FILE
REAL
STR
LIST
SUBR
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
(untrace function...)
Funkcja untrace usuwa ustawione przez tracę znaczniki śledzenia dla ar-
gumentów function i zwraca nazwę ostatniej funkcji. Pozwala na selektywne
wyłączanie trybu śledzenia przebiegu wykonywania testowanego programu.
Przykładowo:
(untrace TEST) zwraca TEST
Katalog funkcji AutoLISP-u 183
oraz usuwa znacznik śledzenia dla funkcji TEST.
Informacje uzupełniające: Patrz także opis funkcji tracę.
(ver)
Funkcja ta zwraca łańcuch alfanumeryczny (typ string), który zawiera nu-
mer aktualnej wersji AutoLISP-u. 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 zwracać "AutoLISP Wydanie 12.0"
Programy użytkowe, testując łańcuch zwracany przez funkcję ver, mogą
sprawdzać, która wersja AutoLISP-u jest wykorzystywana.
(vmon)
Obecnie funkcja ta nie zapewnia już wirtualnego stronicowania funkcji, ale
została pozostawiona w AutoLISP-ie w celu zapewnienia zgodności z po-
przednimi wersjami. Więcej informacji można znaleźć w części "Wirtualne
stronicowanie funkcji".
(vports)
Funkcja ta zwraca listę deskryptorów rzutni dla aktualnej konfiguracji rzut-
ni. Każdy deskryptor rzutni jest listą zawierającą jej numer identyfikacyjny
oraz współrzędne lewego dolnego i prawego górnego narożnika rzutni.
Gdy zmienna systemowa TILEMODE ma wartość l, zwracana lista opisuje
konfigurację 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ść O, 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 TILE-
MODE jest wyłączony, wówczas rzutnią oznaczoną numerem l jest zawsze
obszar papieru.
Przykładowo przy konfiguracji z jedną rzutnią, gdy zmienna TILEMODE
ma wartość l, 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ść l,
funkcja vports może zwrócić:
( (5 (0.50.0) (1.00.5))
(2 (0.50.5) (1.0 1.0))
184 Katalog funkcji AutoLISP-u
Rozdział 4
(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ą aktu-
alną.
(wcmatch string pattern)
Funkcja ta sprawdza, czy wzorzec, mogący zawierać znaki uniwersalne, od-
powiada argumentowi string. Argument string jest porównywany z argumen-
tem pattern. Jeżeli są one sobie równe, funkcja zwraca T; w przeciwnym wy-
padku 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
j est j edynie około 500 pierwszych znaków argumentów string i pa ttern; ws zy-
stkie pozostałe są ignorowane.
Tabela 4-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)
? (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 za-
czyna się od znaku N. Możliwe jest używanie we wzorcu przecinków, co po-
zwala na wprowadzenie większej liczby warunków. Poniższy przykład pre-
zentuje testowanie przez porównanie z trzema wzorcami:
Katalog funkcji AutoLISP-u 185
Funkcje AutoLISPu
(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 paltem mogą być zmienne i wartości
zwracane przez funkcje AutoLISP-u.
Jeżeli zachodzi potrzeba sprawdzenia, czy łańcuch zawiera znak spełniający
funkcję znaku uniwersalnego, w charakterze znaku ucieczki, blokującego je-
go 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
Uwagw Ze względu na możliwość dodania w przyszłych wersjach Auto-
LISP-u kolejnych znaków uniwersalnych, dobrą praktyką jest poprzedzanie
lewym apostrofem (') wszystkich znaków niealfabetycznych. Zapewni to
zgodność napisanego programu z przyszłymi wydaniami pakietu.
Zarówno język C, jak i AutoLISP, wykorzystują lewy ukośnik (\) w chara-
kterze znaku ucieczki (ang. escape). Dlatego, aby uzyskać w łańcuchu poje-
dynczy 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 do-
słownie i nie ma konieczności poprzedzania ich apostrofem. Wyjątki stano-
wią 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 nego-
wania, którego znaczenie można przetłumaczyć słowami wszystkie znaki,
oprócz występujących dalej, np. "[~ABC]"). Myślnik (-) jest odczytywany do-
sł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 wy-
stępuje po rozpoczynającej ciąg znaków tyldzie, np "[ABC]". W innych przy-
padkach, myślnik (-) jest używany wewnątrz nawiasów kwadratowych do
określania zakresu wartości dla konkretnego znaku. Zakres funkcjonuje tyl-
ko dla pojedynczych znaków, tak więc "STR[1-38]" odpowiada łańcuchom
STR1, STR2, STR4 i STR8, a "[A-Z]" odpowiada dowolnej jednej dużej lite-
rze.
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]").
186 Katalog funkcji AutoLISP-u
Rozdział 4
(while testexpr expr ...)
Funkcja poddaje ewaluacji argument testexpri, jeżeli jest on różny od nil, wy-
licza pozostałe argumenty expr. Następnie wartość argumentu testexpr jest
wyznaczana ponownie. Taka sekwencja będzie powtarzana dopóty, dopóki
wyrażenie testexprme da w wyniku nil. Wówczas funkcja while zwraca ostat-
nią wartość ostatniego argumentu expr. Przykładowo:
(setq test 1)
wtedy:
(while (<= test 10)
(pewna-funkcja test)
(setq test (1 + test))
)
wywoła dziesięć razy funkcję some-func dla wartości test od l do 10, a na-
stępnie zwróci 11, jako wartość ostatniego wyliczonego wyrażenia.
(write-char code [file-desc])
Funkcja zapisuje pojedynczy znak na ekranie lub w otwartym pliku, wska-
zywanym przez file-desc. Argument code jest wartością kodu ASCII (w sy-
stemie dziesiętnym) zapisywanego znaku, a także wartością zwracaną przez
funkcję. Przykładowo;
(write-char 67) zwraca 67
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 ope-
racyjnych, w których z kolei mogą być używane różne konwencje sygnalizo-
wania końca linii w pliku tekstowym ASCII. Przykładowo, w systemie ope-
racyjnym UNDC wykorzystywany 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. car-
riage-retum) w połączeniu ze znakiem nowej linii LF, których kodami ASCII
są liczby 13 i 10. Aby ułatwić przenoszenie programów AutoLISP-u pomię-
dzy wszystkimi systemami operacyjnymi, funkcja write-char dokonuje kon-
wersji 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 CE/LF (kody ASCII 13 i 10). Funkcja
write-char nie może zapisać do pliku znaku NUL (kod ASCII 0).
Informacje uzupetnityące: Listę kodów ASCII zawiera dodatek F.
Katalog funkcji AutoLISP-u 187
Funkcje AutoLISPu
(write-line string [file-desc])
Funkcja zapisuje łańcuch alfanumeryczny string na ekranie lub do otwartego
pliku wskazywanego przez file-desci zwraca argument string bez ewaluacji,
w postaci znaków ujętych w cudzysłów, który jest jednak pomijany przy za-
pisie do pliku. Przykładowo, zakładając, że f jest deskryptorem otwartego pli-
ku:
(write-line "Test" f) zapisuje Test i zwraca "Test"
(xdroom ename)
Funkcja xdroom zwraca ilość pamięci, dostępnej dla dodatkowych danych
elementu ename. W przypadku wywołania nie zakończonego sukcesem, fun-
kcja zwraca nil.
Funkcja ta została udostępniona użytkownikom AutoLISP-u, 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 kilobaj-
tó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.
Podany przykład sprawdza dostępne miejsce na dane dodatkowe elementu
Rzutnia. Zakładając, że zmienna vpname zawiera nazwę elementu rysunko-
wego 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 baj-
tów zostało już wykorzystanych. Ilość pamięci wykorzystanej na dane dodat-
kowe może być bezpośrednio uzyskana za pomocą funkcji xdsize.
(xdsize list)
Funkcja ta zwraca rozmiar obszaru pamięci (w bajtach), jaki zajmuje list po
dopisaniu jej do elementu w charakterze danych dodatkowych. W przypad-
ku nieudanego wywołania funkcja zwraca nil.
Argument list musi być poprawną listą danych dodatkowych elementu, za-
wierającą nazwę aplikacji zarejestrowanej uprzednio za pomocą funkcji
regapp. Pola z nawiasami klamrowymi (grupy z kodem 1002) muszą wy-
stępować parami. Niepoprawna list jest przyczyną błędu i powoduje umie-
szczenie odpowiedniego kodu błędu w zmiennej ERRNO. Jeżeli dane dodat-
kowe zawierają nazwę niezarejestrowanej aplikacji, na ekranie ukaże się na-
stępujący komunikat błędu (zakładając, że zmienna CMDECHO ma wartość
l):
Błędna nazwa aplikacji w grupie o kodzie 1001
188 Katalog funkcji AutoLISP-u
Rozdział 4
Argument list może rozpoczynać się kodem grupy -3 (znacznik pomocniczy
danych dodatkowych elementu), ale nie jest to wymóg bezwzględny. Dane do-
datkowe 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 po-
przedniej za pomocąfunkcji cdr. Istotne jestjednak, by posiadała obejmujące
ją nawiasy.
( ("PROGRAM-1" (1000 . "APLIKOM")
(1002 . "{")
(1040 . 0.0)
(1040. 1.0)
(1002 . "}"))
)
)
Teraz przedstawiamy nieprawidłową listę dla funkcji xdsize, w której bra-
kuje obejmują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 li-
sty zawierającej dodatkowe dane elementu z dwóch zarejestrowanych apli-
kacji.
(setq n1 (list "PROGRAM-1" (cons 1000 "APLIKOM")
(cons 10400.0)
(cons 1040 1.0)
)
)
(setq n2 (list "PROGRAM-2" (cons 1000 "APLIKOM")
(cons 10400.0)
(cons 1040 1.0)
)
)
(regapp "PROGRAM-1")
(regapp "PROGRAM-2")
(xdsize (list n1 n2)) zwraca 60
Katalog funkcji AutoLISP-u 189
Funkcje AutoLISPu
(xload application [onfailure])
Funkcja ta służy do wczytania programu użytkowego ADS (AutoCAD Deve-
lopment 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ść ty-
pu string lub zmienna zawierająca nazwę pliku wykonawczego. Podczas
wczytywania pliku, jest on weryfikowany pod kątem sprawdzenia, czy jest
rzeczywiście programem użytkowym ADS. Dodatkowo sprawdzana jest
zgodność (kompatybilność) wersji programu ADS, samego ADS oraz działa-
jącej wersji AutoLISP-u.
(xload "/programy/ame")
po zakończeniu pozytywnym, zwraca "/programy/ame"
Niepowodzenie w działaniu funkcji xload powoduje zwykle wystąpienie błę-
du AutoLISP-u. Jeśli jednak podany jest argument onfailure, niepowodzenie
w działaniu funkcji powoduje zwrócenie wartości tego argumentu, zamiast
wyświetlenia komunikatu błędu. Ta cecha funkcji xload jest podobna, jak dla
funkcji load.
Informacje uzupełniające: Bardziej szczegółowe informacje zawiera
Wstęp do ADS Przewodnik Programisty.
(xunload application [onfailure]}
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żytkowe-
go. W przeciwnym wypadku wyprowadzany jest komunikat błędu.
Argument application należy wprowadzić jako ujęty w cudzysłów łańcuch
alfanumeryczny 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 xlo-
ad 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 pa-
mięci programu 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 AutoLISP-u. Jeśli jednak podany jest argument onfailure, niepowodze-
nie w działaniu funkcji powoduje zwrócenie wartości tego argumentu, za-
miast wyświetlenia komunikatu błędu. Ta cecha funkcji xunload jest podo-
bna, jak w funkcji load.
Informacje uzupełniające: Bardziej szczegółowe informacje zawiera
Wstęp do ADS Przewodnik Programisty.
190 Katalog funkcji AutoLISP-u
Rozdział 4
(zerop item)
Funkcja ta zwraca T, jeżeli item jest liczbą typu integer lub real, której ewa-
luacja daje zero. W innym wypadku zerop zwraca nil. Funkcja nie jest zde-
finiowana dla innych typów argumentu item. Przykładowo:
(zerop 0) zwraca T
(zerop 0.0) zwraca T
(zerop 0.0001) zwraca nil
Funkcje AutoLISP-u zdefiniowane w systemie ADS
Opisane w tej części funkcje są zdefiniowane przez program acadpp, napi-
sany 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 AutoLISP-ie
może wywołać funkcję xload, w celu sprawdzenia czy acadpp został wczyta-
ny
(acad_colordlg colornum [flag])
Wyświetla standardowe okno AutoCAD-a, służące do wybierania koloru.
Argument colornum jest liczbą całkowitą, z zakresu od O do 256. Określa on
numer koloru AutoCAD-a, 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 po-
dany, 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żytkowni-
ka przez wciśnięcie przycisku OK. Jeśli użytkownik anuluje okienko dialo-
gowe, acad_colordlg zwraca nil.
Przykład
Poniższe wyrażenie pyta użytkownika o kolor, proponując kolor zielony.
(acad_colordlg 3)
Uwaga: Wartość nr_koloru równa O oznacza kolor JAKBLOK, a wartość rów-
na 256 to kolor JAKWARSTWA.
(acad_helpdlg helpfile [topie])
Wyświetla standardowe okienko z informacjami pomocniczymi AutoCAD-a,
odczytanymi ze wskazanego pliku dyskowego. Funkcja ta może być wywo-
ływana z procedury AutoLISP-u w celu podania informacji pomocniczych
związanych ze standardowym poleceniem AutoCAD-a, lub informacji zwią-
zanych z programem użytkownika.
Argument helpfilejest łańcuchem alfanumerycznym, określającym plik z in-
Funkcje AutoLISP-u zdefiniowane w systemie ADS 191
Funkcje AutoLISPu
formacjami pomocniczymi AutoCAD-a (rozszerzenie nazwy .hip jest opcjo-
nalne). Argument hasło jest hasłem, które początkowo jest wyświetlane
w okienku dialogowym. Jeśli argument topie jest łańcuchem pustym (""),
okienko dialogowe zawiera informacje wstępne z pliku informacji pomocni-
czych.
Dla własnych programów użytkownika, plik hip będzie zwykle wskazywał
nazwę własnego pliku informacji pomocniczych użytkownika. Format tego
pliku jest opisany w rozdziale 2 AutoCAD Podręcznik Adaptacyjny.
Przykład
Można utworzyć poniższy plik o nazwie ac_help.hlp, będący plikiem infor-
macji pomocniczych AutoCAD-a (pliki informacji pomocniczych AutoCAD-a
muszą posiadać rozszerzenie .hip).
Funkcja acad_helpdlg wyświetla standardowe okienko z informacjami pomoc-
niczymi AutoCAD-a. Format wywołania jest następujący:
acad_helpdlg
\PLIK_HLP
Argument określa plik z informacjami pomocniczymi AutoCAD-a.
Rozszerzenie nazwy .hip jest opcjonalne.
\HASŁO
Argument określa hasło, które początkowo jest wyświetlane
w okienku dialogowym.
Jeśli argument hasło jest łańcuchem pustym (""), okno dialogowe zawiera in-
formacje 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 ha-
słem HASŁO:
(acad_helpdlg "ac_help" "hasło")
(acad_strlsort list)
Powoduje uporządkowanie listy łańcuchów tekstowych w porządku alfabe-
tycznym. Argument list zawiera łańcuchy tekstowe, które mają zostać upo-
rządkowane. Funkcja acad_strlsort zwraca listę tych samych łańcuchów, ale
uporządkowanych w kolejności alfabetycznej.
Jeśli argument lista nie jest poprawnie uformowany, lub jeśli brakuje pamię-
ci do wykonania 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" "Sęp" "Oct" "Nov" "Dęć"))
(acad_strlsort mos)
192 Funkcje AutoLISP-u zdefiniowane w systemie ADS
Rozdział 4
i zwraca następującą listę:
("Apr"
"Jun"
"Aug"
Mar"
"Dęć"
'May"
"Feb"
'Nov"
"Jan"
"Oct"
"Jul"
'Sęp")
Polecenia zdefiniowane w systemie ADS
W tej części opisane są polecenia AutoCAD-a, nadające specjalne znaczenie
dostępowi do interpretera AutoLISP-u. Polecenia te są dostępne tylko wtedy,
gdy wczytany jest program acadpp, napisany w systemie ADS.
(c:gkreskuj pt [ss] [vector])
(c:bhatch pt [ss] [vector])
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
ssjest zbiorem wskazań, zawierającym dodatkowe elementy granicy obsza-
ru. Ostatni argument vector jest listą współrzędnych, opisujących wektor
kierunkowy wykorzystywany przez BHATCH do rysowania 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.
Polecenie BHATCH i koncepcja rzutowania promieni są opisane w Auto-
CAD Podręcznik Użytkownika.
Przykłady
(setq p1 '(3 5)
ss1 (entlast))
(c:bhatch p1)
(c:bhatch p1 ss)
Wybiera ostatni utworzony element
Kreskuje obszar zdefiniowany przez graniczną Poli-
linię, utworzoną przez punkt (3,5)
Kreskuje obszar zdefiniowany zarówno przez grani-
czną Polilinię, utworzoną przez punkt (3,5), jak
i przez zbiór wskazań ss
Kreskuje obszar zdefiniowany przez graniczną Poli-
linię, utworzoną przez punkt (3,5) wykorzystując
rzutowanie promieni +X
(c:bhatch p1 '(1 0))
Wykorzystywane w argumencie vector wartości współrzędnych są liczbami
rzeczywistymi i mogą przyjmować dowolne wartości. Poniższa tabela zawie-
ra przykłady wartości zgodnych z wartościami używanymi w okienku dia-
logowym polecenia GKRESKUJ.
Tabela 4-20. Kierunki rzutowania promieni i wartości argumentu wektor
(00) (Najbliższy)
(1 0) +X (O stopni)
(01) +Y (90 stopni)
Polecenia zdefiniowane w systemie ADS 193
Funkcje AutoLISPu
(-10) -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ę utworzone-
go elementu rysunkowego Hatch, a w przypadku braku sukcesu funkcja
zwraca nil. W przypadku zakończonego błędem wywołania c:bhatch, komu-
nikat błędu można odczytać przez wywołanie funkcji bherrs.
(c:gpliniap^ [ss] [vector])
(c:_bpoly pt [ss] [vector])
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 ssjest zbiorem wskazań, za-
wierającym dodatkowe elementy granicy obszaru. Ostatni argument vector
jest listą współrzędnych, opisujących wektor kierunkowy wykorzystywany
przez GPLINIAdo rzutowania promieni. Przy braku tego argumentu przyj-
mowany 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.
Polecenie GPLINIA i koncepcja rzutowania promieni są opisane w Auto-
CAD Podręcznik Użytkownika.
Zakończone sukcesem działanie funkcji c:bpoly zwraca nazwę utworzonej
Polilinii granicznej, a w przypadku braku sukcesu funkcja zwraca nil.
W przypadku zakończonego błędem wywołania c:bpoly, komunikat błędu
można odczytać przez wywołanie funkcji bherrs.
(bherrs)
Podaje komunikat błędu, generowany przez zakończone błędem wywołanie
funkcji c:bhatch lub c:bpoly. Zakończone sukcesem wywołanie bherrs po-
woduje podanie łańcucha komunikatu błędu. W przeciwnym wypadku wy-
nikiem jej działania jest nil.
Przykład
Po wywołaniu c:bhatch, w programie można umieścić następujące wyraże-
nie, 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ń AutoCAD-a.
194 Polecenia zdefiniowane w systemie ADS
Rozdział 4
(c:psdynam modę)
(c:psdrag modę)
Wykorzystuje polecenie PSDYNAM (PSDRAG) do ustalenia wartości zmiennej
PSDRAG. Argument modę jest liczbą całkowitą, której wartość powinna wy-
nosić O lub l. Bieżąca wartość PSDRAG wpływa na interakcyjne wykorzy-
stywanie polecenia PSWE. Gdy PSDRAG jest równa l, PSWE generuje ob-
raz w standardzie PostScript, w miarę jak użytkownik wskazuje dynamicz-
nie parametr jego skalowania. Gdy PSDRAG wynosi O, PSWE generuje i ry-
suje jedynie ramkę ograniczającą obraz. Zakończone sukcesem wywołanie
c:psdrag zwraca nową wartość PSDRAG, a nil - w przeciwnym wypadku.
Dalsze informacje można znaleźć w rozdziale 10 AutoCAD Podręcznik
Adaptacyjny oraz w rozdziale 14 AutoCAD Podręcznik Użytkownika.
Przykład
Poniższe wyrażenie włącza tryb PSDRAG, ustawiając wartość zmiennej na
l. Następne interakcyjne zastosowanie PSWE generuje obraz w standardzie
PostScript w miarę, jak użytkownik dynamicznie wskazuje parametr jego
skalowania.
(c:psdrag 1)
(c:pswyp entpattern [argi] [arg2]]...)
(c:psfill entpattern [argi [arg2]]...)
Wykorzystuje polecenie PSWYP (PSFILL) do wypełnienia elementu wzorem
w standardzie PostScript. Argument en/jest nazwą Polilinii. Argument pat-
ternjest ł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 a/grsą argumentami
dla wewnętrznej procedury wypełniania w PostScrip-cie. Ich ilość i ro-
dzaj odpowiada argumentom wymaganym przez wzór, zgodnie z defi-
nicją w acad.psf. Każdy z argumentów jest albo liczbą całkowitą,
albo rzeczywistą. Dla jednego wzoru może być potrzebne od O 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 wyko-
rzystywane są standardowe wartości dla wzoru. Zakończone sukcesem wy-
wołanie c:psfill zwraca T. W przypadku braku sukcesu funkcja zwraca nil.
Przykład
Wzór wypełnienia Greyscale ma jeden argument. Poniższy przykład wykorzy-
stuje standardową wartość argumentu wzoru Greyscale, równą 50 procent:
(c:psfill ename "Greyscale")
Następny przykład definiuje natomiast 10-cioprocentową intensywność za-
czernienia (ang. greyscale - skala szarości):
(c:psfill ename "Greyscale" 10)
Uzupełniające informacje można znaleźć w rozdziale 10 w AutoCAD Podrę-
cznik Adaptacyjny.
Polecenia zdefiniowane w systemie ADS 195
Funkcje AutoLISPu
(c:psin filename position scalę)
(c:pswe filename position scalę)
Wprowadza polecenie PSWE, służące do importowania plików w standardzie
encapsulated PostScript (.eps). Argument filename jest łańcuchem zawierają-
cym nazwę obrazu w standardzie PostScript (nie ma potrzeby podawać roz-
szerzenia .eps nazwy pliku). Argument position jest punktem, określającym
miejsce wstawienia (anonimowego) bloku PostScript. Argument sca/e jest
rzeczywistą wartością, definiującą współczynnik skalowania. W razie su-
kcesu, funkcja c:pswe zwraca nazwę nowoutworzonego elementu rysunko-
wego. W wypadku 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)
796 Polecenia zdefiniowane w systemie ADS
Wyszukiwarka
Podobne podstrony:
04 Funkcjonow banku hipoidP23
04 funkcja trygonom
0202 04 03 2009, wykład nr 2 , Budowa i funkcje błony komórkowej oraz transport przez błony(1)
06 Rozdział 04 Twierdzenie o funkcji uwikłanej i jego konsekwencje
T 04 Zasady funkcjonowania kont księgowych
2006 04 Elektrostymulacja funkcjonalna w chorobach dzieciecych
04 Rozdział 02 Różniczkowanie funkcji wielu zmiennych
Geneza i funkcjonowanie mitu arkadyjskiego
Fundacje i Stowarzyszenia zasady funkcjonowania i opodatkowania ebook
integracja funkcji
04 (131)
FUNKCJA CHŁODZENIE SILNIKA (FRIC) (ZESPOLONE Z KALKULATOREM
2006 04 Karty produktów
więcej podobnych podstron