dod B (2)

background image

Epebufl!C

778

),!

),!

),!

),!ovncfs!ovncfs!

****

Funkcja ta realizuje arytmetyczn

ą operację dodawania i zwraca w wyniku sumę

wszystkich argumentów number. Składniki sumy mog

ą być zarówno liczbami rzeczy-

wistymi typu real jak i warto

ściami typu integer. Jeżeli wszystkie argumenty są typu

integer, to wynik jest równie

ż typu integer. Jeśli którykolwiek z nich jest liczbą typu

real, to wszystkie liczby typu integer zostan

ą zamienione na rzeczywiste i wynik też

b

ędzie liczbą rzeczywistą. Przykładowo:

(+ 1 2)

zwraca

3

(+ 1 2 3 4.5)

zwraca

10.5

(+ 1 2 3 4.0)

zwraca

10.0

).!

).!

).!

).!ovncfs!\ovncfs^!

****

Funkcja ta realizuje arytmetyczn

ą operację odejmowania; odejmuje drugą liczbę od

pierwszej i zwraca ró

żnicę. Jeżeli lista zawiera więcej niż dwie liczby, to od pierwszej

liczby jest odejmowana suma liczb od drugiej do ostatniej i zwracany jest wynik. Je

żeli

natomiast lista argumentów zawiera tylko jedn

ą liczbę, wówczas wynikiem końcowym

jest odj

ęcie tej liczby od zera. Argumentami mogą być zarówno wartości całkowito-

liczbowe typu integer jak i liczby rzeczywiste, przy ogólnie przyj

ętych zasadach kon-

wersji typów. Przykładowo:

(- 50 40)

zwraca

10

(- 50 40.0 2)

zwraca

8.0

(- 50 40.0 2.5)

zwraca

7.5

(- 8)

zwraca

-8

background image

779

BvupMJTQ!—!qsbluzd{oz!lvst

)+!

)+!

)+!

)+!ovncfs!\ovncfs^!

****

Funkcja ta realizuje arytmetyczn

ą operację mnożenia i zwraca iloczyn wszystkich

argumentów number. Mog

ą to być zarówno liczby typu integer jak i real, przy ogólnie

przyj

ętych zasadach konwersji typów. Przykładowo:

(* 2 3)

zwraca

6

(* 2 3 4.0)

zwraca

24.0

(* 3 -4.5)

zwraca

-13.5

)0!

)0!

)0!

)0!ovncfs!\ovncfs^!

****

Funkcja ta realizuje arytmetyczn

ą operację dzielenia i zwraca iloraz pierwszego

argumentu number przez drugi. Je

żeli lista argumentów zawiera więcej niż dwie liczby,

to warto

ścią zwracaną przez funkcję jest wynik dzielenia pierwszej liczby przez iloczyn

pozostałych. Argumentami mog

ą być zarówno wartości całkowitoliczbowe typu

integer, jak i liczby rzeczywiste.

W przypadku gdy funkcja ma tylko jeden argument liczba, to zwracany jest wynik
dzielenia przez 1. Przykładowo:

(/ 100 2)

zwraca

50

(/ 100 2.0)

zwraca

50.0

(/ 100 20.0 2)

zwraca

2.5

(/ 100 20 2)

zwraca

2

(/ 135 360)

zwraca

0

(/ 135 360.0)

zwraca

0.375

(/ 4)

zwraca

4

)>!

)>!

)>!

)>!bupn!bupn!

****

Jest to funkcja sprawdzaj

ąca relację równości. Zwraca T, jeżeli wszystkie atomy są

sobie numerycznie równe; w wypadku przeciwnym funkcja zwraca nil. Argumentami
tej funkcji mog

ą być łańcuchy alfanumeryczne (typ string) i liczby. Na przykład:

(= 4 4.0)

zwraca

T

(= 20 388)

zwraca

nil

(= 2.4 2.4 2.4)

zwraca

T

(= 499 499 500)

zwraca

nil

(= "ja" "ja")

zwraca

T

(= "ja" "ty")

zwraca

nil

)0>!

)0>!

)0>!

)0>!bupn!bupn!

****

Jest to funkcja sprawdzaj

ąca relację nierówności. W wyniku zwraca T, jeżeli argumenty

atom s

ą różne. W wypadku przeciwnym, gdy oba atomy są sobie równe, funkcja zwraca

nil. Dla wi

ęcej niż dwóch argumentów funkcja jest nieokreślona. Przykładowo:

background image

Epebufl!C

77:

(/= 10 20)

zwraca

T

(/= "ona" "ona")

zwraca

nil

(/= 5.43 5.44)

zwraca

T

)=!

)=!

)=!

)=!bupn!bupn!

****

Jest to funkcja sprawdzaj

ąca relację mniejszości. Zwraca T, jeżeli pierwszy atom jest

numerycznie mniejszy ni

ż drugi, a nil w przypadku przeciwnym. Jeżeli lista argu-

mentów zawiera wi

ęcej niż dwa atomy, to funkcja zwraca T wtedy, gdy każdy atom ma

warto

ść mniejszą od następnego z prawej strony. Przykładowo:

(< 10 20)

zwraca

T

(< "b" "c")

zwraca

T

(< 357 33.2)

zwraca

nil

(< 2 3 88)

zwraca

T

(< 2 3 4 4)

zwraca

nil

)=>!

)=>!

)=>!

)=>!bupn!bupn!

****

Jest to funkcja sprawdzaj

ąca relację mniejszy lub równy. Jeżeli pierwszy atom jest

numerycznie mniejszy lub równy drugiemu, to funkcja zwraca T; w wypadku prze-
ciwnym nil. Je

żeli lista argumentów zawiera więcej niż dwa atomy, to funkcja zwraca T

wówczas, gdy ka

żdy atom jest mniejszy lub równy następnemu z prawej strony.

Przykładowo:

(<= 10 20)

zwraca

T

(<= "b" "b")

zwraca

T

(<= 357 33.2)

zwraca

nil

(<= 2 9 9)

zwraca

T

(<= 2 9 4 5)

zwraca

nil

)?!

)?!

)?!

)?!bupn!bupn!

****

Jest to funkcja sprawdzaj

ąca relacje większości. Jeżeli pierwszy atom jest numerycznie

wi

ększy od drugiego, to funkcja zwraca T; w wypadku przeciwnym nil. Jeżeli lista

argumentów zawiera wi

ęcej niż dwa atomy, to funkcja zwraca T w przypadku, gdy

ka

żdy atom ma wartość większą od następnego z prawej strony. Przykładowo:

(> 120 17)

zwraca

T

(> "c" "b")

zwraca

T

(> 3.5 1792)

zwraca

nil

(> 77 4 2)

zwraca

T

(> 77 4 4)

zwraca

nil

background image

781

BvupMJTQ!—!qsbluzd{oz!lvst

)?>!

)?>!

)?>!

)?>!bupn!bupn!

****

Jest to funkcja sprawdzaj

ąca relacje większy lub równy. Jeżeli pierwszy atom jest

numerycznie wi

ększy lub równy drugiemu, to funkcja zwraca T; w wypadku prze-

ciwnym zwraca nil. Je

żeli lista argumentów zawiera więcej niż dwa atomy, to funkcja

zwraca T w przypadku, gdy ka

żdy atom ma wartość większą lub równą następnemu

z prawej strony. Przykładowo:

(>= 120 17)

zwraca

T

(>= "c" "c")

zwraca

T

(>= 3.5 1792)

zwraca

nil

(>= 77 4 4)

zwraca

T

(>= 77 4 9)

zwraca

nil

)Ä!

)Ä!

)Ä!

)Ä!ovncfs****

Funkcja ta zwraca bitow

ą negację (dopełnienie do jedynki) argumentu number,

otrzymywan

ą w wyniku działania jednoargumentowego operatora logicznego NOT

(NIE) na bitach argumentu number. Funktor ten zamienia ka

żdy bit 1 na 0 i odwrotnie.

Argument musi by

ć liczbą stałopozycyjną typu integer (wartością całkowitoliczbową).

Przykładowo:

(~ 3)

zwraca

-4

(~ 100)

zwraca

-101

(~ -4)

zwraca

3

)2,!

)2,!

)2,!

)2,!ovncfs****

Funkcja ta zwraca warto

ść argumentu number zwiększoną o 1. Argument może być

warto

ścią liczbową typu integer lub real. Przykładowo:

(1+ 5)

zwraca

6

(1+ -17.5)

zwraca

-16.5

)2.!

)2.!

)2.!

)2.!ovncfs****

Funkcja ta zwraca warto

ść argumentu number zmniejszoną o 1.

(1- 5)

zwraca

4

(1- -17.5)

zwraca

-18.5

)b

)b

)b

)bct!

ct!

ct!

ct!ovncfs****

Funkcja ta zwraca warto

ść bezwzględną argumentu number. Argument może być

warto

ścią liczbową typu integer lub real. Przykładowo:

background image

Epebufl!C

782

(abs 100)

zwraca

100

(abs -100)

zwraca

100

(abs -99.25)

zwraca

99.25

)bet*

)bet*

)bet*

)bet*

Funkcja ta zwraca list

ę zawierającą aktualnie wczytane programy użytkowe ADS

(AutoCAD Development System). Elementami tej listy s

ą łańcuchy znaków tekstowych

b

ędące nazwami wszystkich programów wraz z ich ścieżkami dostępu. Przykładowo:

(ads)

mo

że zwrócić

("pliki/programy/PROG1" "PROG2")

Informacje uzupełniaj

ące: patrz funkcje xload i xunload pod koniec tego rozdziału.

)bmfsu!

)bmfsu!

)bmfsu!

)bmfsu!tusjoh****

Funkcja wy

świetla okienko ostrzegawcze z komunikatem błędu lub ostrzegawczym,

okre

ślonym przez argument string. Okienko ostrzegawcze jest oknem dialogowym

z pojedynczym przyciskiem TAK. Na przykład:

(alert "Taka funkcja nie istnieje.")

powoduje wy

świetlenie poniższego okna dialogowego:

Dzi

ęki wykorzystaniu w łańcuchu znaku nowej linii można definiować komunikaty

składaj

ące się z wielu linii tekstu. Na przykład:

(alert "Taka funkcja\nnie istnieje.")

powoduje wy

świetlenie poniższego okna dialogowego:

Długo

ść

linii i liczb

ę

linii w oknie alarmowym zale

ż

y od platformy, wy

ś

wietlacza

i okna. AutoCAD obcina wszystkie zbyt długie ła

ń

cuchy tak, by zmie

ś

ciły si

ę

w oknie.

background image

783

BvupMJTQ!—!qsbluzd{oz!lvst

)bmm

)bmm

)bmm

)bmmpd!

pd!

pd!

pd!ovncfs****

Ustala rozmiar segmentu na podan

ą liczbę węzłów.

)boe!

)boe!

)boe!

)boe!fyqs!

****

Funkcja ta zwraca warto

ść logicznego iloczynu argumentów expr, utworzonego za po-

moc

ą spójników AND (koniunkcja). Jeżeli którekolwiek z wyrażeń jest wartościowane

jako nil, to funkcja przerywa dalsz

ą ewaluację i całe wyrażenie zwraca nil. W prze-

ciwnym wypadku funkcja zwraca T. Przykładowo, je

żeli przypisano:

(setq a 103)

(setq b nil)

(setq c "marta")

to:

(and 1.4 a c)

zwraca

T

(and 1.4 a b c)

zwraca

nil

)bohmf!

)bohmf!

)bohmf!

)bohmf!qu2!qu3****

Funkcja ta zwraca warto

ść kąta nachylenia odcinka łączącego punkty LUW pt1 i pt2.

K

ąt jest mierzony względem osi X aktualnej płaszczyzny konstrukcyjnej LUW w ra-

dianach, a kierunek narastania warto

ści kątowych jest przeciwny do kierunku ruchu

wskazówek zegara. Je

żeli podane zostaną punkty 3W, to są one rzutowane prostopadle

na aktualn

ą płaszczyznę konstrukcyjną. Przykładowo:

(angle '(1.0 1.0) '(1.0 4.0))

zwraca

1.5708

(angle '(5.0 1.33) '(2.4 1.33)

zwraca

4.14159

)boh

)boh

)boh

)bohupg!

upg!

upg!

upg!tusjoh!\npef^!*

!*

!*

!*

Funkcja wykonuje konwersj

ę łańcucha string, reprezentującego kąt w formacie

wy

świetlanym określonym przez argument mode, na wartość zmiennoprzecinkową

(typu real). Funkcja zwraca wynik wyra

żony w radianach.

Argument mode okre

śla jednostki, w których sformatowany jest łańcuch string.

Warto

ść tego argumentu powinna być zgodna z wartościami dopuszczalnymi dla

zmiennej systemowej AutoCADa AUNITS, pokazanymi w poni

ższej tabeli. Jeśli

argument tryb jest pomini

ęty, funkcja angtof wykorzystuje bieżącą wartość zmiennej

AUNITS.

Tabela B.1. Warto

ści jednostek kątowych

Warto

ść argumentu tryb

Format ła

ńcucha

0

stopnie

1

stopnie/minuty/sekundy

background image

Epebufl!C

784

Tabela B.1. Warto

ści jednostek kątowych (c.d.)

Warto

ść argumentu tryb

Format ła

ńcucha

2

grady

3

radiany

4

jednostki geodezyjne

String musi by

ć takim łańcuchem, który może być poprawnie i zgodnie z podanym

trybem zanalizowany przez angtof. Mo

że być takiej samej postaci, jaką angtof ma

zwróci

ć, albo w postaci dopuszczanej przez AutoCAD dla danych podawanych z kla-

wiatury. Funkcje angtof i angtos s

ą komplementarne: jeśli funkcji angtof poda się

ła

ńcuch zwrócony przez angtos, angtof z całą pewnością zwróci poprawną wartość i na

odwrót (zakładaj

ąc, że w obu wypadkach podano tę samą wartość argumentu mode).

Je

śli wywołanie funkcji angtof kończy się sukcesem, zwracana jest wartość liczbowa

typu real, okre

ślająca kąt w radianach. W przeciwnym wypadku funkcja zwraca nil.

)bohupt!

)bohupt!

)bohupt!

)bohupt!bohmf!\npef!\qsfdjtjpo^^****

Funkcja bierze k

ąt angle (wyrażony liczbą rzeczywistą typu real, określającą miarę kąta

w radianach) i zwraca go w postaci ła

ńcucha alfanumerycznego o formacie zależnym od

argumentów mode, precision, od warto

ści zmiennej systemowej UNITMODE AutoCADa

oraz od warto

ści zmiennej wymiarowania DIMZIN. Argumenty mode i precision

liczbami typu integer, które okre

ślają rodzaj jednostek i dokładność wartości kątowych.

Dopuszczalne warto

ści argumentu mode są takie same, jak podane w tabeli B.1 (patrz

opis poprzedniej funkcji).

Argument precision jest liczb

ą typu integer, która ustala wymaganą dokładność

warto

ści kątowych, określając ilość miejsc dziesiętnych po przecinku. Argumenty mode

i precision s

ą odpowiednikami zmiennych systemowych AUNITS i AUPREC programu

AutoCAD. Je

żeli argumenty te zostaną pominięte, to zostaną użyte aktualne wartości

zmiennych AUNITS i AUPREC.

Funkcja angtos akceptuje ujemne warto

ści argumentu angle, lecz zawsze przed wyko-

naniem podanej konwersji sprowadza go do warto

ści nieujemnej z przedziału od zera

do 2

π

radianów. Na przykład:

(angtos 0.785398 0 4)

zwraca

"45.0000"

(angros -0.785398 0 4)

zwraca

"315.0000"

Zmienna systemowa UNITMODE wpływa na zwracany ła

ńcuch znaków tekstowych

wtedy, gdy wybrane zostały jednostki geodezyjne (argument mode równy 4). Je

żeli

UNITMODE=0,

to

ła

ńcuch zawiera spacje (np."N 45dE"); jeżeli natomiast

UNITMODE=1, to ła

ńcuch nie zawiera spacji (np. "N45dE").

background image

785

BvupMJTQ!—!qsbluzd{oz!lvst

Procedury wykorzystuj

ą

ce funkcj

ę

angtos do wy

ś

wietlania dowolnie obranych

k

ą

tów (dla których warto

ść

zmiennej systemowej ANGBASE nie stanowi k

ą

ta

odniesienia) powinny sprawdza

ć

i bra

ć

pod uwag

ę

warto

ść

ANGBASE.

)b

)b

)b

)bqqfoe!

qqfoe!

qqfoe!

qqfoe!fyqs!

****

Argumentami funkcji mo

że być dowolna ilość argumentów expr, które są brane razem

jako jedna lista, otrzymana z ich poł

ączenia. Przykładowo:

(append '(a b) '(c d)

zwraca

(A B C D)

(append '((a)(b)) '((c)(d)))

zwraca

((A)(B)(C)(D))

Funkcja append wymaga, aby argumenty były listami.

)bqqmz!

)bqqmz!

)bqqmz!

)bqqmz!gvodujpo!mjtu****

Wykonywana jest funkcja okre

ślona przez argument function, a jej argumentami są ele-

menty, które zawiera list. Przykładowo:

(apply '+ '(1 2 3))

zwraca

6

(apply 'strcat '("a" "b" "c"))

zwraca

"abc"

Funkcja apply działa zarówno z funkcjami wewn

ętrznymi (obiekty typu SUBR), jak też

z funkcjami definiowanymi przez u

żytkownika, przy użyciu funkcji defun lub lambda.

)b

)b

)b

)btdjj!

tdjj!

tdjj!

tdjj!tusjoh****

Funkcja ta zwraca liczb

ę typu integer, otrzymaną w wyniku konwersji pierwszego

znaku w ła

ńcuchu alfanumerycznym string na jego kod ASCII. Funkcja ta jest podobna

do funkcji ASC w j

ęzyku BASIC. Przykładowo:

(ascii "A")

zwraca

65

(ascii "a")

zwraca

97

(ascii "BIG")

zwraca

66

)bttpd!

)bttpd!

)bttpd!

)bttpd!jufn!bmjtu****

Funkcja ta przeszukuje list

ę asocjacji alist, szukając w niej skojarzeń z elementem item,

pełni

ącym tu funkcję elementu kluczowego. Asocjacja ta (lista złożona z pary skoja-

rzonych ze sob

ą elementów) jest zwracana jako wynik ewaluacji wyrażenia. Jeżeli item

nie zostanie w li

ście asocjacji znaleziony, to funkcja assoc zwraca nil. Przykładowo

mo

żna założyć, że lista "marta" zawiera następujące asocjacje:

((oczy piwne) (wzrost 171) (waga 56) (wiek 16))

background image

Epebufl!C

786

Wtedy:

(assoc 'wzrost marta)

zwraca

(WZROST 171)

(assoc 'nr-butow marta)

zwraca

nil

Listy asocjacji s

ą często używane do przechowywania danych dostępnych poprzez

identyfikuj

ący je klucz. Jest to podobne do stosowanych w innych językach progra-

mowania tablic lub struktur. Opisywana dalej w tym rozdziale funkcja subst umo

żliwia

łatw

ą wymianę wartości skojarzonej w liście asocjacji z danym kluczem.

)bubo!

)bubo!

)bubo!

)bubo!ovn2!\ovn3^****

Przy braku argumentu num2 funkcja zwraca wyra

żoną w radianach wartość arcus

tangens argumentu num1; gdzie num1 mo

że być ujemna; zwracane wartości kątów za-

wieraj

ą się w zakresie od –

π

/2 do +

π

/2 radianów. Przykładowo:

(atan 0.5)

zwraca

0.463648

(atan 1.0)

zwraca

0.785398

(atan -1.0)

zwraca

-0.785398

(antgos (atan -1.0) 0 4)

zwraca

"315.0000"

Je

żeli podano obydwa argumenty num1 i num2, to funkcja zwraca wyrażoną w ra-

dianach warto

ść arcus tangens ilorazu num1/num2. Jeżeli num2 jest równa zeru, to

funkcja zwraca warto

ść +1.5700796 lub –1.570796 radianów (+90 lub –90), zależnie od

znaku argumentu num1. Przykładowo:

(atan 2.0 30)

zwraca

0.588003

(angtos (atan 2.0 3.0) 0 4)

zwraca

"33.6901"

(atan 2.0 -3.0)

zwraca

2.55359

(angtos (atan 2.0 -3.0) 0 4)

zwraca

"146.3099"

(atan -2.0 3.0)

zwraca

-0.588003

(atan -2.0 -3.0)

zwraca

-2.55359

(atan 1.0 0.0)

zwraca

1.5708

(angtos (atan 1.0 0.0) 0 4)

zwraca

"90.0000"

(atan -0.5 0.0)

zwraca

-1.5708

(angtos (atan -0.5 0.0) 0 2)

zwraca

"270.00"

Pokazane powy

ż

ej wywołania funkcji angtos ilustruj

ą

sposób konwersji

zwracanych przez atan warto

ś

ci podanych w radianach na ła

ń

cuchy tekstowe

typu string.

)bupg!

)bupg!

)bupg!

)bupg!tusjoh****

Funkcja zwraca wynik konwersji ła

ńcucha tekstowego string na wartość typu real (licz-

ba rzeczywista). Przykładowo:

(atof "97.1")

zwraca

97.1

background image

787

BvupMJTQ!—!qsbluzd{oz!lvst

(atof "3")

zwraca

3.0

)bupj!

)bupj!

)bupj!

)bupj!tusjoh****

Funkcja zwraca wynik konwersji ła

ńcucha tekstowego string na liczbę całkowitą typu

integer. Przykładowo:

(atoi "97")

zwraca

97

(atoi "3")

zwraca

3

(atoi "3.9")

zwraca

3

)bup

)bup

)bup

)bupn!

n!

n!

n!jufn****

Je

żeli argument item jest listą, to funkcja ta zwraca nil, a w wypadku przeciwnym zwraca T.

Ka

żdy obiekt, który nie jest listą, jest uważany za atom. Przykładowo, jeżeli przypisano:

(setq a '(x y z))
(setq b 'a)

to:

(atom 'a)

zwraca

T

(atom a)

zwraca

nil

(atom 'b)

zwraca

T

(atom b)

zwraca

T

(atom '(a b c))

zwraca

nil

Niektóre wersje LISPu w odmienny sposób interpretuj

ą pojęcie atom i z tego powodu

nale

ży zachować ostrożność przy konwersji programów.

)bupnt.gbnjm

)bupnt.gbnjm

)bupnt.gbnjm

)bupnt.gbnjmz!

z!

z!

z!gpsnbu!\tznmjtu^****

Funkcja ta zwraca list

ę symboli wbudowanych oraz wszelkich symboli zdefiniowanych

podczas bie

żacej sesji edycyjnej. Pierwszy argument format jest wartością całkowitą

0 lub 1. Dla warto

ści 0, zwracana jest lista aktualnie zdefiniowanych symboli. Jeśli

format jest równy 1, symbole w li

ście są zwracane jako łańcuchy (typu string).

(atoms-family 0)

zwraca list

ę aktualnie zdefiniowanych symboli

Funkcja atoms-family mo

że także poszukiwać listy nazw symboli. Jeśli podany jest

opcjonalny argument symlist, to musi on by

ć listą łańcuchów nazw symboli do

szukania. W celu sprawdzenia czy zdefiniowane zostały symbole "CAR", "CDR' i
"XYZ", a lista ewentualnie znalezionych symboli ma by

ć zwrócona jako lista

ła

ńcuchów alfanumerycznych, należy wprowadzić:

(atoms-family 1 '("CAR" "CDR" "XYZ"))

Funkcja atoms-family zwraca list

ę typu określonego przez format (symbole lub

ła

ńcuchy alfanumeryczne) zawierającą nazwy tych symboli, które są zdefiniowane oraz

background image

Epebufl!C

788

nil dla tych symboli, które nie s

ą zdefiniowane. Gdyby symbol "XYZ" w powyższym

przykładzie nie był zdefiniowany, zwrócona zostałaby nast

ępująca lista:

("CAR" "CDR" nil)

Przed Wydaniem 12 AutoCADa, atomlist był symbolem, który mógł by

ć

redefiniowany lub usuwany. Tak wi

ę

c stare programy u

ż

ytkownika w Auto-

LISPie, w których atomlist jest traktowane jako symbol, nie b

ę

d

ą

prawidłowo

działały w Wydaniu 12 AutoCADa.

!)cppmf!

!)cppmf!

!)cppmf!

!)cppmf!gvod!jou2!jou3!

****

Jest to uogólniona funkcja bitowa, realizuj

ąca dwuargumentowe operacje logiczne

(boole'owskie). Argument func jest liczb

ą typu integer z zakresu od 0 do 15, która

reprezentuje jeden z 16 mo

żliwych funktorów boole'owskich. Odpowiadające sobie bity

kolejnych argumentów typu integer s

ą argumentami operacji logicznych, w wyniku

których zwracana jest nowa liczba typu integer. Jej bity stanowi

ą logiczne kombinacje

bitów argumentów składowych, okre

ślone rodzajem argumentu func i bazujące na

przedstawionej poni

żej tablicy prawdziwości.

Tabela B.2. Tablica stanów logicznych

Int1

Int2

Bit

0

0

8

0

1

4

1

0

2

1

1

1

Ka

żdy bit argumentu int1 jest zestawiany z odpowiednim bitem argumentu int2. Para

taka wyznacza jeden z poziomych rz

ędów tablicy prawdy. Bitem wyniku jest 0 lub 1,

stosownie do warto

ści odpowiadającego im w wierszu bitu func. Pewnym wartościom

argumentu func odpowiadaj

ą standardowe operacje Boole'owskie AND, OR, XOR,

NOT i NAND. Pokazano to poni

żej:

Tabela B.3. Warto

ści bitów funkcji Boole'a

Funkcja

Operacja

Bitem wynikowym jest 1 je

żeli …

1

AND

obydwa bity s

ą jedynkami

6

XOR

jeden i tylko jeden z bitów jest jedynk

ą.

7

OR

przynajmniej jeden z bitów jest jedynk

ą.

8

NOR

żaden z bitów nie jest jedynką.

14

NAND

obydwa bity nie s

ą jedynkami równocześnie

Przykłady

Ni

żej podano przykład operacji logicznej AND dla wartości 12 i 5.

background image

789

BvupMJTQ!—!qsbluzd{oz!lvst

(boole 1 12 5)

daje w wyniku 4

Wyznaczenie funkcji logicznej XOR dla liczb 6 i 5.

(boole 6 6 5)

daje w wyniku 3

W celu wykonywania innych operacji algebry Boole'a, równie

ż tych dla których nie ma

standardowych nazw, mo

żna wykorzystywać pozostałe wartości argumentu func.

Przykładowo, je

żeli argument func ma wartość 4, to bity wynikowe są jedynkami

wtedy, gdy odpowiadaj

ące im bity są jedynkami w argumencie int2 i zerami dla int1.

Tak wi

ęc wyrażenie:

(boole 4 3 14)

zwróci 12

)cpvo

)cpvo

)cpvo

)cpvoeq!

eq!

eq!

eq!bupn****

Funkcja ta zwraca T, je

żeli atom ma przypisaną określoną wartość (dowolnego typu).

Je

żeli z argumentem atom nie jest związana żadna wartość, lub przypisano mu nil, to

funkcja zwraca nil.

Je

żeli atom jest symbolem niezdefiniowanym, to zostanie on automatycznie utworzony

i zostanie mu przypisane nil.

Przykładowo, je

żeli przypisano

(setq a 2) (setq b nil)

to

:

(boundp 'a)

zwraca

T

(boundp 'b)

zwraca

nil

Funkcja atoms-family oferuje alternatywn

ą metodę określania istnienia symbolu, bez

jego automatycznego tworzenia.

)dbs!

)dbs!

)dbs!

)dbs!mjtu****

Funkcja ta zwraca pierwszy element argumentu list. Je

żeli lista jest pusta, to funkcja

zwraca nil. Przykładowo:

(car '(a b c))

zwraca

A

(car '((a b) c))

zwraca

(A B)

(car '0)

zwraca

nil

)des!

)des!

)des!

)des!mjtu****

background image

Epebufl!C

78:

Funkcja ta zwraca list

ę zawierającą wszystkie elementy argumentu list oprócz

pierwszego elementu. Je

żeli argument list jest listą pustą, to funkcja zwraca nil.

Przykładowo:

(cdr '(a b c))

zwraca

(B C)

(cdr '((a b) c))

zwraca

(C)

(cdr '())

zwraca

nil

Je

żeli argument list jest parą kropkową (patrz opis funkcji cons), to funkcja cdr zwraca

drugi element pary jako atom, a nie jako list

ę. Przykładowo:

(cdr '(a . b))

zwraca

B

(cdr '(1 . "Tekst"))

zwraca

"Tekst"

)dbbs!

)dbbs!

)dbbs!

)dbbs!mjtu*-!)dbes!

*-!)dbes!

*-!)dbes!

*-!)dbes!mjtu*-!)dees!

*-!)dees!

*-!)dees!

*-!)dees!mjtu*-!)dbebs!

*-!)dbebs!

*-!)dbebs!

*-!)dbebs!mjtu*-!jue/

*-!jue/

*-!jue/

*-!jue/

W AutoLISPie mo

żliwe jest łączenie funkcji car i cdr, przy czym superpozycja ta może

si

ęgać do czterech poziomów w głąb. Przykładowo, jeżeli przypisano:

(setq x '((a b) c d))

to

(caar x)

jest równowa

żne

car (car x))

i zwraca

A

(cdar x)

jest równowa

żne

(cdr (car x))

i zwraca

(B)

(cadar x)

jest równowa

żne

(car (cdr (car x)))

i zwraca

B

(cadr x)

jest równowa

żne

(car (cdr x))

i zwraca

C

(cddr x)

jest równowa

żne

(cdr (cdr x))

i zwraca

(D)

(caddr x)

jest równowa

żne

(car (cdr (cdr x)))

i zwraca

D

Funkcja cadr jest cz

ęsto używana w AutoLISPie w celu uzyskania współrzędnej

Y punktu 2W lub 3W (drugiego elementu listy zawieraj

ącej dwie lub trzy liczby typu

real). Podobnie funkcja caddr mo

że być użyta w celu uzyskania współrzędnej Z punktu

3W. Przykładowo, je

żeli przypisano:

(setq pkt2 '(5.25 1.0))

(punkt 2W)

(setq pkt3 '(5.25 1.0 3.0))

(punkt 3W)

to:

(car pkt2)

zwraca

5.25

(cadr pkt2)

zwraca

1.0

(caddr pkt2)

zwraca

nil

(car pkt3)

zwraca

5.25

(cadr pkt3)

zwraca

1.0

(caddr pkt3)

zwraca

3.0

)dis!

)dis!

)dis!

)dis!ovncfs****

background image

791

BvupMJTQ!—!qsbluzd{oz!lvst

Funkcja ta zwraca wynik konwersji liczby typu integer, reprezentuj

ącej kod ASCII, na

odpowiadaj

ący temu kodowi znak, przedstawiony jako jednoznakowy łańcuch tekstowy

(warto

ść typu string); podobnie działa funkcja chr$ w języku BASIC. Przykładowo:

(chr 65)

zwraca

"A"

(chr 66)

zwraca

"B"

(chr 97)

zwraca

"a"

)d

)d

)d

)dmptf!

mptf!

mptf!

mptf!gjmf.eftd****

Funkcja zamyka plik i zwraca nil. Argument file-desc jest deskryptorem pliku
zwróconym przez funkcj

ę open. Po wykonaniu close, deskryptor pliku nie ulega

zmianie, ale nie jest ju

ż ważny.

Przyjmuj

ąc przykładowo, że x jest aktualnie obowiązującym deskryptorem otwartego pliku:

(close x)

zamknie ten plik i zwróci

nil.

)dpnnbo

)dpnnbo

)dpnnbo

)dpnnboe!

e!

e!

e!\bshvnfout^!

****

Funkcja ta wywołuje polecenie AutoCADa z programu napisanego w j

ęzyku AutoLISP

i zawsze zwraca nil. Argumentami s

ą polecenia programu AutoCAD i ich opcje.

Ka

żdy z argumentów podlega ewaluacji i jest wysyłany do AutoCADa w odpowiedzi

na kolejne zgłoszenia gotowo

ści. Nazwy poleceń i opcji są danymi typu string, punkty

2W s

ą listami zawierającymi dwie liczby rzeczywiste typu real, a punkty 3W są listami

zawieraj

ącymi trzy liczby typu real. Nazwy poleceń są rozpoznawane przez AutoCAD

tylko wtedy, gdy wcze

śniej ukazało się zgłoszenie gotowości Polecenie:; Przykładowo:

(setq pkt1 '(1.45 3.23) pkt2 '(1 5))
(command "_line" pkt1 pkt2 "")

Argumentami funkcji command mog

ą być łańcuchy alfanumeryczne, liczby typu real

i integer oraz punkty, zale

żnie od tego, czego oczekuje wykonywana właśnie funkcja

AutoCADa. Pusty ła

ńcuch ("") jest równoważny naciśnięciu na klawiaturze klawisza

ENTER. Wywołanie funkcji command bez argumentów jest równowa

żne wciśnięciu

klawiszy Ctrl+C i powoduje to przerwanie wykonywania wi

ększości poleceń AutoCADa.

Je

żeli zmienna systemowa AutoCADa CMDECHO (dostępna przy użyciu funkcji

setvar i getvar) ma warto

ść 0, to na ekranie nie pojawia się echo poleceń wywo-

ływanych funkcj

ą command. Użycie funkcji command jest podstawową metodą

wywoływania polece

ń AutoCADa z poziomu AutoLISPu.

background image

Epebufl!C

792

Funkcje getxxx, słu

żą

ce do przejmowania danych wprowadzanych przez

u

ż

ytkownika (np. getangle, getstring, getint, getpoint itd.), nie mog

ą

by

ć

u

ż

ywane wewn

ą

trz funkcji command. Próba takiego działania spowoduje

pojawienie si

ę

komunikatu:

"bł

ą

d: AutoCAD rejected function"

i przerwanie wykonywania wywoływanej funkcji. Je

ż

eli konieczne jest wprowa-

dzenie danych przez u

ż

ytkownika, to funkcj

ę

getxxx nale

ż

y wprowadzi

ć

przed

wywołaniem funkcji command (tak jak miało to miejsce w poprzednim
przykładzie) lub nale

ż

y u

ż

y

ć

jej pomi

ę

dzy kolejnymi wywołaniami command.

W przypadku polece

ń AutoCADa wymagających wybierania obiektów (jak np. pole-

cenia PRZERWIJ lub UTNIJ) zamiast punktów słu

żących do wskazywania elementów

mo

że zostać użyta lista otrzymana przy użyciu funkcji entsel.

Ograniczenia: Polecenia AutoCADa DTEKST i SZKICUJ czytaj

ą dane bezpośrednio

z klawiatury i digitizera. Z tego powodu nie mog

ą być wywoływane przez funkcję com-

mand. Je

śli funkcja command wywołuje polecenie SCRIPT, to powinno to być

ostatnie wywołanie funkcji w procedurze AutoLISPu.

Je

żeli w trakcie wykonywania polecenia AutoCADa zostanie napotkany zdefiniowany

w AutoLISPie symbol PAUSE, wprowadzony jako jeden z argumentów funkcji com-
mand
, to wykonywanie polecenia zostanie zawieszone, w celu umo

żliwienia użyt-

kownikowi wprowadzenia danych.

Symbol PAUSE jest zdefiniowany jako ła

ńcuch składający się z pojedynczego

znaku "\". Zamiast u

żywania symbolu PAUSE, możliwe jest więc bezpośrednie

wprowadzenie tego znaku do listy argumentów. Je

żeli jednak funkcja command

zostanie wywołana z pozycji menu, znak lewego uko

śnika zawiesi odczytywanie

sekwencji działa

ń zadeklarowanych w pozycji menu, co spowoduje częściowe

wyliczenie wyra

żenia AutoLISPu. Możliwe jest również, że w przyszłych

wersjach AutoLISPu zostanie u

żyty inny symbol włączający mechanizm pauzy.

Zaleca si

ę zatem stosowanie w każdym przypadku symbolu PAUSE, a nie

lewego uko

śnika "\"

Przypomnienie: Znak lewego uko

śnika wykorzystywany w łańcuchu alfanumerycznym

musi by

ć poprzedzony drugim znakiem ukośnika (czyli musi wystąpić sekwencja "\\").

Je

żeli symbol PAUSE zostanie napotkany w momencie gdy spodziewane jest

podanie ła

ńcucha znaków tekstowych lub wartości atrybutu, to AutoCAD

zawiesi realizacj

ę polecenia na czas wprowadzania danych tylko w wypadku,

gdy zmienna systemowa TEXTEVAL ma warto

ść różną od zera. W przeciwnym

razie warto

ść symbolu PAUSE (czyli znak lewego ukośnika) jest traktowana

jako jeden ze znaków tekstowych i nie powoduje wstrzymania działania
programu w celu umo

żliwienia wczytania danych wejściowych.

Funkcja command oczekuj

ąca na wprowadzenie danej przez użytkownika jest

wci

ąż uważana za aktywną; nie można więc w tym momencie wprowadzić

innego wyra

żenia AutoLISPu do wartościowania.Oto przykład użycia symbolu

PAUSE:

(setq blk "MOJBLOK")

background image

793

