02 Funkcje ogólnego przeznaczenia


Rozdział 2
Funkcje ogólnego przeznaczenia

AutoLISP udostępnia szereg różnych funkcji, przeznaczonych do odczytywa-
nia informacji z aktualnie wczytanego rysunku, modyfikowania tego rysun-
ku, współpracy z użytkownikiem AutoCAD-a i tak dalej. Niniejszy rozdział
zawiera ogólny opis tych funkcji, z których wiele posiada swoje odpowiedniki
w ADS. Funkcje te zostaną tu przedstawione, opisany będzie sposób ich wy-
korzystania w połączeniu z innymi funkcjami i pokazane przykłady ich uży-
cia. Szczegółów na temat wywoływania określonej funkcji należy poszukiwać
w spisie funkcji, zamieszczonym w rozdziale 4.

Funkcje obsługi obiektów rysunkowych, zbiorów wskazań i tablic symboli
opisane są w rozdziale 3.

Zapytania i polecenia AutoCAD-a

Funkcje opisane w tej części dają bezpośredni dostęp do poleceń i usług ry-
sunkowych AutoCAD-a. Zachowanie się tych funkcji zależy od bieżącego sta-
nu zmiennych środowiskowych i systemowych AutoCAD-a oraz od aktualnie
wczytanego rysunku.

Przesyłanie poleceń

Najbardziej ogólną funkcją AutoLISP-u, posiadającą dostęp do AutoCAD-a,
jest funkcja command. Służy ona do przesyłania polecenia AutoCAD-a wraz
z odpowiadającymi mu informacjami bezpośrednio do linii poleceń AutoCAD-a

Polecenie:.

Funkcja command posiada listę argumentów o zmiennej długości. Argumenty
te muszą być pod względem typu i wartości zgodne z danymi oczekiwanymi
przez sekwencję zgłoszeń polecenia: mogą to być łańcuchy alfanumeryczne,
wartości rzeczywiste, całkowite, punktowe, nazwy obiektów lub zbiorów wska-
zań. Takie dane jak: kąty, odległości i punkty, mogą być przesyłane zarówno ja-
ko łańcuchy alfanumeryczne (tak, jak wprowadziłby je użytkownik), albo jako
wartości liczbowe (jako wartości rzeczywiste lub całkowite, lub jako punkt - lista
wartości liczbowych). Łańcuch pusty ("")jest równoważny wprowadzeniu z kla-
wiatury spacji lub Enter.

Polecenia wprowadzane poprzez funkcję command mają jednak pewne ogra-
niczenia. Szczegóły można znaleźć w rozdziale 4.

Zapytania i polecenia AutoCAD-a 23

Funkcje ogólnego przeznaczenia

Przykład

Poniższy fragment kodu programu ukazuje kilka reprezentatywnych wywo-
łań funkcji command.