BvupMJTQ!—!qsbluzd{oz!lvst

(setq old lay (getvar "clayer"))
(command "_layer" "_set" "NOWA_WAR" "")
(command "_insert" blk pause "" "" pause)
(command "_layer" "_set" old_lay "")

Powy

ższy fragment kodu ustala warstwę bieżącą na ”NOWA_WAR”, oczekuje na podanie

przez u

żytkownika punktu wstawienia bloku MOJBLOK (który będzie wstawiony ze

współczynnikami skali w kierunkach X i Y równymi 1) i znów oczekuje na podanie przez
u

żytkownika kąta obrotu bloku. Następnie zostaje przywrócona poprzednio obowiązująca

warstwa aktualna.

Je

śli funkcja command podaje PAUSE dla polecenia _SELECT (WYBIERZ) gdy

aktywny jest zbiór PICKFIRST, polecenie WYBIERZ odczytuje zbiór PICKFIRST bez
oczekiwania na wprowadzenie danych przez u

żytkownika.

Opcje _RADIUS (PROMIE

Ń

) i _DIAMETER (

Ś

REDNICA) polecenia _DIM

(WYMIAR), w niektórych sytuacjach wykorzystuj

ą

dodatkowe zgłoszenia goto-

wo

ś

ci. W działaniu programów w AutoLISPie, utworzonych dla wersji wcze-

ś

niejszych ni

ż

Wydanie 11 i wykorzystuj

ą

cych te polecenia, mog

ą

wyst

ą

pi

ć

ę

dy.

)dpoe!

)dpoe!

)dpoe!

)dpoe!)uftu2!sftvmu2!

*!

****

Argumentami funkcji mo

że być dowolna liczba list. Funkcja testuje wyrażenia test-n,

wyznaczaj

ąc wartość pierwszych elementów każdej kolejnej listy podrzędnej (w poda-

nym porz

ądku), aż do momentu, gdy wartość któregoś z nich okaże się różna od nil.

Nast

ępnie wartościowane są te wyrażenia result, które następują po pozytywnie przete-

stowanym wyra

żeniu test i zwracana jest wartość ostatniego wyrażenia listy podrzędnej.

Je

żeli na takiej liście znajduje się tylko jeden element (tzn. opuszczono result), funkcja

zwraca warto

ść wyrażenia test. Funkcja cond jest główną funkcją warunkową w Auto-

LISPie. Przykładowo, poni

ższe wyrażenie prezentuje zastosowanie funkcji cond do

obliczenia warto

ści bezwzględnej:

(cond

((minusp a) (- a))
(t a)

)

Je

żeli zmiennej a przypisano wartość –10, to wyrażenie to zwraca 10. Jak pokazano,

funkcja cond mo

że być użyta w charakterze funkcji typu case. Zwykle jako ostatnie

wyra

żenie test używa się T (jest ono uwzględniane w przypadku braku pozytywnego

wyniku testowania wszystkich poprzednich). Oto kolejny prosty przykład. Funkcja te-
stuje wprowadzany przez u

żytkownika łańcuch znaków tekstowych, przypisany zmien-

nej s i zwraca 1, je

żeli wprowadzono T lub t. Jeżeli wprowadzono N lub n, to funkcja

zwraca 0, oraz nil w ka

żdym innym przypadku.

(cond

((=s "T") 1)
((=s "t") 1)
((=s "N") 0)
((=s "n") 0)
(t nil)

)

background image

Epebufl!C

794

)dpot!

)dpot!

)dpot!

)dpot!ofx.gjstu.fmfnfou!mjtu!*

!*

!*

!*

Jest to podstawowa funkcja słu

żąca do tworzenia list. Argument new-first-element jest

wprowadzany jako pierwszy argument listy okre

ślonej przez argument list. Przykładowo:

(cons 'a '(b c d))

zwraca

(A B C D)

(cons '(a) '(b c d)

zwraca

((A) B C D)

Nale

ży zauważyć, że argumentem new-first-element może być zarówno atom, jak i lista.

Argumentem list mo

że być również atom; cons tworzy wtedy strukturę znaną w języku

LISP jako para kropkowa. Pomi

ędzy pierwszym i drugim elementem pary kropkowej

znajduje si

ę kropka. Aby odzyskać drugi atom takiej pary, można zastosować funkcję cdr.

Zatem:

(cons 'a 2)

zwraca

(A . 2)

(car (cons 'a 2))

zwraca

A

(cdr (cons 'a 2))

zwraca

2

Para kropkowa jest specjalnym rodzajem listy; nie jest ona akceptowana jako argument
przez niektóre funkcje, które operuj

ą na zwykłych listach.

)dpt!

)dpt!

)dpt!

)dpt!bohmf****

Funkcja ta zwraca cosinus wyra

żonego w radianach argumentu angle. Przykładowo:

(cos 0.0)

zwraca

1.0

(cos pi)

zwraca

-1.0

)dwvoj

)dwvoj

)dwvoj

)dwvoju!

u!

u!

u!wbmvf!gspn!up****

Funkcja ta przelicza warto

ść lub współrzędne punktu, wyrażone w miarach jednego

układu jednostek, na warto

ści w innych jednostkach. Po udanym przeliczeniu, funkcja

zwraca wyznaczon

ą w wyniku konwersji nową wartość lub nowe współrzędne punktu.

Je

żeli nazwa jednostki nie jest znana (nie została znaleziona w pliku ACAD.UNT) lub

dwie podane jednostki dotycz

ą miar różnych wielkości (jak na przykład próba zamiany

cali na miesi

ące), funkcja zwraca nil.

Argument value jest wyra

żony wartością liczbową, przeznaczoną do przeliczenia. Może

ona by

ć również listą, zawierającą dwie lub trzy liczby do przeliczenia (punkt 2W lub

3W). Argument from okre

śla jednostki, w których podana jest wielkość, a argument to

okre

śla jednostki, na które wielkość ma zostać przeliczona. Argumenty from i to mogą

by

ć nazwami dowolnych jednostek, zapisanymi w pliku ACAD.UNT.

Przykłady:

(cvunit 1 "min" "s")

zwraca

60.0

background image

795

BvupMJTQ!—!qsbluzd{oz!lvst

(cvunit 1 "galon" "kopa jaj")

zwraca

nil

(cvunit 1.0 "cal" "cm")

zwraca

2.54

(cvunit 1.0 "acre" "sq yard")

zwraca

4840.0

(cvunit '(1.0 2.5) "ft" "inch")

zwraca

(12.0 30.0)

(cvunit '(1 2 3) "m" "cm")

zwraca

(100.0 200.0 300.0)

Je

ż

eli w programie zachodzi konieczno

ść

dokonywania przelicze

ń

wi

ę

kszej

ilo

ś

ci danych według tego samego schematu, to znacznie bardziej efektywn

ą

metod

ą

jest dokonanie jednorazowego przeliczenia wielko

ś

ci 1.0, a nast

ę

pnie

stosowanie uzyskanego współczynnika do skalowania pozostałych warto

ś

ci.

Sposób ten nadaje si

ę

do wszystkich jednostek zdefiniowanych w pliku

ACAD.UNT, oprócz jednostek temperatury; w tym przypadku dochodzi jeszcze
przesuni

ę

cie skali.

)efgvo!

)efgvo!

)efgvo!

)efgvo!tzn!bshvnfou.mjtu!fyqs!

****

Funkcja defun definiuje funkcj

ę o nazwie sym (należy zwrócić uwagę, że nazwa funkcji

jest automatycznie cytowana dosłownie i nie trzeba w tym celu u

żywać apostrofu). Po

nazwie funkcji nast

ępuje lista argumentów (może być pusta). Opcjonalnie może w niej

wyst

ąpić lista symboli lokalnych danej funkcji, rozpoczynająca się od znaku prawego

uko

śnika "/". Ostatni element listy argumentów (jeżeli funkcja jakieś posiada), lewy

uko

śnik i pierwszy symbol lokalny muszą być między sobą odseparowane co najmniej

jedn

ą spacją. Jeżeli nie deklaruje się żadnych argumentów ani lokalnych symboli, to po

nazwie funkcji nale

ży wpisać same nawiasy.

Poni

ższe przykłady argumentu argument-list ukazują wartości ważne i nieważne:

(defun ela (x y) ...)

Funkcja ma dwa argumenty

(defun ela (/ a b) ...)

Funkcja ma dwa symbole lokalne

(defun ela (x / temp) ...)

Jeden argument i jeden symbol lokalny

(defun ela () ...)

Brak argumentów i symboli lokalnych

Nie mo

żna definiować funkcji o wielu argumentach posiadających tę samą nazwę.

Funkcja mo

że jednak definiować zmienne lokalne o nazwie identycznej, jak nazwa in-

nej zmiennej lokalnej lub nazwa jednego z argumentów, na przykład:

(defun fubar (a a / b) ...)

Nie jest dopuszczalne

(defun fubar (a b / a a b) ...)

Tak mo

że być

Po li

ście zawierającej argumenty i symbole lokalne znajduje się co najmniej jedno

wyra

żenie, którego wartość ma być wyznaczona w czasie wykonania funkcji.

Je

ś

li lista symboli argumentów zawiera wielokrotnie t

ę

sam

ą

nazw

ę

, wówczas

wykorzystywany jest tylko pierwszy symbol na li

ś

cie, a nast

ę

pne s

ą

ignorowane.

Po wywołaniu tak zdefiniowanej funkcji wyznaczane s

ą wartości jej argumentów i są

one przypisywane odpowiednim symbolom. Symbole lokalne mog

ą być używane we-

background image

Epebufl!C

796

wn

ątrz wywoływanej funkcji bez powodowania zmian ich wartości na poziomach

zewn

ętrznych. Funkcja ta zwraca wartość ostatniego wyliczonego wyrażenia.

Wszystkie poprzednie wyra

żenia funkcji mają tylko znaczenie pomocnicze. Natomiast

sama funkcja defun zwraca nazw

ę funkcji aktualnie definiowanej.

Poni

ższe przykłady wykorzystują defun do zdefiniowania dwóch nowych funkcji i uka-

zuj

ą wartości, zwracane przez nowe funkcje:

(defun dodaj_10 (x)

(+ 10 x)

)

zwraca

DODAJ_10

(dodaj_10 5)

zwraca

15

(dodaj_10 -7.4)

zwraca

2.6

oraz:

(defun wielokropek (x y / kropki)

(setq kropki (strcat x "..."))
(strcat kropki y)

)

zwraca

WIELOKROPEK

(wielokropek "a" "b")

zwraca

"a...b"

(wielokropek "od " " do")

zwraca

"od ... do"

Jako argumentu sym nigdy nie nale

ż

y u

ż

ywa

ć

nazw funkcji lub symboli

wewn

ę

trznych; uniemo

ż

liwiłoby to dost

ę

p do funkcji wewn

ę

trznej. Aby uzyska

ć

list

ę

symboli

wewn

ę

trznych

i

zdefiniowanych

wcze

ś

niej

funkcji,

nale

ż

y

wykorzysta

ć

opisan

ą

wcze

ś

niej funkcj

ę

atoms-family.

)ejtu

)ejtu

)ejtu

)ejtubodf!

bodf!

bodf!

bodf!qu2!qu3****

Funkcja ta zwraca odległo

ść w przestrzeni 3W pomiędzy punktami pt1 i pt2.

Przykładowo:

(distance '(1.0 2.5 3.0) '(7.7 2.5 3,0))

zwraca

6.7

(distance '(1.0 2.0 0.5) ' (3.0 4.0 0.5))

zwraca

2.82843

Je

żeli jeden z punktów jest punktem 2W (lub obydwa), to funkcja distance ignoruje

współrz

ędne Z punktu 3W i zwraca odległość 2W pomiędzy rzutami punktów na

aktualn

ą płaszczyznę konstrukcyjną.

)ejtu

)ejtu

)ejtu

)ejtupg!

pg!

pg!

pg!tusjoh!\uszc^****

Funkcja distof wykonuje konwersj

ę łańcucha string, zawierającego wartość rzeczywistą

(zmiennoprzecinkow

ą) w formacie wyświetlania określanym przez mode, na wartość

typu real.

Argument mode okre

śla jednostki, w których sformatowany jest łańcuch string. Jego

warto

ść powinna być zgodna z wartościami dopuszczalnymi dla zmiennej systemowej

background image

797

BvupMJTQ!—!qsbluzd{oz!lvst

AutoCADa LUNITS, ukazanym w poni

ższej tabeli. Ponadto, jeśli mode jest pominięty,

distof wykorzystuje bie

żącą wartość zmiennej LUNITS.

Tabela B.4. Warto

ści jednostek liniowych

Warto

ść argumentu tryb

Format ła

ńcucha

1

Wykładniczy

2

Ułamki dziesi

ętne

3

Stopy i dziesi

ętne ułamki cala

4

Stopy i zwykłe ułamki cala

5

Ułamki zwykłe

Argument string musi by

ć łańcuchem, który distof będzie w stanie właściwie zinter-

pretowa

ć, zgodnie z formatem określonym przez argument mode. Może on mieć taką

sam

ą postać, jaką zwraca funkcja rtos, albo taką, jaką można wprowadzić z klawiatury

w odpowiedzi na zgłoszenie AutoCADa. Funkcje distof i rtos s

ą komplementarne: jeśli

argumentem string dla funkcji distof b

ędzie łańcuch zwrócony przez rtos, distof z całą

pewno

ścią zwróci poprawną wartość, i na odwrót (przy założeniu, że wartości para-

metru mode s

ą takie same).

Funkcja distof nie rozró

ż

nia trybów 3 i 4 i traktuje je tak samo. Oznacza to,

ż

e

je

ś

li

mode jest równy 3 (stopy i dziesi

ę

tne ułamki cala) lub 4 (stopy i zwykłe

ułamki cala), a

string jest okre

ś

lony w którymkolwiek z tych formatów, to distof

zwróci poprawn

ą

warto

ść

rzeczywist

ą

.

W wyniku sukcesu wywołania funkcji distof zwracana jest liczba rzeczywista. W wy-
padku przeciwnym funkcja zwraca nil.

)fouefm!

)fouefm!

)fouefm!

)fouefm!fobnf****

Element wskazywany przez argument ename jest wymazywany, je

żeli aktualnie znaj-

duje si

ę na rysunku lub odtwarzany i umieszczany w rysunku, jeżeli uprzednio został

z niego wymazany. Tego rodzaju operacje mog

ą być dokonywane bez utraty elementu

tylko w czasie tej samej sesji w edytorze graficznym; po zako

ńczeniu sesji edycyjnej

elementy wymazane z rysunku s

ą usuwane z rysunkowej bazy danych.

Funkcja entdel działa jedynie na elementach głównych. Niezale

żnie od elementu nad-

rz

ędnego nie jest więc możliwe usuwanie atrybutów Bloków ani wierzchołków Polilinii

(aby to uzyska

ć można skorzystać z funkcji command i posłużyć się poleceniem

ATRRED lub EDPLIN).

Nie jest mo

żliwe usuwanie elementów z definicji Bloku. Możliwe jest jednak utwo-

rzenie definicji na nowo (z pomini

ęciem elementu, który chcemy usunąć) z użyciem

funkcji entmake.

Przykład:

background image

Epebufl!C

798

(setq e1 (entnext))

przypisuje e1 nazw

ę pierwszego elementu rysunku

(entdel e1)

usuwa element e1

(entdel e1)

odtwarza usuni

ęty element e1

)fouhfu!

)fouhfu!

)fouhfu!

)fouhfu!fobnf!\bqqmjtu^!*

!*

!*

!*

Element rysunku którego nazw

ą jest ename, jest odszukiwany w rysunkowej bazie

danych i zwracany w postaci listy, która zawiera definiuj

ące go dane. Jeżeli wyrażenie

zawiera równie

ż opcjonalny argument applist, zawierający listę zarejestrowanych

programów u

żytkowych (aplikacji), wówczas zwracane są również dodatkowe dane

elementu zwi

ązane z wymienionymi w niej programami użytkowymi. Dane kodowane

s

ą w postaci typowych dla LISPu list asocjacji, z których mogą być wyciągane przy

pomocy funkcji assoc. Obiekty s

ą w listach oznaczone kodami grup, których znaczenie

jest zgodne ze standardem przyj

ętym dla plików DXF; odpowiednie kody są związane

z ka

żdym rodzajem wartości wchodzących w skład definiujących element danych.

W poni

ższym przykładzie przyjęto następujące założenia:

aktualn

ą warstwą rysunkową jest "0",

aktualnym rodzajem linii rysunkowej jest CONTINUOUS,

aktualnym poziomem jest poziom zerowy,

identyfikatory elementów s

ą zablokowane,

Przypu

śćmy, że przy pomocy poniższej sekwencji poleceń został narysowany odcinek

prostoliniowy (element LINE):

Polecenie: _line

↵↵

Od punktu: 1,2

↵↵

Do punktu: 6,6

↵↵

Do punktu:

↵↵

Dane elementu dla tego odcinka mo

żna otrzymać przez wprowadzenie wyrażenia:

Polecenie: (setq a (entget (entlast)))

↵↵

co powoduje przypisanie zmiennej a listy podobnej lub takiej samej, jak poni

ższa:

((-1 . <Nazwa elementu: 60000014>)
(0 . "LINE")

Typ elementu

(8 . "0")

Warstwa

(10 1.0 2.0 0.0)

Punkt pocz

ą

tkowy

(11 6.0 6.0 0.0)

Punkt ko

ń

cowy

)

Rozpoczynaj

ąca listę para kropkowa z pierwszym elementem –1 zawiera nazwę

elementu, którego dotycz

ą przedstawione w liście dane. Opisywana dalej funkcja entmod

korzysta z tej nazwy przy identyfikowaniu elementu, który ma by

ć zmodyfikowany.

Poszczególne pary kropkowe, reprezentuj

ące konkretne wartości, mogą zostać w łatwy

sposób wyodr

ębnione z listy za pomocą funkcji assoc, a same wartości można z nich

background image

799

BvupMJTQ!—!qsbluzd{oz!lvst

potem wyci

ągnąć z użyciem funkcji cdr. Kody składających się na definicję elementu

danych s

ą takie same, jakie stosuje się w formacie DXF. Są one opisane w dodatku E

niniejszej ksi

ążki.

Podobnie jak w przypadku plików DXF, pozycje nagłówkowe elementu (kolor i rodzaj
linii rysunkowej, grubo

ść, znacznik poprzedzający atrybuty oraz identyfikator ele-

mentu) s

ą podawane tylko wtedy, gdy mają wartości różne od standardowych pro-

pozycji AutoCADa. W przeciwie

ństwie natomiast do plików DXF, opcjonalne pola

definiuj

ące element są podawane bez względu na to, czy pokrywają się z wartościami

standardowo proponowanymi, czy nie. Intencj

ą takiego rozwiązania było uproszczenie

przetwarzania; przy tworzeniu programów wykorzystuj

ących te pola można zakładać,

że istnieją one zawsze.

Równie

ż inaczej niż w plikach DXF, współrzędne X,Y, Z tego samego punktu są

zebrane w jedn

ą listę, jak np. (10 1.0 2.0 0.0), a nie występują jako oddzielne grupy 10,

20 i 30. Podobna uwaga dotyczy grupowania w jedn

ą listę współrzędnych wektorów,

np. (210 0.0 0.0 1.0).

Nale

ży zauważyć, że listy podrzędne, które reprezentują punkty (zawierają ich

współrz

ędne), nie są parami kropkowymi, tak jak wszystkie pozostałe. Przyjęto

konwencj

ę, że użycie wobec listy podrzędnej funkcji cdr daje wartość grupy. Ponieważ

punkt jest list

ą dwóch lub trzech liczb typu real, to cała grupa jest listą zawierającą trzy

lub cztery elementy. U

życie funkcji cdr dla takiej grupy daje listę reprezentującą punkt,

co zapewnia spełnienie wspomnianej konwencji.

Przed wykonaniem funkcji entget lub entmod na elementach Vertex (Wierzchołek
Polilinii), nale

ży odczytać lub zapisać nagłówek (element Polyline) Polilinii, do której

wierzchołki te nale

żą. Jeśli ostatnia przetwarzana Polilinia jest różna od Polilinii, do

której nale

żą Wierzchołki, stracona może być informacja o szerokości (grupy 40 i 41).

Przy pisaniu programów przeznaczonych do przetwarzania list zawieraj

ących dane

elementów, nale

ży zapewnić niezależność wyniku od kolejności list podrzędnych.

Gwarantuje to u

życie funkcji assoc. Zawierająca nazwę elementu grupa z kodem –1

umo

żliwia zaakceptowanie listy elementów przez modyfikujące je operacje oraz

pozwala unikn

ąć konieczności równoległego utrzymywania nazwy elementu w do-

datkowej strukturze. Element SEQEND, ko

ńczący sekwencję elementów składowych

polilinii lub zbioru atrybutów, zawiera grup

ę –2, która poddana działaniu funkcji cdr

daje nazw

ę elementu nadrzędnego. Umożliwia to uzyskanie informacji jaki element jest

nadrz

ędny dla danego elementu podrzędnego poprzez przejście do elementu SEQEND.

Nast

ępnie wyrażenie z funkcją cdr i grupą z kodem –2 może zostać użyte jako nazwa

elementu do uzyskania elementu nadrz

ędnego.

Poni

ższy przykład przedstawia nieco bardziej złożoną listę reprezentującą element rysunku.

W przykładzie tym przyj

ęto, że aktualnie obowiązujący Lokalny Układ Współrzędnych jest

obrócony o 40 stopni wokół osi X Globalnego Układu Współrz

ędnych, w kierunku prze-

ciwnym do ruchu wskazówek zegara, oraz

że identyfikatory elementów są odblokowane.

Polecenie: rodzlin

↵↵

?/Definiuj/Wczytaj/Ustal: ustal

↵↵

background image

Epebufl!C

79:

Nowy rodzaj linii dla elementów (albo ?) <JAKWARSTWA>:

dashed

↵↵

?/Definiuj/Wczytaj/Ustal:

↵↵

Polecenie: kolor

↵↵

Nowy kolor elementów <JAKWARSTWA>: niebieski

↵↵

Polecenie: warstwa

↵↵

?/Twórz/Ustal/Nowa/Widoczna/UKryta/Kolor/Rodzlin/Zablok/Odbl

ok/zaMkn/OTw: twórz

↵↵

Nowa warstwa aktualna <0>: komentarze

↵↵

?/Twórz/Ustal/Nowa/Widoczna/UKryta/Kolor/Rodzlin/Zablok/Odbl

ok/zaMkN/OTw:

↵↵

Polecenie: tekst

↵↵

Just/STyl/<Pocz

ą

tek tekstu>: 2,2

↵↵

Wysoko

ść

<0.2000>: 3

↵↵

K

ą

t obrotu <0>: 30

↵↵

Tekst: Do zobaczenia, dzi

ę

kuj

ę

za pomoc!

↵↵

Polecenie: (setq ed (entget (setq e (entlast))))

↵↵

W tym przypadku symbolowi e została przypisana nazwa elementu, którym jest napis
wykonany poleceniem TEKST, a symbol ed otrzymał warto

ść taką samą lub zbliżoną

do przedstawionej poni

żej listy.

(

(-1 . <Nazwa elementu: 6000053C>)

(0. "TEXT")

Rodzaj elementu

(8. "KOMENTARZE")

Warstwa

(6. "DASHED")

Rodzaj linii

(62 . 5)

Kolor

(5 . "7E")

Identyfikator

(10 2.0 2.0 0.0)

Punkt pocz

ątkowy

(40 . 0.3)

Wysoko

ść

(1 . "Do zobaczenia, dzi

ę

kuj

ę

za pomoc!")

(50 . 0.523599)

K

ąt obrotu (w radianach

)

(41 . 1.0)

Współczynnik szeroko

ści

(51 . 0.0)

K

ąt pochylenia

(7 "STANDARD")

Styl tekstu

(71 . 0)

Wska

źnik generowania tekstu

(72 . 0)

Justowanie poziome

(73 . 0)

Justowanie pionowe

(11 0.0 0.0 0.0)

Punkt bazowy

(210 0.0 -0.642788 0.766044)

Wektor kierunku pogrubiania

)

Warto

ści wszystkich związanych z elementem punktów są wyrażone względem jego

własnego Układu Współrz

ędnych Elementu (UWE). W przypadku elementów typu

Punkt, Linia, Linia 3W, Polilinia 3W, oraz dla wycinków płaskich powierzchni 3W
(rysowanych poleceniem 3WPOW), siatek przestrzennych (polecenie 3WSIATKA)
i elementów wymiarowych, UWE jest równowa

żny GUW (punkty elementu są

punktami wyra

żonymi we współrzędnych globalnych). Dla wszystkich innych elemen-

background image

7:1

BvupMJTQ!—!qsbluzd{oz!lvst

tów, UWE mo

żna otrzymać z GUW i kierunku pogrubiania danego elementu (grupa

o kodzie 210). W przypadku operowania na elementach narysowanych w innym ni

ż

GUW układzie współrz

ędnych (jak np. Tekst w powyższym przykładzie), konieczna

mo

że być transformacja współrzędnych do GUW lub do aktualnie obowiązującego

LUW, któr

ą można wykonać za pomocą funkcji trans. Używając powyższego elementu

Tekst w charakterze przykładu:

(setq p (cdr (assoc 10 ed)))

zwraca

(2.0 2.0 0.0)

i przypisze zmiennej p punkt pocz

ątkowy tekstu, wyrażony we współrzędnych jego

UWE (zwró

ćmy uwagę na to, że taka postać wyniku nie zależy od LUW obowią-

zuj

ącego w momencie użycia entget). Teraz:

(trans p e 0)

zwraca

(2.0 1.53209 1.285558)

Wyra

żenie to wykorzystuje symbol e (nazwa elementu tekstu) w celu wskazania układu

from, z którego dokonywana jest konwersja i przelicza warto

ści współrzędnych

pocz

ątkowego punktu tekstu z UWE na wartości globalne (GUW)

)foum

)foum

)foum

)foumbtu*

btu*

btu*

btu*

Funkcja zwraca nazw

ę elementu, który jest ostatnim niewymazanym elementem głównym

w rysunkowej bazie danych. Funkcja ta jest cz

ęsto wykorzystywana w celu uzyskania

nazwy nowego elementu, który wła

śnie został dodany z użyciem funkcji command. Element

ten nie musi by

ć widoczny na ekranie ani należeć do warstwy odblokowanej.

Przykładowo:

(setq e1 (entlast))

przypisuje e1 nazw

ę ostatniego elementu

z bazy danych rysunku

(setq e2 (entnext e1)

przypisuje e2 warto

ść nil (lub nazwę

atrybutu albo wierzchołka)

Je

żeli wykorzystywany program użytkowy wymaga nazwy niewymazanego elementu,

który mo

że być uznany za rzeczywiście ostatni, bez względu na to czy jest to element

główny czy podrz

ędny, to można zdefiniować funkcję taką, jak przedstawiona poniżej

i wywoływa

ć ją zamiast entlast.

(defun ostatni (/ a b)

(if (setq a (entlast))

We

ź

ostatni element główny,

je

ż

eli ma on elementy

(while (setq b (entnext a))

podrz

ę

dne, to bierz je kolejno

(setq a b)

i sprawdzaj w p

ę

tli

czy s

ą

nast

ę

pne, a

ż

trafisz na

);while

ostatni

);if
a

Zwró

ć

ostatni element główny /

podrz

ę

dny

);defun

)founblf!

)founblf!

)founblf!

)founblf!\fmjtu^****

background image

Epebufl!C

7:2

Funkcja ta tworzy w rysunku nowy element. Je

żeli operacja tworzenia elementu się

powiedzie, to funkcja zwraca list

ę zawierającą definiujące ten element dane. Jeżeli

natomiast element nie mo

że zostać z jakichkolwiek powodów utworzony (np. z powodu

nieprawidłowych danych), wówczas funkcja zwraca nil.

Argument elist musi by

ć listą zawierającą definiujące element dane, której format jest

podobny do listy zwracanej przez funkcj

ę entget. Musi on zawierać wszystkie informacje

niezb

ędne do zdefiniowania elementu. Gdy jakiejkolwiek z wymaganych informacji

brakuje, to generowany jest komunikat bł

ędu i element jest odrzucany. W przypadku

opuszczenia danych podawanych w definicji elementu opcjonalnie (takich jak nazwa
warstwy), entmake wykorzystuje warto

ści spełniające rolę standardowych propozycji.

Jedna z metod tworzenia nowego elementu polega na uzyskaniu danych tworz

ących

definicj

ę elementu za pomocą funkcji entget, zmodyfikowaniu ich i następnie dodaniu

nowego elementu do rysunku za pomoc

ą funkcji entmake.

Przed utworzeniem nowego elementu rysunku funkcja entmake sprawdza czy zostały
podane nazwa warstwy, rodzaj linii i kolor. Je

śli wprowadzono nazwę nieistniejącej

warstwy, to warstwa taka jest przez entmake tworzona automatycznie. Funkcja ent-
make
sprawdza równie

ż, jeżeli typ elementu tego wymaga, obecność takich danych jak

nazwy bloków, stylów wymiarowania, stylów tekstu oraz nazwy symboli (w tym
wypadku chodzi o elementy rysunku wprowadzane poleceniem SYMBOL).

Rodzaj elementu rysunku (tzn. CIRCLE, LINE itp.) musi by

ć pierwszym lub drugim

elementem listy elist. Je

żeli rodzaj elementu jest podany na drugim miejscu, to na

pierwszym mo

że być tylko nazwa elementu. Jest to postać listy analogiczna do zwra-

canej przez funkcj

ę entget. W takich przypadkach, przy tworzeniu nowego elementu,

ignorowana jest jego nazwa. Je

żeli argument dane zawiera identyfikator elementu, to

jest on równie

ż ignorowany.

Nast

ępny przykład tworzy w rysunku czerwony Okrąg o środku w punkcie (4,4) i pro-

mieniu 1. Opcjonalne pola warstwy i rodzaju linii zostały pomini

ęte, co oznacza

przyj

ęcie wartości obowiązujących.

(entmake

'( (0. "CIRCLE")

Typ elementu

(62 . 1)

Kolor

(10 4.0 4.0 0.0)

Ś

rodek

(40 . 1.0)

Promie

ń

)

)

Elementy utworzone w warstwie zablokowanej nie s

ą

regenerowane a

ż

do

odblokowania warstwy.

Elementy zło

żone

Do zdefiniowania elementu zło

żonego (definicja Bloku, Polilinia lub wstawiony do

rysunku odno

śnik do Bloku z Atrybutami) konieczne jest wielokrotne wywoływanie

background image

7:3

BvupMJTQ!—!qsbluzd{oz!lvst

funkcji entmake i zdefiniowanie ich elementów podrz

ędnych (atrybutów lub

wierzchołków). Gdy entmake zorientuje si

ę, że tworzony jest element złożony, zakłada

tymczasowy plik dyskowy przechowuj

ący dane definiujące. Przy każdym wywołaniu

entmake sprawdzana jest obecno

ść tego pliku (oznaczająca tworzenie elementu złożo-

nego); je

żeli plik taki istnieje, dodawane są do niego nowe dane. Po zakończeniu de-

finiowania nowego elementu zło

żonego (po dodaniu kończącego sekwencję elementu

Seqend lub Endblk), podane dane s

ą ponownie sprawdzane i do rysunku dodawany jest

nowy element zło

żony. Zakończenie tworzenia definicji bloku (przez wywołanie

funkcji entmake w celu zdefiniowania elementu Endblk) powoduje zwrócenie nazwy
bloku,
a nie jak zazwyczaj listy zawieraj

ącej definiujące element dane.

Je

żeli podczas tworzenia elementu złożonego podane zostaną dane niezgodne z typem

definiowanego elementu, wówczas odrzucana jest definicja zarówno tego elementu, jak
i całego elementu zło

żonego. Definicja bloku nie może być zagnieżdżana, ani nie może

zawiera

ć odnośników do samej siebie (wywołań rekurencyjnych). Dopuszczalne jest

jednak umieszczanie w definicji bloku odwoła

ń do definicji innych bloków.

Kod grupy 66 (sygnalizuj

ący wystąpienie atrybutów) jest uwzględniany jedynie w przy-

padku bloków wstawionych w rysunek ("INSERT"). W przypadku Polilinii, dla kodu
grupy 66 wymuszana jest warto

ść 1 (oznaczająca istnienie wierzchołków), a dla ele-

mentów wszystkich innych typów wymuszana jest standardowa warto

ść zero. Jedynym

elementem, który ma prawo wyst

ępować po elemencie POLYLINE (polilinia) jest

element VERTEX (wierzchołek).

Do momentu całkowitego zako

ńczenia definiowania elementu złożonego na ekranie nie

jest wy

świetlana żadna część tego elementu. Anulowanie operacji definiowania

elementu zło

żonego uzyskuje się przez wywołanie funkcji entmake bez argumentów.

Powoduje to usuni

ęcie zawartości pliku tymczasowego i zwrócenie nil.

Wszystkie elementy podrz

ędne wchodzące w skład elementu złożonego muszą być

utworzone dla tego samego obszaru. Elementy składowe mog

ą istnieć albo w obszarze

papieru, albo w obszarze modelu, ale nie mog

ą to być elementy z różnych obszarów.

Przykładowo, elementy POLYLINE, VERTEX i SEQEND musz

ą leżeć w tym samym

obszarze. To samo dotyczy elementów INSERT, ATTRIB i SEQEND.

Do utworzenia nowej definicji bloku mo

żna wykorzystać elementy BLOCK i END-

BLK. Nowo utworzone bloki s

ą automatycznie wprowadzane do tablicy symboli, gdzie

mog

ą być potem wskazywane odnośnikami.

Programy u

żytkowe mogłyby tworzyć siatki polipowierzchni z wieloboków o dowolnej

liczbie kraw

ędzi. Struktura elementów AutoCADa narzuca jednak ograniczenie w za-

kresie liczby wierzchołków, które mo

żna podać dla jednego elementu płaskiej

powierzchni (

ściany). Bardziej skomplikowane wieloboki mogą być odwzorowywane

po podzieleniu ich na trójk

ątne kliny. AutoCAD przedstawia trójkątne kliny jako

płaskie elementy powierzchni o czterech wierzchołkach, których dwa s

ąsiednie

wierzchołki si

ę pokrywają. Krawędzie takich segmentów należy uczynić niewido-

cznymi, aby zapobiec rysowaniu linii podziałów; nie powinny by

ć one widoczne.

background image

Epebufl!C

7:4

Polecenie PPOW wykonuje ten podział automatycznie, ale je

żeli program użytkowy

samodzielnie generuje siatki polipowierzchni, to powinien równie

ż samodzielnie

dokonywa

ć podziału.

Kluczowym parametrem w procesie podziału

ścian na mniejsze segmenty jest liczba

wierzchołków przypadaj

ąca na jedną ścianę elementarną. Program użytkowy określa

ten parametr na podstawie warto

ści zmiennej systemowej PFACEVMAX. Zmienna ta

jest przeznaczona tylko do odczytu i ma warto

ść 4.

Wa

żna informacja: Nie jest możliwe wykorzystanie funkcji entmake do tworzenia

elementów rysunku typu Rzutnia.

Blok tworzony przez funkcj

ę

entmake mo

ż

e zast

ą

pi

ć

blok ju

ż

istniej

ą

cy. Funkcja

entmake nie sprawdza konfliktu nazw w tablicy definicji bloków i dlatego przez
u

ż

yciem jej, w celu utworzenia bloku, nale

ż

y za pomoc

ą

funkcji tblsearch sprawdzi

ć

czy nazwa nowego bloku nie jest powtórzeniem której

ś

z istniej

ą

cych. U

ż

yteczne

mo

ż

e by

ć

jednak wykorzystywanie funkcji entmake do przedefiniowywania bloków

anonimowych (bez nazwy), opisanych w nast

ę

pnym podrozdziale.

Bloki bez nazwy

Tablica z definicjami istniej

ących w rysunku bloków może zawierać bloki bez nazwy.

S

ą to bloki tworzone w związku z operacjami zakreskowywania powierzchni i wy-

miarowania zespolonego. Mog

ą one być również tworzone przez funkcję entmake

w zwi

ązku z potrzebami wynikającymi ze specyfiki programu użytkowego; zawierają

wtedy zazwyczaj elementy, do których u

żytkownik nie ma bezpośredniego dostępu.

Nazw

ą bloku anonimowego (grupa o kodzie 2) jest *Unnn, gdzie nnn jest numerem

generowanym przez AutoCADa. Ponadto, najmniej znacz

ący bit znacznika typu bloku

(grupa o kodzie 70) jest w bloku bez nazwy jedynk

ą. Jeżeli za pomocą funkcji entmake

tworzony jest blok, którego nazwa rozpoczyna si

ę od znaku * i dla którego ustawiony

jest najmniej znacz

ący bit w znaczniku typu bloku, to AutoCAD rozpoznaje to jako

tworzenie bloku bez nazwy i nadaje mu nazw

ę. Dowolny znak, występujący po

gwiazdce (*) w u

żytym w wyrażeniu entmake łańcuchu określającym nazwę, jest igno-

rowany. Po utworzeniu bloku, entmake zwraca jego nazw

ę. Jeżeli podczas tworzenia

bloku funkcja entmake jest wywoływana wielokrotnie, to nazwa bloku jest zwracana
po zako

ńczonym sukcesem wywołaniu:

(entmake "endblk")

(element ENDBLK ko

ńczy sekwencję elementów podrzędnych w przypadku bloku).

Przy ka

żdym wprowadzaniu rysunku do edytora graficznego, wszystkie niewykorzysty-

wane w nim bloki bez nazwy s

ą usuwane z tablicy zawierającej definicje bloków. Bloki

bez nazwy, do których w rysunku s

ą odnośniki (wstawione do rysunku), nie są

usuwane. Funkcja entmake mo

że być wykorzystana do utworzenia wstawienia bloku

bez nazwy (element Insert). Nale

ży tu zwrócić uwagę na to, że blok bez nazwy nie

mo

że być użyty w operacji wywoływanej poleceniem WSTAW. Funkcja entmake

mo

że być też użyta do zmiany definicji bloku. Elementy tworzące blok (ale nie sam

Blok jako element rysunku) mog

ą być modyfikowane za pomocą funkcji entmod.

background image

7:5

BvupMJTQ!—!qsbluzd{oz!lvst

Chocia

ż

wstawiany blok bez nazwy, staje si

ę

stałym składnikiem rysunku, to jednak

jego nazwa mo

ż

e ulega

ć

zmianie w kolejnych sesjach edycyjnych. Dlatego

programy u

ż

ytkowe nie mog

ą

zakłada

ć

,

ż

e nazwy bloków anonimowych s

ą

stałe.

)foun

)foun

)foun

)founpe!

pe!

pe!

pe!fmjtu****

Funkcja entmod operuje na argumencie elist, który jest list

ą w postaci zwracanej przez

funkcj

ę entget, i aktualizuje informacje w bazie danych związane z elementem, którego

nazwa jest okre

ślona w tej liście w grupie o kodzie –1. Tak więc, podstawowy sposób

uaktualniania bazy danych przez AutoLISP polega na wydobywaniu informacji o ele-
mencie przy pomocy funkcji entget, na modyfikowaniu listy definiuj

ących element

danych (nale

ży zwrócić uwagę na to, że szczególnie przydatna jest tu funkcja subst)

oraz na aktualizowaniu informacji o elemencie w bazie danych za pomoc

ą entmod.

Przykład

(setq en (entnext))

przypisuje en nazw

ę

pierwszego

elementu rysunku

(setq ed (entget en))

przypisuje ed dane elementu o
nazwie en

(setq ed

(subst

(cons 8 "0")

zmienia warstw

ę

w danych ed na

(assoc 8 ed)

warstw

ę

"0"

);subst

);setq
(entmod ed)

modyfikuje warstw

ę

elementu en

w rysunku

Istnieje kilka ogranicze

ń na zmiany dokonywane przy użyciu funkcji entmod. Przede

wszystkim nie mo

że być zmieniany typ elementu ani jego identyfikator (jeżeli chcemy

to zrobi

ć, należy po prostu wymazać ten element przy użyciu entdel i utworzyć nowy,

wywołuj

ąc funkcję command lub entmake). Wszystkie obiekty, do których odwołuje

si

ę lista z danymi elementu, muszą być znane AutoCADowi przed wykonaniem

entmod. Zatem styl tekstu, rodzaj linii, oraz nazwy Bloków i Symboli musz

ą być dla

rysunku zdefiniowane wcze

śniej, zanim zostaną użyte w liście dane w wyrażeniu

z funkcj

ą entmod. Jedynym wyjątkiem od tej reguły są nazwy warstw. Jeżeli zostanie

podana nazwa warstwy nieistniej

ącej, wówczas entmod utworzy nową warstwę o pa-

rametrach standardowych dla polecenia WARSTWA z opcj

ą Nowa.

Dla pól przeznaczonych na dane elementu o warto

ściach zmiennoprzecinkowych (np.

grubo

ść), entmod akceptuje wartości stałopozycyjne typu integer, które poddaje

konwersji na liczby typu real. Podobnie, je

żeli dla pola typu integer (np. numer koloru)

zostanie podana liczba zmiennoprzecinkowa, to zostanie ona zamieniona na warto

ść

całkowitoliczbow

ą przez obcięcie części ułamkowej.

Funkcja entmod wykonuje operacje sprawdzania spójno

ści podanej listy tak samo, jak

polecenie DXFWE sprawdza dane odczytywane z pliku DXF. Je

żeli zostanie wykryty

background image

Epebufl!C

7:6

ąd na tyle poważny, że baza danych nie może być uaktualniona, funkcja zwraca nil.

W przeciwnym wypadku funkcja entmod zwraca list

ę będącą jej argumentem. Entmod

nie mo

że zmieniać pól wewnętrznych, takich jak nazwa elementu w grupie –2 elementu

Seqend. Próby dokonania takich zmian zostan

ą po prostu zignorowane.

Gdy uaktualniany jest element główny, entmod modyfikuje go i uaktualnia jego wygl

ąd

na ekranie (ł

ącznie z elementami składowymi). Gdy przy wykorzystaniu entmod

uaktualniany jest element podrz

ędny (wierzchołek Polilinii lub atrybut Bloku),

modyfikacje s

ą wprowadzane do bazy danych, lecz wygląd rysunku na ekranie nie

ulegnie zmianie. Po wykonaniu wszystkich modyfikacji elementów składowych danego
elementu głównego, jego wygl

ąd na ekranie można uaktualnić wywołując opisaną dalej

funkcj

ę entupd.

Przed wykonaniem funkcji entget lub entmod na elementach Vertex (Wierzchołek
Polilinii), nale

ży odczytać lub zapisać nagłówek (element Polyline) Polilinii, do której

wierzchołki te nale

żą. Jeśli ostatnia przetwarzana Polilinia jest różna od Polilinii, do

której nale

żą Wierzchołki, stracona może być informacja o szerokości (grupy 40 i 41).

Wa

żna informacja: Funkcja entmod nie może być wykorzystana do modyfikacji

elementu typu Rzutnia. Mo

żliwa jest zmiana na 0 lub na 1 pola determinującego

widzialno

ść obszaru (ale nie dla rzutni będących elementem rysunku). Zastosowanie

funkcji entmod wobec elementu wewn

ątrz definicji bloku, wprowadza zmiany do

wszystkich wywoła

ń tego bloku w rysunku.

Funkcja entmod mo

ż

e by

ć

wykorzystana do modyfikacji elementów wewn

ą

trz

definicji bloku. Tak wprowadzone modyfikacje dotycz

ą

tym samym wszystkich

wywoła

ń

bloku w rysunku. T

ą

drog

ą

mo

ż

na utworzy

ć

blok wywołuj

ą

cy sam

siebie. Nie nale

ż

y tego robi

ć

; prawdopodobnie spowoduje to załamanie si

ę

pracy AutoCADa.

)fouofyu!

)fouofyu!

)fouofyu!

)fouofyu!\fobnf^****

Je

żeli funkcja jest wywoływana bez argumentów, to zwraca ona nazwę pierwszego

niewymazanego elementu z rysunkowej bazy danych. Je

żeli wyrażenie z entnext

zawiera argument ename, to funkcja zwraca nazw

ę pierwszego niewymazanego

elementu, który wyst

ępuje w bazie danych po elemencie wskazywanym przez ten

argument. Je

żeli nie ma już następonego elementu rysunkowego, to funkcja zwraca nil.

Funkcja entnext zwraca zarówno elementy główne, jak równie

ż ich elementy

podrz

ędne.

Elementy rysunku wybierane przy wykorzystaniu funkcji ssget s

ą elementami

głównymi. Nie zaliczaj

ą się do nich atrybuty Bloków ani wierzchołki Polilinii. Dostęp

do wewn

ętrznej struktury tych złożonych elementów jest możliwy przy użyciu metody,

która polega na „przechodzeniu” od jednego elementu podrz

ędnego do następnego za

pomoc

ą entnext. Po otrzymaniu nazwy elementu podrzędnego można na nim działać

tak, jak na wszystkich innych elementach. Je

żeli nazwa elementu podrzędnego została

uzyskana za pomoc

ą entnext, to nazwę elementu wobec niego nadrzędnego można

uzyska

ć przez powtarzanie entnext aż do momentu dojścia do elementu SEQEND.

background image

7:7

BvupMJTQ!—!qsbluzd{oz!lvst

Element taki ko

ńczy sekwencje elementów podrzędnych względem jednego elementu.

Z elementu SEQEND nale

ży odczytać teraz grupę z kodem –2, która zawiera

poszukiwan

ą nazwę elementu nadrzędnego dla całej sekwencji.

Przykład:

(setq e1 (entnext))

Przypisuje e1 nazw

ę

pierwszego

elementu rysunku

(setq e2 (entnext e1))

Przypisuje e2 nazw

ę

nast

ę

pnego

elementu po e1

)foutfm!

)foutfm!

)foutfm!

)foutfm!\qspnqu^****

W przypadku niektórych wykonywanych na elementach operacji mo

że się zdarzyć, że

oprócz wybrania elementu potrzebna jest równie

ż znajomość współrzędnych punktu,

który został u

żyty do jego wskazania. Przykłady takich sytuacji w programie AutoCAD

mo

żna znaleźć przy lokalizowaniu położenia punktów względem obiektów oraz przy

poleceniach PRZERWIJ, UTNIJ i WYDŁU

Ż. Programy AutoLISPu mogą wykonywać

podobne zadania dzi

ęki funkcji entsel; wybiera ona pojedynczy element, przy czym

konieczne jest dokonanie wyboru metod

ą punktowania. Aktualnie obowiązujące tryby

lokalizacji punktów wzgl

ędem obiektów, ustalone za pomocą polecenia OBIEKT, są

przez funkcj

ę entsel ignorowane (odpowiada to stanowi braku ustalonych trybów lokali-

zacji), chyba

że specjalnie zażądamy inaczej podczas wykonywania funkcji. Funkcja

entsel uwzgl

ędnia słowa kluczowe, zdefiniowane w ostatnim wywołaniu funkcji initget.

Funkcja entsel zwraca list

ę, której pierwszym elementem jest nazwa wybranego

elementu. Drugim jej elementem jest lista współrz

ędnych punktu użytego do wskazania

elementu (o warto

ściach odniesionych do aktualnie obowiązującego LUW). Jeżeli

wyra

żenie zawiera łańcuch alfanumeryczny prompt, to zostanie on użyty w charakterze

komunikatu dla u

żytkownika nakazującego mu wybranie elementu. W razie jego braku

pojawi si

ę standardowe zgłoszenie Wskaż obiekty:. Przedstawiona poniżej sekwencja

dialogu z programem AutoCAD ilustruje sposób u

życia funkcji entsel. Zwracana lista

jest podobna lub taka sama, jak pokazana poni

żej:

Polecenie: linia

↵↵

Od punktu: 1,1

↵↵

Do punktu: 6,6

↵↵

Do punktu:

↵↵

Polecenie: (setq e (entsel "Uprzejmie prosz

ę

wybra

ć

element:"))

↵↵

Uprzejmie prosz

ę

wybra

ć

element: 3,3

↵↵

(<Nazwa elementu: 60000014> (3.0 3.0 0.0))

Lista utworzona przez entsel mo

że być wykorzystywana w programie AutoCAD, jako

odpowied

ź na dowolne z jego zgłoszeń, po których możliwe jest wybieranie obiektów.

Jest to traktowane przez AutoCAD jak wybranie obiektu metod

ą punktowania (tzn.

przez wskazanie punktu).

Zagadnienie zwi

ązane tematycznie: Patrz opis funkcji initget.

background image

Epebufl!C

7:8

)fou

)fou

)fou

)fouvqe!

vqe!

vqe!

vqe!fobnf****

W czasie modyfikowania przy u

życiu funkcji entmod wierzchołka Polilinii lub atrybutu

Bloku, wygl

ąd całego elementu złożonego na ekranie nie jest uaktualniany.

Przykładowo, gdyby nale

żało zmodyfikować 100 wierzchołków skomplikowanej

polilinii, to ka

żdorazowe przeliczanie i wyświetlanie jej zmieniającego się wraz ze

zmian

ą każdego wierzchołka wyglądu, przebiegałoby w niedopuszczalnie wolnym

tempie. Aktualizacj

ę wyglądu modyfikowanej polilinii lub bloku można więc wymusić

dopiero przez u

życie funkcji entupd. Argumentem funkcji entupd jest nazwa

dowolnego jednego elementu składowego Polilinii lub Bloku. Nie musi to by

ć nazwa

elementu głównego — entupd odnajdzie nagłówek. Chocia

ż funkcja entupd jest

przeznaczona dla Polilinii i Bloków z atrybutami, to w praktyce mo

że być ona

wywoływana dla dowolnego elementu. W ka

żdym przypadku powoduje ona

regeneracj

ę elementu na ekranie wraz ze wszystkimi elementami podrzędnymi.

Je

ż

eli funkcja entupd jest stosowana wobec elementu zagnie

ż

d

ż

onego

(elementu w Bloku) lub Bloku zawieraj

ą

cego elementy zagnie

ż

d

ż

one, to

regeneracja mo

ż

e nie dotyczy

ć

wszystkich zagnie

ż

d

ż

onych elementów Bloku.

Aby uzyska

ć

pewno

ść

,

ż

e wszystkie bloki i ich elementy zagnie

ż

d

ż

one zostały

poddane regeneracji, nale

ż

y wywoła

ć

polecenie REGEN. Mo

ż

na to równie

ż

zrealizowa

ć

w AutoLISPie wprowadzaj

ą

c (command "regen").

Przykład:

Przy zało

żeniu, że pierwszym elementem w bazie danych rysunku jest polilinia o kilku

wierzchołkach:

(setq e1 (entnext))

Przypisuje e1 nazw

ę

elementu

dla tej polilinii

(setq e2 (entnext e1))

Przypisuje e2 jej pierwszy
wierzchołek

(setq ed (entget e2))

Przypisuje ed dane wierzchołka

(setq ed

(subst

'(10 1.0 2.0)

Zmienia poło

ż

enia wierzchołka

(assoc 10 ed)

w ed na punkt o współrz

ę

dnych

ed

1,2

);subst

);setq
(entmod ed)

Przesuwa wierzchołek na rysunku

(entupd e1)

Regeneruje element e1
(polilini

ę

)

)fr!

)fr!

)fr!

)fr!fyqs2!fyqs3****

Funkcja okre

śla, czy argumenty expr1 i expr2 są identyczne; należy przez to rozumieć,

że oba wyrażenia są w rzeczywistości przypisane do tego samego obiektu (np. przy
pomocy setq). Funkcja eq zwraca T, gdy wyra

żenia są identyczne. W przeciwnym razie

funkcja zwraca nil. Funkcja ta jest zazwyczaj u

żywana przy sprawdzaniu, czy dwie listy

s

ą w rzeczywistości takie same.

background image

7:9

BvupMJTQ!—!qsbluzd{oz!lvst

Przykładowo, je

śli wykonane zostaną przypisania:

(setq f1 '(a b c))
(setq f2 '(a b c))
(setq f3 f2)

to:

(eq f1 f3)

zwraca

nil

f1 i f3 nie s

ą tą samą listą!

(eq f3 f2)

zwraca

T

f3 i f2 s

ą dokładnie tą samą listą

Informacje uzupełniaj

ące: Patrz opisy funkcji = oraz funkcji equal

)frvbm!

)frvbm!

)frvbm!

)frvbm!fyqs2!fyqs3!\gv{{^****

Funkcja ta okre

śla, czy argumenty expr1 i expr2 są sobie równe; należy przez to

rozumie

ć, że wartościowanie obu daje taki sam wynik. Przykładowo dla następujących

przypisa

ń:

(setq f1 '(a b c))
(setq f2 '(a b c))
(setq f3 f2)

otrzymuje si

ę wyniki:

(equal f1 f3)

zwraca

T

wyniki ewaluacji f1 i f3 s

ą takie same

(equal f3 f2)

zwraca

T

f3 i f2 s

ą dokładnie tą samą listą

Nale

ży zauważyć, że dwie listy, dla których funkcja equal zwraca T, funkcja eq może tra-

ktowa

ć jako różne. Różnica taka nie wystąpi w przypadku atomów. Natomiast dla każdych

dwóch list lub atomów, je

żeli funkcja eq zwraca T, to również equal zwróci zawsze T.

Przy porównywaniu dwóch liczb rzeczywistych (lub dwóch list zawieraj

ących liczby

typu real, np. współrz

ędne punktów) należy zwrócić uwagę na to, że dwie „identyczne”

liczby mog

ą nieznacznie różnić się między sobą, jeżeli zostały obliczone z użyciem

żnych metod. Dlatego też funkcja equal może zawierać dodatkowy argument fuzz,

który okre

śla maksymalną dopuszczalną różnicę między argumentami expr1 i expr2,

przy której obydwa te wyra

żenia są jeszcze traktowane jako równe. Przykładowo,

je

żeli:

(setq a 1.123456)
(setq b 1.123457)

to wtedy:

(equal a b)

zwraca

nil

(equal a b 0.000001)

zwraca

T

Informacje uzupełniaj

ące: Patrz opisy funkcji = oraz funkcji eq.

background image

Epebufl!C

7::

)+f

)+f

)+f

)+fssps+!tusjoh*

ssps+!tusjoh*

ssps+!tusjoh*

ssps+!tusjoh*

Jest to definiowana przez u

żytkownika funkcja obsługi błędów. Jeżeli jest różna od nil, to

jest wykonywana w wypadku wyst

ąpienia dowolnego błędu w programie AutoLISPu.

Jedynym jej argumentem jest ła

ńcuch alfanumeryczny string zawierający opis błędu.

Przykład:

(defun *error* (opis)

(princ "Bł

ą

d: ")

(princ opis)
(terpri)

)

Przedstawiona powy

żej funkcja, w wypadku wystąpienia błędu wykonałaby dokładnie

to samo, co wbudowana funkcja obsługi bł

ędów AutoLISPu, tzn. spowodowałaby zapi-

sanie na ekranie komunikatu Bł

ąd: i odpowiedniego opisu.

Definiowana przez u

żytkownika funkcja *error* może zawierać wywołania funkcji

command (a wi

ęc wyrażenia (command)). Powoduje to unieważnienie poprzedniej

funkcji AutoCADa, wywołanej poprzez funkcj

ę command.

)f

)f

)f

)fwbm!

wbm!

wbm!

wbm!fyqs****

Funkcja ta zwraca wynik wyznaczenia warto

ści argumentu expr, który jest dowolnym

wyra

żeniem LISPu. Przykładowo, jeżeli:

(setq a 123)
(setq b 'a)

to:

(eval 4.0)

zwraca

4.0

(eval (abs -10))

zwraca

10

(eval a)

zwraca

123

(eval b)

zwraca

123

)fyju*

)fyju*

)fyju*

)fyju*

Funkcja exit wymusza zako

ńczenie działania bieżącego programu użytkowego. Po wy-

wołaniu exit, zwraca ona komunikat bł

ędu informujący o przerwaniu działania wykony-

wanego programu i przywraca na ekranie standardowe zgłoszenie AutoCADa Polecenie:

Informacje uzupełniaj

ące: Patrz także opis funkcji quit.

background image

811

BvupMJTQ!—!qsbluzd{oz!lvst

)fyq!

)fyq!

)fyq!

)fyq!ovncfs****

Funkcja ta zwraca warto

ść typu real otrzymaną w wyniku podniesienia liczby e do

pot

ęgi określonej argumentem number. Wartość ta bywa określana nazwą antylogarytm

naturalny. Przykładowo:

(exp 1.0)

zwraca

2.71828

(exp 2.2)

zwraca

9.02501

(exp -0.4)

zwraca

0.67032

)fyqbo

)fyqbo

)fyqbo

)fyqboe!

e!

e!

e!ovncfs****

Przydziela obszar w

ęzłów, żądając określonej liczby segmentów.

)fyqu!

)fyqu!

)fyqu!

)fyqu!cbtf!qpxfs!*

!*

!*

!*

Funkcja ta zwraca warto

ść otrzymaną w wyniku podniesienia argumentu base do potęgi

okre

ślonej argumentem power. Jeżeli obydwa argumenty są liczbami typu integer, to

funkcja ta zwraca warto

ść całkowitoliczbową, w innym wypadku zwraca liczbę rzeczy-

wist

ą. Przykładowo:

(expt 2 4)

zwraca

16

(expt 3.0 2.0)

zwraca

9.0

)gjoegj

)gjoegj

)gjoegj

)gjoegjmf!

mf!

mf!

mf!gjmfobnf****

Funkcja findfile poszukuje okre

ślonego pliku w bibliotecznej ścieżce poszukiwań

AutoCADa i w razie sukcesu zwraca pełn

ą nazwę pliku wraz ze ścieżką dostępu.

Biblioteczna

ścieżka poszukiwań jest przeszukiwana w następującej kolejności:

Katalog bie

żący

Katalog zawieraj

ący plik bieżącego rysunku

Katalogi okre

ślone przez zmienną środowiskową ACAD

Katalog zawieraj

ący pliki programu AutoCAD

W zale

ż

no

ś

ci od bie

żą

cego

ś

rodowiska, dwa lub wi

ę

cej tych katalogów, mo

ż

e

by

ć

w rzeczywisto

ś

ci tym samym katalogiem.

Funkcja findfile nie stosuje

żadnych założeń związanych z typem pliku filename ani

rozszerzeniem jego nazwy. Je

żeli plik ma posiadać pełną nazwę z rozszerzeniem, to

nale

ży je podać. Jeżeli nazwa pliku nie jest poprzedzona ścieżką dostępu do pliku, to

AutoCAD poszukuje pliku i zwraca pełn

ą jego nazwę, razem ze ścieżką dostępu, albo

nil, je

żeli pliku nie znajdzie. Gdy podano pełną nazwę pliku (razem ze ścieżką dostępu),

background image

Epebufl!C

812

to AutoCAD przeszukuje tylko wskazany katalog. W przykładach przedstawionych
ni

żej separatorem katalogów jest ukośnik prawy "/"; w systemach operacyjnych PC-

DOS/MS-DOS mo

żna stosować oba ukośniki: lewy "\" i prawy"/".

Niech aktualnym katalogiem b

ędzie /ACAD, zawiera on plik ABC.LSP, dokonywana

jest edycja rysunku umieszczonego w katalogu /ACAD/RYSUNKI, zmiennej

środo-

wiskowej ACAD przypisano warto

ść /ACAD/SUPPORT, plik XYZ.TXT istnieje tylko

w katalogu /ACAD/SUPPORT, a w

żadnym z wyżej wymienionych katalogów nie ma

pliku BZDURY. Wówczas:

(findfile "abc.lsp")

zwraca

"/acad/abc.lsp"

(findfile "xyz.txt")

zwraca

"/acad/support/xyz.txt"

(findfile "bzdury")

zwraca

nil

Pełna nazwa ze

ścieżką dostępu zwracana przez findfile, jest możliwa do wykorzystania

przez funkcj

ę open.

)gjy!

)gjy!

)gjy!

)gjy!ovncfs****

Funkcja ta zwraca wynik konwersji argumentu number na liczb

ę typu integer. Argument

number mo

że być typu real lub integer. Jeżeli argumentem jest liczba rzeczywista, to

liczba typu integer powstaje przez odrzucenie cz

ęści ułamkowej. Przykładowo:

(fix 3)

zwraca

3

(fix 3.7)

zwraca

3

Je

ż

eli

number jest wi

ę

ksza od najwi

ę

kszej dopuszczalnej warto

ś

ci dla liczb typu

integer (+2,147,483,647 lub –2,147,483,648 na platformie 32-bitowej), fix
zwraca obci

ę

t

ą

liczb

ę

typu real (mimo

ż

e liczby całkowite transferowane

pomi

ę

dzy AutoLISPem i AutoCADem s

ą

ograniczone do warto

ś

ci 16-bitowych).

)gmpbu!

)gmpbu!

)gmpbu!

)gmpbu!ovncfs****

Funkcja zwraca wynik konwersji argumentu number na liczb

ę zmiennoprzecinkową

typu real. Argument number mo

że być typu real lub integer. Przykładowo:

(float 3)

zwraca

3.0

(float 3.75)

zwraca

3.75

)gpsfbd

)gpsfbd

)gpsfbd

)gpsfbdi!

i!

i!

i!obnf!mjtu!fyqs

****

Kolejne elementy argumentu list s

ą przypisywane zmiennej name, a następnie każde

expr jest poddawane ewaluacji dla ka

żdego elementu listy. Dozwolone jest podanie

dowolnej liczby argumentów expr. Funkcja foreach zwraca rezultat ostatniego wyliczo-
nego wyra

żenia. Przykładowo:

(foreach n '(a b c) (print n))

background image

813

BvupMJTQ!—!qsbluzd{oz!lvst

jest równowa

żne:

(print a)
(print b)

(print c)

i zwraca

c

żnica polega jedynie na tym, że funkcja foreach zwróci wartość tylko ostatniego

wyliczonego wyra

żenia.

)hd*

)hd*

)hd*

)hd*

Jest to funkcja wymuszaj

ąca czyszczenie pamięci przez zwolnienie obszaru niewyko-

rzystywanych w

ęzłów.

)hde!

)hde!

)hde!

)hde!ovn2!ovn3****

Warto

ścią zwracaną przez funkcję gcd jest największy wspólny podzielnik argumentów

num1 i num2. Oba argumenty musz

ą być liczbami typu integer. Przykładowo:

(gcd 81 57)

zwraca

3

(gcd 12 20)

zwraca

4

)hfub

)hfub

)hfub

)hfubohmf!

ohmf!

ohmf!

ohmf!\qu^!\qspnqu^****

Funkcja ta powoduje przerw

ę na podanie przez użytkownika wartości kąta i następnie

zwraca jego warto

ść w radianach. Funkcja getangle dokonuje pomiaru wielkości

k

ątowej przyjmując za 0 radianów kąt określony przez wartość zmiennej systemowej

ANGBASE i kierunek narastania k

ątów przeciwny do ruchu wskazówek zegara.

Zwracana warto

ść kąta jest wyrażana w radianach względem aktualnej płaszczyzny

konstrukcyjnej (płaszczyzny XY aktualnego LUW dla aktualnego poziomu).

Argument prompt jest opcjonalnym ła

ńcuchem alfanumerycznym, wyświetlanym jako

zgłoszenie gotowo

ści, a pt jest opcjonalnym bazowym punktem 2W, którego współ-

rz

ędne są wyrażone w aktualnym LUW. Kąt można podać przez napisanie liczby

b

ędącej jego miarą w aktualnie obowiązującym formacie zapisu miar kątowych Auto-

CADa. Chocia

ż jednostkami mogą być aktualnie stopnie, grady lub inne jednostki,

funkcja ta zawsze zwraca warto

ść kąta w radianach.

Inn

ą metodą jest pokazanie kąta przez wskazanie dwóch punktów 2W na ekranie grafi-

cznym. AutoCAD rysuje wtedy ruchom

ą linię pomocniczą między pierwszym punktem

i punktem wskazywanym aktualnym poło

żeniem kursora, w celu ułatwienia wizualnej oceny

wielko

ści kąta. Jeżeli podany jest opcjonalny argument pt, to jest on przyjmowany przez

getangle za pierwszy z tych punktów; pozwala to pokaza

ć kąt przez wskazanie drugiego

punktu. Punkt bazowy mo

że być punktem 3W, ale jednak efekt tego mógłby być mylący,

gdy

ż kąt jest zawsze mierzony w aktualnej płaszczyźnie konstrukcyjnej.

background image

Epebufl!C

814

Istotne jest zrozumienie ró

żnicy pomiędzy kątem wprowadzonym, a kątem zwróconym

przez getangle. K

ąty wprowadzane do getangle są kątami mierzonymi z uwzględnie-

niem aktualnych warto

ści zmiennych systemowych ANGDIR i ANGBASE. Jednak,

gdy k

ąt zostanie już wprowadzony, jego wartość jest mierzona w kierunku przeciwnym

do ruchu wskazówek zegara (niezale

żnie od ANGDIR), poczynając od kierunku zero

radianów, ustalonego zgodnie z aktualn

ą wartością zmiennej ANGBASE.

Poni

żej podano przykłady wywołań funkcji getangle:

(setq ang (getangle))
(setq ang (getangle '(1.0 3.5)))
(setq ang (getangle "W jakim kierunku?"))
(setq ang (getangle '(1.0 3.5) "W jakim kierunku?"))

K

ąt nie może być wprowadzony do getangle w postaci innego wyrażenia w

AutoLISPie. Przy podj

ęciu takiej próby zostanie wyświetlony komunikat:

Can`t reenter AutoLISP.

Informacje uzupełniaj

ące: Opis ten należy porównać z opisem dla funkcji getorient.

Patrz równie

ż opis initget.

)hfudpsofs!

)hfudpsofs!

)hfudpsofs!

)hfudpsofs!qu!\qspnqu^****

Funkcja getcorner zwraca punkt w aktualnym LUW, podobnie jak getpoint. Funkcja
getpoint wymaga jednak argumentu w postaci punktu bazowego pt, a nast

ępnie rysuje

od tego miejsca prostok

ąt, którego przeciwległy wierzchołek jest wskazywany położe-

niem wy

świetalnego na ekranie krzyża nitkowego. Argument prompt jest opcjonalnym

ła

ńcuchem alfanumerycznym, wyświetlanym jako zgłoszenie gotowości.

Punkt bazowy jest okre

ślany we współrzędnych aktualnego LUW. Jeżeli zostanie poda-

ny punkt 3W, to jego współrz

ędna Z jest pomijana; jako współrzędna Z punktu bazowe-

go przyjmowana jest zawsze warto

ść aktualnego poziomu.

K

ąt nie może być wprowadzony do getcorner w postaci innego wyrażenia w AutoLISPie.

Informacje uzupełniaj

ące: Patrz również opis funkcji getpoint i initget.

)hfu

)hfu

)hfu

)hfuejtu!

ejtu!

ejtu!

ejtu!\qu^!\qspnqu^****

Funkcja ta powoduje przerw

ę na podanie przez użytkownika wartości wymiaru

liniowego lub dwóch punktów; getdist zwraca nast

ępnie liczbę rzeczywistą, która jest

miar

ą odległości między punktami.

Odległo

ść można określić wprowadzając liczbę będącą jej miarą w aktualnym obowią-

zuj

ącym układzie jednostek miar liniowych AutoCADa. Jednak, nawet gdy aktualnie

obowi

ązującym układem jednostek są stopy i cale, wartością zwracaną przez funkcję

jest zawsze liczba typu real.

background image

815

BvupMJTQ!—!qsbluzd{oz!lvst

Mo

żliwe jest również wskazanie położenia dwóch punktów. Funkcja getdist zwraca

wówczas odległo

ść między nimi, wyświetlając na ekranie ruchomą linię pomocniczą

mi

ędzy pierwszym punktem, a aktualnym położeniem ekranowego krzyża nitkowego,

co pomaga w wizualnej ocenie wprowadzanej wielko

ści. Argument pt jest opcjonalnym

bazowym punktem 2W lub 3W wyra

żonym we współrzędnych aktualnie obowią-

zuj

ącego LUW. Jeżeli jest podany, staje się pierwszym z dwóch wyznaczających

warto

ść odległości punktów, a użytkownik wprowadza tylko drugi punkt.

W przypadku u

życia punktu 3W, zwracana wartość jest wektorem 3W. Jeżeli jednak

w funkcji initget ustawiony został bit 64, to powoduje on ignorowanie przez getdist
współrz

ędnych Z punktów 3W i zwracana jest odległość 2W.

Argument prompt jest opcjonalnym ci

ągiem znaków alfanumerycznych, wyświetlanym

jako zgłoszenie gotowo

ści.

Funkcja getdist nie akceptuje danych wprowadzanych z u

ż

yciem innych

wyra

ż

e

ń

j

ę

zyka AutoLISP.

U

życie funkcji getdist ilustrują następujące przykłady:

(setq dist (getdist))
(setq dist (getdist '(1.0 3.5)))
(setq dist (getdist "Jak daleko "))
(setq dist (getdist '(1.0 3.5) "Jak daleko? "))

Informacje uzupełniaj

ące: Patrz opis funkcji initget.

)hfufow!

)hfufow!

)hfufow!

)hfufow!wbsjbcmf.obnf****

Funkcja ta zwraca warto

ść typu string w postaci łańcucha alfanumerycznego przypi-

sanego do systemowej zmiennej

środowiskowej. Argument variable-name jest łańcu-

chem okre

ślającym nazwę zmiennej, której wartość ma być odczytana. Jeśli taka zmien-

na nie istnieje, to funkcja getenv zwraca nil.

Przykładowo, je

żeli zmiennej środowiskowej ACAD przypisano wartość /ACAD/SUP-

PORT, a zmienna BRAK nie istnieje, to:

(getenv "ACAD")

zwraca

"/acad/support"

(getenv "BRAK")

zwraca

nil

Nale

ż

y pami

ę

ta

ć

o tym,

ż

e w

ś

rodowiskach bazuj

ą

cyh na systemie operacyjnym

UNIX, ła

ń

cuchy ACAD i acad odnosz

ą

si

ę

do dwóch ró

ż

nych zmiennych

ś

rodowiskowych, gdy

ż

system UNIX rozró

ż

nia du

ż

e i małe litery.

background image

Epebufl!C

816

)hfu

)hfu

)hfu

)hfugjmfe!

gjmfe!

gjmfe!

gjmfe!ujumf!efgbvmu!fyu!gbmht****

Funkcja getfiled wy

świetla okno dialogowe, zawierające listę dostępnych plików o po-

danym rozszerzeniu nazwy. Funkcj

ę tę można wykorzystywać do przeglądania różnych

dysków i katalogów, wybierania istniej

ącego pliku lub podania nazwy nowego pliku.

Funkcja

żąda od użytkownika podania nazwy pliku, wyświetlając standardowe okno

plików AutoCADa. Argument title okre

śla nagłówek całego okna dialogowego,

argument default definiuje standardow

ą (proponowaną) nazwę pliku (może to być

ła

ńcuch pusty""), a argument ext jest standardowym (proponowanym) rozszerzeniem

nazwy pliku (podanie tu ła

ńcucha pustego "" jest równoważne proponowanemu roz-

szerzeniu *). Pokazana ilustracja przedstawia wpływ tych argumentów na wygl

ąd okna

dialogowego. Po otrzymaniu od u

żytkownika nazwy pliku, funkcja getfiled zwraca

ła

ńcuch zawierający nazwę pliku. W przeciwnym wypadku funkcja zwraca nil.

Przykład

Widoczne poni

żej okno dialogowe ukazuje się po następującym wywołaniu funkcji getfiled:

(getfiled "Wybierz plik

LSP" "c:/acad12/support/" "lsp" 8)

Argument flags jest warto

ścią typu integer (pole zakodowane bitowo), sterującą

zachowaniem si

ę okna dialogowego. Aby jednocześnie ustalić większą liczbę warunków,

nale

ży po prostu zsumować wartości (w dowolnej kolejności), tworząc wartość argu-

mentu flags z zakresu od 0 do 15. Warto

ści i znaczenie argumentu flags są następujące:

Tabela B.5. Parametr flags funkcji getfiled

Warto

ść

Znaczenie

1

Oznacza

żądanie utworzenia nowego pliku

2

Blokuje przycisk Wpisz

background image

817

BvupMJTQ!—!qsbluzd{oz!lvst

Tabela B.5. Parametr flags funkcji getfiled (c.d.)

Warto

ść

Znaczenie

4

Pozwala u

żytkownikowi wprowadzić dowolne rozszerzenie

nazwy pliku

8

Wykonuje szukanie pliku o podanej nazwie w

ścieżce

poszukiwania bibliotek AutoCADa

Poszczególne znaczenia warto

ści argumentu flags są poniżej opisane bardziej szczegółowo.

Warto

ść=1 (bit 0) — Bit 0 powinien być ustawiony wówczas, gdy program ma

domaga

ć się od użytkownika podania nazwy nowego pliku do

utworzenia. Je

śli program ma pytać o nazwę istniejącego pliku do

otwarcia, bit ten nie powinien by

ć ustawiony. W tym drugim

wypadku,

wprowadzenie

przez

u

żytkownika nazwy pliku

nieistniej

ącego powoduje wyświetlenie komunikatu błędu w

dolnej cz

ęści okna dialogowego.

Je

śli bit 0 jest ustawiony i użytkownik wybierze plik już istniejący,

AutoCAD wy

świetli okienko ostrzegawcze i zaoferuje możliwość

przerwania operacji lub jej kontynuowania z podanymi danymi.
Na rysunku pokazane jest okno alarmowe.

Warto

ść=2 (bit 1) — Blokuje możliwość użycia przycisku Napisz (Type it). Bit 1 jest

ustawiany automatycznie, gdy funkcja getfiled jest wywoływana
podczas aktywno

ści innego okna dialogowego (w przeciwnym

wypadku wymuszone zostałoby znikni

ęcie również drugiego okna

dialogowego).

background image

Epebufl!C

818

Je

śli bit ten nie jest ustawiony, korzystanie z przycisku Napisz jest

mo

żliwe. Gdy użytkownik wskaże ten przycisk, okno dialogowe

znika, a funkcja getfiled zwraca warto

ść 1.

Warto

ść=4 (bit 2) — Pozwala użytkownikowi ustalić dowolne rozszerzenie nazwy

pliku lub nawet brak rozszerzenia.

Gdy bit 2 nie jest ustawiony, funkcja getfiled akceptuje wył

ącznie

rozszerzenie okre

ślone przez argument ext i dodaje je do nazwy

pliku, je

śli użytkownik nie poda go w polu edycyjnym Plik:.

Warto

ść=8 (bit 3) — Jeśli jednocześnie bit 3 jest ustawiony, a bit 0 nie jest ustawiony,

to funkcja getfiled poszukuje pliku o podanej nazwie w

ścieżce

poszukiwania bibliotek AutoCADa. Je

śli plik i jego katalog

zostan

ą znalezione w ścieżce poszukiwania bibliotek AutoCADa,

ścieżka do pliku zostaje odcięta i getfiled zwraca tylko samą
nazw

ę pliku. (Ścieżka nie zostanie odcięta w wypadku, gdy znale-

ziony zostanie plik o tej samej nazwie, ale znajduj

ący się w innym

katalogu dyskowym.)

Gdy bit ten nie jest ustawiony, getfiled zwraca pełn

ą nazwę pliku

wraz ze

ścieżką dostępu.

Bit 3 nale

ży ustawiać wtedy, gdy okno dialogowe ma służyć do

otwarcia istniej

ącego pliku, którego nazwa ma być zapamiętywana

wraz z rysunkiem (lub inn

ą bazą danych), i który ma być szukany

źniej przez kolejne wywołanie funkcji getfiled.

)hfujou!

)hfujou!

)hfujou!

)hfujou!\qspnqu^****

Funkcja ta powoduje przerw

ę, która umożliwia użytkownikowi wprowadzenie wartości

typu integer, a nast

ępnie zwraca tę liczbę. Wartościami takimi są liczby całkowite

zawieraj

ące się w przedziale od –32768 do +32767. Argument prompt jest opcjonalnym

ci

ągiem alfanumerycznym, który ma być wyświetlany jako zgłoszenie gotowości.

Przykładowo:

(setq num (getint))
(setq num (getint "Liczba typu integer: "))

Funkcja getint nie akceptuje danych wprowadzanych z u

ż

yciem innych

wyra

ż

e

ń

j

ę

zyka AutoLISP.

Informacje uzupełniaj

ące: Patrz opis funkcji initget.

background image

819

BvupMJTQ!—!qsbluzd{oz!lvst

)hfu

)hfu

)hfu

)hfulxpse!

lxpse!

lxpse!

lxpse!\qspnqu^****

Funkcja getkword wymaga, aby u

żytkownik wprowadził słowo kluczowe. Lista

aktualnie branych pod uwag

ę słów kluczowych jest ustalana przed wywołaniem

getkword, poprzez wywołanie funkcji initget. Opcjonalny argument prompt jest
ła

ńcuchem alfanumerycznym, wyświetlanym jako zgłoszenie programu.

Funkcja getkword zwraca słowo kluczowe, odpowiadaj

ące wprowadzonemu przez

u

żytkownika łańcuchowi alfanumerycznemu. AutoCAD umożliwia ponawianie próby,

je

żeli wprowadzono błędną odpowiedź. Odpowiedź pusta, jeżeli jest dozwolona, zwraca

nil. Funkcja zwraca nil równie

ż w wypadku, gdy przed jej wywołaniem nie wywołano

funkcji initget, ustalaj

ącej jedno lub więcej słów kluczowych.

Przykład

Poni

ższy przykład ukazuje zainicjowanie listy słów kluczowych (Tak i Nie) i zabloko-

wanie mo

żliwości podania odpowiedzi pustej (argument bits równy 1) przez wywołanie

funkcji initget, stwarzaj

ącej warunki do wywołania funkcji getkword:

(initget 1 "Tak Nie")
(setq x (getkword "Czy jeste

ś

pewny? (Tak lub Nie) "))

Powy

ższy fragment kodu programu w AutoLISPie powoduje wyświetlenie zgłoszenia

z pytaniem do u

żytkownika i nadanie symbolowi x wartości ”Tak” lub ”Nie”, w

zale

żności od wprowadzonej odpowiedzi. Jeżeli odpowiedź nie pokrywa się z żadnym

ze słów kluczowych, lub je

żeli użytkownik wprowadzi odpowiedź pustą, to AutoCAD

zaproponuje ponowienie próby wprowadzenia odpowiedzi, wy

świetlając wartość

podanego argumentu prompt. Je

śli argument prompt jest pominięty, AutoCAD

wy

świetla zgłoszenie:

Spróbuj jeszcze raz: (Try again: )

Funkcja getkword nie akceptuje danych wprowadzanych z u

życiem innych wyrażeń

j

ęzyka AutoLISP.

Informacje uzupełniaj

ące: Patrz opis funkcji initget.

)h

)h

)h

)hfupsjfou!

fupsjfou!

fupsjfou!

fupsjfou!\qu^!\qspnqu^****

Funkcja getorient jest podobna w działaniu do funkcji getangle; ró

żni się jednak od

niej tym,

że zwracana wartość kąta jest niezależna od wartości zmiennych systemowych

ANGBASE i ANGDIR. Funkcja getorient zawsze zwraca k

ąty mierzone w radianach.

Kierunkiem zerowym jest zawsze kierunek w prawo (wschód), a warto

ść kąta wzrasta

przeciwnie do kierunku ruchu wskazówek zegara. Podobnie jak getangle, funkcja
getorient wyra

ża zwracane kąty w radianach, w odniesieniu do aktualnej płaszczyzny

konstrukcyjnej.

Argumenty pt i prompt maj

ą znaczenie takie samo, jak dla funkcji getangle.

background image

Epebufl!C

81:

Istotne jest zrozumienie ró

żnicy pomiędzy kątem wprowadzonym, a kątem zwróconym

przez getorient. K

ąty wprowadzane do getorient są wyrażane wartościami mierzonymi

zgodnie z aktualnymi warto

ściami zmiennych systemowych ANGDIR i ANGBASE.

Jednak po wprowadzeniu, warto

ść kąta jest mierzona w kierunku przeciwnym do ruchu

wskazówek zegara, poczynaj

ąc od kierunku zerowego wskazującego w prawo (nieza-

le

żnie od wartości zmiennych ANGDIR i ANGBASE).

Z tego powodu, je

żeli zdefiniowano inny kierunek zerowy lub innych kierunek wzrostu

k

ątów (za pomocą polecenia JEDN lub przez zmianę wartości zmiennych systemowych

ANGBASE i ANGDIR), to konieczne staje si

ę wykonanie odpowiedniej konwersji war-

to

ści kątowych.

Funkcja getangle powinna by

ć wykorzystywana do określania wielkości obrotu (wzglę-

dna warto

ść kąta), a getorient do ustalania orientacji (bezwzględna wartość kąta).

Funkcja getorient nie akceptuje danych wprowadzanych z u

życiem innych wyrażeń

j

ęzyka AutoLISP.

Informacje uzupełniaj

ące Patrz opis funkcji getangle i initget.

)hfuqpjou!

)hfuqpjou!

)hfuqpjou!

)hfuqpjou!\qu^!\qspnqu^****

Funkcja ta powoduje przerw

ę przeznaczoną na umożliwienie użytkownikowi wprowa-

dzenia punktu. Argument pt jest opcjonalnym punktem bazowym 2W lub 3W, którego
współrz

ędne są wyrażone w aktualnym LUW. Argument prompt jest opcjonalnym

ła

ńcuchem alfanumerycznym, który ma być wyświetlony na ekranie jako zgłoszenie

gotowo

ści. Wprowadzany punkt można określić przez podanie jego współrzędnych

w aktualnie obowi

ązującym formacie zapisu jednostek lub można go wskazać na ekra-

nie. Je

żeli podany zostanie punkt bazowy w postaci argumentu, to AutoCAD wyświetla

na ekranie ruchom

ą linię pomocniczą, ciągnącą się od tego punktu do punktu odpowia-

daj

ącego aktualnej pozycji krzyża nitkowego. Przykładowo:

(setq p (getpoint))
(setq p (getpoint "Gdzie? "))
(setq p (getpoint '(1.5 2.0) "Drugi punkt: "))

Zwracana warto

ść odpowiada punktowi 3W, którego współrzędne mają wartości

okre

ślone w aktualnym LUW.

Funkcja getpoint nie akceptuje danych wprowadzanych z u

ż

yciem innych

wyra

ż

e

ń

j

ę

zyka AutoLISP.

Informacje uzupełniaj

ące: Patrz opis funkcji getcorner i initget.

background image

821

BvupMJTQ!—!qsbluzd{oz!lvst

)hfusf

)hfusf

)hfusf

)hfusfbm!

bm!

bm!

bm!\qspnqu^****

Funkcja ta powoduje przerw

ę, która umożliwia użytkownikowi wprowadzenie liczby

typu real, a nast

ępnie zwraca tę liczbę. Argument prompt jest opcjonalnym łańcuchem

alfanumerycznym, który ma by

ć wyświetlony na ekranie jako zgłoszenie gotowości

tekstem. Przykładowo:

(setq val (getreal))
(setq val (getreal "Skala rysunku: "))

Funkcja getreal nie akceptuje danych wprowadzanych z u

ż

yciem innych wyra-

ż

e

ń

j

ę

zyka AutoLISP.

Informacje uzupełniaj

ące: Patrz opis funkcji initget.

)hfutusjoh!

)hfutusjoh!

)hfutusjoh!

)hfutusjoh!\ds^!\qspnqu^****

Funkcja ta powoduje przerw

ę, która umożliwia użytkownikowi wprowadzenie danej

typu string, a nast

ępnie zwraca ten łańcuch znaków alfanumerycznych. W przypadku,

gdy tekst jest dłu

ższy niż 132 znaki, zwracane są tylko 132 pierwsze znaki.

Wyst

ępujący we wprowadzanym tekście pojedynczy lewy ukośnik (\) podlega kon-

wersji na dwa lewe uko

śniki (\\). Zostało to wprowadzone ze względu na to, żeby

zwracana warto

ść mogła zawierać nazwę pliku ze ścieżką dostępu i mogła być wyko-

rzystywana przez inne funkcje.

Je

żeli użyty zostanie różny od nil opcjonalny argument cr, to wprowadzany łańcuch

b

ędzie mógł zawierać spacje; jego wprowadzanie zakończy dopiero wciśnięcie klawisza

Enter. Je

żeli nie, to będzie to następować przez wciśnięcie klawisza Enter lub spacji.

Argument prompt jest opcjonalnym ła

ńcuchem alfanumerycznym, który ma być

wy

świetlony na ekranie jako zgłoszenie gotowości.

Przykład

(setq s (getstring "Jak masz na imi

ę

? "))

po wprowadzeniu Jan zwraca "Jan"
Natomiast po wyra

ż

eniu:

(setq s (getstring T "Imi

ę

i nazwisko tłumacza: "))

po wprowadzeniu
Jan Kowalski zwraca "Jan Kowalski"
Z kolei w przypadku wyra

ż

enia:

(setq s (getstring "Podaj nazw

ę

pliku: "))

po wprowadzeniu
\aplikom\pliki\rysunki zwraca "\\aplikom\\pliki\\rysunki"

Je

ż

eli wprowadzany przez u

ż

ytkownika ła

ń

cuch alfanumeryczny musi by

ć

jednym ze słów kluczowych (np. nazw

ą

opcji), to mo

ż

na wykorzysta

ć

opisan

ą

poprzednio funkcj

ę

getkword.

background image

Epebufl!C

822

Funkcja getstring nie akceptuje danych wprowadzanych z u

życiem innych wyrażeń

j

ęzyka AutoLISP.

Informacje uzupełniaj

ące: Patrz opis funkcji getkword.

)hfu

)hfu

)hfu

)hfuwbs!

wbs!

wbs!

wbs!wbsobnf****

Funkcja ta daje dost

ęp do wartości przypisanych zmiennym systemowym AutoCADa.

Nazwa zmiennej musi by

ć ujęta w podwójne cudzysłowy. Przykładowo, jeżeli ostatnio

ustalony promie

ń zaokrąglenia ma wartość 0.25 jednostki, to wyrażenie:

(getvar "FILLETRAD") zwraca 0.25

Je

żeli w wyrażeniu podana zostanie nazwa zmiennej nieznanej dla programu AutoCAD,

to funkcja getvar zwróci nil. Aktualn

ą listę zmiennych systemowych podano

w dodatku F.

Informacje uzupełniaj

ące: Patrz opis funkcji setvar.

)hsbqit

)hsbqit

)hsbqit

)hsbqitds*

ds*

ds*

ds*

Gdy AutoCAD pracuje w systemie z jednym monitorem, funkcja graphscr przeł

ącza

tryb pracy ekranu z tekstowego na graficzny. Działanie jest identyczne jak działanie
polecenia GEKRAN AutoCADa, lub klawisza steruj

ącego przełączaniem trybu pracy

ekranu (je

śli ekran jest aktualnie w trybie tekstowym).

Funkcja graphscr zawsze zwraca nil.

Informacje uzupełniaj

ące: Patrz opis funkcji textscr i textpage.

)hsdmfbs*

)hsdmfbs*

)hsdmfbs*

)hsdmfbs*

Funkcja ta wymazuje (czy

ści) zawartość aktualnej rzutni. W systemach z jednym

monitorem nast

ąpi najpierw automatyczne przełączenie z ekranu tekstowego na gra-

ficzny. Niezmieniony pozostaje stan pól polece

ń/komunikatów, linia stanu oraz obszary

menu. Pierwotna zawarto

ść ekranu może zostać przywrócona za pomocą funkcji

redraw. Funkcja grclear zawsze zwraca nil.

Informacje uzupełniaj

ące: Patrz opis funkcji textscr i textpage.

)hsesb

)hsesb

)hsesb

)hsesbx!

x!

x!

x!gspn!up!dpmps!\ijhimjhiu^****

Funkcja grdraw rysuje wektor mi

ędzy dwoma danymi punktami w aktualnej rzutni.

Argumenty from i to s

ą punktami 2W lub 3W (listami składającymi się z dwóch lub

trzech liczb typu real), które definiuj

ą końce wektora we współrzędnych aktualnie

background image

823

BvupMJTQ!—!qsbluzd{oz!lvst

obowi

ązującego LUW. AutoCAD obcina wektor tak, aby zmieścił się na ekranie. Jest

on rysowany w kolorze okre

ślonym przez argument color (typu integer). Wartość –1

oznacza tu tzw. kolor XOR, czyli kolor dopełniaj

ący w stosunku do innych elementów

rysunku, na tle których rysowany jest wektor i powoduj

ący wymazanie wektora po jego

ponownym narysowaniu.

Dodanie opcjonalnego argumentu highlight (warto

ść typu integer) o wartości różnej od

zera powoduje,

że wektor będzie rysowany w taki sposób, jaki jest dla danego

wy

świetlacza standardowo używany do wyróżniania obiektów (zwykle używana jest

linia kreskowa). W przypadku gdy argument highlight zostanie pomini

ęty lub gdy ma

warto

ść równą zeru, używany jest normalny tryb wyświetlania.

Do rysowania wielu wektorów na ekranie graficznym słu

ży funkcja grvecs.

)hssfbe!

)hssfbe!

)hssfbe!

)hssfbe!\usbdl^!\bmmlfzt!\dvsuzqf^^****

Funkcja grread bezpo

średnio odczytuje najbliższą odpowiedź użytkownika, wprowa-

dzon

ą za pomocą dowolnego urządzenia wejściowego AutoCADa. Opcjonalnie może

ona tak

że dynamicznie śledzić zmiany położenia urządzeń wskazujących. Poniżej opi-

sano sposób wykorzystania przez AutoCAD metody dynamicznych przesuni

ęć.

Funkcja ta b

ę

dzie potrzebna tylko w bardzo szczególnych procedurach Auto-

LISPu. Wi

ę

kszo

ść

danych powinna by

ć

wprowadzana do AutoLISPu przy wyko-

rzystaniu ró

ż

nych funkcji typu getxxx, takich jak getstring, getreal i podobnych.

U

życie różnego od nil argumentu track, uruchamia zwracanie współrzędnych z poru-

szaj

ącego się urządzenia wskazującego, bez konieczności wciskania przycisku wybie-

raj

ącego. Argument allkeys jest opcjonalną wartością całkowitą (kodowaną bitowo).

Je

śli argument allkeys jest podany, grread spełnia różne funkcje, w zależności od war-

to

ści tego argumentu. Argument curtype może być wykorzystany do sterowania

rodzajem wy

świetlanego kursora.

track

Śledzi położenie kursora, jeśli argument ten jest różny od nil.

Allkeys

Je

śli argument allkeys jest podany, to musi być liczbą typu integer,

zdefiniowan

ą następująco:

Warto

ść = 1 (bit 0). Zwraca współrzędne w trybie przesunięć dynamicz-

nych. Je

śli bit 0 jest ustawiony i użytkownik przesuwa urządzenie

wskazuj

ące zamiast wybrania przycisku lub naciśnięcia klawisza, grread

zwraca list

ę, której pierwszym składnikiem jest liczba 5 jako określenie

typu, a nast

ępnym składnikiem są współrzędne (X,Y) bieżacego poło-

żenia urządzenia wskazującego (myszki lub digitizera). Na tym polega
wykorzystanie przez AutoCAD trybu dynamicznych przesuni

ęć.

Warto

ść = 2 (bit 1). Zwraca wszystkie wartości klawiszy, włącznie z kla-

wiszami funkcyjnymi i klawiszami kursora i nie przesuwa kursora, gdy
u

żytkownik naciska klawisz kursora.

background image

Epebufl!C

824

Warto

ść = 4 (bit 2). Wykorzystuje wartość argumentu curtype do

sterowania wy

świetlanym kursorem. Opcje są pokazane poniżej.

Warto

ść = 8 (bit 3). Nie wyświetla komunikatu błąd: przerwanie z konsoli

po przyci

śnięciu przez użytkownika klawiszy Ctrl+C.

Warto

ść = 16 (bit 4). Blokuje menu rozwijane.

Curtype

Je

śli podany jest argument curtype, to określa on rodzaj wyświetlanego

na ekranie kursora. Warto

ść argumentu musi być liczbą całkowitą,

o jednej
z nast

ępujących wartości:

0 Wy

świetla zwykły krzyż nitkowy

1 Nie wy

świetla żadnego kursora (również krzyża nitkowego

2 Wy

świetla kursor „z celownikiem”, wykorzystywany podczas wybiera-

nia elementów rysunkowych.

Argument

curtype wpływa na kursor jedynie podczas bie

żą

cego wywołania

funkcji grread.

Nale

ż

y mie

ć

na uwadze,

ż

e w przyszłych wersjach AutoCADa mog

ą

by

ć

zdefiniowane dodatkowe bity steruj

ą

ce.

Funkcja grread zwraca list

ę, której pierwszym elementem jest kod określający typ

danych wej

ściowych. Drugim elementem listy może być albo liczba typu integer, albo

lista współrz

ędnych punktu, zależnie do typu wprowadzanych danych. Zwracane kody

mog

ą przybierać przedstawione poniżej wartości:

Tabela B.6. Warto

ści zwracane przez grread

Pierwszy element

Drugi element

Warto

ść

Typ danych
wej

ściowych

Warto

ść

Znaczenie

2

Dane z klawiatury

Zmienna

Kod znaku

3

Wybrany punkt

Punkt 3W

Współrz

ędne punktu

4

Pozycja menu ekranu
/ menu rozwijanego
(z urz

ądzenia

wskazuj

ącego)

0 do 999

1001 do 1999

2001 do 2999

3001 do 3999

… i tak dalej, a

ż do

16001 do 16999

Numer pola menu ekranowego

Numer pola menu POP1

Numer pola menu POP2

Numer pola menu POP3

Numer pola menu POP16

background image

825

BvupMJTQ!—!qsbluzd{oz!lvst

Tabela B.6. Warto

ści zwracane przez grread (c.d.)

Pierwszy element

Drugi element

Warto

ść

Typ danych
wej

ściowych

Warto

ść

Znaczenie

5

Urz

ądzenie

wskazuj

ące

(informacja ta jest
zwracana tylko
wtedy, gdy
uaktywnione jest

śledzenie
dynamiczne)

Punkt 3W

Współrz

ędne w trybie

dynamicznych przesuni

ęć

6

Pozycja menu
BUTTONS

0 do 999

1000 do 1999

2000 do 2999

3000 do 3999

Numer pola menu BUTTONS1

Numer pola menu BUTTONS2

Numer pola menu BUTTONS3

Numer pola menu BUTTONS4

7

Pole menu
TABLET1

0 do 32767

Numer pola digitizera

8

Pole menu
TABLET2

0 do 32767

Numer pola digitizera

9

Pole menu
TABLET3

0 do 32767

Numer pola digitizera

10

Pole menu
TABLET4

0 do 32767

Numer pola digitizera

11

Pole menu AUX

0 do 999

1000 do 1999

2000 do 2999

3000 do 3999

Numer pola menu AUX1

Numer pola menu AUX2

Numer pola menu AUX3

Numer pola menu AUX4

12

Przycisk urz

ądzenia

wskazuj

ącego

(wyst

ępuje po

zwróconych typach 6
lub 11)

Punkt 3W

Współrz

ędne punktu

Wprowadzenie Ctrl+C w trakcie działania funkcji grread powoduje wymuszone z kla-
wiatury przerwanie realizacji programu AutoLISPu, z sygnalizacj

ą przerwania z kla-

wiatury (chyba

że argument allkeys zablokował taką możliwość).

Wszystkie pozostałe dane wej

ściowe są przejmowane bezpośrednio przez grread, co

pozwala na pełne sterowanie urz

ądzeniami wejściowymi przez program użytkowy.

Funkcja grread zwraca kod 11, gdy u

żytkownik w momencie wskazywania pozycji

w menu ekranowym lub rozwijanym, naci

śnie przycisk wybierający urządzenia wska-

background image

Epebufl!C

826

zuj

ącego. Jednak przy kolejnym wywołaniu, funkcja grread nie zwróci kodu 12; kod

12 wyst

ępuje tylko po kodach 6 lub 11, gdy przycisk wybierający zostanie naciśnięty

w momencie wskazywania punktu w graficznym obszarze ekranu.

Przed

przyst

ąpieniem do następnej operacji związanej z użyciem przycisku

wybieraj

ącego lub zewnętrznego modułu funkcyjnego, istotne jest opróżnienie bufora

z danych kodu 12. Osi

ągnąć to można przez zagnieżdżone wywołanie funkcji grread,

podobne do poni

ższego:

(setq code_12 (grread (setq code (grread))))

Powy

ższa sekwencja pobiera wartość listy związanej z kodem 12 ze strumienia

wej

ściowego z urządzenia.

Z tego wzgl

ę

du,

ż

e wprowadzanie danych odbywa si

ę

ż

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

ą

ż

nych platform mo

ż

na znale

źć

w AutoCAD Podr

ę

cznik Instalacyjny.

Standardowe urz

ą

dzenie wskazuj

ą

ce, dla platform wykorzystuj

ą

cych mysz

systemow

ą

, zwraca kod 11, a nie kod 6.

Na platformie Macintosh, menu rozwijane zwraca kod 11, a nie 4. Równie

ż

na tych samych komputerach, podwójne przyci

ś

ni

ę

cie przycisku myszy

zwraca kod 11 (a nie kod 6), po którym (o ile wybór nast

ą

pił w bie

żą

cej rzut-

ni) nast

ę

puje para współrz

ę

dnych kodu 5. Odpowiednio, podwójne przyci

ś

-

ni

ę

cie przycisku myszy poza aktualn

ą

rzutni

ą

, zwraca par

ę

współrz

ę

dnych

kodu 3, po których nast

ę

puje kod 11.

!)hsuf

!)hsuf

!)hsuf

!)hsufyu!

yu!

yu!

yu!\cpy!ufyu!\ijhimjhiu^^****

Funkcja grtext pozwala na pisanie w obszarach tekstowych ekranu graficznego Auto-
CADa. Je

żeli argumentem box jest liczba z zakresu od zera do pomniejszonego o 1 naj-

wi

ększego numeru pola menu ekranu, to argument text (łańcuch alfanumeryczny typu

string) zostanie wy

świetlony w określonym polu menu. Jeżeli text nie mieści się w nim,

to zostanie odpowiednio obci

ęty. Jeżeli natomiast będzie za krótki, to zostanie

dopełniony spacjami. Podanie niewła

ściwego numeru pola powoduje zwrócenie nil.

U

życie opcjonalnego dodatniego argumentu całkowitoliczbowego highlight (wartość

typu integer) powoduje,

że grtext wyróżni tekst we wskazanym polu. Przy pisaniu

w obszarach menu, tekst musi zosta

ć najpierw wpisany bez argumentu highlight i do-

piero potem mo

że zostać wyróżniony. Wyróżnienie jednego pola powoduje

automatycznie zaprzestanie wyró

żniania jakiegokolwiek pola wyróżnianego poprze-

dnio. Zerowa warto

ść argumentu highlight likwiduje wyróżnienie wskazanej pozycji

menu. Ujemna warto

ść argumentu highlight jest ignorowana.

background image

827

BvupMJTQ!—!qsbluzd{oz!lvst

Nale

ży zwrócić uwagę na to, że funkcja ta powoduje tylko wyświetlenie tekstu w danym

polu menu nie powoduje to zmiany umieszczonej w tym miejscu pozycji tego menu.

Wywołanie grtext z numerem obszaru –1 spowoduje wpisanie tekstu w ekranowej linii
stanu. Liczba znaków, jak

ą można w niej umieścić, jest różna dla różnych wyświetlaczy

(wi

ększość pozwala na co najmniej 40 znaków); grtext obcina tekst odpowiednio do

ilo

ści dostępnego miejsca.

Gdy argument box ma warto

ść –2, to grtext wpisuje tekst w linii stanu w obszarze

współrz

ędnych. Jeżeli włączony jest tryb śledzenia bieżących współrzędnych, to wpisa-

ny w to pole tekst zostanie zast

ąpiony współrzędnymi natychmiast po tym, jak kursor

graficzny przeka

że nowe ich wartości. Argument highlight jest ignorowany zarówno

w wypadku obszaru o numerze –1, jak i –2.

Funkcja grtext mo

że być także wywoływana bez argumentów. Powoduje wtedy przy-

wrócenie pierwotnej zawarto

ści wszystkim obszarom tekstowym na ekranie.

Do okre

ślenia liczby pól menu ekranowego dostępnych w poszczególnych instalacjach

AutoCADa mo

żna wykorzystać informacje przechowywane pod zmienną systemową

SCREENBOXES.

)hswfdt!

)hswfdt!

)hswfdt!

)hswfdt!wmjtu!\usbot^****

Jest to funkcja przeznaczona do rysowania wielu wektorów w graficznym obszarze
ekranu. Argument vlist jest list

ą, składającą się z ciągu opcjonalnych kodów całkowi-

tych koloru i list dwóch punktów. Format argumentu vlist jest nast

ępujący:

([kolor1](od_1)(do_1) [kolor2](od_2)(do_2)…)

Opcjonalna warto

ść kodu koloru obowiązuje dla wszystkich występujących po niej

wektorów, a

ż do wystąpienia w liście vlist nowej wartości kodu koloru. Kolor jest określany

jako liczba całkowita. Kolory w AutoCADzie zawieraj

ą się w przedziale od 0 do 255. Jeśli

warto

ść kodu koloru jest większa od 255, występujące po niej wektory są rysowane kolorem

XOR, czyli kolorem dopełniaj

ącym w stosunku do innych elementów rysunku, na tle

których rysowany jest wektor i powoduj

ącym wymazanie wektora po jego ponownym

narysowaniu. Je

śli wartość koloru jest mniejsza od zera, wektor jest wyróżniany.

Wyró

żnienie zależy od rodzaju wyświetlacza. Większość urządzeń wyświetlających

jako wyró

żnienie stosuje linię przerywaną, ale są i takie, na których do wyróżnienia

stosowany jest inny kolor.

Pary list współrz

ędnych definiują początki i końce wektorów, wyrażone w aktualnym

LUW. Mog

ą to być punkty dwuwymiarowe lub trójwymiarowe.

Wa

żne: Punkty te muszą być podawane parami, czyli jako dwie występujące po sobie

listy. Je

śli warunek ten nie będzie spełniony, działanie funkcji grvecs zostanie przerwane.

background image

Epebufl!C

828

W razie potrzeby AutoCAD skraca wektory tak, by mie

ściły się na ekranie. Jeśli wywo-

łanie funkcji grvecs ko

ńczy się sukcesem, funkcja zwraca nil.

Przykłady

Poni

ższy przykład powoduje narysowanie na ekranie graficznym pięciu pionowych

linii, ka

żdej w innym kolorze:

(grvecs

'(

1 (1 2)(1 5);Rysuje czerwon

ą

lini

ę

od (1,2) do (1,5)

2 (2 2)(2 5);Rysuje

ż

ółt

ą

lini

ę

od (2,2) do (2,5)

3 (3 2)(3 5);Rysuje zielon

ą

lini

ę

od (3,2) do (3,5)

4 (4 2)(4 5);Rysuje bł

ę

kitn

ą

lini

ę

od (4,2) do (4,5)

5 (5 2)(5 5);Rysuje niebiesk

ą

lini

ę

od (5,2) do (5,5)

)

);grvecs

Opcjonalny argument trans jest macierz

ą transformacji, pozwalającą zmieniać

poło

żenie i proporcje wektorów zdefiniowanych w liście wektorów. Macierz ta jest listą

czterech list, z których ka

żda zawiera cztery liczby rzeczywiste. Na przykład, pokazana

poni

żej macierz powoduje jednakowe, równe 1, przeskalowanie we wszystkich

kierunkach i przesuni

ęcie o 5.9, 5.0,0,0:

'(

(1.0 0.0 0.0 5.0)
(0.0 1.0 0.0 5.0)
(0.0 0.0 1.0 0.0)
(0.0 0.0 0.0 1.0)

)

Gdyby macierz ta została zastosowana w odniesieniu do pokazanych wcze

śniej pięciu

wektorów, zostałyby one przesuni

ęte o 5.9, 5.0, 0.0.

Informacje uzupełniaj

ące: Patrz opis funkcji nentselp, zawierający więcej informacji na

temat macierzy transformacji.

))))iboefou!

iboefou!

iboefou!

iboefou!iboemf****

Nazwy elementów mog

ą być inne w każdej kolejnej sesji edycyjnej. Zmianom nie

ulegaj

ą natomiast, dopóki istnieją, identyfikatory elementów. Przyjmijmy, że łańcuch

alfanumeryczny b

ędący identyfikatorem elementu, jest argumentem handle. Funkcja

handent zwraca wtedy obowi

ązującą w aktualnej sesji edycyjnej nazwę elementu

zwi

ązanego z tym identyfikatorem. Gdy nazwa elementu jest już znana, może być

wykorzystana do wykonywania w odniesieniu do elementu ró

żnych operacji, urucha-

mianych z u

życiem dowolnej z przeznaczonych do tego funkcji.

Przykład

W konkretnej sesji edycyjnej, wyra

żenie:

(handent "5A2")

mo

że zwrócić

<Nazwa elementu: 60004722>

background image

829

BvupMJTQ!—!qsbluzd{oz!lvst

Takie samo wywołanie funkcji w tym samym rysunku, lecz w trakcie innej sesji
edycyjnej, mo

że zwrócić inną nazwę elementu. W każdym przypadku jednak jest to

odwołanie do tego samego elementu; jego identyfikator pozostaje taki sam, cho

ć nazwy

mog

ą być inne w każdej sesji edycji.

Funkcja zwraca nil wtedy, je

żeli w rysunku nie są używane identyfikatory lub gdy

argument handle nie jest identyfikatorem

żadnego z elementów aktualnego rysunku.

Funkcja handent zwraca równie

ż elementy, które zostały usunięte podczas aktualnej

sesji edycyjnej; mo

żna je więc w razie potrzeby odtworzyć, wykorzystując w tym celu

funkcj

ę entdel (patrz opis funkcji entdel).

)jg!

)jg!

)jg!

)jg!uftufyqs!uifofyqs!\fmtffyqs^****

Jest to funkcja warunkowej ewaluacji wyra

żeń. Jeśli wyrażenie testexpr nie zwraca nil,

to wyliczeniu podlega wyra

żenie thenexpr, w przeciwnym razie wyznaczana jest

warto

ść wyrażenia elseexpr. Ostatnie wyrażenie jest argumentem występującym opcjo-

nalnie. Funkcja if zwraca warto

ść wyrażenia poddanego ewaluacji. Jeżeli argument

elseexpr został pomini

ęty, a testexpr zwraca nil, to wynikiem funkcji jest również nil.

Przykład

(if (= 1 3) "TAK!!"

"nie")

zwraca

"nie"

(if (= 2 (+ 1 1)) "TAK!!")

zwraca

"TAK!!"

(if (= 2 (+ 3 4)) "TAK!!")

zwraca

nil

Informacje uzupełeniaj

ące: Patrz opis funkcji progn.

)joju

)joju

)joju

)jojuhfu!

hfu!

hfu!

hfu!\cjut^!\tusjoh^****

Funkcja initget ustala ró

żne opcje dla następnych wywołań funkcji entsel, nentsel lub

getxxx (za wyj

ątkiem getstring, getenv i getvar). Funkcja initget zawsze zwraca nil.

Opcjonalny argument bits jest zakodowan

ą bitowo liczbą typu integer, której wartości

mog

ą być następujące:

Tabela B.7. Opcje wprowadzania danych, ustalane przez initget

Warto

ść bitu

Znaczenie

1

Niedopuszczalne wprowadzenie odpowiedzi pustej

2

Niedopuszczalne warto

ści zerowe

4

Niedopuszczalne warto

ści ujemne

8

Granice nie s

ą sprawdzane, nawet gdy zmienna LIMCHECK ma wartość 1

16

(Ten bit nie jest aktualnie wykorzystywany)

32

Ruchoma linia pomocnicza i ramka s

ą rysowane linią kreskową

background image

Epebufl!C

82:

Tabela B.7. Opcje wprowadzania danych, ustalane przez initget (c.d.)

Warto

ść bitu

Znaczenie

64

Ignorowane s

ą współrzędne Z punktów 3W (dotyczy tylko funkcji getdist)

128

Zwracana jest dowolna odpowied

ź z klawiatury

Przyszłe wersje AutoCADa mog

ą

wykorzystywa

ć

dodatkowe bity steruj

ą

ce

funkcj

ą

initget, tak wi

ę

c nale

ż

y unika

ć

ustawiania bitów nie pokazanych w ta-

beli i nie uwzgl

ę

dnionych w opisie.

Specjalne warto

ści sterujące są honorowane tylko przez te funkcje z grupy getxxx, dla

których maj

ą one sens. Pokazuje to następna tabela:

Tabela B.8. Funkcje pobieraj

ące dane od użytkownika i bity sterujące

Funkcja

Honoro-
wane

Uwzgl

ędniane bity sterujące

słowa
kluczowe

Bez odpo-
wiedzi
pustej (1)

Bez zera

(2)

Bez liczb
ujemnych
(4)

Bez granic

(8)

U

żyj

kreski

(32)

Odległo

ść2

W
(64)

Odpowied

ź

dowolna

getint

*

*

*

*

*

getreal

*

*

*

*

*

getdist

*

*

*

*

*

*

*

getangle

*

*

*

*

*

getorient

*

*

*

*

*

getpoint

*

*

*

*

*

getcorner

*

*

*

*

*

getkword

*

*

*

getstring

entsel

*

nentsel

*

nentselp

*

Opiszemy teraz bardziej szczegółowo znaczenie ka

żdego bitu:

Warto

ść = 1 (bit 0)

Zapobiega podaniu przez u

żytkownika odpowiedzi, składającej

si

ę tylko z wciśnięcia klawisza Enter.

Warto

ść = 2 (bit 1)

Zapobiega podaniu przez u

żytkownika odpowiedzi wartości zero.

Warto

ść = 4 (bit 2)

Zapobiega podaniu przez u

żytkownika odpowiedzi wartości

ujemnej.

Warto

ść = 8 (bit 3)

Pozwala na wprowadzenie przez u

żytkownika punktu poło-

żonego poza bieżącymi granicami rysunku. Warunek ten
obowi

ązuje dla najbliższego wywołania funkcji pobierającej

background image

831

BvupMJTQ!—!qsbluzd{oz!lvst

odpowied

ź od użytkownika nawet wtedy, gdy zmienna syste-

mowa AutoCADa LIMCHECK jest ustawiona na sprawdzanie
poło

żenia punktów w granicach.

Warto

ść = 16 (bit 4)

Aktualnie niewykorzystana.

Warto

ść = 32 (bit 5)

W przypadku funkcji pozwalaj

ących użytkownikowi na

okre

ślenie punktu przez wskazanie jego położenia na ekranie

graficznym sprawia,

że rozciągnięta linia pomocnicza lub

ramka, wy

świetlana przez edytor graficzny, ukazuje się ryso-

wana lini

ą kreskową, a nie ciągłą (niektóre typy wyświetlaczy

zamiast linii kreskowej wykorzystuj

ą wyróżniający kolor).

AutoCAD ignoruje stan tego bitu, je

śli zmienna systemowa

POPUPS ma warto

ść zero.

Warto

ść = 64 (bit 6)

Zapobiega podaniu przez u

żytkownika współrzędnej Z w od-

powiedzi na zgłoszenie funkcji getdist. Pozwala to na zagwa-
rantowanie w programie u

żytkowym, że funkcja ta zwróci

odległo

ść 2W.

Warto

ść = 128 (bit 7)

Pozwala na wprowadzanie dowolnych odpowiedzi, tak jakby
były słowami kluczowymi, honoruj

ąc najpierw wszystkie inne

bity kontrolne i podane słowa kluczowe. Bit ten ma wy

ższy

priorytet, ni

ż bit 0: jeśli bit 7 jest ustawiony i użytkownik

wprowadzi odpowied

ź pustą, zwracany jest łańcuch pusty.

Gdy initget ustawia okre

ślony bit sterujący, a następnie program użytkowy wywołuje

funkcj

ę, dla której bit ten nie ma znaczenia, to jest on po prostu ignorowany. Bity mogą

by

ć sumowane w dowolnych kombinacjach, tworząc wartości z przedziału od zera do

255. Je

śli argument bits nie jest podany, initget przyjmuje dla niego wartość zero (brak

warunków). Gdy podana przez u

żytkownika odpowiedź nie jest zgodna z jednym lub

wi

ększą ilością warunków (na przykład wartość zero, gdy nie jest ona dopuszczalna),

AutoCAD wy

świetla stosowny komunikat i ponownie domaga się od użytkownika

podania odpowiedzi.

Efgjojp

Efgjojp

Efgjojp

Efgjojpxbojf!t()x!lm

xbojf!t()x!lm

xbojf!t()x!lm

xbojf!t()x!lmvd{pxzdi

vd{pxzdi

vd{pxzdi

vd{pxzdi

Opcjonalny argument string definiuje list

ę słów kluczowych, które mają być sprawdzane

przy nast

ępnym użyciu funkcji entsel, nentsel, nentselp lub getxxx w przypadku, gdy typ

wprowadzonej przez u

żytkownika danej jest inny od spodziewanego (np. nie jest to punkt

dla funkcji getpoint). Je

żeli odpowiedź użytkownika odpowiada jednemu ze znajdu-

j

ących się na tej liście słów kluczowych, to funkcja getxxx zwraca właśnie to słowo

(warto

ść typu string). Słowa kluczowe mogą być testowane przez program użytkowy,

a nast

ępnie może on podejmować różne działania, określone dla każdego ze słów. Jeżeli

wprowadzona odpowied

ź nie jest spodziewanego typu i nie pokrywa się z żadnym ze

słów kluczowych, AutoCAD zaproponuje ponowienie próby wprowadzenia odpowiedzi.

Argument string jest interpretowany zgodnie z nast

ępującymi regułami:

background image

Epebufl!C

832

Ka

żde słowo kluczowe jest odseparowane od następnego przez jeden lub więcej

znaków

odst

ępu (spacji). Na przykład łańcuch "Szerokość Wysokość

ębokość" definiuje trzy słowa kluczowe.

Legalne słowo kluczowe mo

że zawierać litery, cyfry i myślniki (–). Każdy wy-

kaz słów kluczowych mo

że nakazywać AutoCADowi rozpoznawanie skrótów.

Mo

żna to osiągnąć dwoma sposobami:

Ta cz

ęść słowa, która jest skrótem nazwy opcji, jest pisana dużymi literami,

a reszta małami. Skrót zaznaczony du

żymi literami może znajdować się w

dowolnej cz

ęści słowa (na przykład: "RLinii", "koNiec", "aplikoM").

Słowa kluczowego s

ą podane dużymi literami, a po niej, po przecinku, po-

wtórzona jest ta jej cz

ęść która stanowi skrót (na przykład: RLINII,RL).

W tym wypadku skrót słowa kluczowego musi zawiera

ć pierwszą literę

słowa, co oznacza na przykład,

że specyfikacja "KONIEC,O" jest błędna.

(Druga metoda jest przeznaczona do wykorzystania w programach u

żytkowych pisa-

nych z u

życiem języków obcych, w których konwersja małych i dużych liter mogłaby

by

ć trudna lub niemożliwa.)

Oba krótkie przykłady: "RLinii" i "RLINII,RL"s

ą równoważne. Jeśli użytkownik poda

RL (małymi lub du

żymi literami), to wystarczy to do jednoznacznego zidentyfikowania

słowa kluczowego.

U

żytkownik może wprowadzać znaki występujące po wymaganej części słowa kluczowego,

pod warunkiem

że są one zgodne ze specyfikacją. W powyższym przykładzie użytkownik

mógł tak

że wprowadzić RLI lub RLIN, ale L już byłoby niewystarczające. Z kolei RLINIA

lub RLENA nie jest zgodne z pisowni

ą słowa kluczowego.

Je

śli argument string zawiera słowo kluczowe pisane w całości dużymi lub

małymi literami, po którym bez przecinka wyst

ąpiłaby wymagana część słowa,

AutoCAD rozpozna słowo kluczowe tylko wtedy, gdy u

żytkownik wprowadzi je

w cało

ści.

Wprowadzone przez initget bity steruj

ą

ce oraz lista słów kluczowych dotycz

ą

tylko nast

ę

pnego wywołania funkcji entsel, nentsel, nentselp lub getxxx

i zaraz potem s

ą

automatycznie uniewa

ż

niane. Unika si

ę

w ten sposób konie-

czno

ś

ci anulowania tych specjalnych warunków przy kolejnym wywoływaniu

tych funkcji.

)j

)j

)j

)joufst!

oufst!

oufst!

oufst!qu2!qu3!qu4!qu5!\potfh^****

Funkcja inters wykonuje operacj

ę sprawdzenia dwóch odcinków prostoliniowych

i zwraca punkt ich przeci

ęcia. Jeżeli punkt taki nie istnieje, to funkcja zwraca nil.

Argumenty pt1 i pt2 s

ą końcami pierwszego odcinka, a pt3 i pt4 są końcowymi

punktami drugiego.

Wszystkie punkty s

ą określane przez wartości współrzędnych dla aktualnego LUW.

Je

żeli wszystkie cztery argumenty są punktami 3W, wówczas funkcja inters wyznacza

background image

833

BvupMJTQ!—!qsbluzd{oz!lvst

punkt przeci

ęcia również w przestrzeni 3W. W innym przypadku inters rzutuje odcinki

na aktualn

ą płaszczyznę konstrukcyjną i na niej poszukuje punktu przecięcia 2W.

Je

żeli w wyrażeniu został użyty opcjonalny argument onseg i jest on równy nil, to

odcinki zdefiniowane przez cztery wskazane punkty s

ą traktowane jako proste o nie-

sko

ńczonej długości. Funkcja inters zwraca wtedy punkt przecięcia nawet wtedy, gdy

jest on poło

żony na zewnątrz jednego lub obu odcinków. Jeżeli argument onseg został

pomini

ęty lub jest różny od nil, to punkt przecięcia musi leżeć na obydwu odcinkach.

W przeciwnym razie inters zwraca nil. Przykładowo, je

śli określono punkty:

(setq a '(1.0 1.0) b '(9.0 9.0))
(setq c '(4.0 1.0) d '(4.0 2.0))

to:

(inters a b c d)

zwraca

nil

(inters a b c d T)

zwraca

nil

(inters a b c d nil)

zwraca

4.0 4.0)

)jupb!

)jupb!

)jupb!

)jupb!jou****

Funkcja ta zwraca wynik konwersji liczby typu integer na ła

ńcuch cyfr (wartość typu

string). Przykładowo:

(itoa 33)

zwraca

"33"

(itoa -17)

zwraca

"-17"

)mb

)mb

)mb

)mbnceb!

nceb!

nceb!

nceb!bshvnfout!fyqs!

****

Funkcja lambda definiuje nie posiadaj

ącą nazwy funkcję anonimową. Najcześciej jest

to stosowane wtedy, gdy definiowanie nowej funkcji nie jest uzasadnione przyszłymi
potrzebami w innych zastosowaniach. Wprowadzenie definicji funkcji bezpo

średnio

w miejscu, w którym ma by

ć ona używana powoduje także, że intencje programisty są

bardziej czytelne. Funkcja lambda zwraca warto

ść ostatniego argumentu expr. Jest ona

cz

ęsto używana w połączeniu z apply i/lub mapcar w celu wykonania funkcji na

obiekcie typu lista. Przykładowo:

(apply

'(lambda (x y z)

(*x(- y z)

);lambda

'(5 20 14)

);apply

zwraca

30

oraz:

(setq counter 0)
(mapcar

'(lambda (x)

(setq counter (1+ counter))

background image

Epebufl!C

834

(* x 5)

);lambda

'(2 4 -6 10.2)

);mapcar

zwraca

(10 20 -30 51.0)

)mbtu!

)mbtu!

)mbtu!

)mbtu!mjtu****

Funkcja last zwraca ostatni element argumentu list. Nie mo

że on być listą pustą.

Przykładowo:

(last '(a b c d e))

zwraca

E

(last '(a b c (d e)))

zwraca

(D E)

Jak pokazano, last zwraca element, którym mo

że być atom lub lista.

Na pierwszy rzut oka, funkcja last mo

ż

e si

ę

wydawa

ć

idealnym sposobem

uzyskiwania współrz

ę

dnej Y. Jest to prawd

ą

dla punktów 2W (listy dwóch liczb

typu real). Dla punktów 3W wynikiem last byłaby jednak współrz

ę

dna Z. Aby

funkcje działały prawidłowo dla punktów 2W oraz 3W, w celu uzyskania
współrz

ę

dnej Y zalecane jest stosowanie funkcji cadr, a funkcji caddr w celu

uzyskania współrz

ę

dnej Z.

)m

)m

)m

)mfohui!

fohui!

fohui!

fohui!mjtu****

Funkcja ta zwraca liczb

ę typu integer, określającą liczbę elementów argumentu list.

Przykładowo:

(length '(a b c d))

zwraca

4

(length '(a b (c d)))

zwraca

3

(length '())

zwraca

0

)mjtu!

)mjtu!

)mjtu!

)mjtu!fyqs!

****

Funkcja list ł

ączy dowolną liczbę argumentów expr w jeden łańcuch wyrażeń i zwraca

utworzon

ą w ten sposób listę. Przykładowo:

(list 'a 'b 'c)

zwraca

(A B C)

(list 'a '(b c) 'd)

zwraca

(A (B C) D)

(list 3.9 6.7)

zwraca

(3.9 6.7)

W AutoLISPie funkcja ta jest cz

ęsto używana do definiowania zmiennych reprezentu-

j

ących punkty 2W i 3W (listy dwóch lub trzech liczb typu real).

Je

ś

li w li

ś

cie nie ma zmiennych lub niezdefiniowanych wyra

ż

e

ń

, do tworzenia

listy mo

ż

na wykorzysta

ć

alternatywn

ą

metod

ę

, polegaj

ą

c

ą

na prostym ozna-

czeniu listy znakiem cytatu.

'(3.9 6.7) ma takie samo znaczenie, jak (list 3.9 6.7)

background image

835

BvupMJTQ!—!qsbluzd{oz!lvst

Jest to bardzo wygodny sposób tworzenia listy asocjacji lub definiowania punktów.
Wi

ęcej informacji zawiera opis funkcji quote.

)mjtu

)mjtu

)mjtu

)mjtuq!

q!

q!

q!jufn****

Funkcja ta zwraca T, je

żeli argument item jest listą, a nil w przeciwnym przypadku.

Przykładowo:

(listp '(a b c))

zwraca

T

(listp 'a)

zwraca

nil

(listp 4.343)

zwraca

nil

)mpbe!

)mpbe!

)mpbe!

)mpbe!gjmfobnf!\pogbjmvsf^****

Funkcja wczytuje plik zawieraj

ący wyrażenia AutoLISPu i wyznacza ich wartość.

Argument filename jest ła

ńcuchem alfanumerycznym (wartość typu string), który

reprezentuje nazw

ę pliku bez rozszerzenia (zakładane jest rozszerzenie .LSP). Ponadto

filename mo

że zawierać przedrostek określający ścieżkę dostępu, np. /KAROL/

ACAD_PN. W systemach operacyjnych MS-DOS/PC-DOS dopuszczalne jest tak

że

u

życie litery identyfikującej napęd dyskowy oraz stosowanie znaku lewego ukośnika \

zamiast / (pami

ętać trzeba jednak, że aby w łańcuchu otrzymać znak \, należy wpisać

\\).

Je

żeli użytkownik nie poda w łańcuchu filename ścieżki dostępu do pliku, to funkcja

load przeszukuje

ścieżkę biblioteczną AutoCADa w podobny sposób jak funkcja

findfile (

ścieżka poszukiwania plików bibliotecznych AutoCADa jest opisana wraz

z funkcj

ą findfile). Jeżeli na tej ścieżce zostanie znaleziony podany plik, to funkcja

load wczyta go do pami

ęci.

Je

żeli operacja zakończyła się sukcesem, load zwraca wartość ostatniego wyrażenia

w pliku, które cz

ęsto jest nazwą ostatniej zdefiniowanej w pliku funkcji. Jeżeli operacja

load zako

ńczyła się porażką, to zwykle wynika to z błędu AutoLISPu i powoduje

wy

świetlenie odpowiedniego komunikatu. Jeżeli jednak wyrażenie zawiera argument

onfailure, to funkcja zwraca warto

ść tego argumentu. Umożliwia to tworzenie aplikacji

(programów u

żytkowych) AutoLISPu, które w przypadku nieudanej operacji load

wykonuj

ą inne działanie alternatywne.

Oczywi

ście wartość argumentu onfailure powinna być inna niż wartość ostatniego

wyra

żenia w pliku. W przeciwnym wypadku wartość zwrócona przez funkcję load będzie

niejednoznaczna. Nale

ży zauważyć, że jeśli argument onfailure jest poprawnie użytą

funkcj

ą AutoLISPu, to zostanie ona poddana wyliczeniu. Z tego powodu, w większości

przypadków argument onfailure powinien by

ć łańcuchem tekstowym lub atomem.

Zakładaj

ąc przykładowo, że plik /KAROL/TEST1.LSP zawiera:

(defun FUNKCJA1 (x)
...definicja funkcji...

background image

Epebufl!C

836

)
(defun FUNKCJA2 (x)
...definicja funkcji...
)

oraz,

że plik TEST2.LSP nie istnieje, otrzymamy następujące wyniki:

(load "/karol/test1")

zwraca

FUNKCJA2

(load "\\karol\\test1")

zwraca

FUNKCJA2

(load "/karol/test1" "fatalnie")

zwraca

FUNKCJA2

(load "test2" "Bł

ą

d")

zwraca

"Bł

ą

d"

(load "test2")

ąd AutoLISPu

Funkcja load mo

że być użyta wewnatrz innej funkcji AutoLISPu, a nawet rekursywnie

(we wczytywanym pliku).

Je

żeli istnieje plik ACAD.LSP, to jest on automatycznie wczytywany przy każdym

rozpoczynaniu sesji pracy z edytorem rysunku. Umieszczenie w nim definicji cz

ęściej

u

żywanych funkcji spowoduje ich automatyczną ewaluację (definiowanie) na początku

ka

żdej sesji edycji rysunku. Jeżeli w tym momencie chcemy automatycznie spowo-

dowa

ć wykonywanie serii poleceń AutoCADa lub funkcji AutoLISPu, to należy

zdefiniowa

ć w pliku ACAD.LSP specjalną funkcję S::STARTUP. Gdy jest ona w pliku,

AutoCAD wykonuje j

ą automatycznie na początku sesji rysunkowej.

Informacje uzupełniaj

ące: Patrz opis funkcji defun.

)mph!

)mph!

)mph!

)mph!ovncfs****

Warto

ścią zwracaną przez funkcję jest liczba typu real równa logarytmowi naturalnemu

argumentu number. Przykładowo:

(log 4.5)

zwraca

1.50408

(log 1.22)

zwraca

0.198851

)mphboe!

)mphboe!

)mphboe!

)mphboe!ovncfs!ovncfs!///****

Funkcja ta zwraca liczb

ę będącą wynikiem dwuargumentowych operacji koniunkcji

(iloczyn logiczny), wykonywanych za pomoc

ą funktora AND na odpowiadających

sobie bitach kolejnych argumentów number. Musz

ą być one wartościami całkowito-

liczbowymi. Przykładowo:

(logand 7 15 3)

zwraca

3

(logand 2 3 15)

zwraca

2

(logand 8 3 4)

zwraca

0

background image

837

BvupMJTQ!—!qsbluzd{oz!lvst

)mphjp

)mphjp

)mphjp

)mphjps!

s!

s!

s!joufhfs!///****

Funkcja ta zwraca liczb

ę, będącą wynikiem dwuargumentowych operacji alternatywy

niewykluczaj

ącej, zwanej inaczej sumą logiczną, wykonywanych za pomocą funktora

OR na odpowiadaj

ących sobie bitach kolejnych argumentów integer. Muszą być one

warto

ściami całkowitoliczbowymi. Przykładowo:

(logior 1 2 4)

zwraca

7

(logior 9 3)

zwraca

11

)mti!

)mti!

)mti!

)mti!ovn2!ovncjut****

Funkcja ta zwraca liczb

ę, będącą wynikiem operacji przesunięcia bitów argumentu

num1 o liczb

ę pozycji równą argumentowi numbits. Oba argumenty muszą być liczbami

typu integer.

Je

żeli argument numbits jest liczbą dodatnią, to bity argumentu num1 są przesuwane

w lewo; je

żeli ujemną, to dokonywane jest przesunięcie w prawo. W każdym

przypadku, na miejsca w wyniku przesuni

ęcia zwolnione, które nie zostały zajęte innym

przesuni

ętym bitem, są wstawiane bity 0. Bity przesuwane w prawo na zewnątrz bajtu

s

ą tracone. Jeżeli bit 1 jest przesuwany na lub poza pozycję najwyższego bitu argu-

mentu num1 (bit 16-ty w przypadku komputerów 16-bitowych i bit 32-gi w 32-
bitowych stacjach roboczych), to zmianie ulega jej znak.

Przykład

(lsh 2 1)

zwraca

4

(lsh 2 -1)

zwraca

1

(lsh 40 2)

zwraca

160

Wyra

ż

enie (lsh 16384 1) zwraca –32768 w przypadku komputerów 16-bitowych,

lub 32768 w przypadku komputerów 32-bitowych.

)nbqdbs!

)nbqdbs!

)nbqdbs!

)nbqdbs!gvodujpo!mjtu2!

!mjtuo****

Wyra

żenie z funkcją mapcar zwraca listę, której elementami są wyniki ewaluacji

wyra

żenia function z argumentami branymi z kolejnych pozycji poszczególnych list

poczynaj

ąc od argumentu list1 do listn. Liczba argumentów listn musi odpowiadać

liczbie argumentów, której wymaga function. Przykładowo:

(setq a 10 b 20 c 30)

(mapcar '1+ (list a b c))

zwraca

(11 21 31)

Jest to równowa

żne wyrażeniom:

(1+ a)
(1+ b)

background image

Epebufl!C

838

(1+ c)

z t

ą różnicą, że mapcar zwraca wyniki w postaci jednej listy. Podobnie:

(mapcar '+ '(10 20 30) '(4 3 2))

zwraca

(14 23 32)

co odpowiada sekwencji wyra

żeń:

(+ 10 4)
(+ 20 3)
(+ 30 2)

Funkcj

ą, która ma być wykonywana przy wywołaniu mapcar, może być funkcja

anonimowa, zdefiniowana za pomoc

ą funkcji lambda. Jest to przydatne, gdy część

argumentów funkcji ma warto

ści stałe lub podawane w inny sposób. Przykładowo:

(mapcar

'(lambda (x)

(+ x 3)

);lambda

'(10 20 30)

);mapcar

zwraca

(13 23 33)

oraz:

(mapcar

'(lambda (x y z)

(* x (- y z))

);lambda

'(5 6) '(20 30) '(14 5.0)

);mapcar

zwraca

(30 150.0)

)nb

)nb

)nb

)nby!

y!

y!

y!ovncfs!ovncfs!///****

Funkcja ta zwraca najwi

ększą liczbę z argumentów number. Mogą to być liczby typu

real i integer. Je

żeli wszystkie argumenty number są wartościami całkowitoliczbowymi,

to funkcja zwraca liczb

ę typu integer. Jeżeli którykolwiek z argumentów jest liczbą

rzeczywist

ą, to argumenty typu integer są poddawane konwersji na real i wynik również

jest liczb

ą typu real.

Przykład

(max 4.07 -144)

zwraca

4.07

(max -88 19 5 2)

zwraca

19

(max -2.1 4 8 2)

zwraca

8.0

background image

839

BvupMJTQ!—!qsbluzd{oz!lvst

)nfn*

)nfn*

)nfn*

)nfn*

Wy

świetla aktualny stan pamięci przydzielonej dla AutoLISPu.

)nfncfs!

)nfncfs!

)nfncfs!

)nfncfs!fyqs!mjtu****

Funkcja ta wyszukuje w

śród elementów argumentu list przypadki występowania

obiektu expr. W przypadku wyst

ępowania obiektu expr, zwracana jest lista, której

pierwszym elementem jest wła

śnie ten element oraz list, zawierająca resztę elementów

argumentu a

ż do jej końca. Jeżeli expr nie występuje w przeszukiwanej liście, to

wyra

żenie z funkcją member zwraca nil. Przykładowo:

(member 'c '(a b c d e))

zwraca

(C D E)

(member 'q '(a b c d e))

zwraca

nil

)nfov

)nfov

)nfov

)nfovdne!

dne!

dne!

dne!tusjoh****

Funkcja menucmd umo

żliwia programom LISPu przełączanie stron podrzędnych menu

programu AutoCAD. W ten sposób, program przygotowany w j

ęzyku AutoLISP, może

współpracowa

ć ze skojarzonym z nim plikiem menu, wyświetlając odpowiednie

podmenu z pozycjami zawieraj

ącymi różne możliwości, gdy zajdzie potrzeba

wprowadzenia danych przez u

żytkownika. Funkcja menucmd zawsze zwraca nil.

Argument string ma posta

ć:

"section=submenu"

gdzie section okre

śla sekcję menu, a submenu wskazuje podmenu w ramach sekcji,

przeznaczone do uaktywnienia. Dopuszczalne warto

ści argumentu section są takie

same, jak wywołania podmenu w pliku menu. S

ą one pokazane w poniższej tabeli.

Tabela B.9. Warto

ści części section argumentu string

Oznaczenie sekcji

Sekcja menu

S

dla menu SCREEN

B1 — B4

dla menu BUTTONS1 do BUTTONS4

I

dla menu ICON

PO — P16

dla menu rozwijanych POP0 do POP16

T1 — T4

dla menu TABLET1 do TABLET4

A1 do A4

dla menu AUX1 do AUX4

M

dla wyra

żeń łańcuchowych typu DIESEL

Aby zachowa

ć

zgodno

ść

z poprzednimi wersjami AutoLISPu, "B" podane jako

ła

ń

cuch zawieraj

ą

cy nazw

ę

sekcji jest interpretowane jako "B1".

background image

Epebufl!C

83:

)njo!

)njo!

)njo!

)njo!ovncfs!ovncfs!

****

Funkcja ta zwraca najmniejsz

ą liczbę z argumentów number. Mogą nimi być liczby

typu real i integer. Je

żeli wszystkie argumenty number są wartościami całkowito-

liczbowymi, to funkcja zwraca liczb

ę typu integer. Jeżeli którykolwiek z argumentów

jest liczb

ą rzeczywistą, to argumenty typu integer są poddawane konwersji na real

i wynik równie

ż jest liczbą typu real. Przykładowo:

(min 683 -10.0)

zwraca

-10.0

(min 73 2 48 5)

zwraca

2

(min 2 4 6.7)

zwraca

2.0

)njovt

)njovt

)njovt

)njovtq!

q!

q!

q!jufn****

Je

żeli argument item jest liczbą typu real lub integer i jego wyliczenie daje wartość

ujemn

ą, to funkcja zwraca T. W przeciwnym wypadku minusp zwraca nil. Funkcja nie

jest zdefiniowana dla innych typów argumentów item. Przykładowo:

(minusp -1)

zwraca

T

(minusp -4.293)

zwraca

T

(minusp 830.2)

zwraca

nil

)ofoutfm!

)ofoutfm!

)ofoutfm!

)ofoutfm!\qspnqu^****

Funkcja ta zapewnia dost

ęp do danych definiujących elementy wchodzące w skład

wstawionego do rysunku elementu zło

żonego (Bloku).

Funkcja nentsel powoduje wy

świetlenie zgłoszenia, które daje użytkownikowi

mo

żliwość wybrania obiektu. Aktualnie obowiązujące tryby lokalizacji punktów

wzgl

ędem obiektów, ustalone za pomocą polecenia OBIEKT, są przez funkcję nentsel

ignorowane (odpowiada to stanowi braku ustalonych trybów lokalizacji), chyba

że

specjalnie za

żądamy inaczej podczas wykonywania funkcji. W celu udostępnienia

dodatkowych mo

żliwości odpowiedzi na zgłoszenie Polecenie:; nentsel może opcjonalnie

honorowa

ć słowa kluczowe, zdefiniowane przez wcześniejsze wywołanie funkcji initget.

Opcjonalny argument prompt, je

żeli występuje w wyrażeniu, musi być łańcuchem

alfanumerycznym (warto

ść typu string). Jeżeli jest on pominięty, pojawia się stan-

dardowe zgłoszenie Wska

ż obiekty:

Je

żeli wybrany obiekt nie jest obiektem złożonym (Polilinią lub Blokiem), to nentsel

zwraca identyczn

ą informację, jak funkcja entsel. Jeżeli jednak wybrany element jest

Polilini

ą, to nentsel zwraca listę zawierającą nazwę elementu podrzędnego (wierz-

chołka) oraz współrz

ędne użytego do jej wskaznia punktu. Lista ta jest podobna do

zwracanej przez entsel z t

ą różnicą, że zwracana jest nazwa wybranego wierzchołka,

a nie nazwa zwi

ązana z nagłówkowym elementem Polilinii. Funkcja nentsel zawsze

zwraca ten z wierzchołków Polilinii, który stanowi pocz

ątek wybranego segmentu

background image

841

BvupMJTQ!—!qsbluzd{oz!lvst

Polilinii. Przykładowo, wskazanie trzeciego segmentu spowoduje zwrócenie trzeciego
wierzchołka. W przypadku Polilinii, nentsel nigdy nie zwraca ko

ńczącego sekwencję

elementu SEQEND.

Gdy wskazany element nale

ży do Bloku, nentsel zwraca listę zawierającą cztery

elementy, które zostan

ą obecnie opisane. Wyjątkiem od tej reguły są jedynie Atrybuty

wewn

ątrz Bloku. Wybranie Atrybutu powoduje zwrócenie tylko nazwy Atrybutu oraz

współrz

ędnych punktu użytego do wskazania obiektu (podobnie jak w przypadku listy

zwracanej przez funkcj

ę entsel).

Pierwszym elementem listy zwracanej po wskazaniu elementu nale

żącego do Bloku,

jest nazwa wybranego elementu. Drugim elementem tej listy jest lista, która zawiera
współrz

ędne punktu użytego do wskazania elementu rysunku.

Trzeci element zwracanej listy jest macierz

ą transformacji Układu Współrzędnych

Modelu w Globalny Układ Współrz

ędnych. Jest to lista, w skład której wchodzą cztery

listy podrz

ędne, każda z nich zawiera zestaw współrzędnych. Macierz ta może być

wykorzystywana do transformacji współrzednych punktów definiuj

ących element

z odniesionych do wewn

ętrznego układu współrzędnych, zwanego Układem Współ-

rz

ędnych Modelu (UWM), na współrzędne odniesione do Globalnego Układu Współ-

rz

ędnych (GUW). Początek UWM wyznacza bazowy punkt wstawienia Bloku, który

zawiera wybrany element. Kierunki osi UWM s

ą zgodne z kierunkami osi LUW,

obowi

ązującego w momencie definiowania Bloku.

Czwartym elementem jest równie

ż lista, zawierająca nazwę elementu dla Bloku, w któ-

rym znajduje si

ę wybrany element. Jeżeli wybrany element jest składnikiem Bloku

zagnie

żdżonego (Bloku w Bloku), wówczas lista zawiera dodatkowo nazwy elementów

dla wszystkich Bloków, w których zagnie

żdżony jest wybrany element, poczynając od

Bloku umieszczonego najgł

ębiej, a kończąc na Bloku najbardziej oddalonym idąc na

zewn

ętrz, czyli na Bloku wstawionym do rysunku.

(<Nazwa elementu: nazwa-1>

Nazwa elementu

(Px Py Pz)

Wskazany punkt

(

(X0 Y0 Z0)

Macierz transformacji UWM na

(X1 Y1 Z1)

GUW

(X2 Y2 Z2)
(X3 Y3 Z3)

)
(<Nazwa elementu: nazwa-2>

Nazwa najgł

ę

biej zagnie

ż

d

ż

onego

bloku z wybranym elementem

(<Nazwa elementu: nazwa-n>)

Nazwa bloku najbardziej
zewn

ę

trznego wzgl

ę

dem wybranego

elementu

)

Po uzyskaniu nazwy elementu oraz macierzy definiuj

ącej transformację Układ Współ-

rz

ędnych Modelu na Globalny Układ Współrzędnych, można dokonać transformacji,

definiuj

ących element, współrzędnych z UWM na GUW. W celu uzyskania wartości

background image

Epebufl!C

842

współrz

ędnych punktów odniesionych do UWM, należy skorzystać z funkcji entget i

assoc w odniesieniu do nazwy elementu.

Macierz zwracana przez nentsel ma takie samo przeznaczenie, jak macierz zwracana
przez nentselp, ale jest macierz

ą o rozmiarze 4x3, będącą tablicą czterech punktów,

w której punkty umieszczone s

ą w kolejnych wierszach, a nie w kolumnach. Transfor-

macja jest opisana przez nast

ępujące mnożenie macierzy:

M

00

M

01

M

02

M

10

M

11

M

12

[ X' Y' Z' 1.0 ]= [ X Y Z 1.0 ] *

M

20

M

21

M

22

M

30

M

31

M

32

Z tego wynikaj

ą następujące równania określające nowe współrzędne:

X' = XM

00

+ YM

10

+ ZM

20

+ M

30

Y' = XM

01

+ YM

11

+ ZM

21

+ M

31

Z' = XM

02

+ YM

12

+ ZM

22

+ M

32

Współczynniki M

ij

, gdzie 0 <=i,j <=2, s

ą elementami macierzy transformacji UWM na

GUW, X, Y i Z okre

ślają punkt w układzie UWM, definiujący element rysunkowy, a X'

Y' i Z' okre

ślają wynikowy punkt definiujący element rysunkowy w układzie GUW.

Jest to jedyna funkcja AutoLISPu wykorzystuj

ą

ca tego typu macierz. Funkcja

nentselp zwraca macierz podobn

ą

do macierzy wykorzystywanych przez inne

funkcje AutoLISPu i ADS.

Informacje uzupełniaj

ące: opis funkcji entsel i initget.

)ofoutfmq!

)ofoutfmq!

)ofoutfmq!

)ofoutfmq!\qspnqu^!\qu^****

Funkcja nentselp, podobnie jak nentsel, zapewnia dost

ęp do danych definiujących

elementy wchodz

ące w skład wstawionego do rysunku elementu złożonego (Bloku).

Oprócz opcjonalnego argumentu prompt, nentselp akceptuje tak

że punkt wybierający

element rysunkowy, podawany jako dodatkowy argument opcjonalny. Umo

żliwia to

wybieranie obiektów bez interakcyjnego współdziałania z u

żytkownikiem. Funkcja

nentselp zwraca macierz transformacji o rozmiarze 4x4, zdefiniowan

ą następująco:

M

00

M

01

M

02

M

03

M

10

M

11

M

12

M

13

M

20

M

21

M

22

M

23

M

30

M

31

M

32

M

33

Trzy pierwsze kolumny macierzy okre

ślają skalowanie i obrót. Czwarta kolumna ma-

cierzy transformacji jest wektorem przesuni

ęcia.

Funkcje wykorzystuj

ące macierze tego typu traktują punkt jako wektor — kolumnę,

o rozmiarze 4. Punkt jest wyra

żony we współrzędnych jednorodnych, gdzie czwarty

element wektora punktu jest współczynnikiem skali, ustawionym zazwyczaj na 1.0.
Ostatni wiersz macierzy — wektor [M

30

M

31

M

32

M

33

] — ma nominaln

ą wartość [0 0 0 1]

background image

843

BvupMJTQ!—!qsbluzd{oz!lvst

i aktualnie jest ignorowany przez funkcje wykorzystuj

ące ten format macierzy. W kon-

wencji tej zastosowanie transformacji do punktu jest równowa

żne następującemu mno-

żeniu macierzy.

X'

M

00

M

01

M

02

M

03

X

Y'

=

M

10

M

11

M

12

M

13

*

Y

Z'

M

20

M

21

M

22

M

23

Z

1.0

0.0

0.0

0.0

0.0

1.0

W wyniku tego mno

żenia otrzymujemy poszczególne współrzędne punktu:

X' = XM

00

+ YM

01

+ ZM

02

+ M

03

(1.0)

Y' = XM

10

+ YM

11

+ ZM

12

+ M

13

(1.0)

Z' = XM

20

+ YM

21

+ ZM

22

+ M

23

(1.0)

Jak pokazuj

ą powyższe wzory, współczynnik skali oraz ostatni wiersz macierzy nie

maj

ą znaczenia i są ignorowane.

)opu!

)opu!

)opu!

)opu!jufn****

Funkcja ta zwraca T, je

żeli wyliczenie wyrażenia item daje nil, a nil w wypadku

przeciwnym. Zazwyczaj do list u

żywana jest funkcja null, natomiast funkcja not jest

stosowana do innych typów danych, ł

ącznie z którąś z funkcji sterujących. Przy-

kładowo, je

żeli dokonano następujących przypisań:

(setq a 123)
(setq b "Jan Kowalski")
(setq c nil)

to:

(not a)

zwraca

nil

(not b)

zwraca

nil

(not c)

zwraca

T

(not '())

zwraca

T

)oui!

)oui!

)oui!

)oui!o!mjtu****

Funkcja nth zwraca n-ty element argumentu list, gdzie n jest numerem zwracanego
elementu (pierwszy element listy ma numer zerowy). Je

żeli wartość n jest większa od

najwy

ższego numeru elementu listy, to funkcja zwraca nil.

Przykładowo:

(nth 3 '(a b c d e))

zwraca

D

(nth 0 '(a b c d e))

zwraca

A

(nth 5 '(a b c d e))

zwraca

nil

background image

Epebufl!C

844

)o

)o

)o

)ovmm!

vmm!

vmm!

vmm!jufn****

Funkcja zwraca T, je

żeli wyliczenie argumentu item daje nil. W przeciwnym razie

funkcja zwraca nil. Przykładowo, gdy dokonano przypisa

ń:

(setq a 123)
(setq b "Józef Pawlak")
(setq c nil)

wówczas:

(null a)

zwraca

nil

(null b)

zwraca

nil

(null c)

zwraca

T

(null '())

zwraca

T

)ovncfs

)ovncfs

)ovncfs

)ovncfsq!

q!

q!

q!jufn****

Funkcja zwraca T, je

żeli argument item jest liczbą typu real lub integer, w przeciwnym

wypadku zwraca nil. Przykładowo, w wyniku nast

ępujących przypisań:

(setq a 123)
(setq b 'a)

wykonanie:

(numberp 4)

zwraca

T

(numberp 3.8348)

zwraca

T

(numberp "Marta")

zwraca

nil

(numberp 'a)

zwraca

nil

(numberp a)

zwraca

T

(numberp b)

zwraca

nil

(numberp (eval b))

zwraca

T

)pqfo!

)pqfo!

)pqfo!

)pqfo!gjmfobnf!npef****

Wyra

żenie z tą funkcją otwiera plik, umożliwiając dostęp do jego zawartości dla funkcji

Wej

ścia/Wyjścia AutoLISPu. Funkcja open zwraca deskryptor pliku, który jest prze-

znaczony do wykorzystywania przez inne funkcje Wej

ścia/Wyjścia. Z tego względu

musi by

ć on przypisany do symbolu za pomocą funkcji setq. Przykładowo:

(setq a (open "plik.txt" "r"))

Argument filename jest ła

ńcuchem alfanumerycznym, który określa nazwę otwieranego

pliku wraz z rozszerzeniem. Argument mode jest znacznikiem odczytu/zapisu i musi
by

ć łańcuchem zawierającym jedną literę napisaną minuskułą (małą). Listę możliwych

trybów dost

ępu przedstawiono w poniższej tabeli:

background image

845

BvupMJTQ!—!qsbluzd{oz!lvst

Tabela B.10. Dopuszczalne argumenty mode dla funkcji open

Tryb OPEN

Opis

"r"

Plik otwarty do odczytu danych. Je

żeli plik filename nie istnieje funkcja

zwraca nil.

"w"

Plik otwarty do zapisu danych. Je

żeli plik filename nie istnieje, to zostanie

utworzony i nast

ępnie otwarty. Jeżeli plik o podanej nazwie już istnieje,

wówczas jego zawarto

ść zostanie zastąpiona nowymi danymi.

"a"

Plik otwarty do dopisywania danych. Je

żeli plik filename nie istnieje, to

zostanie utworzony i nast

ępnie otwarty. Jeżeli plik o podanej nazwie już

istnieje, to jest on otwierany, a nowe dane mog

ą być dołączane po danych

istniej

ących w nim do tej pory.Uwaga: W systemach DOS, niektóre

programy i edytory tekstowe zapisuj

ą pliki tekstowe z umieszczonym na

ko

ńcu tekstu znacznikiem końca pliku (ang. end-of-file) w postaci znaku

CTRL-Z, którego dziesi

ętnym kodem ASCII jest liczba 26. Podczas

czytania pliku, po napotkaniu znacznika CTRL-Z, system operacyjny
zwraca status ko

ńca pliku, nawet wtedy, jeżeli zawiera on dalej więcej

danych. U

żytkownik zamierzający używać trybu "a" funkcji open w celu

dopisania danych do plików utworzonych za pomoc

ą innych programów,

powinien upewni

ć się, że żaden z nich nie umieszcza na końcu plików

tekstowych kodów CTRL-Z.

Zakładaj

ąc, że wymienione poniżej pliki nie istnieją:

(setq f (open "nowy.tst" "w"))

zwraca

<Plik: #nnn>

(setq f (open "inny.fil" "r"))

zwraca

nil

(setq f (open "plik" "a"))

zwraca

<Plik: #nnn>

Argument filename mo

że zawierać przedrostek określający ścieżkę dostępu, np.

/APLIKOM/ACAD-PN/FUNKCJA1, a w systemach MS-DOS/PC-DOS równie

ż literę

identyfikuj

ącą napęd dyskowy. Można także użyć znaku ukośnika lewego \ zamiast

prawego /, pami

ętając jednak o tym, że aby do łańcucha został wstawiony jeden

uko

śnik lewy \, należy użyć znaku zdublowanego \\.

Przykładowo:

(setq f (open "/x/nowy.tst" "w"))

zwraca

<Plik: #nnn>

(setq f (open "\\x\\nowy.tst" "w"))

zwraca

<Plik: #nnn>

)ps!

)ps!

)ps!

)ps!fyqs!

****

Funkcja or zwraca wynik sumy logicznej argumentów expr. S

ą one poddawane

warto

ściowaniu kolejno od lewej od prawej, w poszukiwaniu wyrażenia o wartości

żnej od nil. Jeżeli takie zostanie znalezione, to ewaluacja dalszych wyrażeń nie jest

kontynuowana i funkcja zwraca T. Je

żeli wszystkie wyrażenia zwracają nil, to funkcja

or zwraca nil.

background image

Epebufl!C

846

Przykładowo:

(or nil 45 '())

zwraca

T

(or nil '())

zwraca

nil

)ptobq!

)ptobq!

)ptobq!

)ptobq!qu!npef.tusjoh****

Funkcja ta zwraca punkt 3W, otrzymany w wyniku zastosowania dla argumentu pt
opisanych przez mode-string sposobów lokalizacji poło

żenia punktu względem obiektu.

Argument mode-string jest ła

ńcuchem alfanumerycznym, który zawiera jeden lub wię-

cej prawidłowych identyfikatorów trybów lokalizacji, takich jak np. centrum, symetria,
rozdzielonych przecinkami.

Przykładowo:

(setq pkt2 (osnap pkt1 "sym"))
(setq pkt2 (osnap pkt1 "sym,kon,cen"))

Działanie tej funkcji jest uzale

żnione od aktualnego widoku 3W (kierunku rzutowania).

qj

qj

qj

qj

Nie jest to wła

ściwie funkcja, lecz raczej stała

π

. Symbolowi przypisano warto

ść równą

w przybli

żeniu 3.1415926.

)qpmbs!

)qpmbs!

)qpmbs!

)qpmbs!qu!bohmf!ejtubodf****

Funkcja ta zwraca punkt 3W, wyra

żony we współrzędnych LUW, położony względem

punktu pt, którego współrz

ędne są również określone w LUW, w odległościach liniowej

i k

ątowej, zgodnych z wartościami argumentów distance i angle. Wartość angle jest

mierzona w radianach od osi X w kierunku przeciwnym do kierunku ruchu wskazówek
zegara. Chocia

ż argument pt może być punktem 3W, to angle jest zawsze mierzony

w aktualnej płaszczy

źnie konstrukcyjnej. Przykładowo:

(polar '(1.0 1.0 3.5) 0.785398 1.414214)

zwraca

(2.0 2.0 3.5)

)qsjo

)qsjo

)qsjo

)qsjo2!

2!

2!

2!\fyqs!\gjmf.eftd^^****

Funkcja wypisuje expr na ekranie monitora i zwraca je jako wynik. Argument expr
mo

że być dowolnego typu; nie musi to być łańcuch alfanumeryczny. W przypadku

wyst

ępowania argumentu file-desc, jeżeli jest to deskryptor pliku otwartego do zapisu,

expr jest zapisywane do pliku dokładnie w takiej formie, w jakiej pojawiłoby si

ę na

ekranie monitora. Zapisywane jest tylko podane expr, bez dodanych znaków spacji lub
nowej linii. Przykładowo, je

żeli dokonane zostały przypisania:

(setq a 123)
(setq b '(a))

background image

847

BvupMJTQ!—!qsbluzd{oz!lvst

to

(prin1 'a)

wypisuje

A

i zwraca

A

(prin1 a)

wypisuje

123

i zwraca

123

(prin1 b)

wypisuje

(A)

i zwraca

(A)

(prin1 "Cze

ść

!")

wypisuje

"Cze

ść

!"

i zwraca

"Cze

ść

!"

Ka

żde z przedstawionych powyżej przykładowych wyrażeń, z powodu braku

argumentu file-desc, powoduje wypisywanie danych na ekranie. Załó

żmy, że f jest

obowi

ązującym deskryptorem pliku, otwartego do zapisywania w nim informacji.

Wtedy:

(prin1 "Rysował: J.Kowalski" f)

wpisze "Rysował: J.Kowalski" do okre

ślonego deskryptorem f pliku i zwróci tekst

"Rysował: J.Kowalski".

Je

żeli argument expr zawiera znaki sterujące, to zostaną one przez prin1 poprzedzone

znakiem lewego uko

śnika \, tak jak przedstawiono to poniżej:

Tabela B.11. Znaki steruj

ące

Znak

Znaczenie

\\

oznacza znak \

\"

oznacza znak"

\e

oznacza znak escape

\n

oznacza znak newline

\r

oznacza znak return

\t

oznacza znak tab

\nnn

oznacza znak o kodzie ósemkowym nnn

Zatem:

(prin1 (chr 2))

wypisuje

"\002"

i zwraca

"\002"

(prin1 (chr 10))

wypisuje

"\n"

i zwraca

"\n"

Wyra

żenie z funkcją prin1 bez argumentów zwraca (i wypisuje) łańcuch pusty. Jeżeli

prin1 bez

żadnego argumentu zostanie użyta w zdefiniowanej funkcji użytkowej jako

ostatnie wyra

żenie, to po jej zakończeniu zostanie wypisana tylko pusta linia, co umożli-

wia „niezauwa

żalne” zakończenie realizacji funkcji. Przykładowo, jeżeli mamy definicję:

(defun C:PARAMETRY ()

(setvar "LUNITS" 4)
(setvar "BLIPMODE" 0)
(prin1)

)

to:

background image

Epebufl!C

848

Polecenie: parametry spowoduje wykonanie zdefiniowanego polecenia, ustawiaj

ąc

żądane wartości zmiennych systemowych i wyświetli zgłoszenie gotowości Polecenie:
bez wypisywania jakichkolwiek innych dodatkowych komunikatów.

)qsjod!

)qsjod!

)qsjod!

)qsjod!\fyqs!\gjmf.eftd^^****

Jest to funkcja działaj

ąca tak jak prin1, z tą różnicą, że znaki sterujące w argumencie

expr s

ą wypisywane bez znaku \. Ogólnie mówiąc, funkcja prin1 jest przeznaczona do

zapisu wyra

żeń w sposób zgodny z formatem load, podczas gdy princ pisze wyrażenia

w sposób czytelny dla funkcji takich jak read-line.

)qsjou!

)qsjou!

)qsjou!

)qsjou!\fyqs!\gjmf.eftd^^****

Funkcja działa tak jak prin1 z t

ą różnicą, że argument expr poprzedza znacznik nowej

linii, a po expr wstawiana jest spacja.

)qsp

)qsp

)qsp

)qspho!

ho!

ho!

ho!fyqs!

****

Funkcja warto

ściuje kolejno każde expr i zwraca wartość ostatniego z nich. Funkcja

progn mo

że być stosowana w celu ewaluacji sekwencji wyrażeń tam, gdzie powinno

wyst

ąpić tylko jedno wyrażenie. Przykładowo:

(if (= a b)

(progn

(setq a (- a 10))
(setq b (- b 10))

);progn

);if

Funkcja if, w przypadku gdy wyra

żenie testowe przyjmuje wartość różną od nil,

wyznacza normalnie warto

ść tylko jednego wyrażenia jeśli. W powyższym przykładzie,

funkcja progn została u

żyta do spowodowania ewaluacji dwóch wyrażeń.

)qspnqu!

)qspnqu!

)qspnqu!

)qspnqu!nth****

Funkcja prompt wy

świetla na ekranie monitora msg w linii poleceń i zwraca nil.

Argument msg jest ła

ńcuchem alfanumerycznym (wartość typu string). W konfiguracji

z dwoma monitorami funkcja prompt wy

świetla msg na obu monitorach. W pewnych

warunkach jest to zalet

ą w porównaniu z princ.

Przykład

(prompt "Nowa warto

ść

: ")

wy

świetla na ekranie (ekranach) zgłoszenie Nowa wartość: i zwraca nil.

background image

849

BvupMJTQ!—!qsbluzd{oz!lvst

))))rvju*

rvju*

rvju*

rvju*

Funkcja quit wymusza zako

ńczenie działania bieżącego programu użytkowego. Po

wywołaniu quit/exit, zwraca ona komunikat bł

ędu informujący o przerwaniu działania

wykonywanego programu i przywraca na ekranie standardowe zgłoszenie AutoCADa
Polecenie:.

Informacje uzupełniaj

ące: Patrz także opis funkcji exit.

)rvpuf!

)rvpuf!

)rvpuf!

)rvpuf!fyqs****

Zwraca expr bez wyliczania warto

ści. Poprawny jest również zapis:

'expr

Przykładowo:

(quote a)

zwraca

A

(quote aplikom)

zwraca

APLIKOM

(quote (a b))

zwraca

(A B)

'a

zwraca

A

'aplikom

zwraca

APLIKOM

'(a b)

zwraca

(A B)

Ostatnie trzy wyra

żenia nie mogą być wprowadzone bezpośrednio z klawiatury w odpo-

wiedzi na zgłoszenie AutoCADa. Nale

ży pamiętać, że odpowiedź rozpoznawana jako

wyra

żenie LISPu, musi rozpoczynać się lewym nawiasem "(" lub wykrzyknikiem "!".

)sfb

)sfb

)sfb

)sfbe!

e!

e!

e!tusjoh****

Funkcja ta zwraca pierwszy obiekt typu lista lub atom napotkany w argumencie string.
Argument string nie mo

że zawierać innych spacji oprócz tych, które są separatorami

elementów listy lub poszczególnych słów w obiekcie typu string. Funkcja read zwraca
swój argument po konwersji na odpowiedni typ danych, tak jak pokazuj

ą to poniższe

przykłady:

(read "cze

ść

")

zwraca atom

CZE

ŚĆ

(read "Cze

ść

Karol")

zwraca atom

CZE

ŚĆ

(read "\"Cze

ść

Marta!\"")

zwraca string

"Cze

ść

Marta!"

(read "(a b c)")

zwraca list

ę

(A B C)

(read "(a b c) (d)")

zwraca list

ę

(A B C)

(read "1.2300")

zwraca real

1.23

(read "87")

zwraca integer

87

(read "87 3.2")

zwraca integer

87

background image

Epebufl!C

84:

)sfbe.dibs!

)sfbe.dibs!

)sfbe.dibs!

)sfbe.dibs!\gjmf.eftd^****

Funkcja ta odczytuje jeden znak z wej

ściowego bufora klawiatury lub z otwartego pliku

wskazywanego przez file-desc. Funkcja zwraca kod ASCII odczytanego znaku (liczba
typu integer). List

ę kodów ASCII zawiera dodatek C.

Je

żeli w wyrażeniu nie ma argumentu file-desc i w wejściowym buforze klawiatury nie

ma

żadnego znaku, to read-char czeka na wprowadzenie czegokolwiek z klawiatury i

wci

śnięcie klawisza Enter. Przykładowo, jeżeli bufor klawiatury jest pusty, to

(read-char)

oczekuje na wprowadzenie czegokolwiek. Je

żeli zostanie teraz wpisane słowo MARTA

i wprowadzone wci

śnięciem Enter, to read-char zwróci 77 (kod ASCII litery M).

Nast

ępne pięć wywołań read-char da odpowiednio 65, 82, 84, 65 i 10 (kod znaku

nowej linii). Po kolejnym wywołaniu funkcji read-char nast

ąpi ponowne oczekiwanie

na wprowadzenie znaków.

AutoCAD i AutopLISP mog

ą pracować pod kontrolą różnych systemów operacyjnych,

w których z kolei mog

ą być używane różne konwencje sygnalizowania końca linii

w pliku tekstowym ASCII. Przykładowo, w systemie operacyjnym UNIX wykorzysty-
wany jest pojedynczy znak nowej linii (LF, ang. linefeed), którego kodem ASCII jest
liczba 10. W systemach operacyjnych DOS do tego celu stosuje si

ę parę znaków, tzn.

znak powrotu karetki (CR, ang. carriage-return) w poł

ączeniu ze znakiem nowej linii

LF, których kodami ASCII s

ą liczby 13 i 10. Aby ułatwić przenoszenie programów

AutoLISPu pomi

ędzy wszystkimi systemami operacyjnymi, funkcja read-char akcep-

tuje wszystkie te konwencje, a po napotkaniu znaku nowej linii zawsze zwraca 10 (kod
ASCII dla znaku LF).

)sfbe.mjof!

)sfbe.mjof!

)sfbe.mjof!

)sfbe.mjof!\gjmf.eftd^****

Funkcja ta odczytuje ła

ńcuch alfanumeryczny (wartość typu string), z klawiatury lub

z otwartego pliku wskazywanego przez file-desc. Je

żeli read-line napotka znacznik

ko

ńca pliku, to funkcja zwraca nil; w każdym innym wypadku zwracany jest odczytany

ła

ńcuch, Przykładowo, jeżeli f jest stałe i wskazuje jakiś otwarty plik, to

(read-line f)

zwraca kolejn

ą linię danych wejściowych z tego pliku lub nil, w przypadku dojścia do

znacznika ko

ńca pliku (EOF, ang. end-of-file).

)sfesb

)sfesb

)sfesb

)sfesbx!

x!

x!

x!\fobnf!\npef^^****

Efekt działania funkcji zale

ży od liczby podanych argumentów, Jeżeli funkcja wywo-

łana jest bez argumentów:

(redraw)

background image

851

BvupMJTQ!—!qsbluzd{oz!lvst

to powoduje przerysowanie rysunku w aktualnej rzutni, tak jak w przypadku wywołania
polecenia AutoCADa PRZERYS. Je

żeli w wyrażeniu podano jako argument ename:

(redraw ename)

to przerysowany zostanie wybrany element rysunku AutoCADa. Jest to u

żyteczne, jako

metoda identyfikacji elementów na ekranie po u

życiu grclear, wymazującego

zawarto

ść ekranu.

Pełn

ą kontrolę nad przerysowywaniem elementów uzyskuje się przez wywołanie

funkcji redraw z dwoma argumentami:

(redraw ename mode)

gdzie ename odnosi si

ę do przerysowywanego elementu, a mode jest liczbą typu

integer, która mo

że mieć jedną z następujących wartości:

Tabela B.12 Tryby działania funkcji redraw

Tryby funkcji redraw

Działanie

1

Przerysowywanie elementu na ekranie

2

Wymazywanie elementu z ekranu

3

Wyró

żnianie elementu na ekranie (o ile umożliwia to

wy

świetlacz)

4

Usuwanie wyró

żnienia elementu (o ile umożliwia to wyświetlacz)

Je

żeli ename odnosi się do elementu złożonego (polilinii lub bloku z atrybutami),

a argument mode jest liczb

ą dodatnią, to zostanie przetworzony element główny

i wszystkie jego elementy składowe. Je

żeli mode ma wartość ujemną, to przerysowany

zostanie tylko element główny.

Funkcja redraw zawsze zwraca nil.

)sfhbqq!

)sfhbqq!

)sfhbqq!

)sfhbqq!bqqmjdbujpo****

Funkcja ta rejestruje nazw

ę aplikacji (programu użytkowego) w aktualnym rysunku

AutoCADa. Nazwa programu u

żytkowego jest podstawowym parametrem wykorzy-

stywanym do grupowania, przechowywania, uzyskiwania i modyfikowania zdefinio-
wanych przez taki program dodatkowych danych elementów. Aby zorganizowa

ć doda-

tkowe dane elementów, aplikacja mo

żne zarejestrować tak wiele nazw aplikacji, ile jest

wymagane, lub wcale.

Je

żeli aplikacja o podanej nazwie została już wcześniej zarejestrowana, to funkcja

regapp zwraca nil; w przeciwnym wypadku zwracana jest nazwa aplikacji.

Po zako

ńczonej sukcesem rejestracji, nazwa aplikacji zostaje umieszczona w tablicy

symboli APPID. Tablica ta przechowuje list

ę aplikacji, które wykorzystują dodatkowe

dane elementów w danym rysunku. Pozwala to programowi u

żytkowemu odróżnić

background image

Epebufl!C

852

własne dodatkowe dane elementów od danych przeznaczonych dla innych aplikacji.
Aplikacjami, które dodaj

ą lub modyfikują dodatkowe dane elementów mogą być

zarówno programy u

żytkowe napisane w języku AutoLISP, jak i programy użytkowe

systemu ADS (AutoCAD Development System).

Argument application jest ła

ńcuchem alfanumerycznym zawierającym do 31 znaków,

zgodnie z konwencjami przyj

ętymi dla nazw symboli (jak nazwy tablic). Nazwa

aplikacji mo

że zawierać litery, cyfry oraz znaki specjalne $ (dolar), — (myślnik) i _

(podkre

ślenie). Nie może zawierać spacji. Litery w nazwie są poddawane konwersji na

du

że.

Przykład

(regapp "APLIKOM_18011976")
(regapp "ACAD_PN-v1.11-10101949")

Zalecamy

branie

takich

nazw

aplikacji,

które

gwarantuj

ą

swoj

ą

niepowtarzalno

ść

. Jedn

ą

z dróg do tego celu jest przyj

ę

cie zasady,

ż

e cz

ęść

nazwy zawiera nazw

ę

firmy lub produktu, a druga cz

ęść

unikalny numer (jak

numer telefonu lub aktualna data i godzina). Numer wersji produktu mo

ż

e by

ć

ą

czony w nazw

ę

aplikacji albo przechowywany przez program u

ż

ytkowy

w oddzielnym polu numerycznym typu integer lub real, np. (1040 1.11).

)sf

)sf

)sf

)sfn!

n!

n!

n!ovn2!ovn3!

****

Funkcja ta zwraca reszt

ę z dzielenia argumentu num1 przez argument num2. Mogą być

nimi liczby typu real i integer; funkcja stosuje standardowe zasady konwersji typów.
Przykładowo:

(rem 42 12)

zwraca

6

(rem 12.0 16)

zwraca

12.0

(rem 60 3)

zwraca

0

)sfqfbu!

)sfqfbu!

)sfqfbu!

)sfqfbu!ovncfs!fyqs!

****

W funkcji tej argument number jest dowoln

ą dodatnią liczbą typu integer. Funkcja do-

konuje warto

ściowania każdego argumentu expr tyle razy, ile określa number i zwraca

warto

ść ostatniego z nich. Przykładowo, po dokonaniu podstawień:

(setq a 10)
(setq b 100)

wyra

żenie

(repeat 4

(setq a (+ a 10))
(setq b (+ b 100))

)

ustala warto

ść a na 50, b na 500, i zwraca 500.

background image

853

BvupMJTQ!—!qsbluzd{oz!lvst

)sfwfstf!

)sfwfstf!

)sfwfstf!

)sfwfstf!mjtu****

Funkcja zwraca list

ę, która jest tworzona przez odwrócenie kolejności elementów

argumentu list. Przykładowo:

(reverse '((a) b c))

zwraca

(C B (A))

)su

)su

)su

)supt!

pt!

pt!

pt!ovncfs!\npef!\qsfdjtjpo^^****

Funkcja zwraca ła

ńcuch alfanumeryczny, który reprezentuje argument number (wartość

typu real) w sposób zale

żny od argumentów mode, precision, wartości zmiennej

systemowej UNITMODE oraz zmiennej wymiarowania DIMZIN programu AutoCAD;
mode i precision s

ą typu integer i określają system i dokładność zapisu jednostek

liniowych. Dopuszczalne warto

ści argumentu mode przedstawiono w tabeli.

Tabela B.13. Warto

ści dla jednostek liniowych

Tryby funkcji rtos

Sposób zapisu

1

Zapis wykładniczy

2

Ułamki dziesi

ętne

3

Stopy, cale i dziesi

ętne ułamki cali

4

Stopy, cale i ułamki zwykłe cali

5

Dowolne ułamki zwykłe

Argumenty mode i precision odpowiadaj

ą znaczeniem zmiennym systemowym

LUNITS i LUPREC w programie AutoCAD. Je

żeli zostaną pominięte, to funkcja rtos

przyjmuje warto

ści określone przez te zmienne.

Zmienna systemowa UNITMODE wpływa na posta

ć zwracanego łańcucha tekstowego

w przypadku, gdy wybrany został jeden z formatów wymiarów calowych lub format z do-
wolnymi ułamkami zwykłymi (warto

ść argumentu mode równa odpowiednio 3, 4 lub 5).

)tfu!

)tfu!

)tfu!

)tfu!tzn!fyqs****

Funkcja set przypisuje argumentowi sym, b

ędącemu wynikiem użycia funkcji quote dla

nazwy symbolu, warto

ść argumentu expr, a następnie zwraca tę wartość. Przykładowo:

(set 'a 5.0)

zwraca 5.0 i ustala warto

ść

symbolu A

(set (quote b) 'a) zwraca A i ustala warto

ść

symbolu B

Je

żeli funkcja set jest używana z nazwą symbolu bez apostrofu lub funkcji quote, to

mo

że pośrednio przypisać nową wartość innemu symbolowi. Dla wyżej przedstawio-

nych przykładów:

(set b 640)

zwraca

640

background image

Epebufl!C

854

i powoduje przypisanie warto

ści 640 symbolowi a (gdyż jest on wartością symbolu b).

Informacje uzupełniaj

ące: Patrz także opis funkcji setq.

)tfur!

)tfur!

)tfur!

)tfur!tzn2!fyqs2!\tzn3!fyqs3^!

****

Funkcja przypisuje warto

ść argumentu expr1 symbolowi sym1, wartość expr2

symbolowi sym2, itd. Jest to podstawowa dla AutoLISPu funkcja słu

żąca do

przypisania warto

ści. Przy jednokrotnym wywołaniu funkcja setq może dokonać wielu

przypisa

ń, lecz zwraca tylko wartość ostatniego argumentu expr. Przykładowo,

wyra

żenie:

(setq a 5.0)

zwraca

5.0

i nadaje symbolowi a warto

ść 5.0. Każde mające potem miejsce wartościowanie symbo-

lu a daje w wyniku 5.0 (liczba typu real). Inne przykłady:

(setq b 123 c 4.7)

zwraca

4.7

(setq s "Marta")

zwraca

"Marta"

(setq x '(a b))

zwraca

(A B)

Przy bezpo

średnim przypisywaniu symbolowi łańcucha znaków tekstowych (wartość

typu string) za pomoc

ą setq lub set, istnieje ograniczenie jego długości do 132 znaków.

Mo

żliwe jest jednak tworzenie dłuższych łańcuchów przez wykorzystanie funkcji

strcat do zł

ączenia kilku łańcuchów tekstowych, a następnie przypisanie symbolowi tak

uzyskanego ła

ńcucha.

Funkcja setq jest tak

ą samą funkcją jak set, z tą jedynie różnicą, że nazwa symbolu nie

jest w niej cytowana dosłownie (tzn. nie poprzedza jej apostrof ani quote). Mówi

ąc

inaczej, set wylicza swój pierwszy argument, a setq tego nie robi. Poni

ższy przykład

pokazuje podobie

ństwo obu funkcji.

(setq a 5.0)

jest równowa

żne

(set (quote a) 5.0)

Funkcje set i setq tworz

ą lub modyfikują symbole globalne, chyba że zostały użyte w

obr

ębie wyrażenia z funkcją defun, w celu przypisania nowej wartości argumentowi

funkcji lub symbolowi zadeklarowanemu jako lokalny dla tego wyra

żenia. Przykładowo:

(setq glo1 123)

Tworzy symbol globalny

(defun demo (arg1 arg2 / lok1 lok2)

(setq arg1 234)

Przypisanie lokalne

(setq lok1 345)

Przypisanie lokalne

(setq glo1 456)

Przypisanie globalne

(setq glo2 567)

Tworzy nowy symbol globalny

Symbole globalne s

ą dostępne i mogą być modyfikowane za pomocą dowolnej funkcji oraz

mog

ą być używane w dowolnym wyrażeniu. Lokalne symbole i argumenty funkcji mają

znaczenie tylko w trakcie wyliczania funkcji, która je definiuje (oraz funkcji wywoływanych

background image

855

BvupMJTQ!—!qsbluzd{oz!lvst

przez t

ę funkcję). Argumenty funkcji mogą być używane jako symbole lokalne; funkcja

mo

że zmienić ich wartości, ale zmiany te są anulowane po wyjściu z funkcji.

Funkcje set i setq mog

ą

przypisa

ć

nowe warto

ś

ci wewn

ę

trznym symbolom oraz

nazwom funkcji AutoLISPu, przez co strac

ą

znaczenie ich pierwotne przypisania

lub te

ż

stan

ą

si

ę

one niedost

ę

pne. Niektórym u

ż

ytkownikom zdarzyło si

ę

ju

ż

pechowo przypisa

ć

:

(setq angle (...))

Fatalnie!

(setq length (...))

Fatalnie!

(setq max (...))

Fatalnie!

(setq t (...))

Fatalnie!

(setq pi 3.0)

Fatalnie!!!

W celu unikni

ęcia wszelkiego rodzaju trudnych do wyjaśnienia błędów, należy

zachowa

ć dużą ostrożność w trakcie dobierania nazw dla definiowanych przez siebie

symboli. Nigdy nie nale

ży używać nazwy wewnętrznego symbolu lub funkcji wewnę-

trznej jako nazwy własnego symbolu! W przypadku braku pewno

ści co do unikalności

nazwy symbolu, w odpowiedzi na zgłoszenie Polecenie: nale

ży wprowadzić

nast

ępujące wyrażenie (zakładając, że sprawdzamy unikalność symbolu mysym):

Polecenie:

(atoms-family 0 '("mysym"))

Wyra

żenie to powinno zwrócić

(nil)

je

śli wskazany symbol nie jest aktualnie zdefiniowany. Więcej informacji na temat

wykorzystania funkcji atoms-family podano przy jej opisie.

)tfuwbs!

)tfuwbs!

)tfuwbs!

)tfuwbs!wbsobnf!wbmvf****

Funkcja ta nadaje zmiennej systemowej AutoCADa varname dan

ą wartość value i

zwraca t

ę wartość. Nazwa zmiennej systemowej musi być ujęta w cudzysłów.

Przykładowo:

(setvar "FILLETRAD" 0.50)

zwraca

0.5

i nadaje promieniowi zaokr

ąglenia krawędzi wartość 0.5 jednostki. Jeżeli zmienne

systemowe przyjmuj

ą wartości typu integer, to argument value musi być z zakresu od

–32768 do + 32767.

Niektóre polecenia AutoCADa pobieraj

ą wartości zmiennych systemowych przed

wy

świetleniem jakiegokolwiek zgłoszenia gotowości. Z tego powodu, jeżeli funkcja

setvar została wykorzystana do nadania nowej warto

ści zmiennej systemowej w trakcie

wykonywania jakiego

ś polecenia, to nowa wartość zmiennej może nie dać efektu, aż do

wprowadzenia nast

ępnego polecenia AutoCADa.

background image

Epebufl!C

856

Przy nadawaniu za pomoc

ą

funkcji setvar nowej warto

ś

ci zmiennej systemowej

ANGBASE, warto

ść

argumentu jest interpretowana jako podana w radianach.

Jest to ró

ż

nica w stosunku do polecenia AutoCADa ZMSYS, które interpretuje ten

argument, jako podany w stopniach. Podobnie, przy nadawaniu za pomoc

ą

funkcji setvar nowej warto

ś

ci zmiennej systemowej SNAPANG, warto

ść

argumentu jest interpretowana jako podana w radianach w odniesieniu do
standardowego dla AutoCADa kierunku zerowego, którym jest kierunek na
wschód (lub inaczej mówi

ą

c, kierunek wskazywany godzin

ą

3). Jest to równie

ż

odmienne w stosunku do polecenia ZMSYS, które interpretuje ten argument jako
podany w stopniach wzgl

ę

dem k

ą

ta 0 ustalonego poprzez zmienn

ą

ANGBASE.

Polecenie COFAJ nie cofa skutków zmian zmiennej systemowej CVPORT,
wykonanych przez funkcj

ę

setvar.

Aktualn

ą listę zmiennych systemowych AutoCADa zawiera dodatek F.

Informacje uzupełniaj

ące: Patrz także opis funkcji getvar.

)t

)t

)t

)tjo!

jo!

jo!

jo!bohmf****

Funkcja ta zwraca warto

ść sinusa argumentu angle (miara kątowa wyrażona w radia-

nach) w postaci liczby typu real. Przykładowo:

(sin 1.0)

zwraca

0.841471

(sin 0.0)

zwraca

0.0

)trsu!

)trsu!

)trsu!

)trsu!ovncfs****

Funkcja ta zwraca warto

ść pierwiastka kwadratowego argumentu number w postaci

liczby typu real. Przykładowo:

(sqrt 4)

zwraca

2.0

(sqrt 2.0)

zwraca

1.41421

)ttbee!

)ttbee!

)ttbee!

)ttbee!\fobnf!\tt^^****

Je

żeli funkcja ssadd jest wywoływana bez argumentów, to tworzony jest nowy zbiór

wskaza

ń, który nie zawiera żadnego elementu. Jeżeli funkcja jest wywoływana z argu-

mentem ename, to ssadd tworzy nowy zbiór zawieraj

ący tę nazwę elementu. Jeżeli

natomiast podano zarówno argument ename, jak i nazw

ę zbioru ss, to ssadd dodaje do

niego wymieniony z nazwy element rysunku. Funkcja ssadd zawsze zwraca wi

ęc albo

nowoutworzony zbiór wskaza

ń albo zbiór zmodyfikowany. Jeżeli ename zostaje dodana

do istniej

ącego zbioru, to wywołanie funkcji powoduje, że do zbioru tego dodawany

jest nowy element i zbiór ten jest zwracany jako nowy ss. Tak wi

ęc, jeżeli zbiór ten jest

przypisany innym zmiennym, to zostan

ą one również zmodyfikowane. Jeżeli nazwany

background image

857

BvupMJTQ!—!qsbluzd{oz!lvst

element wyst

ępuje już we wskazanym zbiorze, to operacja ssadd jest ignorowana; nie

pojawia si

ę żaden komunikat o błędzie. Przykładowo:

(setq e1 (entnext))

Przypisuje e1 nazw

ę pierwszego elementu rysunku

(setq z (ssadd))

Tworzy pusty zbiór wskaza

ń z

(ssadd e1 z)

Zwraca zbiór z z dodan

ą nazwą elementu e1

(setq e2 (entnext e1)

Przypisuje e2 nazw

ę następnego elementu po e1

(ssadd e2 z)

Zwraca zbiór z z dodan

ą nazwą elementu e2

)tte

)tte

)tte

)ttefm!

fm!

fm!

fm!fobnf!tt****

Funkcja ssdel powoduje wymazanie nazwy elementu ename ze zbioru wybranych
elementów rysunku ss i zwraca nazw

ę tego zbioru. Należy zwrócić uwagę na to, że

element jest rzeczywi

ście usuwany ze zbioru, a w rezultacie zwracany jest nowy zbiór,

który nie zawiera ju

ż tego elementu. Jeżeli w zbiorze nie ma tego elementu, to funkcja

zwraca nil.

Przykładowo, zakładaj

ąc że nazwa elementu e1 należy do zbioru wskazań z, a nazwa

elementu e2 do niego nie nale

ży, to:

(ssdel e1 z)

zwraca zbiór wskaza

ń z bez elementu e1

(ssdel e2 z)

zwraca nil; z nie ulega zmianie

)tthfu!

)tthfu!

)tthfu!

)tthfu!\npef^!\qu2!\qu3^^!\qu.mjtu^!\gjmufs.mjtu^****

Funkcja ssget zwraca utworzony zbiór wskaza

ń (zbiór wybranych elementów).

Opcjonalny argument mode jest warto

ścią typu string, która określa sposób dokony-

wania wyboru elementów. Mo

że on przyjmować wartości związane z odpowiednimi

trybami wybierania elementów rysunkowych: "O" (Okono), "OW" (OWbok), "Z"
(prZeci

ęcie), "ZW" (ZWbok), "S" (oStatni), "P" (Poprzedni), "U" (Uchwycony) i "K"

(Kraw

ędź). Możliwa jest jeszcze wartość "x" argumentu mode, powodująca wybranie

całej zawarto

ści bazy danych rysunku. Argumenty pt1 i pt2 określają punkty

interpretowane odpowiednio do zadeklarowanego trybu tworzenia zbioru wskaza

ń.

Je

żeli w wyrażeniu podany jest punkt, a pominięto argument mode, to jest to

równowa

żne wybraniu jednego elementu przez wskazanie jednego punktu (tzw. metodą

punktowania). Bie

żące tryby lokalizowania punktów względem obiektów są ignoro-

wane przez t

ę funkcję, chyba że zostaną specjalnie uruchomione podczas aktywności tej

funkcji. Ponadto do tworzenia zbiorów wskaza

ń można wykorzystywać połączenie

dowolnego trybu z argumentem filter-list, uzyskuj

ąc precyzyjniejszą kontrolę procesu

tworzenia zbioru wskaza

ń.

Je

żeli pominięto wszystkie argumenty, ssget powoduje wyświetlenie zgłoszenia Wskaż

obiekty:, umo

żliwiając użytkownikowi skorzystanie z normalnego dla AutoCADa

interakcyjnego tworzenia zbioru wskaza

ń.

Zbiory wskaza

ń mogą zawierać elementy wybrane zarówno z obszaru papieru, jak i z ob-

szaru modelu. Jednak w sytuacji, gdy zbiór wskaza

ń jest wykorzystywany podczas jakiejś

background image

Epebufl!C

858

operacji, to elementy z obszaru aktualnie nieaktywnego nie s

ą brane pod uwagę (zostają

odfiltrowywane). Dotyczy to równie

ż wszystkich poleceń AutoCADa.

Zwracane przez funkcj

ę ssget zbiory wskazań zawierają tylko elementy główne (nie

zawieraj

ą atrybutów Bloków ani Wierzchołków Polilinii). Oto szereg przykładów

wyra

żeń z funkcją ssget:

(ssget)

Wy

świetla zgłoszenie Wskaż obiekty:

(ssget "P")

Wybiera obiekty poprzednio wybrane

(ssget "S")

Wybiera element ostatnio dodany do bazy
danych

(ssget "I")

Tworzy zbiór wskaza

ń z elementów z Implied

zbioru

wskaza

ń (wybranych podczas stanu

aktywno

ści PICKFIRST)

(ssget '(2 2))

Wybiera element przechodz

ący przez punkt 2,2

(ssget "O" '(0 0) '(5 5))

Wybiera element w oknie o naro

żnikach 0,0 i 5,5

(ssget "Z" '(0 0) '(1 1))

Wybiera elementy przecinaj

ące ramkę o naro-

żnikach 0,0 i 1,1

(ssget "X" filtr)

Wybiera elementy zgodne z filtrem

(ssget "X")

Tworzy zbiór wskaza

ń zawierający wszystkie

elementy z bazy danych

(ssget "X" lista-filtr)

Przeszukuje baz

ę danych i tworzy zbiór wskazań

z elementami zgodnymi z argumentem lista-filtr

(ssget lista-filtr)

Żąda od użytkownika wskazywania elementów
i bierze do zbioru wskaza

ń tylko te, które są

zgodne z argumentem lista-filtr

(ssget "P" lista-filtr)

Tworzy zbiór wskaza

ń z ostatnio wybranych

elementów, zgodnych z argumentem lista-filtr

Nast

ępne przykłady użycia funkcji ssget wymagają podania w argumentach listy punktów.

(setq lista-pkt '((1 1)(3 1)(5 2)(2 4)))

(ssget "OW" lista-pkt)

Tworzy zbiór wskaza

ń składający się ze wszy-

stkich elementów wenw

ątrz wielokąta o wierz-

chołkach okre

ślonych przez lista-pkt

(ssget "ZW" lista-pkt)

Tworzy zbiór wskaza

ń składający się ze wszy-

stkich elementów przecinaj

ących boki i zawar-

tych

całkowicie

wenw

ątrz

wielok

ąta

o

wierzchołkach okre

ślonych przez lista-pkt

(ssget "K" lista-pkt)

Tworzy zbiór wskaza

ń składający się ze wszy-

stkich elementów przecinaj

ących kierownicę

zdefiniowan

ą przez lista-pkt

(ssget "OW" lista-pkt

lista-filtr)

Tworzy zbiór wskaza

ń składający się ze wszy-

stkich elementów wenw

ątrz wielokąta o wierz-

chołkach okre

ślonych przez lista-pkt i zgodnych

z list

ą filtrującą lista-filtr

background image

859

BvupMJTQ!—!qsbluzd{oz!lvst

Wybrane elementy s

ą wyróżniane na ekranie tylko w wypadku wywołania ssget bez

argumentów. Nie jest przechowywana jakakolwiek informacja o sposobie dokonania
wyboru (patrz jednak opis funkcji entsel, która stanowi tu rozwi

ązanie alternatywne). Zbiory

wskaza

ń zajmują obszary pamięci przeznaczone dla pliku tymczasowego AutoCADa,

w zwi

ązku z czym liczba jednocześnie otwartych zbiorów jest dla AutoLISPu ograniczona

do 128. Po osi

ągnięciu granicznej liczby utworzonych zbiorów, AutoCAD nie tworzy już

nast

ępnych, a każda próba wywołania funkcji ssget powoduje zwrócenie nil.

Zmienna z przypisanym zbiorem wskaza

ń może zostać wprowadzona jako odpowiedź

na ka

żde zgłoszenie gotowości AutoCADa Wskaż obiekty:, dla którego dopuszczalne

jest wybieranie elementów z u

życiem opcji oStatni.

Podanie w odpowiedzi symbolu, do którego przypisany jest zbiór wskaza

ń, powoduje

wybranie wszystkich elementów ze zbioru wskaza

ń ukrytego pod tym symbolem.

Filtry zbiorów wskaza

ń

Filtry zbiorów wskaza

ń mogą być używane w połączeniu z dowolnym z trybów

wybierania elementów. Argument filter-list jest list

ą asocjacji, podobną co do typu do

listy zwracanej przez funkcj

ę entget; filter-list określa cechy elementów, które mają być

badane oraz warto

ści, które cechy te powinny posiadać.

Wykorzystuj

ąc ten mechanizm można uzyskać zbiór wskazań zawierający wszystkie

elementy wybranego typu, poło

żone w wybranej warstwie rysunkowej, albo posiadające

okre

ślony kolor. Poniższy przykład zwraca zbiór wskazań składający się z niebieskich

Linii, b

ędących częścią zbioru wskazań Implied (elementów wybranych podczas

działania PICKFIRST):

(ssget "_I" '((0. "LINE") (62 . 5)))

Dzi

ęki liście filtrującej określonej dla funkcji ssget, można wybrać wszystkie elementy

rysunku, posiadaj

ące dane dodatkowe związane z wybraną aplikacją. Osiąga się to

poprzez u

życie kodu grupy –3, tak jak w wyrażeniu

(ssget "P" '((0 . "CIRCLE") (-3 ("NAZWA-APL"))))

Wyra

żenie takie spowodowałoby wybranie wszystkich Okręgów (elementów Circle),

zawieraj

ących dane dodatkowe dla programu użytkowego (aplikacji) "NAZWA-APL".

Testowanie relacji

O ile nie podano inaczej, w odniesieniu do ka

żdej pozycji argumentu filter-list

testowana jest relacja równo

ści. Dla grup liczbowych (liczby całkowite, rzeczywiste,

punkty i wektory) mo

żna określić inne relacje. Osiąga się to przez podanie specjalnego

kodu grupy –4, w którym okre

śla się operator relacji. Wartością grupy –4 jest łańcuch

alfanumeryczny wskazuj

ący operator, który ma być zastosowany w odniesieniu do

nast

ępnej grupy na liście filtrującej.

Na przykład:

(ssget "X" '((0 . CIRCLE") (-4 . ">=") (40 . 2.0)))

background image

Epebufl!C

85:

powoduje wybranie wszystkich Okr

ęgów (elementów Circle), których promień (kod

grupy 40) jest wi

ększy lub równy 2.0. Poniższa tabela ukazuje wszystkie dopuszczalne

operatory relacji:

Tabela B.14. Operatory relacji dla listy filtruj

ącej funkcji ssget

Operator

Znaczenie

"*"

Relacja dowolna (zawsze prawdziwe)

"="

Równe

"!="

Nierówne

"/="

Nierówne

"<>"

Nierówne

"<"

Mniejsze

"<="

Mniejsze lub równe

">"

Wi

ększe

">="

Wi

ększe lub równe

"&"

Bitowe AND (tylko grupy typu integer)

"&="

Równe pod wzgl

ędem bitowej maski (tylko grupy typu integer)

U

życie operatorów relacji zależy od grupy, która ma być testowana:

Wszystkie operatory relacji, za wyj

ątkiem operatorów bitowych ("&" i "&=") są

odpowiednie dla grup o warto

ściach całkowitych i rzeczywistych.

Operatory bitowe "&" i "&=" s

ą ważne wyłącznie dla grup o wartościach

całkowitych. Bitowe "AND" ("&") jest prawdziwe, je

śli ((integer_group & filter)

/= 0), a wi

ęc wtedy, gdy każdy bit ustawiony w masce jest także ustawiony

w grupie całkowitej. Równo

ść pod względem bitowej maski ("&=") jest

prawdziwa, je

śli ((integer_group & filter) = filter), a więc wtedy, gdy wszystkie

bity ustawione w masce s

ą także ustawione w grupie całkowitej (pozostałe bity

w integer_group mog

ą być ustawione, ale nie podlegają sprawdzaniu).

Dla grup punktowych, testowanie X, Y i Z mo

że być połączone w testowanie

jednego ła

ńcucha, składającego się z operatorów oddzielonych przecinkami (na

przykład ">,>,*"). Je

śli któryś z operatorów zostanie pominięty w łańcuhu (na

przykład "=,<>" pomija testowanie Z), wówczas przyjmowany jest operator
"relacja dowolna" ("*").

Wektory kierunkowe (typ grupy 210) mog

ą być porównywane wyłącznie za

pomoc

ą operatorów "*", "=" i "!=" (lub jednego z odpowiednich łańcuchów

relacji "nierówny").

Nie jest dopuszczalne stosowanie operatorów relacji do porównywania grup
ła

ńcuchowych. W zastępstwie można wykorzystywać znaki uniwersalne.

background image

861

BvupMJTQ!—!qsbluzd{oz!lvst

Logiczne grupowanie testów filtruj

ących

Opisane w poprzedniej cz

ęści operatory są operatorami binarnymi. Grupy mogą być

testowane tak

że przez tworzenie zagnieżdżonych wyrażeń booleowskich, wykorzystu-

j

ących operatory grupujące ukazane w poniższej tabeli. Podobnie jak operatory relacji,

operatory grupuj

ące są określane w grupie –4. Są one parowane, i aby wywołanie funkcji

ssget nie zako

ńczyło się błędem, muszą być właściwie wyważone. Ilość operandów, jaką

mog

ą obejmować te operatory, zależy od operacji. Ukazuje to następująca tabela.

Tabela B.15. Operatory grupuj

ące dla listy filtrującej zbiory wskazań

Operator pocz

ątkowy

Obejmuje

Operator ko

ńcowy

"<AND"

Jeden lub wi

ęcej operandów

"AND>"

"<OR"

Jeden lub wi

ęcej operandów

"OR>"

"<XOR"

Dwa operandy

"XOR>"

"<NOT"

Jeden operand

"NOT>"

Dla operatorów grupuj

ących, operandem może być grupa pola elementu, operator

relacji, po którym wyst

ępuje grupa pola elementu lub wyrażenie zagnieżdżone zbudo-

wane z tych operatorów.

Poni

żej podany jest przykład wykorzystania w liście filtrującej operatorów

grupuj

ących:

(ssget "X"

'(

(-4 . "<OR")

(-4 . "<AND")

(0 . "CIRCLE")
(40 . 1.0)

(-4 . "AND>")
(-4 . "<AND")

(0 . "LINE")
(8 . "ABC")

(-4 . "AND>")

(-4 . "OR>")

)

);ssget

Przykład ten spowodowałby wybranie wszystkich Okr

ęgów o promieniu 1.0 oraz wszy-

stkich Linii w warstwie rysunkowej "ABC".

Operatory grupuj

ące nie są czułe na pisownię dużymi lub małymi literami. Można

u

żywać ich pisanych małymi literami odpowiedników: "<and", "and>", "<or", "or>",

"<xor". "xor>", "<not" i "not>".

background image

Epebufl!C

862

)ttmfohui!

)ttmfohui!

)ttmfohui!

)ttmfohui!tt****

Funkcja zwraca liczb

ę typu integer, która określa liczbę elementów w zbiorze

wybranych elementów ss. Je

żeli liczba elementów należących do tego zbioru jest

wi

ększa niż 32767, to funkcja zwraca liczbę typu real. Zbiory wskazań nigdy nie

zawieraj

ą duplikatów elementów, nawet jeżeli były one wybierane wielokrotnie do

umieszczenia w tym samym zbiorze. Przykładowo:

(setq z (ssget "S"))

umieszcza ostatni obiekt w zbiorze z

(sslength z)

zwraca 1

)tt

)tt

)tt

)ttnfnc!

nfnc!

nfnc!

nfnc!fobnf!tt****

Funkcja ssmemb sprawdza, czy argument ename nale

ży do zbioru wybranych

elementów ss. Je

żeli tak jest, to ssmemb zwraca nazwę elementu (ename). W prze-

ciwnym wypadku funkcja zwraca nil. Załó

żmy przykładowo, że nazwa elementu e1

nale

ży do zbioru wskazań z, a nazwa elementu e2 do niego nie należy. Wówczas:

(ssmemb e1 z)

Zwraca nazw

ę elementu e1

(ssmemb e2 z)

Zwraca nil

)ttobnf!

)ttobnf!

)ttobnf!

)ttobnf!tt!joefy****

Funkcja zwraca nazw

ę elementu należącego do zbioru wybranych elementów ss i mają-

cego w nim numer porz

ądkowy index. Jeżeli index jest mniejszy od zera lub większy od

najwy

ższego numeru porządkowego dla argumentu ss, to funkcja zwraca nil. Pierwszy

element zbioru ma indeks 0. Nazwy elementów w zbiorach wskaza

ń utworzonych przez

funkcj

ę ssget zawsze będą nazwami elementów głównych. Wchodzące w ich skład

elementy podrz

ędne (atrybuty Bloków i Wierzchołki Polilinii) nie są zwracane.

Mo

żliwość dostępu do nich daje opisywana dalej funkcja entnext.

Przykładowo:

(setq z (ssget))

Tworzy zbiór wskaza

ń o nazwie z

(setq e1 (ssname z 0))

Przypisuje e1 nazw

ę 1-go elementu z

(setq e4 (ssname z 3))

Przypisuje e4 nazw

ę 4-go elementu z

Aby uzyska

ć dostęp do elementów zbioru o indeksie większym od 32767, należy

argument index wprowadzi

ć jako liczbę typu real. Przykładowo:

(setq ex (ssname z2 50843.0))

Przypisuje ex nazw

ę 50844-go elementu z2

)tus

)tus

)tus

)tusdbtf!

dbtf!

dbtf!

dbtf!tusjoh!\xijdi^****

Funkcja strcase bierze ła

ńcuch znaków alfanumerycznych string i zwraca go po

dokonaniu konwersji wszystkich liter alfabetu na du

że lub małe (majuskuła lub minu-

background image

863

BvupMJTQ!—!qsbluzd{oz!lvst

skuła), zale

żnie od wartości drugiego argumentu which. Jeżeli argument which został

w wyra

żeniu pominięty lub wynik jego ewaluacji daje wartość nil, to wszystkie litery

zostan

ą zamienione na duże (majuskuła). Jeżeli natomiast argument which jest podany

i jest ró

żny od nil, to wszystkie litery w łańcuchu alfanumerycznym string zostaną

zamienione na małe. Przykładowo:

(strcase "acAD-pN")

zwraca

"ACAD-PN"

(strcase "AbCd" T)

zwraca

"abcd"

)tusdbu!

)tusdbu!

)tusdbu!

)tusdbu!tusjoh2!\tusjoh3^!

****

Funkcja zwraca ła

ńcuch powstały w wyniku konkatenacji (połączenia) argumentów

string1, string2 itd. Przykładowo:

(strcat "M" "arta")

zwraca

"Marta"

(strcat "a" "b" "c")

zwraca

"abc"

(strcat "a" "" "c")

zwraca

"ac"

)tusmfo!

)tusmfo!

)tusmfo!

)tusmfo!\tusjoh^!

****

Funkcja ta zwraca liczb

ę typu integer, której wartość odpowiada liczonej w znakach

długo

ści łańcucha alfanumerycznego string. Jeżeli wyrażenie ma więcej argumentów

string, wówczas funkcja zwraca całkowit

ą liczbę znaków we wszystkich argumentach.

Brak argumentów lub wprowadzenie ła

ńcucha pustego (tak jak w dwóch ostatnich

przykładach poni

żej), powoduje zwrócenie liczby 0 (typ integer). Przykładowo:

(strlen "abcd")

zwraca

4

(strlen "ab")

zwraca

2

(strlen "raz" "dwa" "trzy")

zwraca

10

(strlen)

zwraca

0

(strlen "")

zwraca

0

)tv

)tv

)tv

)tvctu!

ctu!

ctu!

ctu!ofxjufn!pmejufn!mjtu****

Funkcja wyszukuje olditem w

śród elementów argumentu list i zwraca kopię tej listy,

w której ka

żdy olditem został zastąpiony przez newitem. Jeżeli list nie zawiera

elementów olditem, to funkcja subst zwraca argument list w niezmienionej postaci.
Przykładowo, je

żeli dokonamy podstawień:

(setq test '(a b (c d) b))

to:

(subst 'qq 'b test)

zwraca

(A QQ (C D) QQ)

(subst 'qq 'z test)

zwraca

(A B (C D) B)

(subst 'qq '(c d) test)

zwraca

(A B QQ B)

(subst '(qq rr) '(c d) test)

zwraca

(A B (QQ RR) B)

background image

Epebufl!C

864

(subst '(qq rr) 'z test)

zwraca

(A B (C D) B)

U

życie funkcji subst w połączeniu z assoc umożliwia wygodną wymianę wartości powią-

zanej z jednym kluczem na li

ście asocjacji. Przykładowo, jeżeli dokonamy podstawień:

(setq kto '((a jan) (b f.) (c kowalski))

to:

(setq a1

(assoc 'a kto))

zwraca

(A JAN)

(setq a2 '(a j.))

zwraca

(A J.)

(subst a1 a2 kto)

zwraca

((A J.) (B F.) (C KOWALSKI))

)tvctus!

)tvctus!

)tvctus!

)tvctus!tusjoh!tubsu!\mfohui^****

Funkcja ta zwraca ła

ńcuch alfanumeryczny, który jest częścią argumentu string.

Rozpoczyna si

ę on od znaku na pozycji start i zawiera tyle kolejnych znaków, ile

okre

śla argument length. Jeżeli argument length nie występuje w wyrażeniu, to zwraca-

ny ła

ńcuch zawiera znaki aż do końca argumentu string. Argumenty start i length

musz

ą być dodatnimi liczbami typu integer.

Istotne jest zwrócenie uwagi na to,

że pierwszy znak w łańcuchu string ma numer 1.

Jest to ró

żnica w stosunku do wszystkich innych funkcji, operujących na elementach list

(takich jak nth, ssname i inne), które pozycj

ę pierwszego elementu listy liczą jako

pozycj

ę 0.

Przykład

(substr "abcde" 2)

zwraca

"bcde"

(substr "abcde" 2 1)

zwraca

"b"

(substr "abcde" 3 2)

zwraca

"cd"

)ubcmfu!

)ubcmfu!

)ubcmfu!

)ubcmfu!dpef!\spx2!spx3!spx4!ejsfdujpo^****

Funkcja ta słu

ży do odczytywania i ustalania kalibracji pulpitu graficznego (ang.tablet).

Mo

żna jej używać po prostu do zapamiętywania i odtwarzania kalibracji lub do two-

rzenia nowych transformacji tabletu.

W zale

żności od wartości argumentu całkowitego code, funkcja tablet odtwarza bieżącą

kalibracj

ę digitizera (pulpitu), albo ustanawia nową kalibrację. Gdy code jest równy

0, tablet zwraca bie

żącą kalibrację. Gdy argument code jest równy 1, muszą po nim wy-

st

ąpić nowe parametry kalibracji: row1, row2, row3 i direction.

code

Liczba całkowita (typu integer).
Gdy code jest równy 0, tablet zwraca bie

żącą

kalibracj

ę. W tym wypadku wszystkie pozostałe

argumenty musz

ą być pominięte. Gdy kod jest równy

background image

865

BvupMJTQ!—!qsbluzd{oz!lvst

1, tablet ustala now

ą kalibrację, zgodnie z podanymi

nowymi parametrami. W tym wypadku pozostałe
argumenty musz

ą wystąpić.

row1, row2, row3

Trzy punkty 3W. Te trzy argumenty okre

ślają trzy

wiersze macierzy transformacji pulpitu.

direction

Punkt 3W. Jest to wektor (wyra

żony we współrzę-

dnych Globalnego Układu Współrz

ędnych GUW),

normalny do płaszczyzny reprezentuj

ącej powierz-

chni

ę tabletu.

Je

ś

li podany argument

direction nie jest znormalizowany, funkcja tablet

skoryguje go. Dlatego kierunek zwracany przez tablet mo

ż

e ró

ż

ni

ć

si

ę

od

podanego jako argument. Podobnie, trzeci wiersz row3 (Z) musi by

ć

zawsze

równy 1. Tablet zwraca ten parametr jako zawsze równy 1, nawet je

ś

li row3 na

li

ś

cie argumentów miał inn

ą

warto

ść

.

Je

śli wywołanie funkcji tablet nie zakończy się sukcesem, zwraca ona nil i ustawia zmienną

ERRNO na warto

ść wskazującą przyczynę wystąpienia błędu (patrz dodatek D). Sytuacja

taka mo

że zaistnieć na przykład wtedy, gdy digitizer nie jest jednocześnie pulpitem.

Bardzo prost

ą transformacją, jaka może być ustalona przez tablet, jest transformacja

to

żsamościowa:

(tablet 1 '(1 0 0) '(0 1 0) '(0 0 1) '(0 0 1))

Przy działaj

ącej takiej transformacji, AutoCAD będzie otrzymywał „surowe” współrzędne

digitizera z pulpitu. Je

śli na przykład, zostanie wskazany punkt o współrzędnych digitizera

(5000,15000), AutoCAD zobaczy go jako punkt w rysunku o takich samych współrz

ędnych.

Zmienna systemowa TABMODE umo

ż

liwia programom w AutoLISPie wł

ą

czanie

i wył

ą

czanie trybu pulpitowego.

)ucmof

)ucmof

)ucmof

)ucmofyu!

yu!

yu!

yu!ubcmf.obnf!\sfxjoe^****

Funkcja tblnext jest u

żywana przy przeszukiwaniu całej tablicy symboli. Pierwszym

argumentem jest ła

ńcuch alfanumeryczny, który identyfikuje interesującą nas tablicę

symboli. Dopuszczalnymi nazwami s

ą "LAYER" (tablica warstw), "LTYPE (tablica

rodzajów linii), "VIEW" (tablica widoków), "STYLE" (tablica stylów pisma), "BLOCK"
(tablica bloków), "UCS" (tablica lokalnych układów współrz

ędnych), "APPID" (tablica

aplikacji), "DIMSTYLE" (tablica stylów wymiarowania) i "VPORT" (tablica rzutni).
Ła

ńcuchy te nie muszą być pisane dużymi literami. Zazwyczaj powtarzanie tblnext

zwraca za ka

żdym razem następną z kolei pozycję w określonej tablicy (na ustalenie

nast

ępnej pozycji do odczytania pozwala opisywana dalej funkcja tblsearch).

Je

żeli jednak podano również argument rewind, który po ewaluacji daje wartość różną

od nil, to tablica symboli jest ponownie odczytywana od pierwszej wprowadzonej do

background image

Epebufl!C

866

niej pozycji. W przypadku, gdy w tablicy nie ma ju

ż więcej zapisanych pozycji, funkcja

zwraca nil. Nigdy nie s

ą zwracane pozycje usunięte z tablicy.

Po znalezieniu wpisanej do tablicy pozycji, funkcja zwraca j

ą w postaci listy par kro-

pkowych zawieraj

ących kody grup i wartości w standardzie DXF. Lista ta jest bardzo

podobna do zwracanej przez entget. Przykładowo:

(tblnext "layer" T)

Dane pierwszej warstwy

mo

że zwrócić następującą listę:

(

(0 . "LAYER")

Typ symbolu

(2 . "0")

Nazwa symbolu

(70 . 0)

Wska

źniki

(62 . 7)

Numer koloru, ujemny gdy warstwa ukryta

(6 . "CONTINUOUS")

Nazwa rodzaju linii rysunkowej

)

Nale

ży zwrócić uwagę na brak grupy –1. AutoCAD pamięta ostatnią zwracaną pozycję

z ka

żdej tablicy i przy kolejnym wywołaniu funkcji tblnext dla danej tablicy, zwracana

jest nast

ępna wpisana do niej pozycja. Rozpoczynając przeglądanie tablicy należy się

upewni

ć, że drugi podany argument jest różny od nil. Zapewnia to rozpoczęcie

przegl

ądania tablicy od początku i zwrócenie jej pierwszej pozycji.

Pozycje odczytywane z tablicy Block zawieraj

ą grupę o kodzie –2, w której występuje

nazwa elementu dla pierwszego elementu w definicji Bloku (je

żeli taki występuje).

Je

żeli więc zdefiniowano Blok o nazwie RAMKA, to:

(tblnext "block")

Odczytuje definicj

ę Bloku

mo

że zwrócić:

(

(0 . "BLOCK")

Typ symbolu

(2 . "RAMKA")

Nazwa symbolu

(70 . 0)

Wska

źniki

(10 9.0 2.0 0.0)

Pocz

ątek X, Y, Z

(-2 . <Nazwa elementu: 40000126>)

Pierwszy element

)

Nazwa elementu zawarta w grupie –2 jest akceptowana przez funkcje entget i entnext.
Nie przyjmuj

ą jej jednak pozostałe funkcje dające dostęp do elementów rysunku.

Przykładowo oznacza to,

że nie jest możliwe umieszczenie takiego elementu w zbiorze

wskaza

ń przez wywołanie funkcji ssadd. Użycie w entnext nazwy elementu z grupy –2

pozwala na przegl

ądanie elementów składowych definicji bloku; po ostatnim elemencie

w definicji bloku entnext zwraca nil.

Je

ś

li Blok nie zawiera

ż

adnych elementów, zwracana przez tblnext grupa –2

jest nazw

ą

elementu Endblk tego Bloku.

background image

867

BvupMJTQ!—!qsbluzd{oz!lvst

)ucmtfbsd

)ucmtfbsd

)ucmtfbsd

)ucmtfbsdi!

i!

i!

i!ubcmf.obnf!tzncpm!\tfuofyu^****

Funkcja przegl

ąda tablicę symboli wskazywaną przez argument table-name (taki sam,

jak w przypadku tblnext) w poszukiwaniu nazwy symbolu okre

ślonego przez argument

symbol. U

żyte w obu nazwach małe litery są automatycznie zamieniane na duże. Jeżeli

zostanie znaleziony wpis dla okre

ślonej nazwy symbolu, to pozycja ta jest zwracana

w formacie opisanym dla tblnext. W przeciwnym wypadku, funkcja zwraca nil.
Przykładowo:

(tblsearch "style" "standard")

Parametry stylu pisma

mo

że zwrócić:

(

(0 . "STYLE")

Typ symbolu

(2 . "STANDARD")

Nazwa symbolu

(70 . 0)

Wska

źniki

(40 . 0.0)

Stała wysoko

ść znaków

(41 . 1.0)

Współczynnik szeroko

ści

(50 . 0.0)

K

ąt pochylenia

(71 . 0)

Wska

źniki generowania

(3 . "txt")

Podstawowy plik kroju czcionki

(4 . "")

Plik wieloznakowy

)

Zwykle tblsearch nie ma wpływu na kolejno

ść odczytywania pozycji tablicy przez

tblnext. Je

żeli jednak użycie tblsearch skończyło się odnalezieniem szukanego wpisu

i wprowadzony został ró

żny od nil argument setnext, to licznik pozycji dla funkcji

tblnext zostanie tak ustawiony,

że jej wywołanie zwróci wpis następny względem

pozycji zwróconej w wyniku wywołania funkcji tblsearch.

)ufsqsj*

)ufsqsj*

)ufsqsj*

)ufsqsj*

Funkcja ta wypisuje na ekranie now

ą linię i zwraca nil. Funkcja terpri nie jest stoso-

wana w operacjach wej

ścia/wyjścia na plikach. Aby wpisać do pliku nową linię, należy

u

żyć funkcji print lub princ.

)ufyuc

)ufyuc

)ufyuc

)ufyucpy!

py!

py!

py!fmjtu****

Jest to funkcja mierz

ąca wybrany element rysunkowy Tekst i zwracająca współrzędne

przek

ątnej prostokąta, obejmującego ten element.

Argument elist musi definiowa

ć element tekstowy. Jeśli w liście pominięte są wszystkie

pola definiuj

ące parametry tekstu, poza samym tekstem, wykorzystywane są bieżące

(lub standardowe) parametry. Zako

ńczone sukcesem wywołanie funkcji textbox powo-

duje zwrócenie dwóch punktów. W przeciwnym wypadku funkcja zwraca nil.

background image

Epebufl!C

868

Minimalna lista akceptowalna przez texbox zawiera sam tekst.

(textbox '((1 . "Hello world")))

mo

że zwrócić

((0.0 0.0 0.0) (0.8 0.2 0.0))

W powy

ższym przykładzie, jako pozostałe brakujące parametry funkcji textbox

wykorzystuje parametry standardowe. Punkty zwracane przez textbox definiuj

ą prostokąt

ograniczaj

ący element Tekst w taki sposób, jakby punktem wstawienia Tekstu był

pocz

ątek układu współrzędnych (0,0,0), a kąt obrotu wynosił 0. Pierwszą zwracaną listą

jest z reguły punkt (0.0, 0.0, 0.0), chyba

że element Tekst jest pisany pismem

pochylonym, pionowym, lub zawiera litery „z ogonkami” (takie jak g czy p). Warto

ść

listy okre

ślającej pierwszy punkt wskazuje przemieszczenie od punktu wstawienia

Tekstu, do dolnego lewego wierzchołka najmniejszego prostok

ąta, obejmującego element

Tekst. Lista zawieraj

ąca współrzędne drugiego punktu definiuje prawy górny wierzchołek

tego prostok

ąta. Niezależnie od orientacji mierzonego Tekstu zwracana lista punktów

zawsze wskazuje lewy dolny i prawy górny wierzchołek obejmuj

ącego prostokąta.

)ufyuqbhf*

)ufyuqbhf*

)ufyuqbhf*

)ufyuqbhf*

W jednomonitorowych instalacjach AutoCADa, funkcja ta wymazuje zawarto

ść

tekstowego okna AutoCADa i wy

świetla jego treść zamiast ekranu graficznego. Jest

ona równowa

żna funkcji textscr z tą jedynie różnicą, że usuwa wszelkie informacje

tekstowe, które były do tej pory wy

świetlane w oknie tekstowym. Funkcja textpage

zawsze zwraca nil.

Informacje uzupełniaj

ące: Patrz opisy funkcji textscr oraz graphscr.

)ufyu

)ufyu

)ufyu

)ufyutds*

tds*

tds*

tds*

W systemie z jednym monitorem funkcja textscr powoduje przeł

ączenie ekranu z trybu

graficznego w tryb tekstowy (podobnie jak klawisz funkcyjny AutoCADa Przeł

ącz

Ekran — F1). Funkcja textscr zawsze zwraca nil.

Informacje uzupełniaj

ące: Patrz opisy funkcji textpage i graphscr.

)usbdf!

)usbdf!

)usbdf!

)usbdf!gvodujpo!

****

Funkcja trace jest narz

ędziem pomocniczym do tzw. uruchamiania programów, przez

co nale

ży rozumieć ich testowanie w poszukiwaniu błędów. Ustawia ona znaczniki,

które pozwalaj

ą na śledzenie przebiegu wskazanych argumentów function i zwraca

nazw

ę ostatniej funkcji. Za każdym razem, gdy wskazana function jest poddawana

ewaluacji, na ekranie pojawia si

ę informacja o tym fakcie, wraz z podaniem stopnia

zagł

ębienia wywołań, oraz wypisywany jest wynik zwracany przez tę funkcję.

background image

869

BvupMJTQ!—!qsbluzd{oz!lvst

Przykładowo:

(trace test)

zwraca

TEST

i ustawia znacznik umo

żliwiający śledzenie przebiegu funkcji TEST.

Funkcja trace zwraca nazw

ę ostatniej napotkanej funkcji.

Informacje uzupełniaj

ące: Patrz opis funkcji untrace.

)usbot!

)usbot!

)usbot!

)usbot!qu!gspn!up!\ejtq^****

Funkcja ta dokonuje transformacji układu współrz

ędnych. Argument pt jest listą trzech

liczb typu real, która mo

że być interpretowana jako punkt 3W lub przesunięcie 3W

(wektor przesuni

ęcia). Argument from jest kodem określającym układ współrzędnych,

dla którego okre

ślono wartości współrzędnych argumentu pt, a argument to jest kodem

układu współrz

ędnych, do którego odnoszą się wartości zwracane przez funkcję. Jeżeli

w wyra

żeniu podano opcjonalny argument disp i jest on różny od nil, to argument pt

b

ędzie traktowany jako przesunięcie 3W. Argumenty from i to mogą przyjmować

nast

ępujące wartości:

Kodów o warto

ści całkowitej (typ integer) z przedstawionej tabeli.

Tabela B.16. Kody układów współrz

ędnych

Kod

Układ współrz

ędnych

0

Globalny Układ Współrz

ędnych (GUW)

1

Lokalny Układ Współrz

ędnych (aktualnie obowiązujący LUW)

2

Ekranowy Układ Współrz

ędnychEUW dla aktualnej rzutni, z użyciem

kodu 0 lub 1EUW dla aktualnej rzutni w obszarze modelu, w przypadku
u

życia łącznie z kodem 3

3

EUW w obszarze papieru (u

żywany tylko łącznie z kodem 2)

Nazwa elementu w postaci zwracanej przez opisywane w dodatku funkcje
entnext, entlast, entsel, nentsel i ssname. Umo

żliwia to transformację układu

współrz

ędnych (rozumianą tu jako konwersja współrzędnych punktu) na zgodny

z Układem Współrz

ędnych Elementu (UWE) związanego z konkretnym elemen-

tem rysunku i transformacj

ę odwrotną. W przypadku niektórych elementów,

Układ Współrz

ędnych Elementu jest równoważny Globalnemu Układowi

Współrz

ędnych; dla tych elementów konwersja współrzędnych UWE na GUW

jest operacj

ą pustą.

Wektor 3W, który wyznacza kierunek pogrubiania (lista trzech liczb typu real).
Jest to inna metoda transformacji bazuj

ącej na UWE konkretnego elementu.

Sposób ten nie daje jednak

żadnego efektu w przypadku elementów, dla których

UWE i GUW s

ą równoważne.

Funkcja trans zwraca list

ę współrzędnych punktu 3W (lub wektora przesu-

ni

ęcia), które są wyrażone w układzie współrzędnych układ-2.

background image

Epebufl!C

86:

Przykładowo, je

żeli LUW został zdefiniowany w wyniku transformacji GUW

polegaj

ącej na obrocie o 90 stopni wokół osi Z w kierunku przeciwnym do

kierunku ruchu wskazówek zegara, to:

(trans '(1.0 2.0 3.0) 0 1)

zwraca

(2.0 -1.0 3.0)

(trans '(1.0 2.0 3.0) 1 0)

zwraca

(-2.0 1.0 3.0)

Układy współrz

ędnych.

Przykładowo, je

żeli chcemy narysować odcinek prostoliniowy od punktu

wstawienia jakiego

ś tekstu (bez użycia polecenia OBIEKT), to współrzędne

EUW punktu wstawienia elementu typu Tekst mo

żna poddać konwersji na

warto

ści LUW:

(trans text-insert-point text-ename 1)

co mo

że stanowić odpowiedź wprowadzoną w odpowiedzi na zgłoszenie Od

punktu:.

Z drugiej strony, przed przekazaniem warto

ści współrzędnych punktu (lub

wektora przesuni

ęcia) do funkcji entmod, należy dokonać ich konwersji do

docelowego UWE. Przykładowo, gdy chcemy przesun

ąć Okrąg względem LUW

o warto

ści 1,2,3 (nie korzystając z polecenia PRZESUŃ), to należałoby dokonać

konwersji współrz

ędnych wektora przesunięcia z LUW do UWE okręgu:

(trans '(1 2 3) 1 okr

ą

g-nazwa-elementu)

Nast

ępnie należy dodać otrzymane przesunięcie do punktu będącego środkiem

okr

ęgu. Przykładowo, jeżeli chcemy sprawdzić, bliżej którego końca danego

elementu Linia wydaje si

ę leżeć wprowadzony przez użytkownika punkt, to

nale

ży dokonać konwersji jego współrzędnych z LUW do EUW:

(trans punkt 1 2)

oraz konwersji obu ko

ńców odcinka z UWE związanego z elementem Linia do

EUW:

(trans koniec linia-nazwa-elementu 2)

Teraz mo

żna obliczyć odległości między wprowadzonym punktem i każdym

z ko

ńców odcinka (ignorując współrzędne Z) i na tej podstawie określić, który

z ko

ńców odcinka będzie na ekranie wyglądał na położony bliżej.

Funkcja trans mo

że również dokonywać transformacji punktów 2W. Uzupełnia przy

tym dane punktu odpowiedni

ą wartością współrzędnej Z. Zależy ona od użytego

argumentu from oraz od tego, czy argument pt ma by

ć poddany konwersji jako punkt

czy jako przesuni

ęcie. Jeśli wartość ma być transformowana jako przesunięcie, wartość

Z zawsze wynosi 0.0. Je

śli wartość transformowana ma być punktem, uzupełniająca

warto

ść współrzędnej Z jest określana zgodnie z poniższymi zasadami.

Tabela B.17. Uzupełniaj

ące wartości Z dla transformowanych punktów 2W

Układ pocz

ątkowy

Uzupełniaj

ąca wartość Z

GUW

0.0

LUW

aktualny poziom

background image

871

BvupMJTQ!—!qsbluzd{oz!lvst

UWE

0.0

Tabela B.17. Uzupełniaj

ące wartości Z dla transformowanych punktów 2W (c.d.)

Układ pocz

ątkowy

Uzupełniaj

ąca wartość Z

EUW

Rzut na aktualn

ą płaszczyznę konstrukcyjną (płaszczyzna XY

LUW + aktualny poziom)

EUWOP

Rzut na aktualn

ą płaszczyznę konstrukcyjną (płaszczyzna XY LUW

+ aktualny poziom)

)uz

)uz

)uz

)uzqf!

qf!

qf!

qf!jufn****

Funkcja ta zwraca okre

ślenie typu argumentu item, gdzie typ jest jedną z poniższych

pozycji (jako atom). Je

żeli argument item w wyniku ewaluacji daje nil, funkcja zwraca

nil.

Tabela B.18. Typy zmiennych zwracane przez funkcj

ę type

Typ

Znaczenie

REAL

Liczby zmiennoprzecinkowe

FILE

Deskryptory plików

STR

Ła

ńcuchy tekstowe

INT

Liczby całkowite

SYM

Symbole

LIST

Listy i funkcje u

żytkownika

SUBR

Funkcje wewn

ętrzne

EXSUBR

Funkcje zewn

ętrzne (ADS)

PICKSET

Zbiory wskaza

ń

ENAME

Nazwy elementów

PAGETB

Tablice stronicowania funkcji

Przykładowo, je

żeli dokonano przypisań:

(setq a 123 r 3.45 s "Witam!" x '(a b c))
(setq f (open "nazwa" "r"))

to:

(type 'a)

zwraca

SYM

(type a)

zwraca

INT

(type f)

zwraca

FILE

(type r)

zwraca

REAL

(type s)

zwraca

STR

(type x)

zwraca

LIST

background image

Epebufl!C

872

(type +)

zwraca

SUBR

(type nil)

zwraca

nil

Kolejny przykład ilustruje, w jaki sposób mo

żna wykorzystać funkcję type:

(defun isint (a)

(if (=(type a) 'INT)

czy jest to liczba typu integer?

T

gdy tak, zwraca

T

nil

gdy nie, zwraca nil

);if

);defun

)vousbdf!

)vousbdf!

)vousbdf!

)vousbdf!gvodujpo!

****

Funkcja untrace usuwa ustawione przez trace znaczniki

śledzenia dla argumentów

function i zwraca nazw

ę ostatniej funkcji. Pozwala na selektywne wyłączanie trybu

śledzenia przebiegu wykonywania testowanego programu. Przykładowo:

(untrace TEST)

zwraca

TEST

oraz usuwa znacznik

śledzenia dla funkcji TEST.

Informacje uzuzpełniaj

ące: Patrz także opis funkcji trace.

))))wfs*

wfs*

wfs*

wfs*

Funkcja ta zwraca ła

ńcuch alfanumeryczny (typ string), który zawiera numer aktualnej

wersji AutoLISPu. Funkcja ta powinna by

ć używana (w połączeniu z equal) do

sprawdzania kompatybilno

ści programów. Łańcuch ten zwracany jest w postaci:

"AutoLISP Wydanie X.X"

gdzie X.X jest numerem wersji. Przykładowo:

(ver)

mo

że zwrócić

"AutoLISP Wydanie 12.0"

Programy u

żytkowe, testując łańcuch zwracany przez funkcję ver, mogą sprawdzać,

która wersja AutoLISPu jest wykorzystywana.

)wnpo*

)wnpo*

)wnpo*

)wnpo*

Obecnie funkcja ta nie zapewnia ju

ż wirtualnego stronicowania funkcji, ale została

pozostawiona w AutoLISPie w celu zapewnienia zgodno

ści z poprzednimi wersjami.

)wqps

)wqps

)wqps

)wqpsut*

ut*

ut*

ut*

Funkcja ta zwraca list

ę deskryptorów rzutni dla aktualnej konfiguracji rzutni. Każdy

deskryptor rzutni jest list

ą zawierającą jej numer identyfikacyjny oraz współrzędne

lewego dolnego i prawego górnego naro

żnika rzutni.

background image

873

BvupMJTQ!—!qsbluzd{oz!lvst

Gdy zmienna systemowa TILEMODE ma warto

ść 1, zwracana lista opisuje konfigu-

racj

ę rzutni utworzoną za pomocą polecenia RZUTNIE.

Współrz

ędne rogów rzutni są wartościami z zakresu od 0.0 do 1.0, gdzie (0.0 0.0)

odpowiada lewemu dolnemu naro

żnikowi graficznego obszaru ekranu, a (1.0 1.0)

reprezentuje prawy górny naro

żnik. Jeżeli zmienna TILEMODE ma wartość 0, to

zwracana lista opisuje rzutnie b

ędące elementami rysunku, które zostały utworzone za

pomoc

ą polecenia WWIDOK. Narożniki takich rzutni są wyrażane we współrzędnych

w obszarze papieru. Gdy tryb TILEMODE jest wył

ączony, wówczas rzutnią oznaczoną

numerem 1 jest zawsze obszar papieru.

Przykładowo przy konfiguracji z jedn

ą rzutnią, gdy zmienna TILEMODE ma wartość 1,

funkcja vports mo

że zwrócić listę:

((1 (0.0 0.0) (1.0 1.0)))

Podobnie, przy podziale ekranu na cztery równe rzutnie rozmieszczone w czterech naro-

żnikach ekranu, gdy zmienna TILEMODE ma wartość 1, funkcja vports może zwrócić:

(

(5 (0.5 0.0) (1.0 0.5))

(2 (0.5 0.5) (1.0 1.0))
(3 (0.0 0.5) (0.5 1.0))
(4 (0.0 0.0) (0.5 0.5)) )

Deskryptor rzutni aktualnej jest zawsze umieszczany na pierwszym miejscu listy.
W przykładzie przedstawionym powy

żej, rzutnia 5 jest rzutnią aktualną.

)xdnbudi!

)xdnbudi!

)xdnbudi!

)xdnbudi!tusjoh!qbuufso****

Funkcja ta sprawdza, czy wzorzec, mog

ący zawierać znaki uniwersalne, odpowiada

argumentowi string. Argument string jest porównywany z argumentem pattern. Je

żeli

s

ą one sobie równe, funkcja zwraca T; w przeciwnym wypadku funkcja zwraca nil.

Tak string, jak i pattern, mog

ą być cytowanymi dosłownie (przez quote lub apostrof)

ła

ńcuchami alfanumerycznymi lub zmiennymi. Argument pattern może zawierać

przedstawione poni

żej znaki uniwersalne. Porównywanych jest jedynie około 500

pierwszych znaków argumentów string i pattern; wszystkie pozostałe s

ą ignorowane.

Tabela B.19. Znaki uniwersalne

Znak

Definicja

#(lub "funt")

Dowolna cyfra

@(At)

Dowolny znak alfabetu

.(kropka)

Dowolny znak niealfanumeryczny

*(gwiazdka)

Dowolna sekwencja znaków, wł

ącznie z łańcuchem pustym. Ten znak

uniwersalny mo

że być umieszczany w dowolnym miejscu wzorca (na

pocz

ątku, w środku, lub na końcu)

background image

Epebufl!C

874

Tabela B.19. Znaki uniwersalne (c.d.)

Znak

Definicja

?(pytajnik)

Dowolny znak

~(tylda)

Je

żeli jest to pierwszy znak wzorca, to pokrywa wszystko oprócz

wzorca

[…]

Dowolny znak z umieszczonych w nawiasach

[~…]

Dowolny znak ró

żny od umieszczonych w nawiasach

— (my

ślnik)

Do u

żytku wewnątrz nawiasów

,(przecinek)

Oddziela dwa wzorce

`(lewy apostrof)

Powoduje,

że następujący potem znak specjalny jest interpretowany

dosłownie, jako znak pozbawiony specjalnego znaczenia

Przykładowo:

(wcmatch "Nazwa" "N*")

zwraca

T

Wyra

żenie to testuje łańcuch alfanumeryczny „Nazwa”, sprawdzając czy zaczyna się od

znaku „N”. Mo

żliwe jest używanie we wzorcu przecinków, co pozwala na wprowa-

dzenie wi

ększej liczby warunków. Poniższy przykład prezentuje testowanie przez

porównanie z trzema wzorcami:

(wcmatch "Nazwa" "???,~*w*,N*")

i zwraca

T

Je

żeli spełniony jest warunek zgodności z dowolnym z wzorców, funkcja zwraca T.

W powy

ższym przypadku testowane były następujące warunki: „Nazwa” ma trzy znaki

(fałsz), „Nazwa” nie zawiera „w” (fałsz), „Nazwa” rozpoczyna si

ę od „N” (prawda).

Jedno porównanie dało wynik pozytywny i wyra

żenie zwraca T.

Testy porównawcze rozró

żniają duże i małe litery: musi tu być zachowana pełna

zgodno

ść. Argumentami string i pattern mogą być zmienne i wartości zwracane przez

funkcje AutoLISPu.

Je

żeli zachodzi potrzeba sprawdzenia, czy łańcuch zawiera znak spełniający funkcję

znaku uniwersalnego, w charakterze znaku ucieczki, blokuj

ącego jego działanie, można

wykorzysta

ć znak lewego apostrofu (`). Powoduje on, że występujący za nim znak nie

jest interpretowany jako znak uniwersalny i przy porównywaniu ma on swoje zwykłe
znaczenie. Przykładowo, je

żeli chcemy sprawdzić, czy w dowolnym miejscu w łań-

cuchu „Nazwa” wyst

ępuje przecinek, należy wprowadzić:

(wcmatch "Nazwa" "*`,*")

zwraca

nil

Ze wzgl

ę

du na mo

ż

liwo

ść

dodania w przyszłych wersjach AutoLISPu kolejnych

znaków uniwersalnych, dobr

ą

praktyk

ą

jest poprzedzanie lewym apostrofem (`)

wszystkich znaków niealfabetycznych. Zapewni to zgodno

ść

napisanego

programu z przyszłymi wydaniami pakietu.

background image

875

BvupMJTQ!—!qsbluzd{oz!lvst

Zarówno j

ęzyk C, jak i AutoLISP, wykorzystują lewy ukośnik (\) w charakterze znaku

ucieczki (ang. escape). Dlatego aby uzyska

ć w łańcuchu pojedynczy znak lewego uko-

śnika, należy użyć dwóch tych znaków (\\). Aby sprawdzić, czy znak lewego ukośnika
jest umieszczony w którymkolwiek miejscu ła

ńcucha „Nazwa”, należy napisać:

(wcmatch "Nazwa" "*`\\*")

zwraca

nil

Wszystkie znaki obj

ęte nawiasami kwadratowymi ([…]) są traktowane dosłownie i nie

ma konieczno

ści poprzedzania ich apostrofem. Wyjątki stanowią jednak tylda (~), która

nie jest znakiem steruj

ącym tylko wówczas, gdy nie jest pierwszym znakiem

umieszczonym w nawiasach, np. "[A~BC]". W przeciwnym wypadku jest ten znak
interpretowany jako operator negowania, którego znaczenie mo

żna przetłumaczyć

słowami wszystkie znaki, oprócz wyst

ępujących dalej, np. "[~ABC]". Myślnik (—) jest

odczytywany dosłownie tylko wówczas, gdy wyst

ępuje na początku lub na końcu

sekwencji znaków w nawiasach kwadratowych, np. "[—ABC]" lub "[ABC—]", lub gdy
wyst

ępuje po rozpoczynającej ciąg znaków tyldzie, np "[~—ABC]". W innych

przypadkach, my

ślnik (—) jest używany wewnątrz nawiasów kwadratowych do okre-

ślania zakresu wartości dla konkretnego znaku. Zakres funkcjonuje tylko dla poje-
dynczych znaków, tak wi

ęc "STR[1—38]" odpowiada łańcuchom „STR1”, „STR2”,

„STR4” i „STR8”, a "[—Z]" odpowiada dowolnej jednej du

żej literze.

Dosłownie interpretowany jest tak

że prawy nawias kwadratowy ("]"), występujący jako

pierwszy znak w nawiasach, lub po znaku tyldy, np. "[ ]ABC]" lub "[~]ABC]").

)xij

)xij

)xij

)xijmf!

mf!

mf!

mf!uftufyqs!fyqs!

****

Funkcja poddaje ewaluacji argument testexpr, i je

żeli jest on różny od nil, wylicza

pozostałe argumenty expr. Nast

ępnie wartość argumentu testexpr jest wyznaczana

ponownie. Taka sekwencja b

ędzie powtarzana dopóty, dopóki wyrażenie testexpr nie da

w wyniku nil. Wówczas funkcja while zwraca ostatni

ą wartość ostatniego argumentu

expr. Przykładowo:

(setq test 1)
wtedy:
(while (<= test 10)

(pewna-funkcja test)
(setq test (1 + test))

);while

wywoła dziesi

ęć razy funkcję pewna-funkcja dla wartości test od 1 do 10, a następnie

zwróci 11, jako warto

ść ostatniego wyliczonego wyrażenia.

)xsjuf.dibs!

)xsjuf.dibs!

)xsjuf.dibs!

)xsjuf.dibs!dpef!\gjmf.eftd^****