(command "okrąg" "0,0" "3,3")
(command "_thickness" 1)
(setq p-l '(1.0 1.03.0))
(setq rad 4.5)
(command "okrąg" p1 rad)

Zakładając, że w czasie wywołania tych funkcji AutoCAD wyświetlał zgło-
szenie Polecenie;, AutoCAD wykona następujące działania:

1. Narysuje okrąg o środku w punkcie (0.0,0.0) i przechodzący przez punkt
(3.0,3.0).

2. Zmieni bieżącą grubość na 1.0.

3. Narysuje drugi (pogrubiony) okrąg, o środku w punkcie (1.0,1.0,3.0) i pro-
mieniu 4.5.

Należy zwrócić uwagę na to, że w pierwszym wywołaniu funkcji command
punkt dla polecenia OKRĄG został przesłany jako łańcuch alfanumeryczny,
a drugie wywołanie przesłało wartość całkowitą do polecenia GRUBOŚĆ.
Ostatnie wywołanie command wykorzystuje punkt 3W i wartość rzeczywi-
stą (liczbę zmiennoprzecinkową), przechowywane w zmiennych i przesyła-
ne do polecenia OKRĄG poprzez odwołania do tych zmiennych.

Oczekiwanie na akcję użytkownika

Jeżeli podczas wykonywania polecenia, AutoCAD napotka predefiniowany
symbol PAUSE przesłany jako argument funkcji command, wykonywanie
polecenia jest chwilowo zawieszane, w celu umożliwienia bezpośredniego
wprowadzenia informacji przez użytkownika (zwykle będzie to wskazanie
punktu lub przeciągnięcie). Mechanizm ten działa podobnie jak ukośnik le-
wy (\) w menu.

Jeżeli podczas trwania stanu zawieszenia działania funkcji command wywołane
zostanie polecenie w trybie nakładkowym, funkcja command pozostaje w stanie
zawieszenia. Tak więc, podczas zawieszenia funkcji command użytkownik może
wywoływać polecenia 'ZOOM i 'NFRAGM z dowolnymi opcjami. Zawieszenie
trwa do momentu otrzymania przez AutoCAD poprawnej informacji i ewentual-
nego zakończenia wykonywania poleceń wykonywanych w trybie nakładkowym.
Na przykład:

(command "okrąg" "5,5" pause "linia" "5,5" "7,5" "")

powoduje rozpoczęcie polecenia OKRĄG, ustalenie środka w punkcie (5,5)
i zatrzymanie się w oczekiwaniu na wprowadzenie przez użytkownika pro-
mienia okręgu. Po wskazaniu przez użytkownika punktu (lub wpisaniu dłu-
gości promienia z klawiatury), funkcja wznawia działanie i rysuje odcinek
od punktu (5,5) do (7,5).

Wprowadzanie danych z menu nie jest zawieszane przez funkcjęAutoLISP-
u pause. Jeśli w czasie oczekiwania funkcji command na odpowiedź użyt-
kownika aktywna była jakaś pozycja menu, wymagana odpowiedź może po-
chodzić z menu. Jeżeli pozycja menu powinna również ulec zawieszeniu, na-
leży umieścić w niej znak ukośnika lewego (\). Po otrzymaniu prawidłowych

24 Zapytania i polecenia AutoCAD-a

Rozdział 2
odpowiedzi, pozycja menu i funkcja command wznawiają działanie.

Przesyłanie wskazań punktów do poleceń AutoCAD-a

Niektóre z poleceń AutoCAD-a (na przykład WYDŁUŻ, ZAOKRĄGL i UTNIJ)
wymagają wskazania jednocześnie punktu i obiektu rysunkowego. Aby móc za
pośrednictwem funkcji command przesłać taką parę punktu i obiektu rysun-
kowego bez korzystania z mechanizmu PAUSE, konieczne jest wcześniejsze
uzyskanie tych wartości i przechowanie ich jako zmiennych. Punkty mogą być
przekazywane przez funkcję command jako łańcuchy alfanumeryczne, albo
zdefiniowane poza funkcją i przesłane jako zmienne. Obrazuje to kolejny przykład.

Przykład

Poniższy fragment kodu pokazuje jedną z metod przesyłania nazwy obiektu
i punktu do funkcji command.

(command "okrąg" "5,5" "2") Rysuje Okrąg

(command "linia" "3,5" "7,5" "") Rysuje Linię

(setq el (entlast)) Odczytuje nazwę ostatniego elementu

(setq pt '(5 7)) Ustala wartość punktu pt

(command "utnij" el "" pt "") Wykonuje polecenie UTNIJ

Zakładając, że w czasie wywołania tych funkcji AutoCAD wyświetlał zgłoszenie
Polecenie:, AutoCAD wykona następujące działania:

1. Narysuje okrąg o środku w punkcie (0.0,0.0) i promieniu 2.

2. Narysuje odcinek od punktu (3,5) do punktu (7,5).

3. Utworzy zmienną e1, zawierającą nazwę ostatniego obiektu dodanego do
bazy danych. Dalsze informacje na temat obiektów i operujących na nich
funkcji można znaleźć w rozdziale 3.

4. Utworzy zmienną pt, zawierającą punkt na okręgu (punkt ten wskazuje
część okręgu przeznaczoną do usunięcia poleceniem UTNIJ).

5. Wykona polecenie UTNIJ, wybierając obiekt określony w zmiennej e1
i punkt w zmiennej pt.

Zmienne systemowe i środowiskowe

Para funkcji: getvar i setvar pozwala programom użytkowym napisanym
w AutoLISP-ie sprawdzać i zmieniać wartości zmiennych systemowych Auto-
CAD-a. Do określenia nazwy zmiennej funkcje te wykorzystują łańcuch alfa-
numeryczny (litery dowolne: małe lub duże). Funkcja setvar określa wartość ta-
kiego typu, jakiego oczekuje zmienna systemowa. Ważne jest by pamiętać, że
zmienne systemowe AutoCAD-a są różnych typów: wartości całkowite, rzeczy-
wiste, łańcuchy alfanumeryczne, punkty 2W i punkty 3W. Wartości podawane
jako argumenty funkcji setvar muszą być odpowiedniego typu. Dostarczenie
funkcji zmiennej niewłaściwego typu powoduje wygenerowanie błędu Auto-
LISP-u. W dodatku A w AutoCAD Podręcznik Użytkownika podana jest lista
zmiennych systemowych AutoCAD-a i ich typów.

Zapytania i polecenia AutoCAD-a 25

Funkcje ogólnego przeznaczenia

Przykład

Przedstawiony fragment kodu gwarantuje, że wywołane po nim polecenie
ZAOKRĄGL użyje promienia o długości co najmniej l:

(if(<(getvar"filletrad")1)

(setvar "filletrad" 1)
)

Dodatkowa funkcja getenv umożliwia procedurom AutoLISP-u dostęp do aktu-
alnie zdefiniowanych zmiennych środowiskowych systemu operacyjnego.

Szukanie pliku

Funkcja findfile umożliwia napisanie aplikacji poszukującej pliku o podanej
nazwie. Aplikacja może określać katalog do przeszukania, albo może korzy-
stać z bieżącej bibliotecznej ścieżki poszukiwań AutoCAD-a.

Przykład

W poniższym fragmencie kodu funkcja findfile poszukuje pliku w ścieżce bibliotek
AutoCAD-a:

(setq szuk_nazwa "refc.dwg")
(setq plik (findfile szuk_nazwa))
(if plik

(setq szuk_nazwa plik)

(princ (strcat "\nNie znaleziono pliku " refname "."))
)

Jeżeli wywołanie findfile zakończy się sukcesem, zmiennej refname zostanie przy-
pisany łańcuch tekstowy z nazwą pliku z pełną ścieżką dostępu, na przykład:

"/dom/praca/odn/odn.dwg"

Uwaga: Przy podawaniu ścieżki dostępu w systemie DOS wewnątrz proce-
dury w AutoLISP-ie, ukośnik lewy " \" musi być poprzedzony przez drugi
ukośnik lewy (patrz "Konwencje językowe" w rozdziale l). Zamiast dwóch
ukośników lewych "\", w charakterze separatora nazw katalogów można
stosować jeden ukośnik prosty "/".

Funkcja getfiled wyświetla okno dialogowe z listą plików w podanym kata-
logu i z podanym rozszerzeniem. Udostępnia to procedurom w AutoLISP-ie
okna dialogowe Wybierz plik, zapewniając im wygląd zgodny z innymi po-
leceniami AutoCAD-a, wykorzystującymi te okna.

Wywołanie funkcji getfiled wymaga czterech argumentów, określających
wygląd i działanie okna. Aplikacja musi podać cztery następujące argumen-
ty łańcuchowe, z których każdy w razie potrzeby może być pusty (nil): tytuł,
umieszczany u góry okna; proponowaną nazwę pliku, ukazywaną w polu
edycyjnym u dołu okna; rodzaj rozszerzenia nazwy, określający wstępnie
ukazywaną w okienku listę plików; wartość całkowitą, decydującą o sposo-
bie współdziałania okna z wybieranymi plikami.

26 Zapytania i polecenia AutoCAD-a

Rozdział 2

Przykład

Ta prosta procedura wykorzystuje getfiled do wyświetlania struktury kata-
logów i wyboru pliku:

(defun C:DDIR()

(setq dfil (getfiled "Zawartość katalogu""" "" 2))

(princ (strcat "\nZmienna 'dfil' otrzymała wartość pliku " dfil "."))

(princ)

)

Może to być bardzo przydatne polecenie narzędziowe. Zmiennej dfil przypi-
sywany jest wybrany plik. Zmienna ta może być później wykorzystywana
przez inne funkcje AutoLISP-u lub jako odpowiedź na wyświetlane w linii
poleceń pytanie o nazwę pliku. Aby użyć zmiennej dfil jako odpowiedzi w linii
poleceń, należy wpisać !dfil.

Uwaga: Wpisać !dfil można tylko w linii poleceń. Wykorzystanie zmiennej
nie jest możliwe w okienku dialogowym.

Patrz także: Szczegółowy opis funkcji getfiled na stronie 130.

Lokalizowanie punktów względem obiektów
rysunkowych

Funkcja osnap znajduje punkt zgodny z jednym z trybów lokalizacji pun-
któw względem obiektów AutoCAD-a. Tryby te są określane w argumencie
typu łańcuchowego.

Przykłady

Poniższe wywołanie funkcji osnap powoduje wyszukanie środka symetrii
obiektu w pobliżu pt1:

(setq pt2 (osnap pt1 "sym"))

Następny przykład wywołania osnap poszukuje punktu będącego środkiem
symetrii, punktem końcowym, lub środkiem obiektu, w pobliżu punktu pt1:

(setq pt2 (osnap pt1 "sym,kon,cen"))

W obu powyższych przykładach zmiennej pt2 zostaje przyporządkowany
punkt w trybie lokalizacji względem obiektu, jeśli zostanie znaleziony punkt
spełniający wymagania tego trybu. W przeciwnym wypadku pt2 otrzymuje
wartość nil.

Ważne: Zmienna systemowa APERTURE definiuje dopuszczalną odległość
wskazanego punktu od obiektu podczas korzystania z trybu lokalizacji pun-
ktu względem obiektu.

Zapytania i polecenia AutoCAD-a 27

Funkcje ogólnego przeznaczenia

Narzędzia geometryczne

Pewna grupa funkcji umożliwia uzyskiwanie przez aplikacje informacji o geo-
metrycznych własnościach obiektów. Funkcja distance znajduje odległość mię-
dzy dwoma punktami, angle wyznacza kąt pomiędzy odcinkiem prostej a osią
X (aktualnego LUW), a polar znajduje punkt według współrzędnych bieguno-
wych (względem punktu początkowego). Funkcja inters wyznacza punkt prze-
cięcia dwóch linii.

Uwaga: W przeciwieństwie do funkcji osnap, funkcje tej grupy po prostu wy-
znaczają wartości punktów, linii lub kątów, nie korzystając z danych w bieżą-
cym rysunku.

Przykłady

Poniższe fragmenty kodu zawierają kilka prostych wywołań geometrycz-
nych funkcji narzędziowych:

(setq pt1 '(3.0 6.0 0.0))

(setq pt2 '(5.0 2.0 0.0))

(setq base'(1.07.00.0))

(setq rads (angle pt1 pt2)) Kąt w płaszczyźnie XY aktualnego LUW

(zwracana jest wartość w radianach)
(setq len (distance pt1 pt2)) Odległość w przestrzeni 3W

(setq endpt (polar base rads len))

Wywołanie funkcji polar powoduje przypisanie zmiennej endpt punktu położo-
nego w takiej samej odległości od (1,7), w jakiej znajdują się punkty pt1 i pt2
oraz pod takim samym kątem od osi-X, jak kąt odcinka pomiędzy punktami pt1
i pt2.

Funkcja narzędziowa textbox

Funkcja textbox zwraca współrzędne końców przekątnej prostokąta, obejmują-
cego element rysunkowy Tekst. Wymaga ona podania jednego argumentu, będą-
cego listą typu zwracanego przez entget (listą asocjacji kodów grup i wartości).
Lista ta może zawierać albo pełny opis listy powiązań obiektu Tekst, albo tylko
listę opisującą łańcuch alfanumeryczny obiektu Tbkst. Listy definicji obiektów
i listy asocjacji są omawiane bardziej szczegółowo w następnym rozdziale.

Punkty zwracane przez textbox określają ramkę otaczającą obiekt Tekst
w taki sposób, jakby był on wstawiony w punkcie (0.0,0.0,0.0) i z kątem ob-
rotu O stopni. Z reguły pierwsza zwracana lista jest punktem (0.0,0.0,0.0)
chyba, że obiekt Tekst ma określony różny od zera kąt nachylenia, wykorzy-
stuje czcionkę pionową, albo posiada litery z dolnymi ogonkami (jak p lubg-).
Wartość pierwszego punktu definiuje odstęp od punktu wstawienia tekstu
do dolnego lewego wierzchołka najmniejszego prostokąta, obejmującego
tekst. Drugi punkt określa prawy górny wierzchołek tego prostokąta. Zwra-
cane listy punktów zawsze opisują lewy dolny i prawy górny wierzchołek te-
go prostokąta, niezależnie od orientacji mierzonego obiektu Tekst.

28 Narzędzia geometryczne

Rozdział 2

Przykłady

Przykład ten ukazuje minimalną akceptowalną przez textbox listę elemen-
tu. Ponieważ nie są podane żadne dodatkowe informacje, textbox korzysta
z aktualnie obowiązujących wartości określających styl i wysokość tekstu.

Polecenie: (texłbox '((1 . 'Witaj świecie!"))) Enter
((0.0 0.0 0.0) (2.80952 1.0 0.0))

Poniższy przykład pokazuje przesłanie listy obiektu do funkcji textbox.

Polecenie; dtekst

Just/STyl/: 1,1

Wysokość <1.0000>: Enter

Kat obrotu <0>: Enter

Tekst: test

Tekst: Enter

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

((-1 .
(10 1.0 1.0 0.0) (40 . 1.0) (1 , "test") (50 . 0,0)

(41 . 1.0)(51 . 0.0) (7 . "STANDARD") (71 . 0) (72 . 0)

(11 0.0 0,0 0.0) (210 0.0 0.0 1.0) (73 . 0))

Polecenie: (textbox e)

((0.0 0.0 0.0) (0.8 0.2 0.0))

Rysunek 2-1 pokazuje wynik zastosowania funkcji textbox w odniesieniu do
elementu Tekst o wysokości 1.0. Na rysunku pokazana jest także linia ba-
zowa i punkt wstawienia tekstu.

góra
prawo:(5.5,1.0)




Rysunek 2-1. Punkty zwracane przez textbox

Punkty pt1 i pt2 wyznaczane są w stałej kolejności: od dołu do góry i od lewej
do prawej, choćby nawet Tekst został narysowany przy nachylonej linii ba-
zowej lub czcionką pionową. W razie potrzeby lewy dolny punkt może mieć
współrzędne ujemne.

Rysunek 2-2 pokazuje wartości punktów (pt1 i pt2), zwracane przez textbox
w przypadku tekstu narysowanego czcionką pionową i tekstu narysowane-
go z opcją Dopas. Dla obu tekstów wysokość liter wynosi 1.0 (chociaż w przy-
padku tekstów rysowanych z opcją Dopas wysokość jest automatycznie do-
bierana, stosownie do wskazanych punktów dopasowania).

Narzędzia geometryczne 29

Funkcje ogólnego przeznaczenia

pt 2=1.0,0.0
początek:(0,0) \

[^\

!E|
;K!
!Si

W
;P!

ioi

;N!

:0i
W

;Y!

i_*^

pt1=-0.5,-20.0




pt2=
9.21954,1.382i

(10,3)

punkty dopasowania, wprowadzone
podczas tworzenia tekstu

Rysunek 2-2. Tekst pionowy i dopasowany

Dla obiektów Tekst rysowanych czcionką pionową, punkty pt1 i pt2 wyzna-
czane są w kolejności: od dołu do góry i od lewej do prawej, tak samo jak dla
zwykłej czcionki poziomej. W związku z tym lewy dolny punkt ma współ-
rzędne ujemne, liczone względem punktu wstawienia tekstu.

Niezależnie od stylu tekstu i orientacji, punkty zwracane przez funkcję textbox są
takie, że punkt wstawienia Tekstu (kod grupy 10) zostaje bezpośrednio przetrans-
ponowany na początek Układu Współrzędnych Elementu (UWE). Punkt ten
może służyć jako punkt odniesienia podczas transpozycji współrzędnych
zwracanych przez textbox na współrzędne punktów, określaj ących bieżący zasięg
tekstu.

Dwie następne przykładowe procedury wykorzystuj ątextbox do narysowania ramki
dookoła wybranego tekstu, działając poprawnie niezależnie od orientacji tekstu.

Przykłady

Poniższa procedura wykorzystuje textbox do narysowania ramki dookoła
wybranego obiektu Tekst.

(defun C:TBOX (/ textent tb II ur ul Ir)

(setq textent (car (entsel "\nWskaż tekst:")))
(command "luw" "Element" textent)
(setq tb (textbox (list (cons -1 textent)))

II (car tb)

u r (cadr tb)

ul (list (car II) (cadr ur))

Ir (list (car ur) (cadr II))

)

(command "plinia" II Ir ur ul "Zamknij")

(command "luw" "pop")

(princ)

30 Narzędzia geometryczne

Rozdział 2

Następna procedura wykonuje to samo zadanie, co poprzednia, lecz do obliczeń
geometrycznych wykorzystuje funkcje sin i cos AutoLISP-u. Wynik jest popra-
wny tylko wówczas, gdy aktualny LUWjest równoległy do płaszczyzny obie-
ktu Tekst.

(defun C:TBOX2 (/ textent ang sinrot cosrot t1 t2 pO p1 p2 p3 p4)
(setq textent (entget (car (entsel "\nWskaż tekst: "))))
(setq pO (cdr (assoc 10 textent))
ang (cdr (assoc 50 textent))
sinrot (sin ang)
cosrot (cos ang)
t1 (car (textbox textent))
t2 (cadr (textbox textent))
p1 (list(+ (car pO)

(- (* (car t1) cosrot) (* (cadr t1) sinrot)))
(+ (cadr pO)

(+ (* (cart1) sinrot) (* (cadrtl) cosrot))))
p2 (list(+ (car pO)

(- (* (car t2) cosrot) (* (cadr t1) sinrot)))
(+ (cadr pO)

(+ (* (car t2) sinrot) (* (cadr t1) cosrot))))
p3 (list(+ (car pO)

(- (* (car t2) cosrot) (* (cadr t2) sinrot)))
(+ (cadr pO)

(+ (* (car t2) sinrot) (* (cadr t2) cosrot))))
p4 (list(+ (car pO)

(- (* (car t1) cosrot) (* (cadr t2) sinrot)))
(+ (cadr pO)

(+ (* (car t1) sinrot) (* (cadr t2) cosrot))))

)

(command "plinia" p1 p2 p3 p4 "c")
(princ)
)

Narzędzia geometryczne 31

Funkcje ogólnego przeznaczenia

Pobieranie informacji od użytkownika

Niektóre funkcje pozwalają programom napisanym w AutoLISP-ie na konwer-
sacyjne pobieranie informacji od użytkownika AutoCAD-a.

Funkcje (getxxx) pobierające dane od użytkownika

Każda z funkcji getxxx, pobierających informacje od użytkownika, oczekuje na
wprowadzenie przez niego danych wskazanego typu i zwraca wprowadzoną
wartość. Program użytkowy może też określać treść opcjonalnego zgłoszenia,
wyświetlanego przed przejściem funkcji w stan oczekiwania na odpowiedź użyt-
kownika.

Tabela 2-1. Dozwolone odpowiedzi dla funkcji getxxx, pobierających dane od użytkownika



llllii^illl IBIII
getint Wartość całkowita, wprowadzana w linii poleceń.
getreal Wartość rzeczywista lub całkowita, wprowadzana w linii poleceń.
getstring Łańcuch alfanumeryczny, wprowadzany w linii poleceń.
getpoint Wartość punktowa, wprowadzana w linii poleceń lub poprzez wskazanie na ekranie.
getcorner Wartość punktowa (przeciwległy wierzchołek prostokąta), wprowadzana w linii poleceń lub poprzez wskazanie na ekranie.
getdist Wartość rzeczywista lub całkowita (odległość), wprowadzana w linii poleceń lub określana na podstawie dwóch wskazanych na ekranie punktów.
getangle Wartość kąta (zgodna z aktualnym formatem kątów), wprowadzana w linii poleceń lub określana na podstawie wskazanych na ekranie punktów.
getorient Wartość kąta (zgodna z aktualnym formatem kątów), wprowadzana w linii poleceń lub określana na podstawie wskazanych na ekranie punktów.
getkword Przedefiniowane słowo kluczowe lub jego skrót, wprowadzane w linii poleceń.

Uwaga: Funkcje getvar i getenv nie należą do kategorii funkcji getxxx, po-
bierających dane od użytkownika - nie oczekują one na wprowadzenie da-
nych.

Funkcje getint, getreal i getstring wstrzymują swoje działanie w oczekiwa-
niu na wprowadzenie przez użytkownika informacji wymaganego typu z li-
nii poleceń AutoCAD-a. Wbudowany w nie mechanizm sprawdzający umo-
żliwia im zwrócenie wyłącznie wartości tego typu, który jest oczekiwany.

32 Pobieranie informacji od użytkownika

Rozdział 2

Funkcje getpoint, getcorner i getdist wstrzymują swoje działanie w oczeki-
waniu na wprowadzenie przez użytkownika informacji wymaganego typu
z linii poleceń AutoCAD-a lub poprzez wskazanie na ekranie. Te funkcje rów-
nież odfiltrowują odpowiedzi niepoprawne. Funkcje getpoint i getcorner
zwracają punkt 3W, a funkcja getdist zwraca wartość rzeczywistą.

Funkcje getangle i getorient wstrzymują swoje działanie w oczekiwaniu na
wprowadzenie przez użytkownika wartości kąta z linii poleceń AutoCAD-a lub
zdefiniowanie go poprzez wskazanie punktów na ekranie. Dla funkcji getangle
kąt zerowy ma zawsze kierunek poziomy w prawo: "wschód" lub "godzina 3.00".
Dla funkcji getorient kąt zerowy wyznacza wartość zmiennej ANGBASE, która
może być ustawiona na dowolny kąt. Obie funkcje: getangle i getorient zwra-
cają wartości kąta (wartości rzeczywiste) w radianach, mierzonych od bazy (ką-
ta zerowego): ANGBASE dla getangle i "wschodu" dla getorient, w kierunku
przeciwnym do ruchu wskazówek zegara. Jako odpowiedź dla obu tych funkcji,
użytkownik może podać dane w linii poleceń lub wskazać punkty na ekranie.

Załóżmy, że zmienna ANGBASE została ustalona na 90 stopni (kierunek pół-
nocny), a zmienna ANGDIR na l (co oznacza kierunek narastania kątów
zgodny z ruchem wskazówek zegara). Przedstawiona tabela pokazuje, jakie
wartości zwrócą funkcje getangle i getorient (w radianach) dla przedstawio-
nych danych wejściowych (w stopniach). ANGBASE=90



| Dane i wejściowe (w stopniach) getangle getorient
0 0.0 1.5708
-90 1.5708 3.14159
180 3.14159 4.71239
90 4.71239 0.0

ANGDIR=1
(zgodnie z ruchem
wskazówek zegara)

podany kąt =0 A \

podany kąt=90
podany kąt=180

podany
kąt=-90

Funkcja getangle uwzględnia ustawienie wartości zmiennych ANGDIR i ANGBASE.
Zatem getangle może być wykorzystana do uzyskania wartości kąta obrotu
wstawianego elementu Blok, gdyż wprowadzenie zera stopni zwraca zawsze
zero radianów. Funkcja getorient honoruje wyłącznie zmienną ANGDIR. Dla-
tego getorient należy wykorzystywać do odczytywania takich kątów, jak na
przykład nachylenie linii bazowej elementu Tekst. Przykładowo, dla poda-
nego powyżej ustawienia ANGBASE i ANGDIR, dla elementu Tekst o linii
bazowej nachylonej pod kątem O, getorient zwróci wartość kąta 90 stopni.

Funkcje pobierające informacje od użytkownika mają zaletę AutoCAD-a, po-
legającą na sprawdzaniu poprawności informacji. Błędy trywialne (takie jak
wprowadzenie pojedynczej liczby w odpowiedzi na pytanie o punkt) są wy-
chwytywane przez AutoCAD i nie są zwracane przez funkcje pobierające in-
formacje od użytkownika. Wcześniejsze wywołanie omawianej dalej funkcji
initget daje dodatkowe możliwości filtrowania, zmniejszając potrzebę szero-
kiego sprawdzania odpowiedzi.

Funkcja getkword wstrzymuje działanie, oczekując na wprowadzenie słowa
kluczowego lub jego skrótu. Przed wywołaniem getkword słowa kluczowe mu-
szą być zdefiniowane za pomocą funkcji initget. Wszystkie funkcje pobierające
informacje od użytkownika (za wyjątkiem getstring, z oczywistych powodów),
oprócz standardowo zwracanych przez nie wartości, mogą akceptować także
słowa kluczowe, jeśli wcześniej zostały one zdefiniowane w funkcji initget.

Pobieranie informacji od użytkownika 33

Funkcje ogólnego poznaczenia

Wszystkie funkcje pobierające informacje od użytkownika pozwalają na zde-
finiowanie opcjonalnego argumentu prompt. Podawanie tego argumentu jest
bardziej zalecanym sposobem powodowania wyświetlania przez program żą-
dania podania odpowiedzi, niż wykorzystanie funkcji prompt lub princ przed
getxxx. Jeżeli argument prompt jest podany podczas wywołania funkcji po-
bierającej odpowiedź użytkownika, to w przypadku niepoprawnej odpowie-
dzi jest wyświetlany ponownie. Jeżeli argument prompt nie jest podany, to
w przypadku niepoprawnej odpowiedzi, w linii zgłoszeń i poleceń AutoCAD-a
wyświetlany jest następujący komunikat:

Spróbuj jeszcze raz:

Może to być nieco mylące, gdyż zgłoszenie oryginalne mogło już zostać prze-
sunięte poza obszar wyświetlania zgłoszeń i poleceń.

Ważne: Zazwyczaj użytkownik AutoCAD-a nie może podać wyrażenia
AutoLISP-u w odpowiedzi na żądanie podania odpowiedzi dla funkcji z gru-
py getxxx. Jeżeli procedura w AutoLISP-ie wykorzystuje funkcję initget, do-
wolne dane wprowadzane z klawiatury mogą stanowić odpowiedź dla nie-
których funkcji, zezwalających na wprowadzanie wyrażeń AutoLISP-ujako
odpowiedzi dla poleceń AutoCAD-a utworzonych w AutoLISP-ie.

Sterowanie warunkami działania funkcji
pobierających informacje od użytkownika.

Funkcja initget określa różne opcje wykorzystywane przez wywoływane po
niej funkcje entsel,nentsel, nentsełp oraz funkcje getxxx (oprócz getstring,
getvar i getenv). Funkcja initget akceptuje dwa opcjonalne argumenty: ó/te
i string. Argument bits ustawia jeden lub kilka bitów sterujących, dopuszcza-
jących lub zabraniających podawanie wartości określonego typu w odpowie-
dzi na późniejsze wywołania funkcji pobierających dane od użytkownika. Ar-
gument string może definiować słowa kluczowe, rozpoznawane podczas
późniejszego wywołania funkcji pobierających dane od użytkownika.

Uwaga: Ustalone przez initget bity sterujące i słowa kluczowe obowiązują
tylko do następnego wywołania funkcji pobierającej dane od użytkownika.
Bezpośrednio potem argumenty te przestają obowiązywać. Program nie
musi więc ponownie wywoływać initget w celu unieważnienia nietypowych
wartości tych argumentów.

Opcje odpowiedzi dla funkcji pobierających dane od
użytkownika

Wartość argumentu bits ogranicza typy wartości podanych przez użytkow-
nika do następnego wywołania funkcji pobierającej dane od użytkownika.
Dzięki zmuszeniu użytkownika do wprowadzenia wymaganego typu infor-
macji, zmniejszone zostają wymagania odnośnie sprawdzania poprawności
jego odpowiedzi. Przykładowe wartości argumentu bits są następujące: l,
uniemożliwia wprowadzenie odpowiedzi pustej; 2, uniemożliwia wprowa-
dzenie liczby 0; 4, uniemożliwia wprowadzenie liczby ujemnej. Jeśli te bity
zostaną ustawione dla wywołania funkcji getint, użytkownik zostanie zmu-
szony do wprowadzenia liczby większej od zera.

Ustalenie jednocześnie kilku warunków polega na zwykłym zsumowaniu
odpowiadających im wartości i utworzeniu jednej wartości argumentu bits,

34 Pobieranie informacji od użytkownika

Rozdział 2

z zakresu od O do 255. Jeśli argument bits nie jest podany, lub ma wartość
zero, dla najbliższego wywołania funkcji pobierającej informacje od użytkow-
nika nie obowiązują żadne warunki ograniczające. Pełne zestawienie możli-
wych ustawień bitów znajduje się na stronie 143.

Przykład

(initget (+ 1 2 4))
(getint "\nlle masz lat? ")

Powyższe dwie linie programu żądają od użytkownika podania jego wieku.
AutoCAD automatycznie ponawia wyświetlenie pytania o wiek w przypad-
ku, gdy użytkownik próbuje wprowadzić wartość ujemną lub zero, wciska
tylko Enter lub wprowadza łańcuch znaków (sama funkcja getint zawsze
odrzuca każdą próbę podania wartości nie będącej liczbą całkowitą).

Opcje słów kluczowych

Opcjonalny argument string określa listę słów kluczowych, które będą roz-
poznawane przy następnym wywołaniu funkcji pobierającej dane od użyt-
kownika. Znaczenie każdego ze słów kluczowych i działanie podejmowane
po ich wybraniu określa program w AutoLISP-ie.

Funkcja initget umożliwia rozpoznawanie oprócz pełnych słów kluczowych
także ich skrótów. Istnieją dwie metody skracania słów kluczowych, obie
omawiane w części "Określanie słów kluczowych" w rozdziale 4. Funkcja po-
bierająca dane od użytkownika zwraca zdefiniowane słowo kluczowe, jeśli
odpowiedź użytkownika jest zgodna ze słowem kluczowym (nie ma znacze-
nia pisownia dużymi lub małymi literami), lub gdy odpowiedź użytkownika
odpowiada skrótowi słowa kluczowego.

Przykład

Poniższa funkcja zdefiniowana przez użytkownika ilustruje wywołanie
getreal, poprzedzone przez zdefiniowanie dwóch słów kluczowych przez fun-
kcję initget. Program sprawdza, czy użytkownik wprowadził w odpowiedzi
jedno z tych słów i odpowiednio ustawia wartość wprowadzoną:

(defun C:GETNUM (/ num)
(initget 1 "Pi Dwa-pi")

(setq num (getreal "Pi/Dwa-pi/liczba: "))
(cond ((eq num "Pi") pi)

((eq num "Dwa-pi") (* 2.0 pi))
(T num)
)
)

Wywołanie initget blokuje możliwość wprowadzenia odpowiedzi pustej (,bits=l)
i ustala listę dwóch słów kluczowych: "Pi" i "Dwa-pi". Następnie funkcja getreal
pobiera od użytkownika liczbę rzeczywistą, wyświetlając przy tym zgłoszenie:

Pi/Dwa-pi/liczba:

Wynik jest umieszczany w lokalnym symbolu num. Jeśli użytkownik wpro-
wadzi liczbę, jest ona bezpośrednio zwracana przez funkcję C:GETNUM. Je-
śli jednak użytkownik wprowadzi w odpowiedzi słowo kluczowe Pi (lub na-
wet samo P), funkcja getreal zwróci słowo kluczowe Pi. Wykrywa to funkcja
cond i zwraca w tym wypadku wartość u. Podobnie traktowane jest słowo klu-
czowe Dwa-pi.

Pobieranie informacji od użytkownika 35

Funkcje ogólnego przeznaczenia

Uwaga,' Funkcja initget może być też wykorzystana do umożliwienia wpro-
wadzania słów kluczowych dla funkcji entsel, nentsel i nentsełp (zwykle
funkcje te oczekują od użytkownika wybrania elementu przez wskazanie po-
jedynczego punktu). Dalsze informacje na temat tych funkcji można znaleźć
w części "Funkcje operujące na nazwach i danych elementów rysunkowych"
w rozdziale 3, a opisy funkcji znajdują się w rozdziale 4.

Dowolne odpowiedzi z klawiatury

Funkcja initget zezwala także na wprowadzanie dowolnych danych z kla-
wiatury dla większości z funkcji getxxx. Dane te są przesyłane do aplikacji
jako łańcuch tekstowy. Program użytkowy korzystający z tej możliwości mo-
że być napisany w celu umożliwienia użytkownikowi podania wyrażenia
AutoLISP-u w odpowiedzi na zgłoszenie funkcji getxxx.

Przykład

Poniższe funkcje ilustrują metodę, zezwalającą użytkownikowi na podanie
wyrażenia AutoLISP-u w odpowiedzi na wywołanie funkcji getxxx.

(defun C:ARBENTRY ( / pt1) Definicja funkcji

(initget 128) Wstawienie bitu odpowiedzi dowolnej
(setq pt1 (getpoint "\nPunkt: ")) Pobranie wartości od użytkownika
(if (= 'ST R (type pt1)) Jeśli jest to wartość typu string
(setq pt1 (eval (read pt1))) zostaje zamieniona na symbol i następuje

próba wyznaczenia jej wartości, tak jakby była
to funkcja

pt1 W przeciwnym wypadku po prostu zwracana
) jest wartość

(defun ref ()

(setvar "LASTPOINT" (getpoint "\nPunkt odniesienia; "))

(getpoint "\nNastępny punkt: " (getvar "LASTPOINT"))
)

Jeśli obie funkcje: C:ARBENTRY i REF są jednocześnie wczytane do rysun-
ku, wówczas poniższa sekwencja poleceń jest całkowicie dopuszczalna.

Polecenie: orbentry

Punkt: (ref)

Punkt odniesienia; Wskaż punkt

Następny punkt: @1,1,0

Konwersje

Opisane w tej części funkcję są narzędziami, służącymi do konwersji typów
danych i jednostek.

Przykładem prostej funkcji przeliczającej stopnie na radianyjest zdefinio-
wana przez użytkownika funkcja dtr, opisana na stronie 246.

36 Konwersje

Rozdział 2

Konwersje łańcuchów alfanumerycznych

Funkcje rtos (ang. real-to-string - wartość rzeczywista na łańcuch) i angtos
(ang. angle-to-string - kąt na łańcuch) zamieniają wartości liczbowe wyko-
rzystywane przez AutoCAD na łańcuchy tekstowe, które mogą być wyprowa-
dzone na zewnątrz lub użyte jako dane wejściowe typu string dla innych fun-
kcji. Funkcja rtOS dokonuje konwersji wartości rzeczywistych, a funkcja
angtos - wartości kąta. Postać zwracanego łańcucha jest sterowana przez
zmienne systemowe AutoCAD-a: jednostki i dokładność są sterowanee przez
zmienne LUNITS i LUPREC dla wartości rzeczywistych (liniowych), a war-
tości kąta przez zmienne AUNITS i AUPREC. Dla obu omawianych funkcji,
zmienna systemowa DIMZIN decyduje o sposobie wpisywania zer poprze-
dzających i kończących liczbę.

Poniższe fragmenty programów ukazują kilka wywołań funkcji rtos i zwra-
cane wartości (przy założeniu, że zmienna DIMZIN jest równa zeru). Dokład-
ność (trzeci argument funkcji rtos) jest określona na cztery miejsca po prze-
cinku dla pierwszego przykładu, i dwa - dla drugiego.

(setq x 17.5)
(setq str "\nWartość sformatowana jako ")

(setq fmtval (rtos x 1 4)) Tryb l = zapis wykładniczy
(princ (strcat str fmtval)) zwraca Wartość sformatowana Jako 1.7500E+01

(setq fmtval (rtos x 2 2)) Tryb 2 = ułamki dziesiętne
(princ (strcat str fmtval)) zwraca Wartość sformatowana Jako 17.50

(setq fmtval (rtos x 3 2)) Tryb 3 = dziesiętne ułamki cala
(princ (strcat str fmtval)) zwraca Wartość sformatowana jako 1 '-5.50"

(setq fmtval (rtos x 4 2)) Tryb 4 = zwykle ułamki cala
(princ (strcat str fmtval) zwraca Wartość sformatowana Jako 1 '-5 1 /2"

(setq fmtval (rtos x 5 2)) Tryb 5 = ułamki zwykłe
(princ (strcat str fmtval)) zwraca Wartość sformatowana Jako 171/2

Uwagd: Jeżeli zmienna systemowa UNITMODE ma wartość l, powodując
wyświetlanie jednostek w takiej postaci, w jakiej były one wprowadzone,
łańcuch zwracany przez rtos jest różny dla jednostek w dziesiętnych ułam-
kach cala (argument modę równy 3), zwykłych ułamkach cala (modę równy
4) i ułamkach cala (modę równy 5). I tak na przykład, pierwsze dwie linie
wyświetlane na ekranie przez poprzedni przykład będą takie same, ale trzy
ostatnie linie będą wyglądały następująco:

Wartość sformatowana jako T5.50"
Wartość sformatowana jako T5-1/2"
' Wartość sformatowana jako 17-1/2

Należy zwrócić uwagę, że ponieważ funkcja angtos uwzględnia stan zmien-
nej systemowej ANGBASE, kod

(angtos (getvar "angbase"))
zawsze zwraca "O".

Z tej przyczyny nie istnieje funkcja AutoLISP-u, zwracająca albo wersję łań-
cuchową (w aktualnym trybie i precyzji) wartości kąta obrotu ANGBASE

Konwersje 37

Funkcje ogólnego przeznaczenia

względem "prawdziwego" kąta zero, albo dowolny kąt w radianach.

Aby znaleźć kąt obrotu względem zerowego kąta AutoCAD-a (kierunek wschod-
ni), zdefiniowany przez ANGBASE, można posłużyć sięjedną z poniższych metod:

1. Podać żądany kąt do aktualnej wartości ANGBASE, sprawdzić czy otrzy-
mana wartość bezwzględna jest większa niż 2n; -2u; jeśli tak jest (lub +2n
; jeśli wynik jest ujemny) a następnie w odniesieniu do uzyskanego wyniku
zastosować funkcję angtos.

2. Przechować tymczasowo wartość ANGBASE w jakiejś zmiennej pomocni-
czej, ustawić ANGBASE na O, wywołać funkcję angtos i przywrócić
zmiennej ANGBASE jej pierwotną wartość.

Odejmowanie wyniku zwracanego przez (angtos 0) od 360 stopni (27i radia-
nów lub 400 gradów) także daje obrót ANGBASE względem kąta 0.

Funkcja distofjest dopełnieniem funkcji rtos, tak więc poniższe wywołania
funkcji, wykorzystujące łańcuchy zwracane przez poprzedni przykład, zwra-
cają tę samą wartość 17.5 (istotne jest użycie ukośnika odwrotnego dla try-
bów 3 i 4).

(distof "1.7500E+01" 1) Tryb l = wykładniczy
(distof "17.50" 2) Tryb 2 = ułamki dziesiętne
(distof "1'-5.50\"" 3) Tryb 3 = dziesiętne ułamki cala
(distof 'T-5 1/2\"" 4) Tryb 4 = zwykłe ułamki cala
(distof "17 1/2" 5) Tryb 5 = ułamki zwykłe

Poniższe fragmenty kodu programów ukazują podobne wywołania funkcji
angtos i zwracane wyniki (wciąż przy założeniu, że DIMZINjest równa 0).
Dokładność (trzeci argument dla angtos) jest ustawiona na O miejsc po prze-
cinku dla pierwszego wywołania, 4 miejsca dla trzech następnych wywołań
i 2 miejsca w wywołaniu ostatnim.

(setq ang 3.14159) str2 "\nKąt sformatowany jako ")

(setq fmtval (angtos ang O 0)) Tryb O = stopnie
(princ (strcat str2 fmtval)) zwraca Kqt sformatowany jako 180

(setq fmtval (angtos ang 1 4)) Tryb l = stopnie/minuty/sekundy
(princ (strcat str2 fmtval)) zwraca Kqt sformatowany jako 180d0'0"

(setq fmtval (angtos ang 2 4) Tryb 2 = grady
(princ (strcat str2 fmtval)) zwraca Kqt sformatowany jako 200.0000g

(setq fmtval (angtos ang 3 4) Tryb 3 = radiany
(princ (strcat str2 fmtval)) zwraca Kqt sformatowany jako 3.1416r

(setq fmtval (angtos ang 4 2) Tryb 4 = namiary geodezyjne
(princ (strcat str2 fmtval)) zwraca Kqt sformatowany jako W;

Uwagci: Jeśli funkcja angtos ma zwracać łańcuch znaków w jednostkach
geodezyjnych (modę równy jest 4), na postać tego łańcucha wpływa również
zmienna systemowa UNITMODE. Gdy UNITMODEjest równa zeru, zwra-
cany łańcuch może zawierać spacje (na przykład "N 45d E"). Ustawienie
UNITMODE na wartość l sprawia, że łańcuch nie będzie zawierał spacji (na
przykład "N45dE").

38 Konwersje

Rozdział 2

Funkcja angtof stanowi dopełnienie funkcji angtos, tak że poniższe wywo-
łania funkcji zwracają tę samą wartość 3.14159.

(angtof "180" 0) Tryb O = stopnie

(angtof "180d0'0\"" 1)' Tryb l = stopnie/minuty/sekundy

(angtof "200-OOOOg" 2) Tryb 2 = grady

(angtof "3.14159r" 3) Tryb 3 = radiany

(angtof "W" 4) Tryb 4 = jednostki geodezyjne

Przypomnienie: Jeżeli w łańcuchu tekstowym, zawierającym odległość
w stopach i calach albo kąt w stopniach, minutach i sekundach występuje
znak cudzysłowu ("), należy poprzedzić go znakiem ukośnika odwrotnego (\),
aby nie został zinterpretowany jako zamknięcie łańcucha tekstowego. De-
monstrują to pokazane powyżej przykłady użycia funkcji angtof i distof.

Jednostki w świecie fizycznym

W pliku acad.unt zdefiniowane są różne konwersje jednostek świata rzeczy-
wistego, takie jak mile/kilometry, stopnie Fahrenheita/Celsjusza i tak da-
lej. Funkcja cvunit pobiera jako argument wartość wyrażoną w jednym sy-
stemie jednostek i zwraca wartość równoważną, wyrażoną w innym syste-
mie. Oba systemy jednostek są określane za pomocą łańcuchów znaków, za-
wierających reprezentacje jednostek zdefiniowanych w pliku acad.unt (wię-
cej informacji na temat uwzględnienia przez AutoCAD jednostek w świecie
rzeczywistym można znaleźć w rozdziale drugim AutoCAD Podręcznik Ad-
aptacyjny).

Przykład

Jeżeli w aktualnym rysunku obowiązuje zapis jednostek w postaci dziesięt-
nych ułamków cala albo w postaci liczby stóp i cali, wówczas poniższa pro-
cedura zamieni podaną przez użytkownika odległość na metry:

(defun C:I2M (/ engJen metricJen eng metric)

(princ "\nKonwersja cali na metry. ")

(setq engJen (getdist "\nPodaj odległość w calach:"))

(setq metricJen (cvunit engJen "inches" "meters"))

(setq eng (rtos engJen 2 4) metric (rtos metricJen 2 4))

(princ (strcat "\n\t" eng " cale = " metric " metry."))

(princ)
)

Funkcja cvunit nie dokonuje konwersji jednostek wyrażających różne wiel-
kości fizyczne, na przykład cali na gramy.

Transformacje układów współrzędnych

Funkcja trans dokonuje transformacji lub przesunięcia punktu z jednego
układu współrzędnych do drugiego. Argumentem dla niej jest pt, który może
być interpretowany jako punkt 3W, lub wektor przesunięcia 3W, o czym de-
cyduje argument disp. Aby argument pt był traktowany jako przesunięcie

Transformacje układów współrzędnych 39

Funkcje ogólnego przeznaczenia

3W, argument disp musi być różny od zera. W przeciwnym razie argument
pfjest traktowany jako punkt.

Argument from wskazuje system współrzędnych, w którym wyrażone są
wpółrzędne pt, a argument to określa system, do którego punkt ma zostać
przetransponowany. Argumenty from i to mogą określać jeden z układów
współrzędnych, podanych w poniższej liście:

GUW Globalny Układ Współrzędnych. Jest to bazowy układ współrzęd-
nych - układ odniesienia dla innych układów. Wszystkie inne
układy współrzędnych są definiowane względem GUW. GUW jest
jedynym układem współrzędnych nie podlegającym żadnym prze-
kształceniom. Wartości zmierzone względem GUW są stałe,
podczas gdy w innych układach mogą się zmieniać.

LUW Lokalny Układ Współrzędnych. Jest to aktualny, "roboczy" układ współ-
rzędnych, zdefiniowany przez użytkownika w celu ułatwienia (czasem
wręcz umożliwienia) tworzenia i edycji rysunków. Wszystkie wprowa-
dzane do AutoCAD-a punkty, włączając w to punkty zwracane przez
procedury AutoLISP-u i funkcje zewnętrzne, są wyrażane we współrzęd-
nych LUW (za wyjątkiem punktów poprzedzonych gwiazdką (*)
w odpowiedzi na zgłoszenie Polecenie:). Tak więc jeżeli użytkow-
nik chce podać współrzędne w GUW, UWE lub EUW, musi dokonać
ich transformacji do LUW za pomocą funkcji trans.

UWE Układ Współrzędnych Elementu. Wartości punktowe zwracane
przez funkcję entget są mierzone w tym układzie współrzędnych,
związanych z danym elementem rysunkowym. Punkty takie są
zwykle transformowane do układu GUW, aktualnego LUW lub
EUW, odpowiednio do przewidywanego zastosowania elementu. I
na odwrót: przed zapisaniem punktu w rysunkowej bazie danych
z wykorzystaniem funkcji entmode lub entmake, punkty muszą
być przetransponowane do układu UWE.

EUW Ekranowy Układ Współrzędnych. EUW jest układem współrzędnych,
do którego transformowane są rysunki przed ich wyświetleniem. Po-
czątek tego układu znajduje siew punkcie określonym przez zmienną
systemową TARGET, a oś Z pokrywa się z kierunkiem obserwacji.
Mówiąc inaczej: rzutnia jest zawsze rzutem płaskim jej Ekranowego
Układu Współrzędnych. Współrzędne te mogą służyć do określania,
gdzie użytkownik zobaczy interesujący go obiekt.

Gdy argumenty from i to wynoszą odpowiednio 2 i 3 (w dowolnej ko-
lejności), 2 wskazuje EUW dla bieżącej rzutni w obszarze modelu, a 3
wskazuje EUW dla obszaru papieru (EUWOP). Gdy kod 2 jest używa-
ny w połączeniu z dowolnym całkowitym kodem innym niż 3 (lub
innym sposobem określenia układu współrzędnych), wówczas przyj-
mowany jest EUW dla obszaru aktualnie obowiązującego, zależnie od
tego, czy jest to obszar papieru czy modelu. Takie samo założenie obo-
wiązuje wówczas także dla drugiego argumentu.

EUWOP Ekranowy Układ Współrzędnych w Obszarze Papieru. Może być
wykorzystywany wyłącznie do transformacji pomiędzy EUW dla
obszaru papieru i EUW dla aktywnej rzutni w obszarze modelu.
Jest to zasadniczo transformacja dwuwymiarowa, w której współ-
rzędne X i Y zawsze podlegają skalowaniu oraz przesunięciu, gdy
argument disp jest równy zeru. Współrzędna Z natomiast podlega
skalowaniu, lecz nigdy przesunięciu i z tego powodu może być

40 Transformacje układów współrzędnych

Rozdział 2

wykorzystywana do określenia współczynnika skali pomiędzy dwo-
ma Ekranowymi Układami Współrzędnych. EUWOP (kod
całkowity 2) może być transformowany wyłącznie do bieżącej rzutni
w obszarze modelu. Jeśli argument from wynosi 3, wówczas argu-
ment to musi wynosić 2 i na odwrót.

Oba argumenty: from i to mogą określać układ współrzędnych za pomocą jed-
nego z poniższych sposobów:

Liczba całkowita określająca GUW, aktualny LUW lub aktualny EUW
(aktualnej rzutni lub obszaru papieru).

Nazwa elementu, w postaci zwracanej przez jedną z funkcji zwracają-
cych nazwę elementu lub zbiór wskazań, opisanych w rozdziale 3. Ten
sposób określa UWE elementu rysunkowego posiadającego nazwę.

Dla elementów płaskich, UWE może nie pokrywać się z GUW. Sytuacja
taka jest dokładnie opisana w rozdziale 11 AutoCAD Podręcznik Adapta-
cyjny. Jeżeli układy te się pokrywają, konwersja pomiędzy układami
UWE i GUW jest operacją tożsamą.

Trójwymiarowy wektor pogrubiania jest innym sposobem określania
układu współrzędnych elementu UWE. Wektory pogrubiania są zawsze
reprezentowane we współrzędnych GUW. Tak więc wektor pogrubiania
(0,0,1) definiuje układ GUW.

Tabela 2-3. Kody układów współrzędnych



Kod Układ współrzędnych
0 Globalny (GUW)
1 Lokalny (aktualny LUW)
2 Ekranu: EUW aktualnej rzutni, gdy użyto kodu 0 lub 1 EUW aktualnej rzutni obszaru modelu, gdy użyto kodu 3
3 EUW obszaru papieru, EUWOP (używany tylko z kodem 2)

Przykład

Poniższy przykład wykonuje translację punktu z GUW do bieżącego LUW:

(setq punkt'(1.0 2.0 3.0))
(setq układ-1 0) GUW
(setq układ-2 1) LUW

przesunięcie = O wskazuje, że punkt jest punktem:

(trans punkt układ-1 układ-2 0)

Sterowanie wyświetlaczem

AutoLISP zawiera kilka funkcji do sterowania pracą wyświetlacza AutoCAD-a,
w obu trybach: graficznym i tekstowym. Niektóre z tych funkcji wymagają
wprowadzenia odpowiedzi przez użytkownika AutoCAD-a, od niej może też za-
leżeć sposób ich działania.

Sterowanie wyświetlaczem 41

Funkcje ogólnego przeznaczenia

Interakcyjne wyprowadzanie informacji

Podstawowymi funkcjami do wyprowadzania informacji są: prompt, princ,
prin1 i print. Funkcja prompt wyświetla komunikat w linii zgłoszeń
AutoCAD-a i zwraca nil. Powina ona być wykorzystywana wyłącznie do
wyświetlania komunikatów na ekranie. Funkcje princ, prin1 i print wyświet-
laj ą wyrażenie (niekoniecznie łańcuch alfanumeryczny) w linii zgłoszeń go-
towości, zwracają wyrażenie i opcjonalnie mogą wysyłać dane wyjściowe do
pliku dyskowego. Funkcje te różnią się nieco między sobą; princ drukuje zna-
ki sterujące bez ich rozszerzania, podczas gdy prin1 i print rozszerzają znaki
poprzedzone ukośnikiem lewym (\); princ umieszcza znak nowej linii przed
wyrażeniem i znak spacji (odstępu) po wyrażeniu.

Rozmiar łańcucha tekstu wyświetlanego przez funkcję prompt nie powinien
przekraczać długości linii zgłoszeń w trybie graficznym, co zwykle wynosi
nie więcej niż 80 znaków.

Przykład

Poniższy przykład obrazuje różnice pomiędzy czterema podstawowymi fun-
kcjami wyprowadzania informacji i sposób obsługi przez nie tego samego
łańcucha tekstu. (Dwa kody ósemkowe są specyficzne dla systemu operacyj-
nego DOS. W innym systemie należy sprawdzić w odpowiednim podręczni-
ku, jakich kodów należy użyć do wstawienia znaków. Podstawowa koncepcja
pozostaje jednak taka sama, bez względu na wykorzystywany system ope-
racyjny.)

(setq str "Dopuszczalna \"odchyłka\" wynosi \361 \254\"")

(prompt str) drukuje "Dopuszczalna "odchyłka" wynosi ą ^/Ą"
i zwraca nil

(princ str)
(prin1 str)
(print str)

drukuje "Dopuszczalna "odchyłka" wynosi ą74"

i zwraca "Dopuszczalna "odchyłka" wynosi \361 \254\""

drukuje "Dopuszczalna "odchyłka" wynosi ą 1/ 4"

i zwraca "Dopuszczalna "odchyłka" wynosi \361 \254\""

drukuje (nowa linia)

"Dopuszczalna "odchyłka" wynosi \361 \254\""(ods(ęp)

i zwraca "Dopuszczalna "odchyłka" wynosi \361 \254\""

Funkcja menucmd steruje wyświetlaniem menu na ekranie graficznym. Po-
woduje ona uaktywnienie jednego z podmenu w menu bieżącym. Jej argu-
mentem jest łańcuch tekstowy, składający się z dwóch części oddzielonych
znakiem równości, o postaci:

"section=submenu"

gdzie section określa sekcję menu, a submenu wskazuje, które podmenu
w tej sekcji uaktywnić. Dopuszczalne wartości argumentu section są takie
same, jak określenia podmenu w pliku menu.

Argument submenu może być etykietą podmenu, istniejącą w aktualnym
pliku menu, lub etykietą jednej z głównych sekcji menu (na przykład
SCREEN). Jeśli argument section wskazuje menu rozwijalne lub menu pi-

42 Sterowanie wyświetlaczem

Rozdział 2

ktogramowe, argumentem submenu może być gwiazdka (*). Powoduje to wy-
świetlenie tego menu (menu rozwijalne i menu piktogramowe nie są automa-
tycznie wyświetlane po uaktywnieniu). Dalsze informacje na temat plików
menu można znaleźć w rozdziale 6 AutoCAD Podręcznik Adaptacyjny.

Uwaga: Argument string nie powinien zawierać znaku dolara ($), poprze-
dzającego w pliku menu analogiczną instrukcję, podobnie jak część submenu
nie powinna zawierać gwiazdki (*), rozpoczynającej etykietę podmenu w pli-
ku menu.

Przykłady

Poniższy przykład wywołania funkcji menucmd powoduje pojawienie się na
ekranie podmenu ***OSNAPB, zdefiniowanego w aktualnym pliku menu.

(menucmd "S=OSNAPB")

W podobny sposób, poniższe wywołanie przypisuje podmenu **MY-BUTTONS
do menu ***BUTTONS1 i uaktywnia je.

(menucmd "B1=MY-BUTTONS")

Następny przykład powoduje pojawienie się na ekranie menu kursora (zde-
finiowanego jako ***POPO):

(menucmd "PO=POPO") Inicjuje menu ***POPO...
(menucmd "P0=*") ...i wyświetla je

Poniższe wywołanie funkcji menucmd wyświetla bieżąco zainicjowane me-
nu P1 (menu rozwijalne):

menucmd "P1=*")

Użycie "P1=*" bez wcześniejszego zainicjowania potrzebnego menu działa,
ale może dać nieoczekiwane rezultaty. Chociaż możliwe jest zainicjowanie
właściwie dowolnego menu w położeniu menu rozwijalnego lub kursora, le-
piej jest używać tylko menu specjalnie zaprojektowanego dla tego obszaru
menu. Jeśli w pliku menu istnieje podmenu nazwane **MORESTUFF, moż-
na wyświetlić je w położeniu P1 za pomocą następującego kodu:

(menucmd "P1=MORESTUFF") Inicjuje menu "MORESTUFF...
(menucmd "P1=*") ...i wyświetla je w położeniu P1

Menu to pozostaje w tym położeniu aż do zmiany, następującej po zainicjo-
waniu innego menu, jak w poniższym wyrażeniu:

menucmd "P1=POP1")

Jeżeli menu użytkownika korzysta z możliwości blokowania (wyróżniania
na ekranie słabszym odcieniem) i oznaczania pozycji menu, odczytywać
i zmieniać stan etykiety menu można za pomocą funkcji menucmd. Poniższe
wywołanie tej funkcji odczytuje bieżący stan czwartej etykiety w menu roz-
wijalnym P2:

(menucmd "P2.4=#?") Jeśli etykieta ta jest zablokowana,
funkcja ta zwraca "P2.4=~"

Poniższe wywołania funkcji odblokowują i zablokowują tę samą etykietę:

(menucmd "P2.4=") Odblokowuje etykietę
(menucmd "P2.4=~") Blokuje etykietę

Sterowanie wyświetlaczem 43

Funkcje ogólnego przeznaczenia

W podobny sposób można też umieszczać i usuwać znaczniki po lewej stronie
etykiet menu. Dalsze informacje na temat menu można znaleźć w rozdziale 6
AutoCAD Podręcznik Adaptacyjny.

Funkcje AutoLISP-u mogą nie tylko blokować i odblokowywać etykiety menu.
Z ich pomocą możliwe jest też modyfikowanie wyświetlanego tekstu, metodą
umieszczania w etykiecie wyrażenia łańcuchowego języka DIESEL. Ponieważ
język DIESEL akceptuje łańcuchy tekstowe jedynie na wejściu, informacje do
wyrażenia typu DIESEL można dostarczać poprzez zmienne systemowe
USER1-5, ustawione na wartości zwracane przez funkcje użytkownika. Więcej
informacji na temat wykorzystania wyrażeń języka DIESEL w menu, zawiera
rozdział 8 AutoCAD Podręcznik Adaptacyjny.

Funkcj a men ucmd pozwala także na wyznaczenie wartości wyrażenia DIESEL
wewątrz funkcji AutoLISP-u. Poniższa procedura zwraca aktualny czas:

(defun C:CTIME (/ ctim)

(setq ctim (menucmd "M=$(edtime,$(getvar,date),H:MMam/pm)"))

(princ (strcat "\nBieżący czas:" ctim ))

(princ)
)

Dalsze informacje na temat wykorzystania wyrażeń DIESEL w AutoLISP-ie oraz
katalogu funkcji DIESEL zawiera rozdział S AutoCAD Podręcznik Adaptacyjny.

Sterowanie ekranem graficznym i tekstowym

Do przełączania trybu pracy ekranu komputerów z jednym monitorem, proce-
dury AutoLISP-u mogą wykorzystywać funkcję graphscr do przełączenia ekra-
nu w tryb graficzny oraz funkcję textscr do przełączenia w tryb tekstowy. Fun-
kcje te są odpowiednikami poleceń GRAPHSCR i TEXTSCR AutoCAD-a, lub
użycia klawisza przełączającego ekran. Istnieje też funkcja textpage o dzia-
łaniu podobnym do textscr, ale czyszcząca ekran przed jego wyświetleniem (tak
jak czynią to polecenia AutoCAD-a STAN i POMOC).

Funkcja redraw działa podobnie, jak polecenie PRZERYS AutoCAD-a, jed-
nak daje większą kontrolę nad zawartością ekranu. Można przerysować nie
tylko cały ekran graficzny, ale na przykład przerysować pojedynczy element
lub spowodować jego zniknięcie z rysunku. Jeżeli jest to obiekt złożony, jak
Polilinia lub Blok, funkcja redraw może przerysować albo cały obiekt, albo
tylko jego nagłówek; redraw potrafi także wyróżnić na ekranie (rozjaśnić) lub
anulować wyróżnienie wybranych elementów.

Sterowanie na niskim poziomie grafiką i danymi
wprowadzanymi przez użytkowanika

Funkcje, które zostaną teraz omówione, dają bezpośredni dostęp do ekranu
graficznego AutoCAD-a i urządzeń wejściowych. Umożliwia to wyposażenie
programów tworzonych przez użytkownika w AutoLISP-ie, w pewne możli-
wości sterowania ekranem i wprowadzaniem danych podobnych do tych, ja-
kie są wbudowane w AutoCAD.

Funkcja grdear powoduje wyczyszczenie aktualnej rzutni, nie wpływając na
obszary zgłoszeń, stanu i menu na ekranie graficznym. Funkcja grtext wy-

44 Sterowanie wyświetlaczem

Rozdział 2

świetla tekst bezpośrednio w obszarze menu lub stanu, z rozjaśnieniem lub
bez. Funkcja grdraw rysuje wektor w aktualnej rzutni, pozwalając wpływać
na jego kolor i ewentualne rozjaśnienie. Funkcja grvecs służy do rysowania
wielu wektorów. I ostatnia funkcja z tej grupy, grread, zwraca "surową"
odpowiedź użytkownika, zarówno z klawiatury, jak i z urządzenia wskazu-
jącego (myszy lub pulpitu graficznego). Jeżeli wywołanie grread umożliwia
śledzenie, funkcja ta zwraca współrzędne, które można wykorzystać na przy-
kład do przeciągania elementu na ekranie.

Ostrzeżenie: Ponieważ funkcje te są zależne od kodu AutoCAD-a, można
spodziewać się ich różnego działania w różnych wersjach AutoCAD-a. Nie
ma pewności, że korzystające z nich programy w AutoLISP-ie będą działały
poprawnie w nowszych wersjach AutoCAD-a. Zachowanie tych funkcji zale-
ży także od konfiguracji sprzętu. W szczególności programy wywołujące fun-
kcje grread i grtext prawdopodobnie nie będą zachowywać się identycznie na
wszystkich konfiguracjach, chyba że programista bardzo drobiazgowo prze-
strzegał podanych zaleceń (w rozdziale 4) i uniknął pułapek związanych ze
sprzętem. Ponadto są to funkcje niskiego poziomu, a więc prawie nie zwra-
cają żadnych komunikatów błędów i mogą zakłócić wygląd ekranu graficz-
nego (patrz przykład, podający metodę wyjścia z takiej sytuacji).

Przykład

Poniższa sekwencja niweluje skutki uszkodzeń treści ekranu graficznego,
spowodowane przez nieprawidłowe wywołanie grdear, grtext, grdraw lub
grvecs:

(grtext) Przywraca standardowy tekst
(redraw)

Kalibrowanie pulpitu graficznego

Użytkownicy AutoCAD-a posiadający pulpit graficzny mogą przeprowadzić jego
kalibrację za pomocą polecenia PULPIT, w sposób opisany w rozdziale 4Auto-
CAD Podręcznik Użytkownika. Funkcja tablet pozwala na bezpośrednie wykali-
browanie tabletu oraz zapisanie parametrów kalibracji w celu ich późniejszego
wykorzystania.

Pierwszym argumentem funkcji tablet jest liczba całkowita coc/e. Jeżeli code wy-
nosi 0; funkcja zwraca kalibrację bieżącą. Gdy cootewynosi l, kalibracja jest usta-
lana zgodnie z pozostałymi argumentami. Kalibracje są wyrażane jako cztery
trójwymiarowe punkty (oprócz code). Pierwsze trzy z tych punktów: row1, row2
i row3, są trzema pierwszymi wierszami macierzy transformacji pulpitu. Czwar-
ty punkt, direction, jest wektorem normalnym (wyrażonym w globalnym układzie
współrzędnych - GUW), do płaszczyzny, w której -jak się zakłada - leży po-
wierzchnia puplitu. Po przeprowadzeniu kalibracji poleceniem AutoCAD-a
TABLET zakłada się, że powierzchnia puplitu leży w płaszczyźnie XY aktu-
alnego LUW.

Uwaga: Zmienna systemowa TABMODE decyduje o tym, czy tryb puplitu jest
włączony (TABLETMODE=1), czy wyłączony (TABLETMODE=0). Zmienną tą
można sterować za pośrednictwem funkcji setvartablet.

Kalibrowanie pulpitu graficznego 45

Przykłady

Poniższa przykładowa procedura odczytuje aktualny stan kalibracji puplitu
i przechowuje go pod zmienną tcal.

(defun C:TABGET ()
(setq tcal (tablet 0))
(if (not tcal)

(princ "\n0dczytanie kalibracji jest niemożliwe ")

(princ "\nKonfiguracja została zachowana, użyj TABSET do odtworzenia kalibracji.")

)
(princ)

)

Jeśli wykonanie powyższej procedury zakończy się sukcesem, symbol tcal za-
wiera listę zwracaną przez funkcję tablet. Lista ta może wyglądać następująco:

(1 (0.00561717 -0.000978942 -7.5171)

(0.000978942 0.00561717 -9.17308)

(0.00.0 1.0)

(0.00.0 1.0)
)

Do przywrócenia stanu kalibracji odczytanego przez poprzednią procedurę,
można wykorzystać procedurę C:TABSET:

(defun C:TABSET ()
(if (not (appły 'tablet tcal))
(princ "\nPrzywrócenie kalibracji jest niemożliwe. ")
(progn

(princ "\nKalibracja puplitu została odtworzona. ")
(setvar "tabmode" 1) Wtacza tryb puplitu
(if (= (getvar "tabmode") 0)

(princ "\nWłączenie trybu puplitu nie jest możliwe. ")
)

(princ)

Macierz transformacji, przesyłana jako row1, row2 i row3, jest macierzą
transformacji o rozmiarze 3x3, służącą do transformacji punktu dwuwymia-
rowego. Punkt 2Wjest wyrażany jako wektor we współrzędnych jednorod-
nych (przez dodanie 1.0 jako trzeciego elementu), tak że transformacja może
być zapisana następująco:

X
Y
D

MOO MOI Mo2

MIO Mu Mi2

M20 M21 1.0

x

Y
1.0

Kalibrowanie pulpitu graficznego

Rozdział 2

Obliczanie punktu jest podobne do przypadku trójwymiarowego. AutoCAD
transformuje punkt wykorzystując następujące wzory:

X' = MooK + MoiY + Mo2
Y = MioX + MuY + Mi2
D'= M2oX + M2iY + 1.0

Aby powstały wektor zamienić na powrót w punkt 2W, pierwsze dwa skład-
niki są dzielone przez trzeci, będący tu współczynnikiem skali D'. W rezul-
tacie otrzymuje się punkt CX7D',y7D').

Dla najbardziej ogólnego przypadku - przekształcenia rzutowego, tablet wykonu-
je wszystkie obliczenia. Jednak dla przekształceń afinicznych i ortogonalnych za-
równo M20, jak i M2i są równe zeru, tak że współczynnik D' wyniósłby 1.0. Ob-
liczenie D' i dzielenie są pomijane: wynikowy punkt 2W to po prostu (X',Y').

Jak wskazuje poprzedni akapit, przekształcenie afinicznejest szczególnym,
jednorodnym przypadkiem przekształcenia rzutowego. Przekształcenie or-
togonalne jest szczególnym przypadkiem przekształcenia afinicznego: nie
tylko Mao i M2i są zerowe, ale także Moo=Mn i Mio=-Moi.

Uwaga: Przy ustawianiu kalibracji, lista zwracana nie będzie dokładnie równa
liście dostarczonej jeśli argument direction nie był unormowany: przed zwróce-
niem wektora kierunkowego AutoCAD dokonuje jego unormowania. Ponadto
gwarantuje, że trzeci element w trzeciej kolumnie (/"ow3[Z]) będzie równy l. Sy-
tuacja taka nie powinna zaistnieć po wykonaniu przez użytkownika kalibracji
z wykorzystaniem wartości odczytanej z AutoCAD-a przez funkcję tablet. Może
to jednak się zdarzyć, jeśli użytkownik sam oblicza transformację.

Porównywanie łańcuchów ze znakami uniwersalnymi

Funkcja wcmatch umożliwia porównywanie w programach użytkowych łańcu-
chów alfanumerycznych z wzorcami zawierającymi znaki uniwersalne. Mecha-
nizm ton można wykorzystać do tworzenia zbioru wskazań (w połączeniu z fun-
kcją ssget, co opisano w części "Obsługa zbiorów wskazań") oraz podczas od-
czytywania dodatkowych danych elementu (w połączeniu z funkcją entget, co
opisano w części "Odczytywanie dodatkowych danych elementu").

Funkcja wcmatch porównuje pojedynczy łańcuch znakowy z wzorcem
i zwraca T jeśli łańcuch zgadza się z wzorcem, lub nil -jeśli zgodności brak.
Wzorce ze znakami uniwersalnymi są podobne do wyrażeń regularnych,
wykorzystywanych przez wiele programów systemowych i użytkowych.
Znaki alfabetu i cyfry we wzorcu są interpretowane dosłownie. Nawiasy
kwadratowe mogą być natomiast wykorzystane do określenia znaków opcjo-
nalnych lub zakresu liter lub cyfr. Znak zapytania (?) odpowiada jednemu
dowolnemu znakowi. Gwiazdka (*) odpowiada ciągowi znaków. Wewnątrz
wzorca niektóre inne znaki specjalne mają szczególne znaczenie. Więcej
szczegółów na ten temat podano w opisie funkcji wcmatch w rozdziale 4.

Przykłady

W poniższych przykładach przyjęto, że łańcuch matchme został zadeklaro-
wany i zainicjowany w wyrażeniu:

(setq matchme "to jest łańcuch - test1 test2 test3 koniec")

Następujące wywołanie wcmatch sprawdza, czy matchme zaczyna się od dwóch

Porównywanie łańcuchów ze znakami uniwersalnymi 47

Funkcje ogólnego przeznaczenia

znaków "to":

(wcmatch matchme "to*")

W naszym przypadku powyższe wyrażenie zwraca T

Następne linie ilustrują wykorzystanie znaków we wzorcu. W tych przykła-
dach wcmatch zwraca T, jeśli matchme zawiera "test4", "test5", "test6" lub
"test9" (należy zwrócić uwagę na znak "*" na początku i na końcu wzorca,
umożliwiający znalezienie podanej części łańcucha, w dowolnym miejscu
łańcucha przeszukiwanego):

(wcmatch matchme "test[4-69]*")

Powyższe wyrażenie zwraca nil, ale wyrażenie:

(wcmatch matchme "test[4-61]*")

zwraca T, gdyż łańcuch matchme zawiera "test1".

W łańcuchu wzorcowym można podać wiele łańcuchów, pooddzielanych od
siebie przecinkami. Poniższe wywołanie wcmatch zwraca T, jeśli wcmatch
jest równy "ABC", jeśli rozpoczyna się od "XYZ", lub jeśli kończy się na "end".

(wcmatch matchme "ABC,XYZ*,*end") zwraca T

48 Porównywanie łańcuchówze znakami uniwersalnymi

Wyszukiwarka

Podobne podstrony:
silniki?sel trojfaz induk ogolnego przezn
instrukcja bhp przy skladowaniu i magazynowaniu towarow w magazynach ogolnego przeznaczenia
silnik?sel jednofaz induk ogolnego przezn
charakterystyka ukladow kinematycznych napedu i sterowania obrabiarek ogolnego przeznaczenia druk la
instrukcja bhp dla pracownikow zatrudnionych w magazynie ogolnego przeznaczenia
Ćw 02 Rysowanie podstawowych obiektów graficznych – funkcje paska „Rysuj”
Analiza Matematyczna Rachunek Różniczkowy Funkcji Jednej Zmiennej 02
02 01 Prace na wysokosci wymagania ogolne v1 2
072 Funkcje , własn ogólne

więcej podobnych podstron