Funkcja zapisuje pojedynczy znak na ekranie lub w otwartym pliku, wskazywanym
przez file-desc. Argument code jest warto

ścią kodu ASCII (w systemie dziesiętnym)

zapisywanego znaku, a tak

że wartością zwracaną przez funkcję. Przykładowo:

(write-char 67)

zwraca

67

background image

Epebufl!C

876

i zapisuje na ekranie liter

ę C. Zakładając, że f jest deskryptorem otwartego pliku:

(write-char 67 f)

zwraca

67

i zapisuje liter

ę C do tego pliku.

AutoCAD i AutoLISP mog

ą pracować pod kontrolą różnych systemów operacyjnych,

w których z kolei mog

ą być używane różne konwencje sygnalizowania końca linii

w pliku tekstowym ASCII. Przykładowo, w systemie operacyjnym UNIX wykorzy-
stywany jest pojedynczy znak nowej linii (LF, ang. linefeed), którego kodem ASCII jest
liczba 10. W systemie operacyjnym DOS do tego celu stosuje si

ę parę znaków, tzn.

znak powrotu karetki (CR, ang. carriage-return) w poł

ączeniu ze znakiem nowej linii

LF, których kodami ASCII s

ą liczby 13 i 10. Aby ułatwić przenoszenie programów

AutoLISPu pomi

ędzy wszystkimi systemami operacyjnymi, funkcja write-char

dokonuje konwersji znaku nowej linii LF (kod ASCII 10) na znak ko

ńca linii (lub

sekwencj

ę znaków) używany w aktualnie wykorzystywanym systemie operacyjnym.

Zatem w systemie operacyjnym DOS

(write-char 10 f)

zwraca

10

ale zapisuje do pliku sekwencj

ę znaków CR/LF (kody ASCII 13 i 10). Funkcja write-

char nie mo

że zapisać do pliku znaku NUL (kod ASCII 0).

Informacje uzupełniaj

ące: Listę kodów ASCII zawiera dodatek C.

)xsjuf.mj

)xsjuf.mj

)xsjuf.mj

)xsjuf.mjof!

of!

of!

of!tusjoh!\gjmf.eftd^****

Funkcja zapisuje ła

ńcuch alfanumeryczny string na ekranie lub do otwartego pliku wska-

zywanego przez file-desc i zwraca argument string bez ewaluacji, w postaci znaków
uj

ętych w cudzysłów, który jest jednak pomijany przy zapisie do pliku. Przykładowo,

zakładaj

ąc, że f jest deskryptorem otwartego pliku:

(write-line "Test" f)

zapisuje

Test

i zwraca

"Test"

)yesppn!

)yesppn!

)yesppn!

)yesppn!fobnf****

Funkcja xdroom zwraca ilo

ść pamięci, dostępnej dla dodatkowych danych elementu

ename. W przypadku wywołania nie zako

ńczonego sukcesem, funkcja zwraca nil.

Funkcja ta została udost

ępniona użytkownikom AutoLISPu, by pisane przez nich

programy miały mo

żliwość sprawdzenia ilości miejsca na dane, które programy te będą

próbowały umie

ścić jako dane dodatkowe elementu. Jest to przydatne z tego powodu,

że istnieje graniczna (obecnie 16 kilobajtów) ilość danych dodatkowych, jakie mogą
by

ć umieszczone przy elemencie, a jednocześnie możliwe jest umieszczanie w obszarze

danych dodatkowych jednego elementu danych tworzonych przez wiele programów.
Xdroom mo

żna wywoływać w zestawieniu z funkcją xdsize, która zwraca rozmiar listy

danych dodatkowych elementu.

background image

877

BvupMJTQ!—!qsbluzd{oz!lvst

Podany przykład sprawdza dost

ępne miejsce na dane dodatkowe elementu Rzutnia.

Zakładaj

ąc, że zmienna vpname zawiera nazwę elementu rysunkowego Rzutnia,

(xdroom vpname)

zwróci

16162

W przykładzie tym, istnienie wolnych 16,162 bajtów z pocz

ątkowo dostępnych dla

dodatkowych danych elementu 16.383 bajtów oznacza,

że 221 bajtów zostało już

wykorzystanych. Ilo

ść pamięci wykorzystanej na dane dodatkowe może być bezpo-

średnio uzyskana za pomocą funkcji xdsize.

)ye

)ye

)ye

)yetj{f!

tj{f!

tj{f!

tj{f!mjtu****

Funkcja ta zwraca rozmiar obszaru pami

ęci (w bajtach), jaki zajmuje list po dopisaniu

jej do elementu w charakterze danych dodatkowych. W przypadku nieudanego
wywołania funkcja zwraca nil.

Argument list musi by

ć poprawną listą danych dodatkowych elementu, zawierającą

nazw

ę aplikacji zarejestrowanej uprzednio za pomocą funkcji regapp. Pola z nawiasami

klamrowymi (grupy z kodem 1002) musz

ą występować parami. Niepoprawna list jest

przyczyn

ą błędu i powoduje umieszczenie odpowiedniego kodu błędu w zmiennej

ERRNO. Je

żeli dane dodatkowe zawierają nazwę niezarejestrowanej aplikacji, na ekra-

nie uka

że się następujący komunikat błędu (zakładając, że zmienna CMDECHO ma

warto

ść 1):

ę

dna nazwa aplikacji w grupie o kodzie 1001

Argument list mo

że rozpoczynać się kodem grupy –3 (znacznik pomocniczy danych

dodatkowych elementu), ale nie jest to wymóg bezwzgl

ędny. Dane dodatkowe mogą

zawiera

ć informacje pochodzące z różnych aplikacji, dlatego lista musi być ujęta w parę

nawiasów.

Przykładowo:

(-3 ("PROGRAM-1" (1000 . "APLIKOM")
(1002 . "{")
(1040 . 0.0)
(1040 . 1.0)
(1002 . "}")
)
)

Poni

ższy przykład nie zawiera grupy z kodem –3. Lista ta jest uzyskana z poprzedniej

za pomoc

ą funkcji cdr. Istotne jest jednak, by posiadała obejmujące ją nawiasy.

( ("PROGRAM-1" (1000 . "APLIKOM")
(1002 . "{")
(1040 . 0.0)
(1040 . 1.0)
(1002 . "}")
)
)

background image

Epebufl!C

878

Teraz przedstawiamy nieprawidłow

ą listę dla funkcji xdsize, w której brakuje obejmu-

j

ących ją nawiasów.

("PROGRAM-1" (1000 . "APLIKOM")

NIEPRAWIDŁOWO

(1002 . "{")
(1040 . 0.0)
(1040 . 1.0)
(1002 . "}")
)

Nast

ępny przykład pokazuje zastosowanie funkcji xdsize do przekazania listy zawie-

raj

ącej dodatkowe dane elementu z dwóch zarejestrowanych aplikacji.

(setq n1 (list "PROGRAM-1" (cons 1000 "APLIKOM")
(cons 1040 0.0)
(cons 1040 1.0)
)
)
(setq n2 (list "PROGRAM-2" (cons 1000 "APLIKOM")
(cons 1040 0.0)
(cons 1040 1.0)
)
)
(regapp "PROGRAM-1")
(regapp "PROGRAM-2")

(xdsize (list n1 n2))

zwraca

60

)ympbe!

)ympbe!

)ympbe!

)ympbe!bqqmjdbujpo!\pogbjmvsf^****

Funkcja ta słu

ży do wczytania programu użytkowego ADS (AutoCAD Development

System). Po pozytywnym zako

ńczeniu wczytywania, zwracana jest nazwa programu

u

żytkowego. W przeciwnym wypadku wyprowadzany jest komunikat błędu. Wywo-

łanie funkcji ko

ńczy się błędem w przypadku próby ponownego wczytania programu

ju

ż wczytanego.

Argument application jest wprowadzany jako uj

ęta w cudzysłów wartość typu string

lub zmienna zawieraj

ąca nazwę pliku wykonawczego. Podczas wczytywania pliku, jest

on weryfikowany pod k

ątem sprawdzenia, czy jest rzeczywiście programem użytko-

wym ADS. Dodatkowo sprawdzana jest zgodno

ść (kompatybilność) wersji programu

ADS, samego ADS oraz działaj

ącej wersji AutoLISPu.

(xload "/programy/ame")

po zako

ńczeniu pozytywnym, zwraca "/programy/ame"

Niepowodzenie w działaniu funkcji xload powoduje zwykle wyst

ąpienie błędu

AutoLISPu. Je

śli jednak podany jest argument onfailure, niepowodzenie w działaniu

funkcji powoduje zwrócenie warto

ści tego argumentu, zamiast wyświetlenia komu-

nikatu bł

ędu. Ta cecha funkcji xload jest podobna, jak dla funkcji load.

background image

879

BvupMJTQ!—!qsbluzd{oz!lvst

)y

)y

)y

)yvompbe!

vompbe!

vompbe!

vompbe!bqqmjdbujpo!\pogbjmvsf^****

Funkcja ta słu

ży do usuwania programu użytkowego ADS z pamięci komputera. Po

pozytywnym zako

ńczeniu operacji zwracana jest nazwa programu użytkowego. W

przeciwnym wypadku wyprowadzany jest komunikat bł

ędu.

Argument application nale

ży wprowadzić jako ujęty w cudzysłów łańcuch alfanu-

meryczny lub zmienn

ą zawierającą nazwę programu użytkowego, który został

wczytany przez funkcj

ę xload. Nazwa programu użytkowego musi być wprowadzona

dokładnie
w takiej postaci, w jakiej została wprowadzona w wyra

żeniu z funkcją xload. Jeżeli

nazwa podana w przypadku funkcji xload zawierała równie

ż ścieżkę dostępu do pliku

(nazw

ę katalogu), to obecnie można ją pominąć.

Przykładowo, wyra

żenie przedstawione poniżej spowoduje usunięcie z pamięci progra-

mu u

żytkowego, który został wczytany przez funkcję xload w poprzednim przykładzie.

(xunload "ame")

po zako

ńczeniu pozytywnym, zwraca

"ame"

Niepowodzenie w działaniu funkcji xunload powoduje zwykle wyst

ąpienie błędu

AutoLISPu. Je

śli jednak podany jest argument onfailure, niepowodzenie w działaniu

funkcji powoduje zwrócenie warto

ści tego argumentu, zamiast wyświetlenia komuni-

katu bł

ędu. Ta cecha funkcji xunload jest podobna, jak dla funkcji load.

){f

){f

){f

){fspq!

spq!

spq!

spq!jufn****

Funkcja ta zwraca T, je

żeli item jest liczbą typu integer lub real, której ewaluacja daje

zero. W innym wypadku zerop zwraca nil. Funkcja nie jest zdefiniowana dla innych
typów argumentu item. Przykładowo:

(zerop 0)

zwraca

T

(zerop 0.0)

zwraca

T

(zerop 0.0001)

zwraca

nil

Opisane w tej cz

ęści funkcje są zdefiniowane przez program ACADAPP, napisany

w systemie ADS (na platformie DOS ma on rozszerzenie .EXP). W zwi

ązku z tym,

funkcje te s

ą dostępne tylko wtedy, gdy program ten jest wczytany. Przed wywołaniem

której

ś z tych funkcji, program w AutoLISPie może wywołać funkcję xload, w celu

sprawdzenia czy plik ACADAPP został wczytany.

background image

Epebufl!C

87:

)bdbe`dpmpsem

)bdbe`dpmpsem

)bdbe`dpmpsem

)bdbe`dpmpsemh!

h!

h!

h!dpmpsovn!\gmbh^****

Wy

świetla standardowe okno AutoCADa, służące do wybierania koloru.

Argument colornum jest liczb

ą całkowitą, z zakresu od 0 do 256. Określa on numer

koloru AutoCADa, wy

świetlanego jako kolor proponowany. Jeśli opcjonalny argument

flag jest podany i jest nil, wówczas przyciski ekranowe JAKWARSTWA i JAKBLOK
s

ą zablokowane. Jeśli argument ten nie jest podany, albo jest podany ale różny od nil,

wówczas przyciski te s

ą dostępne do użycia.

Funkcja acad_colordlg zwraca numer koloru, wybranego przez u

żytkownika przez

wci

śnięcie przycisku OK. Jeśli użytkownik anuluje okienko dialogowe, acad_colordlg

zwraca nil.

Przykład

Poni

ższe wyrażenie pyta użytkownika o kolor, proponując kolor zielony.

(acad_colordlg 3)

Warto

ść

nr_koloru równa 0 oznacza kolor JAKBLOK, a warto

ść

równa 256 to

kolor JAKWARSTWA.

)bdbe`ifm

)bdbe`ifm

)bdbe`ifm

)bdbe`ifmqemh!

qemh!

qemh!

qemh!ifmqgjmf!\upqjd^****

Wy

świetla standardowe okienko z informacjami pomocniczymi AutoCADa, odczy-

tanymi ze wskazanego pliku dyskowego. Funkcja ta mo

że być wywoływana z pro-

cedury AutoLISPu w celu podania informacji pomocniczych zwi

ązanych ze standar-

dowym poleceniem AutoCADa, lub informacji zwi

ązanych z programem użytkownika.

Argument helpfile jest ła

ńcuchem alfanumerycznym, określającym plik z informacjami

pomocniczymi AutoCADa (rozszerzenie nazwy .HLP jest opcjonalne). Argument topic
jest hasłem, które pocz

ątkowo jest wyświetlane w okienku dialogowym. Jeśli argument

topic jest ła

ńcuchem pustym (""), okienko dialogowe zawiera informacje wstępne z pli-

ku informacji pomocniczych.

Dla własnych programów u

żytkownika, plik HLP będzie zwykle wskazywał nazwę

własnego pliku informacji pomocniczych u

żytkownika.

Przykład

Mo

żna utworzyć poniższy plik o nazwie AC_HELP.HLP, będący plikiem informacji

pomocniczych AutoCADa (pliki informacji pomocniczych AutoCADa musz

ą posiadać

rozszerzenie .HLP).

Funkcja acad_helpdlg wy

świetla standardowe okienko z informacjami pomocniczymi

AutoCADa. Format wywołania jest nast

ępujący:

background image

881

BvupMJTQ!—!qsbluzd{oz!lvst

acad helpdlg <helpfile> <topic>
\PLIK_HLP

Argument <helpfile> okre

śla plik z informacjami pomocniczymi AutoCADa.

Rozszerzenie nazwy .HLP jest opcjonalne.

\HASŁO

Argument <topic> okre

śla hasło, które początkowo jest wyświetlane w okienku

dialogowym.

Je

śli argument topic jest łańcuchem pustym (""), okno dialogowe zawiera informacje

wst

ępne ze wskazanego pliku informacji pomocniczych.

Poni

ższe wyrażenie wywołuje acad_helpdlg i powoduje wyświetlenie tekstu

wst

ępnego opisu z pliku AC_HELP.HLP:

(acad_helpdlg "ac_help" "")

Nast

ępny przykład jest niemal identyczny, ale powoduje pojawienie się okienka,

zawieraj

ącego stronę informacji pomocniczych związanych z hasłem HASŁO:

(acad_helpdlg "ac_help" "hasło")

)bdbe`tu

)bdbe`tu

)bdbe`tu

)bdbe`tusmtpsu!

smtpsu!

smtpsu!

smtpsu!mjtu****

Powoduje uporz

ądkowanie listy łańcuchów tekstowych w porządku alfabetycznym.

Argument list zawiera ła

ńcuchy tekstowe, które mają zostać uporządkowane. Funkcja

acad_strlsort zwraca list

ę tych samych łańcuchów, ale uporządkowanych w kolejności

alfabetycznej.

Je

śli argument list nie jest poprawnie uformowany, lub jeśli brakuje pamięci do wyko-

nania operacji sortowania, funkcja acad_strlsort zwraca nil.

Przykład

Poni

ższe wyrażenie sortuje listę skróconych angielskich nazw miesięcy:

(setq mos '("Jan" "Feb" "Mar" "Apr" "May" "Jun"
"Jul" "Aug" "Sep" "Oct" "Nov" "Dec"))
(acad_strlsort mos)
zwraca nast

ę

puj

ą

c

ą

list

ę

:

("Apr" "Aug" "Dec" "Feb" "Jan" "Jul"
"Jun" "Mar" "May" "Nov" " Oct" "Sep")

background image

Epebufl!C

882

W tej cz

ęści opisane są polecenia AutoCADa, nadające specjalne znaczenie dostępowi

do interpretera AutoLISPu. Polecenia te s

ą dostępne tylko wtedy, gdy wczytany jest

program ACADAPP, napisany w systemie ADS.

)d;hls

)d;hls

)d;hls

)d;hlsftlvk!

ftlvk!

ftlvk!

ftlvk!qu!\tt^!\wfdups^****

)d;c

)d;c

)d;c

)d;cibudi!

ibudi!

ibudi!

ibudi!qu!\tt^!\wfdups^****

Polecenie BHATCH słu

ży do kreskowania wybranego obszaru.

Pierwszym argumentem tej funkcji jest punkt pt, który jest wewn

ętrznym punktem

obszaru do zakreskowania. Je

śli punkt ten jest ważny, powoduje utworzenie Polilinii,

stanowi

ącej granicę kreskowanego obszaru. Argument ss je zbiorem wskazań, zawiera-

j

ącym dodatkowe elementy granicy obszaru. Ostatni argument vector jest listą współ-

rz

ędnych, opisujących wektor kierunkowy wykorzystywany przez BHATCH do ryso-

wania promieni. Przy braku tego argumentu przyjmowany jest on jako (0,0), czyli
metoda „Najbli

ższy”. Jako argument vector akceptowane są listy współrzędnych 2D

i 3D. Je

śli jednak podane są trzy współrzędne, to współrzędna Z jest ignorowana.

Przykłady

(setq

p1 '(3 5)

ss1 (entlast)

Wybiera ostatni utworzony element

);setq

(c:bhatch p1)

Kreskuje obszar zdefiniowany przez graniczn

ą

Polilini

ę, utworzoną przez punkt (3,5)

(c:bhatch p1 ss)

Kreskuje obszar zdefiniowany zarówno przez
graniczn

ą Polilinię, utworzoną przez punkt (3,5),

jak i przez zbiór wskaza

ń ss

(c:bhatch p1 '(1 0))

Kreskuje obszar zdefiniowany przez graniczn

ą

Polilini

ę, utworzoną przez punkt (3,5),

wykorzystuj

ąc rzutowanie promieni +X

Wykorzystywane w argumencie vector warto

ści współrzędnych są liczbami rzeczywi-

stymi i mog

ą przyjmować dowolne wartości. Poniższa tabela zawiera przykłady warto-

ści zgodnych z wartościami używanymi w okienku dialogowym polecenia GKRESKUJ.

background image

883

BvupMJTQ!—!qsbluzd{oz!lvst

Tabela B.20. Kierunki rzutowania promieni i warto

ści argumentu vector

Warto

ść wektora

Kierunek

(0 0)

(Najbli

ższy)

(1 0)

+X (0 stopni)

(0 1)

+Y (90 stopni)

(–1 0)

–X (180 stopni)

(0 –1)

–Y (270 stopni)

(1000 1732)

60 stopni (w przybli

żeniu)

(1 –1)

315 stopni

Zako

ńczone sukcesem działanie funkcji c:bhatch zwraca nazwę utworzonego elementu

rysunkowego Hatch, a w przypadku braku sukcesu funkcja zwraca nil. W przypadku
zako

ńczonego błędem wywołania c:bhatch, komunikat błędu można odczytać przez

wywołanie funkcji bherrs.

)d;hqmj

)d;hqmj

)d;hqmj

)d;hqmjojb!

ojb!

ojb!

ojb!qu!\tt^!\wfdups^****

)d;cqpm

)d;cqpm

)d;cqpm

)d;cqpmz!

z!

z!

z!qu!\tt^!\wfdups^****

Polecenie GPLINIA(BPOLY) słu

ży do definiowania granicznej Polilinii.

Pierwszym argumentem tej funkcji jest punkt pt, który jest wewn

ętrznym punktem

obszaru do zakreskowania. Argument ss jest zbiorem wskaza

ń, zawierającym dodatko-

we elementy granicy obszaru. Ostatni argument vector jest list

ą współrzędnych, opisu-

j

ących wektor kierunkowy wykorzystywany przez GPLINIA do rzutowania promieni.

Przy braku tego argumentu przyjmowany jest on jako (0,0), czyli metoda „Najbli

ższy”.

Jako argument vector akceptowane s

ą listy współrzędnych 2D i 3D. Jeśli jednak podane

s

ą trzy współrzędne, to współrzędna Z jest ignorowana.

Zako

ńczone sukcesem działanie funkcji c:bpoly zwraca nazwę utworzonej Polilinii

granicznej, a w przypadku braku sukcesu funkcja zwraca nil. W przypadku zako

ńczo-

nego bł

ędem wywołania c:bpoly, komunikat błędu można odczytać przez wywołanie

funkcji bherrs.

)cifsst*

)cifsst*

)cifsst*

)cifsst*

Podaje komunikat bł

ędu, generowany przez zakończone błędem wywołanie funkcji

c:bhatch lub c:bpoly. Zako

ńczone sukcesem wywołanie bherrs powoduje podanie

ła

ńcucha komunikatu błędu. W przeciwnym wypadku wynikiem jej działania jest nil.

background image

Epebufl!C

884

Przykład

Po wywołaniu c:bhatch, w programie mo

żna umieścić następujące wyrażenie,

sprawdzaj

ące warunek wystąpienia błędu:

(if (bherrs) (princ (car (bherrs))))

Gdy wywołanie zako

ńczyło się błędem ze względu na brak zainicjowanego wzoru

kreskowania NAZWA_WK, funkcja bherrs zwraca ła

ńcuch "bhatch: niezdefiniowany

wzór kreskowania\n", który za pomoc

ą funkcji princ można wyświetlić w linii zgłoszeń

AutoCADa.

)d;

)d;

)d;

)d;qtezobn!

qtezobn!

qtezobn!

qtezobn!npef****

)d;qtesbh!

)d;qtesbh!

)d;qtesbh!

)d;qtesbh!npef****

Wykorzystuje polecenie PSDYNAM (PSDRAG) do ustalenia warto

ści zmiennej

PSDRAG. Argument mode jest liczb

ą całkowitą, której wartość powinna wynosić 0 lub 1.

Bie

żąca wartość PSDRAG wpływa na interakcyjne wykorzystywanie polecenia PSWE.

Gdy PSDRAG jest równa 1, PSWE generuje obraz w standardzie PostScript w miar

ę jak

u

żytkownik wskazuje dynamicznie parametr jego skalowania. Gdy PSDRAG wynosi 0,

PSWE generuje i rysuje jedynie ramk

ę ograniczającą obraz. Zakończone sukcesem

wywołanie c:psdrag zwraca now

ą wartość PSDRAG, a nil — w przeciwnym wypadku.

Przykład

Poni

ższe wyrażenie włącza tryb PSDRAG, ustawiając wartość zmiennej na 1. Następne

interakcyjne zastosowanie PSWE generuje obraz w standardzie PostScript w miar

ę, jak

u

żytkownik dynamicznie wskazuje parametr jego skalowania.

(c:psdrag 1)

)d;qt

)d;qt

)d;qt

)d;qtxzq!

xzq!

xzq!

xzq!fou!qbuufso!\bsh2!\bsh3^^!

****

)d;qtgjmm!

)d;qtgjmm!

)d;qtgjmm!

)d;qtgjmm!fou!qbuufso!\bsh2!\bsh3^^!

****

Wykorzystuje polecenie PSWYP (PSFILL) do wypełnienia elementu wzorem w stan-
dardzie PostScript. Argument ent jest nazw

ą Polilinii. Argument pattern jest łańcuchem

alfanumerycznym, zawieraj

ącym nazwę wzoru wypełnienia. Łańcuch wzoru musi być

identyczny z nazw

ą wzoru wypełnienia, zdefiniowanym w bieżącym pliku ACAD.PSF.

Argumenty

arg

s

ą argumentami dla wewnętrznej procedury wypełniania w

PostScripcie. Ich ilo

ść i rodzaj odpowiada argumentom wymaganym przez pattern,

zgodnie z definicj

ą w ACAD.PSF. Każdy z argumentów jest albo liczbą całkowitą, albo

rzeczywist

ą. Dla jednego wzoru może być potrzebne od 0 do 25 argumentów. Jeśli w

wywołaniu funkcji podane zostało mniej argumentów, ni

ż jest wymagane dla

wybranego wzoru, dla pozostałych argumentów wykorzystywane s

ą standardowe

warto

ści dla wzoru. Zakończone sukcesem wywołanie c:psfill zwraca T. W przypadku

braku sukcesu funkcja zwraca nil.

background image

885

BvupMJTQ!—!qsbluzd{oz!lvst

Przykład

Wzór wypełnienia Greyscale ma jeden argument. Poni

ższy przykład wykorzystuje

standardow

ą wartość argumentu wzoru Greyscale, równą 50 procent:

(c:psfill ename "Greyscale")

Nast

ępny przykład definiuje natomiast 10-cioprocentową intensywność zaczernienia

(ang. greyscale — skala szaro

ści):

(c:psfill ename "Greyscale" 10)

)d;qtj

)d;qtj

)d;qtj

)d;qtjo!

o!

o!

o!gjmfobnf!qptjujpo!tdbmf****

)d;qtxf!

)d;qtxf!

)d;qtxf!

)d;qtxf!gjmfobnf!qptjujpo!tdbmf****

Wprowadza polecenie PSWE, słu

żące do importowania plików w standardzie encapsu-

lated PostScript (.EPS). Argument filename jest ła

ńcuchem zawierającym nazwę obrazu

w standardzie PostScript (nie ma potrzeby podawa

ć rozszerzenia .EPS nazwy pliku).

Argument position jest punktem, okre

ślającym miejsce wstawienia (anonimowego)

bloku PostScript. Argument scale jest rzeczywist

ą wartością, definiującą współczynnik

skalowania. W razie sukcesu, funkcja c:pswe zwraca nazw

ę nowoutworzonego

elementu rysunkowego. W przypadku bł

ędu wykonania funkcji, zwracane jest nil.

Przykład

Poni

ższy fragment kodu programu importuje plik SAMPLE.EPS w standardzie

PostScript, wstawia go w punkcie (24,9) i skaluje współczynnikiem 25:

(c:pswe "sample" '(24 19) 25)


Document Outline


Wyszukiwarka

Podobne podstrony:
kol zal dod pop algebra ETI 2012 13
karta pracy samodzielnej kl 3-MATEMATYKA dod odejm w zakr 100, karty pracy kl 3
dziesiętne dod i odej, MATEMATYKA klasa 4
KWERENDY dod 2, Szkoła, Semestr 1, Technologia informacyjna, Ćwiczenie 6
meteo zad dod
Podstawy Programowania Lab 1 dod
Dod zaj 2 2008 roz
dod C (2)
kart dod odej uz 5
wid6 dod k pracy r viii t3 swiat wielkich roznic i
R dod B literatura (2)
DoD ~$29
wid6 dod k pracy r iv t2 powstanie zsrr ii
wid6 dod k pracy r v t2 wojna ogarnia swiat ii
DoD, 24, XXV
DoD, 20, XXI
dod opracowanie wynikow id 1386 Nieznany
wid6 dod k pracy r viii t3 swiat wielkich roznic ii

więcej podobnych podstron