Grafika matematyczna MATMA LUX 3.0

Wielkość: px
Rozpocząć pokaz od strony:

Download "Grafika matematyczna MATMA LUX 3.0"

Transkrypt

1 Grafika matematyczna MATMA LUX Zbigniew Andrzej Nowacki SPIS TREŚCI 1. Wprowadzenie Mapy bitowe Współrzędne logiczne i fizyczne Użycie klawiatury w oknie graficznym Wykorzystanie myszy w oknie graficznym Opisy funkcji WPROWADZENIE Pakiet MATMA LUX jest rozszerzeniem programu MATMA PREMIUM o edytor plików graficznych oraz obszerną kolekcję funkcji realizujących operacje graficzne. Dzięki temu można powiedzieć, że MATMA LUX jest produktem typu 2in1. Istotnie, w odróżnieniu od zwykłych edytorów graficznych MATMA LUX zawiera język programowania, a w odróżnieniu od kompilatorów zawiera także edytor map bitowych. Możliwe jest tworzenie i modyfikowanie dowolnych rysunków ze szczególnym uwzględnieniem obrazów związanych z obliczeniami takich jak np. wykresy funkcji. Ciągi operacji mogą być zapisywane w postaci plików skryptowych MATMY lub nawet plików wykonywalnych EXE. Ich otrzymanie może być osiągnięte o wiele łatwiej i szybciej niż przy pomocy języków programowania takich jak C++, C# czy Java. Dlatego MATMA LUX powinna być przydatna dla każdej osoby zajmującej się grafiką komputerową. Podstawową funkcją MATMY LUX jest funkcja paint wyświetlająca okno graficzne. W przeciwieństwie do okna Windows MATMY PREMIUM okno graficzne zawsze pracuje równolegle z oknem tekstowym. Dzięki temu użytkownik jest w stanie wydawać polecenia tekstowe i od razu obserwować ich efekt w oknie graficznym. (Jest jasne, że mało który język programowania daje podobne możliwości.) Bardzo ważnym składnikiem MATMY LUX jest funkcja use. Umożliwia ona m.in. odręczne rysowanie przy pomocy myszy punktów i linii pozbawionych odpowiadającego wzoru matematycznego, a także pozwala przeprowadzać maksymalnie zindywidualizowane, profesjonalne, w pełni graficzne i multimedialne prezentacje (dzięki czemu można nawet powiedzieć, że MATMA LUX jest produktem typu 3in1 ). Zaś wykorzystując opcję tworzenia plików EXE będziesz w stanie uruchamiać takie prezentacje nawet z pulpitu. W programie MATMA LUX można wykorzystywać wszystkie udogodnienia MATMY PREMIUM. Np. przy pomocy funkcji note daje się łatwo sprawdzić jakie

2 operacje były wykonane podczas pracy interaktywnej i na tej podstawie utworzyć odpowiedni plik skryptowy lub program wykonywalny. Jeśli jesteśmy jeszcze w czasie pracy, to przy użyciu funkcji write można zapisać wydane do tej pory instrukcje. W parametrach wielu funkcji wykorzystywane są tablice i inne obiekty dostępne w języku MATMY. Preferowane wywołania wstępne mogą być umieszczone w pliku konfiguracyjnym. Z drugiej strony warto wskazać, że można z powodzeniem korzystać z MATMY LUX przy niewielkiej lub zgoła żadnej znajomości programowania. Po utworzeniu okna graficznego funkcją paint można w nim bowiem rysować wiele rozmaitych linii prostych lub krzywych, zamkniętych lub otwartych, przy użyciu myszy i klawiatury. I tylko ewentualne dodanie tekstu wymagałoby wywołania prostej funkcji notice w oknie tekstowym. Wszystkie funkcje MATMY LUX zostały opisane w Rozdziale 6. Większość przykładów została opatrzona ilustracjami graficznymi wykonanymi właśnie przy pomocy omawianej aplikacji. W przypadku pozytywnego wykonania operacji funkcje zwracają nil (chyba że wyraźnie podano inaczej). Natomiast w razie niepowodzenia zwracane jest.0. lub 0, a ponadto może być wypisany komunikat błędu bądź ostrzeżenia. 2. MAPY BITOWE MATMA LUX pracuje z mapami bitowymi następujących typów: BMP PPM (binarne) MTL wewnętrzne O ile dwa pierwsze są dobrze znane i akceptowane przez szereg innych aplikacji, o tyle dwa następne są charakterystyczne dla programu MATMA LUX. Bitmapy trzech pierwszych typów znajdują się (przed i po ich wyświetleniu) w plikach dyskowych o analogicznych rozszerzeniach. Wewnętrzne mapy bitowe mogą być edytowane przy pomocy instrukcji MATMY. Jak wiadomo, istnieje co najmniej kilkadziesiąt rodzajów plików dyskowych zawierających grafikę. Ich konwersja do/z formatów akceptowanych przez program MATMA LUX może być wykonana przy użyciu licznych (w tym bezpłatnych i dostępnych w sieci) programów. Mapy bitowe mogą być wczytywane z dysku przy pomocy funkcji new lub bitmap czy też klawiszy ^N lub ^B, a zapisywane przy użyciu save lub ^S (zamiast klawiszy można też wykorzystywać menu systemowe okna graficznego). Domyślnym rozszerzeniem plików jest BMP. Wewnętrzne bitmapy uzyskuje się stosując funkcję image, a wyświetla new lub bitmap. W istocie rzeczy, wewnętrzne mapy bitowe są tablicami MATMY o następującej strukturze: liczba elementów tablicy jest równa liczbie linii rastrowych tj. wysokości okna w pikselach, każdy element tablicy jest ciągiem znaków o długości 3s, gdzie s jest szerokością okna w pikselach, każdy piksel jest reprezentowany przez trzy bajty zawierające odpowiednio nasycenia kolorów czerwonego, zielonego i niebieskiego.

3 Taka tablica może być dowolnie zmieniana wyrażeniami MATMY (zawierającymi zwłaszcza funkcje getrgb i setrgb) i dzięki temu uzyskujemy możliwość programowego modyfikowania map bitowych. Omówimy tu jeszcze strukturę plików MTL, która wygląda następująco: bajty o numerach 0 i 1 zawierają identyfikator pliku, tj. tekst MT, bajty nr 2 i 3 są zarezerwowane i obecnie powinny być wyzerowane, bajty o numerach od 4 do 7 zawierają w postaci binarnej szerokość mapy w pikselach, bajty o numerach od 8 do 11 zawierają w postaci binarnej wysokość mapy w pikselach, dalsze bajty przedstawiają dane pikseli w kolejności od najwyższej linii rastrowej i od lewej strony. Każdy piksel jest reprezentowany przez 4 bajty zawierające: nasycenie koloru niebieskiego, nasycenie koloru zielonego, nasycenie koloru czerwonego, zero. Bitmapy MTL zajmują stosunkowo duży obszar pamięci dyskowej (średnio o 33% więcej niż pliki BMP i PPM), ale w erze dysków terabajtowych może to nie mieć znaczenia. Z drugiej strony, prędkość wczytywania i zapisywania plików MTL jest największa. 3. WSPÓŁRZĘDNE LOGICZNE I FIZYCZNE Jedną z charakterystycznych cech MATMY LUX jest całkowita niezależność od wymiarów fizycznych rysunku. Oznacza to, że w każdym zestawie operacji graficznych można zawsze dowolnie zmienić parametry funkcji paint (określające miejsce i rozmiar okna graficznego na ekranie) i wszystko będzie nadal działało. Osiąga się to poprzez przyjęcie, że funkcje MATMY LUX (z wyjątkiem kilku funkcji takich jak paint) operują na współrzędnych logicznych, które są na ogół różne od współrzędnych fizycznych. W tym miejscu warto zwrócić uwagę na istotną różnicę między współrzędnymi stosowanymi w matematyce, a współrzędnymi ekranowymi. W matematyce najmniejsze wartości (zwykle ujemne) znajdują się w lewym dolnym rogu i rosną przy poruszaniu się w prawo oraz w górę. Natomiast współrzędne pikseli ekranu mają najmniejsze (zerowe) wartości w lewym górnym rogu i rosną przy ruchu w prawo i w dół. MATMA LUX startuje ze współrzędnymi logicznymi ustawionymi w sposób używany w matematyce. Konkretnie, środek okna posiada współrzędne (0,0), dolny lewy róg ( 10, 10), zaś prawy górny (10,10). Te ustawienia można w każdej chwili zmienić przy pomocy funkcji limits, origin lub units. W szczególności (np. przy użyciu funkcji real, która może być w razie potrzeby wstawiona do pliku konfiguracyjnego) współrzędne logiczne mogą być zrównane z fizycznymi (w pikselach lub jednostkach metrycznych). Absolutna dowolność współrzędnych logicznych (chyba unikatowa wśród aplikacji tego typu) daje szereg korzyści. Np. często zdarza się, że rysujemy coś zaplanowanego, ale w pewnym momencie okazuje się, że czegoś nie uwzględniliśmy i brakuje nam miejsca. W innych programach na ogół potrzebna jest duża reorganizacja, zmiana rozdzielczości, itd. podczas gdy w MATMIE LUX po prostu

4 przedłużamy logicznie ekran, nawet tylko z jednej strony, i jedziemy dalej (zob. plik przykładowy plik brush.mtm). Wiele funkcji MATMY wymaga określenia pewnego prostokątnego obszaru, co jest zawsze możliwe przy użyciu czterech liczb. Zazwyczaj powinny to być współrzędne logiczne (być może równe współrzędnym fizycznym) dwóch przeciwległych wierzchołków prostokąta. Współrzędne te mogą być podawane w dowolnej kolejności (oczywiście pod warunkiem, że składowa pozioma znajduje się na pierwszym i trzecim miejscu). W wyjątkowych przypadkach (zawsze wyraźnie wskazanych) prostokąt określa się przy pomocy współrzędnych lewego górnego rogu oraz szerokości i wysokości obszaru w pikselach. W tym miejscu warto zwrócić uwagę na fakt, że istnieją dwie konwencje dotyczące dwóch ostatnich wielkości. Jeśli obszar jest oknem systemu Windows (niektórych typów) lub całym ekranem opisywanym w terminologii producentów monitorów, to są one różnicami maksymalnych i minimalnych współrzędnych lub odpowiednio ich maksymalnymi wartościami. Na przykład ekran o rozdzielczości ma w rzeczywistości pikseli (bo istnieją piksele o współrzędnych (0, 0) oraz (1024, 768), co można sprawdzić przy pomocy programu sizes.mtm). Sytuacja wygląda nieco inaczej w przypadku, gdy obszar jest mapą bitową zapisaną na dysku. Tutaj wszystkie liczące się programy podają rozmiary obszaru w postaci ilości pikseli. Wynika to z faktu, że ich liczba przekłada się bezpośrednio na liczbę bajtów potrzebnych do zapisu na dysku. Stąd np. jeśli mapa bitowa reprezentuje cały powyższy ekran, to funkcja maxpixel zwróci {1024, 768} podczas gdy po zapisie na dysk mapsize poda wielkość bitmapy {1025, 769}. W celu uniknięcia nieporozumień, w aplikacji MATMA LUX postanowiono przyjąć, że szerokości i wysokości obszarów należy zawsze interpretować jako ilości pikseli. Ponadto w razie wątpliwości można zastosować funkcję maxpixel, której nazwa sama się wyjaśnia. 4. UŻYCIE KLAWIATURY W OKNIE GRAFICZNYM W czasie pracy z oknem graficznym (po jego uaktywnieniu klawiszem Alt-Tab lub kliknięciem lewym przyciskiem myszy) dostępne są następujące klawisze specjalne: Alt-F4 zamknięcie okna (zob. też funkcję finish). ^S zapis na dysku zaznaczonego bloku lub całego rysunku jeśli nic nie jest zaznaczone (zapis można wykonać także przy pomocy funkcji save udostępniającej więcej możliwości). ^B wczytanie mapy bitowej z dysku na zaznaczony blok jeśli takowy istnieje, na całe okno jeśli kursor myszy znajduje się poza nim lub począwszy od kursora myszy. W tym ostatnim przypadku bitmapa jest kopiowana bez zmiany jej rozmiaru. Nigdy nie są zmieniane wymiary aktualnie przetwarzanej mapy. Więcej opcji dla tej operacji oferuje funkcja bitmap. ^N rozpoczęcie edycji nowej bitmapy wczytanej z dysku. Jej wymiary stają się nowymi wymiarami przetwarzanego rysunku. Ten klawisz jest przypadkiem szczególnym funkcji new. ^A zaznaczenie całej powierzchni klienta okna (zob. też funkcję setsel).

5 ^R powtórne zaznaczenie poprzedniego bloku. To samo można zrobić przy pomocy wywołania resel(). ^C kopiowanie do schowka Windows zaznaczonego bloku lub całego rysunku, jeśli nic nie jest zaznaczone (zob. też funkcję cut). ^V wczytanie zawartości schowka Windows (o ile zawiera grafikę zapisaną w formacie CF_BITMAP systemu Windows) na zaznaczony blok (nic poza blokiem nie będzie zmienione), począwszy od kursora jeśli nic nie jest zaznaczone, bądź też od lewego górnego rogu okna jeśli kursor jest poza powierzchnią klienta okna. We wszystkich przypadkach zawartość schowka Windows jest kopiowana bez zmiany rozmiaru (zob. też funkcję paste udostępniającą m.in. możliwość nakładania obrazów). ^X jak ^C, po czym obszar skopiowany zostanie zamalowany białym (zob. też funkcję cut). Del zamalowuje zaznaczony obszar białym pędzlem (zob. też funkcję area). Backspace anuluje ostatnio wykonaną operację, która zmieniła wygląd ekranu (zob. też funkcję undo). ^U jak wyżej, ale anulowanie dotyczy tylko zaznaczonego obszaru (lub który był zaznaczony wcześniej; zob. też funkcję undoblock). Esc anuluje operację zaznaczania i przeciągania (także przygotowaną przez funkcję cut), a także likwiduje już istniejące zaznaczenie. + zwiększa widok zaznaczonego bloku do całego okna lub, w przypadku braku zaznaczonego bloku, całej zawartości okna o 25% przechodząc do pracy w tzw. trybie powiększonym (Rys. 1); więcej informacji o tym trybie można znaleźć w opisie funkcji view). zmniejsza widok okna o 20% tj. działa dokładnie odwrotnie do klawisza + bez zaznaczenia. = zawsze wymusza przejście do trybu normalnego tzn. takiego, gdzie cała przetwarzana mapa bitowa jest widoczna w oknie (zob. też funkcję zoom). Tab przełącza dwa ostatnie widoki (zob. też funkcję review). ^P przełącza tryb obrazkowy/naukowy (zob. opis funkcji picture). Enter włącza tryb pełnoekranowy polegający na tym, że aktualna zawartość powierzchni klienta okna (bez paska tytułowego, ramek i ew. suwaków) zostaje wyświetlona na całym ekranie. W tym trybie program ignoruje mysz oraz reaguje tylko na dwa klawisze: Alt-F4 i Enter powodujący powrót do wyświetlania w oknie (dojdzie do tego także w przypadku przełączenia okna aktywnego do innej aplikacji lub do okna tekstowego MATMY za pośrednictwem systemu operacyjnego). Dodajmy, że powyższe udogodnienia mogą być również zastosowane poprzez wybór odpowiedniej opcji w menu systemowym okna graficznego (Rys. 2).

6 Rys. 1. Tryb powiększony; użyto axes() i naciśnięto + (w dowolnej kolejności) Rys. 2. Rozwinięte menu systemowe (wywołano też funkcję axes)

7 5. WYKORZYSTANIE MYSZY W OKNIE GRAFICZNYM Użycie myszy w oknie graficznym jest w dużej mierze standardowe: bloki zaznacza się i przeciąga normalnie. W trakcie zaznaczania pojawia się roboczy prostokąt o bokach rysowanych przerywaną linią, który może oczywiście przekształcić się w zaznaczony blok, ale który w MATMIE może być też wykorzystany do namalowania całkowicie rzeczywistego fragmentu rysunku (zamiast zaznaczenia). Będzie tak, jeśli podczas zwalniania lewego przycisku myszy przytrzymasz (lub uaktywnisz w przypadku Scroll) któryś z następujących klawiszy: Shift zostanie narysowana przekątna prostokąta roboczego dochodząca do pozycji kursora myszy (w celu otrzymania linii poziomych lub pionowych zastosuj raczej poniższy klawisz Ctrl). Ctrl prostokąt roboczy przekształci się w prawdziwy. Ctrl+Shift prostokąt roboczy przekształci się w prawdziwy prostokąt o zaokrąglonych rogach. Ctrl+Shift+LeftAlt prostokąt roboczy przekształci się w prawdziwy prostokąt o wypukłych poziomych bokach (zob. Rys. 48). Ctrl+Shift+RightAlt prostokąt roboczy przekształci się w prawdziwy prostokąt o wypukłych pionowych bokach (zob. Rys. 48). Alt zostanie narysowana elipsa wpisana w prostokąt roboczy. LeftAlt+Shift zostanie narysowany okrąg o środku w punkcie zwolnienia lewego klawisza myszy i promieniu będącym przekątną prostokąta roboczego. Pędzel nie jest wykorzystywany. WinLogo+Shift zostanie narysowana łagodna krzywa Beziera (Rys. 29) łącząca pozycję kursora myszy i przeciwległy róg prostokąta roboczego. WinLogo+Ctrl zostanie narysowana ekspansywna krzywa Beziera (Rys. 27) o początku i końcu jak wyżej, skierowana zgodnie z poziomym kierunkiem tworzenia prostokąta roboczego i przeciwnie do pionowego. Ten i następny klawisz umożliwiają szybkie osiągnięcie bardzo dynamicznych efektów. WinLogo+Alt zostanie narysowana fantazyjna krzywa Beziera (Rys. 28) o początku i końcu jak wyżej. Scroll obszar, który był ostatnio zaznaczony, zostanie skopiowany do prostokąta roboczego, a miejsce źródłowe (to, które pozostałoby odsłonięte) zostanie zamalowane białym pędzlem. Obszary źródłowy i docelowy mogą mieć różne rozmiary i mogą się nakładać. Scroll+Ctrl jak wyżej, ale miejsce źródłowe zostanie wypełnione odpowiednim fragmentem mapy bitowej memo tworzonej przy pomocy funkcji memo. W przypadku klawiszy bez Scroll do malowania użyte będą aktualnie wybrane pióro i pędzel. Pozycja pióra nigdy nie ulega zmianie. Utworzony element możesz odwołać przy pomocy Backspace lub ^U. Zauważmy, że ten ostatni klawisz można wykorzystać np. do rysowania kawałków elips i krzywych Beziera. W celu uniknięcia niezamierzonych działań wskaźnik Scroll jest zawsze gaszony przy rozpoczęciu tworzenia prostokąta roboczego. Zatem jeśli chcesz go ustawić, musisz to zrobić bezpośrednio przed zwolnieniem lewego klawisza myszy. Zauważmy, że wykorzystując ^U można w ten sposób duplikować obszary.

8 Nie można zmieniać rozmiaru zaznaczonych bloków przeciągając ich krawędzie. W tym celu użyj natomiast powyższy klawisz Scroll lub funkcję alter, które pozwalają m.in. na zmianę rozmiarów bloku przy zachowaniu niezmienionej pozycji środka obszaru, co jest niemożliwe przy przeciąganiu krawędzi. Bloki można przeciągać mając pewność, że ich rozmiar nie zostanie zmieniony, przy czym podobnie jak w życiu lepiej jest uchwycić ciężar w jego górnej części niż w dolnej. Normalnie stare miejsce bloku jest zamalowywane białym pędzlem, a przy przeciąganiu bezpiecznym, tzn. wtedy gdy blok został uchwycony w jego górnej połówce, stosowany jest odpowiedni fragment mapy bitowej tworzonej przy pomocy funkcji memo. Daje to wiele możliwości, np., po sekwencji Recall() // zamiana mapy aktualnej i memo Area( Pat ) // zamalowanie mapy memo aktualnym pędzlem Recall() stare miejsce będzie zamalowywane aktualnie wybranym pędzlem. Natomiast jeśli zamierzasz wczytać coś ze schowka i dopiero potem znaleźć dlań najlepsze miejsce, skopiuj najpierw zawartość aktualnie przetwarzanej mapy do mapy memo. Alternatywnie możesz zastosować tzw. przeciąganie schowka (zob. opis funkcji cut) dające szereg dodatkowych możliwości, takich jak np. nakładanie obszarów. 6. OPISY FUNKCJI alter(width,height,fix,after,check) zmienia rozmiar obszaru zaznaczonego (lub ostatnio zaznaczonego). Pierwsze dwa argumenty powinny być liczbami dodatnimi określającymi liczby przez które mają być przemnożone szerokość i wysokość dotychczasowego obszaru. Domyślną wartością width jest 1, podczas gdy height wartość width. Stąd np. alter(2) powiększa obszar proporcjonalnie dwa razy. Jeśli parametr fix jest pusty, to środek obszaru nie zmieni swego położenia. W przeciwnym przypadku (Rys. 3) fix powinno być ciągiem znakowym zawierającym dokładnie jeden z następujących tekstów (wielkość liter nie ma znaczenia): "NW" pozycji nie zmieni lewy górny róg obszaru, "NE" pozycji nie zmieni prawy górny róg obszaru, "SE" pozycji nie zmieni prawy dolny róg obszaru, "SW" pozycji nie zmieni lewy dolny róg obszaru. Argument after definiuje sposób zapełnienia (Rys. 4) zwolnionego miejsca (będzie to miało znaczenie oczywiście tylko wtedy, gdy przynajmniej jeden z pierwszych dwóch parametrów jest mniejszy od 1). Może on być tablicą, której pierwsze trzy elementy określają nasycenia RGB koloru wypełnienia lub ciągiem znakowym o następującym znaczeniu: Black zamalowuje zwolnione miejsce kolorem czarnym, Pat wypełnia aktualnym pędzlem, Invert wykonuje inwersję, XOR wykonuje operację różnicy symetrycznej z aktualnym pędzlem,

9 White zamalowuje zwolnione miejsce kolorem białym. Dodajmy, że powyżej tylko pierwsza litera jest istotna i może mieć dowolną wielkość. Jeśli after jest pominięty lub pierwszy znak nie jest jedną z powyższych liter, zwolnione miejsce pozostanie niezmienione. Dodatkowa informacja może być przekazana przy pomocy parametru check. Jeśli mianowicie jest on niepusty, to nowopowstały obszar zostanie zaznaczony, a w przeciwnym przypadku istniejące zaznaczenie jest likwidowane. UWAGA 1: Rozmiary obszarów (nawet bez ich zaznaczania) można też zmieniać przy pomocy funkcji copy. UWAGA 2: Funkcja nie może zmienić rozmiarów całego rysunku. W razie takiej potrzeby użyj funkcji change. Rys. 3. axes(,,, {.0.}); graph(&abs); setsel(); alter(, 2, "NW") Zamiast NW można tu użyć NE lub też: axes(,,, {.0.}); graph(&abs); copy( { 10, 10, 10, 0} )

10 Rys. 4. axes(); brush(, 0, 255); setsel(); alter(0.5,,, "Pat") lub równoważnie axes(); brush(, 0, 255); copy(, { 5, 5, 5, 5},, "Pat") angle(radius,start,sweep,x,y) rysuje okrąg lub jego łuk (Rys. 5). Środek okręgu jest określony przez współrzędne logiczne x i y (domyślnie pozycja pióra), zaś długość logiczną promienia (równoległego do osi x) podaje parametr radius. Argument start wyrażony w stopniach powinien określać kąt między osią x i promieniem początkowego punktu łuku. Sweep (domyślnie 0, podobnie jak dwa poprzednie argumenty) jest tzw. kątem zamiatania, czyli kątem który dodany do start wyznaczy promień końcowego punktu łuku (a więc 360 daje pełny okrąg). Jeden lub oba kąty mogą być ujemne, ale wtedy należy je obliczać w kierunku zgodnym z kierunkiem ruchu wskazówek zegara (gdy dodatnie przeciwnym). Ta funkcja jest dobrze przystosowana do włączania łuków w rysowane linie. Jeśli radius jest ujemne (Rys. 6), to malowany jest odcinek od bieżącej pozycji pióra do początku łuku (i długość promienia jest wtedy oczywiście równa radius). W każdym przypadku pozycja pióra jest ustawiana na koniec łuku. Możesz również rysować odcinki o długości len rozpoczynające się od bieżącej pozycji pióra i nachylone pod kątem start względem osi x, jeśli podasz radius równe len i pominiesz ostatnie trzy parametry (Rys. 7). Do kreślenia używane jest aktualne pióro. Natomiast w przeciwieństwie do funkcji ring pędzel nie jest wykorzystywany nawet wtedy, gdy powstaje zamknięta figura.

11 UWAGA: Możesz narysować łuk z cięciwą (Rys. 8) wywołując tę funkcję dwa razy z niemal tymi samymi argumentami (drugie wywołanie musi być z ujemnym radius). Rys. 5. angle(6, 45,240, 0, 0)

12 Rys. 6. move( 10, 10); angle( 6, 45,240, 0, 0); line(9, 9) Rys. 7. Pióro zostanie ustawione w pozycji {6, 6}: move(1, 1); angle( sqrt(2 5 ^ 2), 45)

13 Rys. 8. angle(8, 0, 90, 0, 0);angle( 8, 0, 90, 0, 0) area(left,top,right,bottom,mode) zamalowuje wskazany prostokątny obszar łącznie z obwodem (Rys. 9). Parametr left może być też tablicą współrzędnych logicznych (o dowolnej strukturze) i wtedy mode powinno być drugim argumentem, a następne są ignorowane. Domyślnie współrzędne obszaru przyjmują wartości skrajne dla okna, tj. podawane przez wywołanie limits(). Argument mode określa sposób wypełnienia obszaru. Jeśli jest on podany, to powinien być ciągiem znakowym o następującym znaczeniu (z wyjątkiem przypadku gdy mode zawiera =, tylko pierwsza litera jest istotna i może mieć dowolną wielkość): Black zamalowuje obszar kolorem czarnym, Pat wypełnia aktualnym pędzlem, Invert wykonuje inwersję, XOR wykonuje operację różnicy symetrycznej z aktualnym pędzlem, White zamalowuje obszar kolorem białym, Color = + r + g + b zamalowuje obszar kolorem o składowych {r,g,b} (domyślnie zera; w tej opcji tylko znak = jest istotny i musi on wystąpić bezpośrednio przed składową r).

14 Domyślną wartością mode jest "White". Ponadto jeśli ma być zamalowane całe okno, to mode może być pierwszym i jedynym parametrem. Stąd wywołanie Area() wypełnia białym pędzlem całą powierzchnię klienta okna, podczas gdy area( rgb = ) zamalowuje ją na zielono. UWAGA: Wykorzystując undoblock w połączeniu z setsel możesz odwrócić działanie tej funkcji i wypełniać wszystko poza określonym obszarem (Rys. 10). Rys. 9. axes(); area( 4, 4, 4, 4, "=" )

15 Rys. 10. axes(); area("=" ); setsel( 4, 4, 4, 4); undoblock() axes(xdes,ydes,sub,arrows,ten) wykorzystując aktualnie wybrane pióro i font funkcja rysuje osie układu współrzędnych. Głównym jej zastosowaniem jest przygotowanie do wyświetlenia wykresu jakiejś funkcji matematycznej, ale w razie potrzeby osie mogą być dodane do dowolnego obrazka (zob. Rys. 11). Opis osi (tj. tekst wyświetlany obok nich) zależy od aktualnego układu współrzędnych logicznych oraz parametrów xdes i ydes. W przypadku ich braku (wszystkie argumenty są opcjonalne) oraz stosowania układu domyślnego opis wygląda tak jak na Rys. 11 (oczywiście font może być zmieniony). Na Rys. 12 przedstawione są osie po użyciu funkcji origin; w tym przypadku zostaje zmodyfikowany tylko opis środka układu. Po zastosowaniu funkcji units zmienia się znaczenie liczb opisujących osie. Muszą one mianowicie być mnożone przez pewne czynniki, które są podawane po znakach (zob. Rys. 13). Z tego względu korzystanie z układu będzie łatwiejsze, jeśli wywołanie units będzie następującej postaci Units(20 m) lub Units(20 m, 20 n) gdzie m i n są okrąglymi liczbami. Ponadto układ będzie wyglądał nieco lepiej estetycznie, jeśli przed użyciem axes zmienisz font na taki, w

16 którym znak * jest położony bardziej centralnie (np. Batang lub Terminal). Axes jest czuła na funkcję dec, co obrazuje Rys. 14. Modyfikacje wykonywane przez units często są równoważne zmianie jednostek. W takim przypadku możesz podać nazwy tych jednostek w parametrach xdes i/lub ydes. Mówiąc bardziej dokładnie, jeśli xdes i/lub ydes jest ciągiem znaków, to zostanie on wyświetlony zamiast opisu dostarczanego normalnie przez funkcję (zob. Rys. 15). Parametry xdes i ydes mogą być też tablicami, których elementy określają opis liczbowy środka osi (element nr 1) i opis tekstowy całej osi (nr 2). Wartość nil lub pominięcie implikuje opis standardowy. Opisy punktów podziałki poza środkiem nie są w tej opcji wyświetlane (Rys. 16). Pierwszy element powyższej tablicy nie musi być liczbą; w razie użycia tekstu (o długości do 300 znaków) można w nim podać własne opisy liczbowe punktów na całej osi. W tym przypadku łańcuch powinien mieć następującą postać: Opis punktu nr opis nr opis nr 20 Opisy punktu nr 1 na osi x (najbardziej lewego) oraz nr 20 na osi y (najniższego) nie mogą być wyświetlone (opis punktu nr 1 osi x musi wystąpić, chociaż może być oczywiście pusty). Zero może być pominięte, jeśli wszystkie występujące po nim opisy są puste (i te opisy też można oczywiście pominąć). Przykład użycia tej opcji zilustrowany jest na Rys. 17 i 18. Argumenty xdes i ydes mogą być także liczbami; n jest równoważne z {n, } dającym oś tylko z liczbą opisującą środek. Można także zastosować wartości boolowskie,.1. oznacza to samo co {, } ( goła oś). Naprawdę nowe jest tu.0. powodujące, że dana oś nie pojawi się w ogóle. Może to być wykorzystane do wyświetlania osi o różnych kolorach i grubości (zob. Rys. 19). Następny parametr, sub, definiuje podpodziałkę. Może on być np. małą liczbą naturalną (najczęściej wykorzystywane są wartości 2 i 5) określającą, na ile części ma podzielony elementarny przedział podziałki głównej (Rys. 35 pokazuje także, w jaki sposób można ograniczyć uwagę do jednej ćwiartki układu). Jeśli chcesz mieć różne podpodziałki na obu osiach, zastosuj tablicę o co najwyżej dwóch elementach; wartość nil lub pominięcie implikuje brak podpodziałki (Rys. 20). Normalnie osie zakończone są strzałkami z prawej strony i u góry. Skrzydełka strzałek będą pominięte (Rys. 35), jeśli ustawisz parametr arrows na.0. (i wtedy w standardowych opisach osi pojawią się liczby 10). Arrows może być także tablicą (Rys. 3) o co najwyżej dwóch elementach będących wartościami boolowskimi lub równymi nil;.0. implikuje brak skrzydełek przy odpowiedniej osi. Ostatni parametr, ten, jest zorganizowany podobnie jak arrows i jest z nim ściśle związany. Jeśli nie ma skrzydełek, to ten równe.0. pociąga za sobą niewyświetlanie liczby 10. Funkcja axes ułatwia także konstrukcję rozmaitych własnych struktur zawierających podziałki. Na Rys. 21 i 22 przedstawione zostały dwie różne ramki tego typu (zob. też plik axes.mtm).

17 UWAGA 1: Przy wyświetlaniu tekstu przez axes wykorzystywane są tylko następujące style fontu: normalny, Bold i Italic. UWAGA 2: Nawet jeśli rysowana jest tylko jedna oś, funkcja wykorzystuje parametr sub do sprawdzenia, czy druga oś posiada podpodziałkę i zmienia nieco położenie liczby opisującej środek, tak aby nie zasłaniała ona tej podpodziałki. Dlatego np. użycie tablicy w parametrze sub na Rys. 21 (gdzie taka korekta jest niepotrzebna) ma znaczenie. Rys. 11. Układ współrzędnych może być dodany do dowolnego rysunku

18 Rys. 12. Domyślny układ współrzędnych z origin(10,10) Rys. 13. origin(120,2000); units(20 60, ); font( batang,,, B ); axes()

19 Rys. 14. dec(4);origin(0.0002,0.0003);units( );font("terminal",,,"B") Rys. 15. origin(120,2000); units(20 60, ); axes( x h, y km )

20 Rys. 16. axes( {120, x krok = 60 min }, {2000, y krok = 1000 m } ) Rys. 17. Własny opis osi: axes({chr(0) "2" "4" "6" "8" \ "10" "12" "14" "16" "18"},\ {chr(0) "80" "60" "40" "20" \ "0" " 20" " 40" " 60" " 80"})

21 Rys. 18. Liczby przy osi x mogą być pisane pionowo: font("tahoma",,, B,,,, 90,0) axes({chr(0) " " " " " " \ " " " " " " \ " " " " " "},.0.) font("tahoma",,, B ) axes(.0., {chr(0) "80" "60" "40" "20" \ "0" " 20" " 40" " 60" " 80"}) Rys. 19. axes(.0.); pen(3, 255); font(, {255}); axes({ },.0.)

22 Rys. 20. Osie z podpodziałką: axes(,, {2, 5})

23 Rys. 21. Konstrukcja ramki z podziałką (opis wewnątrz ramki): pen(); font("times new roman",,, "Bold", 0.6) area(); axes(.0., "", {, 5},.0.,.0.) copy({ 1, 10}, {9, 10, 10, 10}, "=") copy({0, 10}, { 8, 10, 10, 10}, "=") copy({0.2, 10}, {9.3, 10, 9.8, 10}, "=") area({ 2, 10, 2, 10}) memo() area(); axes("",.0., {5},.0.,.0.) copy({ 10, 0}, { 10, 9, 10, 10}, "=") copy({ 10, 2}, { 10, 10, 10, 8}, "=") copy({ 10, 0.7}, { 10, 9.2, 10, 9.7}, "=") area({10, 2, 10, 2}) rest({ }, "S&T") memo() // zapamiętanie f(x) = sin(x)/x graph(&f,,, 2, {255}) // wykres przykładowy

24 Rys. 22. Konstrukcja ramki z podziałką (opis na zewnątrz ramki): rest() // odtworzenie ramki z poprzedniego rysunku setsel(); alter(0.9,,,"w") copy({8.2, 8, 8.84, 8}, {9.04, 8}, "=", "W") copy({ 8.2, 8, 8.8, 8}, { 9.67, 8}, "=", "W") copy({8, 8.76, 8, 8.16}, { 8, 9.7}, "=", "W") copy({8, 8.76, 8, 8.16}, { 8, 9.1}, "=", "W") memo() // zapamiętanie ramki f(x) = x/sin(x) graph(&f,,, 2, {255}) // wykres przykładowy setsel(); alter(0.9,,, "W") rest({ }, "S&T") bezier(pnt) rysuje aktualnym piórem ciągi połączonych krzywych Beziera trzeciego stopnia (Rys. 23). Pnt musi być zawsze tablicą dwuwymiarową postaci { {x 1, y 1 },...,{x n, y n } } zawierającą współrzędne logiczne punktów definiujących rysunek, przy czym n musi być albo podzielne przez 3 albo spełniać warunek n = 3k + 1 gdzie k jest liczbą naturalną. W tym drugim przypadku rysowanych jest k połączonych krzywych Beziera od punktu {x 1, y 1 } poprzez {x 4, y 4 } aż do {x n, y n }. Punkty {x 2, y 2 } i {x 3, y 3 } (oraz o indeksach dających przy dzieleniu przez 3 resztę 2 lub 0) nie są wyświetlane, a określają tylko

25 (jako tzw. punkty kontrolne) kształty krzywych. Pozycja pióra nie jest w tej opcji ani wykorzystywana ani zmieniana. Jeśli n jest podzielne przez 3, rysowanych jest n/3 połączonych krzywych Beziera od bieżącej pozycji pióra poprzez {x 3, y 3 } aż do {x n, y n }. W tym przypadku punktami kontrolnymi są {x 1, y 1 } i {x 2, y 2 } oraz te o indeksach dających przy dzieleniu przez 3 resztę 1 lub 2. Po zakończeniu rysowania pióro ustawiane jest w punkcie {x n, y n }. UWAGA: Krzywe Beziera można także rysować przy pomocy funkcji curve lub figure. Rys. 23. Przykładowa krzywa: bezier( { { 3, 9}, { 9, 6}, {9, 9}, {8, 7} } ) bitmap(file,source,target,mode) wczytuje bitmapę określoną parametrem file, który może być albo nazwą pliku dyskowego albo mapą bitową wewnętrzną. Parametr source może ograniczyć źródłową bitmapę do prostokątnego fragmentu. Jeśli występuje, powinien on być tablicą, której dwa pierwsze elementy (domyślnie zera) określają w pikselach współrzędne lewego górnego rogu, zaś dwa następne podają (też w pikselach, domyślnie maksymalne) szerokość i wysokość prostokąta. Z kolei parametr target może ograniczyć obszar docelowy, na który wczytywana jest bitmapa. W przypadku użycia powinien on być tablicą współrzędnych logicznych (domyślnie przyjmujących wartości skrajne) dwóch przeciwległych wierzchołków prostokąta. Jeśli nie ma argumentu mode, to bitmapa jest kopiowana z obszaru source do target w połączeniu z niezbędnym ściśnięciem lub

26 rozciągnięciem. Ciąg tekstowy mode może zmodyfikować to działanie. I tak obecność znaku = w mode spowoduje, że powyższa zmiana rozmiarów obszaru wejściowego nie zostanie wykonana. Może to być ułatwieniem np. wtedy, gdy chcemy dodać do dużego obrazka w różnych miejscach małe rysunki z zachowaniem ich rozmiarów. Po usunięciu znaku =, spacji i małych liter parametr mode powinien mieć jedną z poniższych postaci: S lub wykorzystuje niezmienione źródło (jak bez mode), S&B wykonuje operację mnożenia bitowego na kolorach źródła oraz pędzla, "!S T" wykonuje inwersję (tj. negację bitową) kolorów źródła, a następnie łączy je z kolorami celu w korespondujących pikselach przy użyciu sumy bitowej, "!S" odwraca (tj. neguje bitowo) kolory źródła, "S T!" łączy kolory źródła i celu przy pomocy sumy bitowej, a następnie odwraca kolor wynikowy, "!S B T" lub!s B wykonuje inwersję kolorów źródła, następnie łączy je z kolorami pędzla przy użyciu sumy bitowej, po czym otrzymany wynik znów sumuje bitowo z kolorami celu, "S&T" wykonuje operację mnożenia bitowego na kolorach źródła i celu, "S&!T" łączy kolory źródła z odwróconymi kolorami celu przy pomocy mnożenia bitowego, "S^T" łączy kolory źródła z kolorami celu przy pomocy operacji różnicy symetrycznej, "S T" łączy kolory źródła z kolorami celu przy pomocy sumy bitowej. Otrzymane którymś z powyższych sposobów piksele są zapisywane do obszaru docelowego (zob. też Rys. 26). Jako jeden z wielu możliwych przykładów użycia parametru mode wymieńmy następującą sytuację. Załóżmy, że chcemy wstawić podpis do jakiegoś dokumentu. Ponieważ jego tło nie jest dokładnie białe, po zwykłym kopiowaniu dookoła podpisu będzie widoczna prostokątna ramka. Natomiast po użyciu "S&T" jako parametru mode, kropki i kreski z dokumentu będą w dalszym ciągu występować obok podpisu (por. też Rys. 50). Funkcja bitmap nigdy nie zmienia rozmiaru aktualnie przetwarzanej mapy bitowej. Jeśli chcesz zacząć edytować nowy rysunek w jego rozmiarach wczytanych z dysku, zastosuj funkcję new. brush(style,red,green,blue) definiuje nowy pędzel, który będzie odtąd używany (tylko w aktualnym oknie graficznym) przy wypełnianiu obszarów. Jeśli parametr style jest pominięty, pędzel po prostu koloruje obszar pikselami o nasyceniach barwy określonych trzema następnymi argumentami. Ich domyślnymi wartościami są zera z jednym wyjątkiem: jeśli w ogóle nie ma żadnych parametrów, składowe koloru są ustawiane na 255. Stąd wywołanie brush() przywraca pędzel domyślny, tj. jednolity biały, podczas gdy brush(,0) daje jednolity czarny.

27 Argument style, jeśli występuje, powinien być ciągiem znaków lub tablicą. W pierwszym przypadku istotne jest, czy tekst zawiera kropkę. Jeśli nie, to badany jest tylko pierwszy bajt łańcucha i ma on wtedy znaczenie zilustrowane na Rys. 24. Zatem znak z zestawu _ \ / + # = określa wzór pędzla, a następne parametry kolor wzoru (na białym tle). Rys. 24. Przykładowe definicje pędzla Jak widać, znaki _ i dają ten sam deseń, a znak = definiuje pędzel jednolity. Natomiast łańcuch pusty tworzy pędzel niewidoczny przydatny w przypadku, gdy chcemy rysować zamknięte figury bez zamalowywania ich środka. Jeśli style zawiera kropkę, to uważany jest za nazwę pliku dyskowego z mapą bitową wzoru pędzla. Podobnie jest, gdy style jest tablicą i nie jest to jedyny argument; powinna to być wtedy bitmapa wewnętrzna. W obu tych przypadkach red może być tablicą określającą

28 fragment mapy bitowej w pikselach postaci: współrzędne lewego górnego rogu, szerokość i wysokość prostokąta. (W przypadku bitmapy wewnętrznej musisz podać jakiś parametr oprócz style, np. red równy { } czy też dowolny green, aby odróżnić tę sytuację od omówionej w poniższej uwadze.) UWAGA: Jeśli style jest tablicą i nie ma innych argumentów, to funkcja przyjmuje, że faktyczne parametry są składowane właśnie w tej tablicy. Dzięki temu możesz mieć nazwane pędzelki łatwe do uruchomienia. Np. po przypisaniu Mazak = {" ",,, 255} wywołania Brush(mazak) Brush(" ",,, 255) są równoważne. change(width,height) zmienia rozmiar rysunku (aktualnie przetwarzanej mapy bitowej, ściśle mówiąc). Szerokość i wysokość należy podać w pikselach lub milimetrach (w tym drugim przypadku liczbę należy poprzedzić znakiem ). Parametr pominięty otrzymuje wartość dotychczasową. Treść wyświetlana w oknie nie ulega zmianie, ale wszelkie powiększenia są likwidowane i jakość obrazu może być pogorszona. UWAGA: Funkcja ustawia współrzędne logiczne okna na równe współrzędnym fizycznym, jeśli przełącznik real jest aktywny, a w przeciwnym przypadku ich nie zmienia. color(exist,new,rect,memo) zmienia na kolor new piksele prostokąta rect (tablica czterech współrzędnych logicznych domyślnie przyjmujących wartości skrajne) spełniające warunki określone przez exist i memo. Żaden parametr nie jest obowiązkowy (bez argumentów funkcja zamalowuje całe okno na czarno). New musi być tablicą do trzech liczb będących składowymi nowego koloru i równymi domyślnie zero. Argument exist definiuje jakie kolory istniejące w rect będą zmieniane na new (bez exist będą przekształcane wszystkie). Może to być tablica podobna do new, np. wywołanie Color({, 255}, {255}) zmieni wszystkie piksele zielone na czerwone. Jednak składowe exist mogą być też ciągami różnych znaków (tj. o długości co najwyżej 256) reprezentujących wszystkie dopuszczalne wartości nasycenia danego koloru. Np. Color({, chr(255)+127, chr(0) chr(100)}, {255}) zmieni na kolor czerwony piksele o składowej red równej 0, green równej 255 lub 127 i blue zawartej w przedziale od 0 do 100. Zamiast ciągu wszystkich 256 znaków w kolejności rosnącej możesz podać łańcuch o długości 0, np. Color({,, 255}, {0, 255}) zmieni na kolor zielony wszystkie piksele o składowej blue równej 255. Składowe (co najmniej dwie) tablicy exist mogą być ujęte w dodatkowe nawiasy klamrowe tworząc jednoelementowe tablice. Oznacza to, że nasycenia występujące w tych składowych na tej samej pozycji muszą pojawić się jednocześnie w pikselu okna, o ile ma on być zastąpiony przez nowy kolor. Przykładowo,

29 Color({ {chr(255)+127}, {chr(20)+100}, 0 }, {255}) zamieni piksele o kolorach {255,20,0} i {127,100,0}, podczas gdy bez dodatkowych nawiasów zamianie podlegałyby także {255,100,0} i {127,20,0}. To udogodnienie zostało wprowadzone głównie w celu umożliwienia specyfikacji kolorów szarych. Np. s = chr(0) chr(50); color( { {s}, {s}, {s} }, {} ) zamieni na kolor czarny piksele szare o nasyceniu od 0 do 50. Parametr memo, o ile występuje, powinien mieć budowę analogiczną do exist. Przyjmuje się wtedy, że piksel podlegający zamianie musi nie tylko mieć kolor określony przez exist, ale jego odpowiednik na tej samej pozycji w bitmapie memo musi mieć kolor wyspecyfikowany przez memo. Rozważmy następujący przykład: Recall() Area() Brush(, 0) Ring( 5, 5, 5, 5) Recall() Color( {255, 255, 255}, {255},,{ }) Realizacja powyższego ciągu operacji zamieni na czerwone piksele białe, ale tylko znajdujące się wewnątrz okręgu (Rys. 25). Bez użycia parametru memo wykonanie tej operacji byłoby niemożliwe. Funkcja color umożliwia realizację wielu zadań. Jednym z najprostszych przykładów jest możliwość pokolorowania monochromatycznego rysunku poprzez zamianę każdego odcienia szarości na jakiś kolor. Ich liczba może być większa od 256, gdyż ten sam odcień znajdujący się w różnych miejscach może zostać zabarwiony inaczej. Rys. 25. Po axes można zmienić białe na czerwone w okręgu przy pomocy color

30 contrast(mult,const,rect) zmienia kontrast obszaru prostokątnego rect (tablica współrzędnych logicznych przyjmujących domyślnie wartości skrajne). Parametr mult (domyślnie 1) powinien być liczbą nieujemną lub tablicą takich liczb (dokładne warunki podane są w opisie funkcji light), przy czym wartości większe od 1 powodują zwiększenie kontrastu. Funkcja zwraca nowy kontrast obszaru tj. różnicę między jasnością (sumą nasyceń) najjaśniejszego i najciemniejszego piksela podzieloną przez 765. Ściśle rzecz biorąc, jeśli const jest pominięte lub nieujemne, to i te nasycenie (gdzie i = 1, 2 lub 3) piksela o jasności, dajmy na to, cl jest mnożone przez max(0, (const + (cl const) mult [i] ) / cl) Wynika stąd, że piksele o jasności równej const (liczba całkowita domyślnie równa jasności obszaru wg definicji podanej w opisie funkcji light) pozostaną niezmienione. Contrast jest bardzo inteligentną funkcją, gdyż piksele o jasności bliskiej const będą zmienione nieznacznie, zaś dalsze w większym stopniu. Dla mult[i] większego od 1, jeśli cl przewyższa const, to w/w współczynnik jest większy od 1, a w przeciwnym przypadku niewiększy. (Dla mult[i] mniejszego od 1 jest oczywiście odwrotnie.) Parametr mult będzie oczywiście najczęściej pojedynczą liczbą, co spowoduje, że powyższy mnożnik będzie identyczny dla wszystkich kolorów. Jednak mult może być równe np. {x,1,1} i wtedy zmiana kontrastu będzie dotyczyć tylko koloru czerwonego (może to być istotne np. przy przedstawianiu ludzkiej skóry). Zauważmy, że mult równe 0 daje najmniejszy możliwy kontrast; wszystkie piksele będą miały jasność równą const (w praktyce mogą być drobne różnice ze względu na konieczność zaokrągleń). Argument const może być ujemny i wtedy musi on być liczbą całkowitą z przedziału [ 255, 1]. W tym przypadku całkowita jasność piksela nie ma znaczenia; składowa color[i] jest mnożona przez max(0, ( const + (color [i] + const) mult [i] ) / color [i]) Zatem jeśli podasz np. const równe 128, to nasycenia równe 128 pozostaną niezmienione. Ta metoda zmiany kontrastu może znaleźć zastosowanie np. przed wywołaniem funkcji mono lub sepia. convert(in,out) wykonuje konwersję map bitowych obsługiwanych przez program MATMA LUX. Parametry powinny być nazwami plików dyskowych o odpowiednich rozszerzeniach. Dodatkowo parametr in może być też wewnętrzną mapą bitową. Funkcja działa tylko wtedy, gdy okno graficzne nie istnieje. copy(source,target,mode,after) kopiuje prostokąt source do prostokąta target. Oba te parametry powinny tablicami czterech współrzędnych logicznych domyślnie przyjmujących wartości skrajne. Kopiowane obszary mogą mieć różne rozmiary i mogą się nakładać (Rys. 21 i 22). Dwa następne argumenty są opcjonalne. Mode definiuje sposób kopiowania i jest dokładnie zgodny z analogicznym parametrem funkcji bitmap (zob. też Rys. 26). After określa, co należy ewentualnie zrobić z pikselami obszaru źródłowego, które pozostaną widoczne po

31 kopiowaniu. Może on być tablicą, której pierwsze trzy elementy określają nasycenia RGB koloru zastąpienia lub ciągiem znakowym o następującym znaczeniu (tylko pierwsza litera jest istotna): Black zamalowuje kolorem czarnym, Pat zastępuje aktualnym pędzlem, Invert wykonuje inwersję, XOR wykonuje operację różnicy symetrycznej z aktualnym pędzlem, White zamalowuje kolorem białym. UWAGA: Jeśli w mode zawarty jest znak =, to obszar źródłowy albo docelowy może być określony nawet tylko przy pomocy dwóch współrzędnych lewego górnego rogu. Jednak jeśli wykorzystywany jest parametr after, to prostokąt źródłowy musi być określony przy użyciu czterech współrzędnych. Rys. 26. Działanie parametru mode funkcji copy i innych kopiujących

32 curve(x,y,style,a,b,c,x 1,y 1 ) rysuje aktualnie zdefiniowanym piórem (bez zmiany jego pozycji) krzywą Beziera trzeciego stopnia od punktu o współrzędnych logicznych {x, y} do {x 1, y 1 }. Kształt krzywej określają pozostałe parametry. Jeśli style jest liczbą, to przyjmuje się, że {style, a} i {b,c} są punktami kontrolnymi krzywej. Jednak style może być także łańcuchem znaków i wtedy będą dostarczane zastępcze punkty kontrolne zależne od pierwszego bajtu style (wielkość litery oraz następne znaki są nieistotne, a parametr x 1 powinien występować bezpośrednio po style) zgodnie z następującą specyfikacją: Exp ekspansywna krzywa Beziera (Rys. 27) Fan fantazyjna krzywa Beziera (Rys. 28) Soft łagodna krzywa Beziera (Rys. 29) Ostatni przypadek będzie zastosowany także dla wszystkich pozostałych znaków drukowalnych na początku style oraz dla style równego. UWAGA 1: Łagodna krzywa Beziera jest zawarta w prostokącie o przeciwległych kątach {x, y} i {x 1, y 1 }, a więc w pewnych przypadkach redukuje się do prostej. UWAGA 2: Domyślnymi wartościami parametrów są współrzędne logiczne lewego (argumenty nieparzyste) górnego (parzyste) rogu okna. UWAGA 3: Parametr x może być tablicą o dowolnej strukturze zawierającą wtedy wszystkie argumenty. UWAGA 4: Krzywe Beziera, a nawet połączone ciągi ich i linii prostych, można także rysować przy pomocy funkcji bezier i figure. Rys. 27. Ekspansywna krzywa Beziera: curve( 2, 5, "Exp", 2, 4)

33 Rys. 28. Fantazyjna krzywa Beziera: curve( 2, 5, "Fan", 2, 4) Rys. 29. Łagodna krzywa Beziera: curve( 2, 5, "Fan", 2, 4)

34 cut(left,top,right,bottom,after,transfer,mode1,mode2) kopiuje prostokąt o podanych współrzędnych logicznych (domyślnie przyjmujących wartości skrajne) do schowka Windows. Parametr left może być także tablicą współrzędnych i wtedy ewentualny argument after powinien wystąpić na drugim miejscu. Zapamiętany obszar może być odtworzony przy pomocy funkcji paste. Parametr after określa, co należy zrobić z pikselami obszaru źródłowego po kopiowaniu. Może on być tablicą, której pierwsze trzy elementy określają nasycenia RGB koloru zastąpienia lub ciągiem znakowym o następującym znaczeniu (tylko pierwsza litera jest istotna): Black zamalowuje kolorem czarnym, Pat zastępuje aktualnym pędzlem, Invert wykonuje inwersję, XOR wykonuje operację różnicy symetrycznej z aktualnym pędzlem, White zamalowuje kolorem białym. W przypadku braku after wszystkie piksele okna pozostaną niezmienione (a więc ewentualne undo będzie się odnosić do poprzedniej operacji). Niepusty parametr transfer przygotowuje zwrotne skopiowanie schowka do okna. Powinien on być liczbą dodatnią lub tablicą dwóch takich liczb określającą, jak mają się zmienić rozmiary kopiowanego schowka. Pojedyncza liczba oznacza przekształcenie proporcjonalne (czyli 1 oznacza kopiowanie bez zmian). Po wywołaniu cut z niepustym transfer możesz dowolnie pozmieniać tryby pracy i wyświetlaną powierzchnię. Zwrotne kopiowanie schowka rozpocznie się dopiero w momencie kliknięcia lewym przyciskiem, przy czym aktualna pozycja kursora myszy określi lewy górny róg obszaru docelowego. Ściśle rzecz biorąc, po naciśnięciu lewego przycisku wyświetlany jest podgląd kopiowania. Możesz w tym czasie dowolnie zmieniać położenie kursora myszy (jest to tzw. przeciąganie schowka) w celu znalezienia najlepszego miejsca przeznaczenia. Prawdziwe kopiowanie zostanie zrealizowane dopiero po zwolnieniu lewego przycisku. Co więcej, przy wciśniętym lewym przycisku możesz w dalszym ciągu dowolnie zmieniać tryb pracy i wygląd okna. W szczególności, w trybie powiększonym przy pomocy klawiszy nawigacyjnych możesz przeciągać okno pod nieruchomym schowkiem. Takie postępowanie pozwala na osiągnięcie najwyższej dokładności. Ostatnie dwa parametry mają zastosowanie tylko przy niepustym transfer. Powinny one spełniać warunki określone dla argumentu mode funkcji bitmap i copy, z tym że znak = jest nieistotny, a w mode1 litera B nie powinna występować. Mode1 określa metodę kopiowania wstępnego (czyli podglądu), a mode2 ostatecznego. W przypadku ich pominięcia będzie oczywiście wykonywane kopiowanie zwykłe. UWAGA: Chociaż funkcja cut musi przesłać pewien obszar do schowka, przeciągać można jakikolwiek schowek, także wytworzony przez program zewnętrzny. W tym celu zastosuj np. następującą procedurę:

35 Paste({ }) // w razie potrzeby użyj przedtem change Cut(,,r, b,,...) // bez after, r i b ustal na podstawie wyglądu okna Undo() W tym momencie okno będzie wyglądać tak jak przed wywołaniem paste, ale przeciąganie schowka stanie się możliwe. dis() odłącza okno graficzne od programu głównego MATMY LUX. Oznacza to, że okno to nie będzie automatycznie zamknięte po zakończeniu przebiegu MATMY oraz umożliwia jednoczesne otwarcie innego okna graficznego. UWAGA: Do okna odłączonego nie można już przesyłać żadnych poleceń tekstowych. dispsize() działa tylko wtedy, gdy okno graficzne istnieje i zwraca dwuelementową tablicę zawierającą szerokość i wysokość fizycznego ekranu w milimetrach. Wielkości te są wykorzystywane w funkcjach paint i change, jeśli rozmiary podawane są w jednostkach metrycznych. draw(x 1, y 1, x 2, y 2 ) kreśli aktualnie zdefiniowanym piórem linię łamaną (z możliwością zamknięcia wielokąta) od punktu o współrzędnych logicznych {x 1, y 1 } do {x n, y n }. Jeśli n > 2, to pierwszy parametr musi być (a zawsze może) tablicą wszystkich punktów (o dowolnej strukturze) i wtedy istotny jest jeszcze tylko parametr drugi (zob. poniżej). W przypadku gdy n = 1 zostaje narysowany odcinek od bieżącej pozycji pióra do {x 1, y 1 }. Położenie pióra nigdy nie jest zmieniane. Jeśli pierwszy parametr jest tablicą co najmniej trzech punktów, zaś drugi jest niepusty, to funkcja rysuje dodatkową linię łączącą bezpośrednio ostatni punkt z pierwszym (Rys. 30). Ponadto wnętrze otrzymanego wielokąta zamalowywane jest aktualnie zdefiniowanym pędzlem. Przykładowo, Draw( {1, 2, 3, 4, 5, 6}, 1) rysuje trójkąt. UWAGA: Jeśli chcesz kreślić linie ze zmianą pozycji pióra, zastosuj funkcję line lub move.

36 Rys. 30. axes(); brush(, 255); draw({-9, 0, 1, -5, 3, 4, 5, -9}, 1) expose () wyświetla i uaktywnia już otwarte okno graficzne oraz minimalizuje do paska zadań okno tekstowe. Może być użyteczna po dłuższym przetwarzaniu przygotowującym nowy rysunek. UWAGA 1: Nie ma potrzeby wywoływania tej funkcji bezpośrednio po paint. UWAGA 2: Expose jest wykonywana automatycznie przez wait. extent(text) zwraca dwuelementową tablicę zawierającą rozmiary (w jednostkach logicznych) jakie zająłby łańcuch text, gdyby został on wyświetlony aktualnie wybranym fontem w otwartym oknie graficznym. Znaki o kodach ASCII mniejszych od 32 są przez tę funkcję traktowane tak jak zwykłe znaki drukowalne (czyli zgodnie z funkcją notice w trybach punktowych). W wysokości tekstu są uwzględnione ewentualne podwójne podkreślenia i nadkreślenia (pojedyncze nie zmieniają wysokości tekstu). Wysokość tekstu bez podkreśleń i nadkreśleń można uzyskać przy pomocy wywołania Notice(text, S? ) figure(pnt) rysuje aktualnym piórem ciągi linii prostych i krzywych Beziera trzeciego stopnia. Parametr winien być tablicą złożoną z podtablic dwuelementowych postaci {x n, y n } lub trzyelementowych {x n, y n, style}

37 Pierwsze dwa elementy są współrzędnymi logicznymi punktu, a style specyfikuje rolę tego punktu w określeniu rysunku. Najczęściej jest to łańcuch bajtów, którego tylko pierwszy znak (o dowolnej wielkości) jest istotny i zleca: Move ustawienie pióra w pozycji {x n, y n }. Jeśli pierwszy element tablicy pnt nie zawiera tego stylu, będzie użyta dotychczasowa pozycja pióra. W przypadku wykorzystania tego stylu poza pierwszym elementem, uzyskany rysunek może być niespójny (Rys. 31). Bezier rysowanie krzywej Beziera. Każda taka krzywa musi być definiowana przez trzy punkty. Dwa pierwsze są punktami kontrolnymi, zaś trzeci punktem docelowym (punktem startowym jest zawsze bieżąca pozycja pióra). Ten i następne style powodują też ustawienie pióra w punkcie docelowym. Exp rysowanie ekspansywnej krzywej Beziera (Rys. 27). W tym i dwóch następnych stylach punkty kontrolne muszą być podane, ale ich wartości nie mają żadnego znaczenia. Fan rysowanie fantazyjnej krzywej Beziera (Rys. 28). Soft rysowanie łagodnej krzywej Beziera (Rys. 29). Line rysowanie linii prostej dochodzącej do podanego punktu docelowego. Ostatnia opcja będzie wykorzystywana także dla wszystkich innych znaków. W przypadku, gdy style jest pominięte, użyty zostanie Line dla pierwszego elementu oraz poprzedni styl dla następnych. Wyjątkiem od tej drugiej reguły jest tylko Move, ponieważ stosowanie tej opcji kolejno po sobie nie ma sensu. Dlatego Move ustawia styl domyślny Line. Style może mieć także postać { Opcja } gdzie Opcja musi być różna od Move. Zleca to zamknięcie figury po narysowaniu odpowiedniego elementu, a ściśle mówiąc poprowadzenie prostej (łącznie z przemieszczeniem pióra) od aktualnego punktu docelowego do punktu z ostatnim poprzedzającym Move lub pozycji pióra przed wywołaniem figure. Nawiasy klamrowe stylu nie są włączane do stylu domyślnego. W przypadku krzywych Beziera wystarczy zamknąć w nawiasach styl dowolnego z trzech punktów. UWAGA 1: Ta funkcja nigdy nie używa pędzla, nawet wtedy gdy powstaje figura zamknięta. UWAGA 2: Jeśli rysujesz tylko krzywe Beziera, funkcje curve lub bezier mogą być wygodniejsze.

38 Rys. 31. Ciąg prostych i krzywych rysowany przez figure nie musi być spójny: Figure( { { 9, 9, M }, {0, 0, { F } }, {0, 0}, {2, 2}, { 5, 2, M }, { 1, 9}, {8, 3} } ) fill(x,y,red,green,blue) zamalowuje spójny obszar okna aktualnie zdefiniowanym pędzlem. Malowanie rozpoczyna się od punktu o współrzędnych logicznych x oraz y (te dwa argumenty są obowiązkowe) i jest kontynuowane we wszystkich kierunkach. Jeśli nie ma innych parametrów (jest tylko jeden przecinek, ściśle mówiąc), to malowanie nie obejmuje pikseli posiadających kolor różny od koloru punktu początkowego. Jeśli są przynajmniej dwa przecinki, malowanie jest wykonywane aż do napotkania pikseli, które posiadają kolor {red, green, blue}. Wynika stąd, że wtedy coś zostanie namalowane tylko gdy punkt o współrzędnych x i y nie posiada tego koloru. Wartościami domyślnymi nasyceń są zera, a więc np. fill(x, y, ) będzie malować aż do napotkania koloru czarnego. Dość często zdarza się, że chcemy zamalować obszar ograniczony przez dwa lub więcej kolorów. Jest rzeczą ciekawą, że środowisko MATMY LUX pozwala na łatwe wykonanie tego zadania. Należy tylko wspomóc się funkcją color zgodnie z poniższym przykładem (zob. też plik fill.mtm): // Chcemy pokolorować aktualnym pędzlem obszar od punktu // {0, 0} ograniczony kolorem zielonym i niebieskim memo() // zapamiętanie rysunku w mapie memo color({0,255}, a=findabsent()) // zamiana zielonego na nieobecny

39 recall() // zamiana z memo color({0, 255}, {0, 0, 255}) // zamiana zielonego na niebieski fill(0, 0,,, 255) // do niebieskiego pędzel color(, {0, 255},,a) // przywrócenie zielonego Jeśli obszar jest ograniczony ilością kolorów większą niż dwa, postępujemy analogicznie wywołując findabsent(nr) z różnymi nr. UWAGA: W sensie tej funkcji pikselami sąsiednimi umożliwiającymi kontynuację wypełniania są tylko piksele położone obok siebie w pionie albo poziomie. Stąd np. linia pochyła o grubości 1 może pozostać niezmieniona, podczas gdy w przypadku grubości większej przemalowanie może być wykonane. findabsent(nr) znajduje kolor numer nr (domyślnie pierwszy, składowa niebieska jest najmniej znacząca) niewystępujący na rysunku i zwraca go w postaci tablicy trzech nasyceń. Parametr nr umożliwia pobranie wielu takich kolorów. Funkcja może mieć zastosowanie w sytuacji, gdy chcemy chwilowo zamienić jakiś kolor na inny. Daje się to zrealizować przy pomocy color i mapy memo (zob. opis funkcji fill). findcolor(exist,rect,memo,nr) znajduje w prostokącie rect piksel czyniący zadość warunkom zdefiniowanym przez exist i memo (te parametry muszą być określone zgodnie z opisem podanym dla funkcji color). Argument nr (domyślnie 1) podaje numer szukanego piksela wśród spełniających warunki. Funkcja umożliwia wykonanie nietypowego przetwarzania kolorów. finish(time) zamyka okno graficzne bez komunikatów ostrzegawczych występujących przy próbie zamknięcia za pomocą myszy lub Alt-F4. Jeśli time jest podane, to zamknięcie nastąpi dopiero po upływie time sekund, a do tego czasu okno graficzne pozostaje odłączone (zob. dis). Ta opcja umożliwia tworzenie bannerów powitalnych, pożegnalnych lub informujących o czymś. font(name,col,back,style,height,width,set,direct,orient) definiuje nowy font, który będzie używany przez funkcje notice i axes aż do następnego wywołania funkcji font lub zamknięcia okna graficznego. Wszystkie argumenty są opcjonalne. Parametr name powinien być nazwą fontu (dostępne nazwy fontów można sprawdzić przy pomocy programu znaki.exe) lub liczbą całkowitą z przedziału 0 5 określającą pewne fonty specjalne (zob. plik defs\lux.mtm). Jeśli name jest puste, zostanie wykorzystany font domyślny. W tym przypadku jak również dla innych fontów specjalnych z następnych argumentów uwzględnione będą tylko col i back definiujące odpowiednio kolory znaków i tła oraz style z kreskami (tj. bez pierwszych dwóch z opisanych poniżej). Kolory powinny być tablicami lub łańcuchami znakowymi nasyceń RGB (domyślnie zera w przypadku tekstu i 255 tła). Dodatkowo back może być wartością boolowską:.0. (lub stała _TRANSPARENT z pliku defs\lux.mtm) oznacza, że tło znaków tekstu ma nie być wyświetlane (tj. pozostaje bez zmiany), a.1. (_WHITEBACK) że ma być białe. Style powinien być łańcuchem znakowym, w którym mogą być zawarte następujące nazwy (istotne są tylko duże litery):

40 Italic kursywa, Bold czcionka pogrubiona, Under podkreślona, Strike przekreślona, Over nadkreślona, Dot podkreślona przerywana, Cross przekreślona przerywana, Two podwójnie podkreślona, Power podwójnie nadkreślona. Cztery pierwsze style są dobrze znane (występują w interfejsie graficznym Microsoft Windows). Styl Over został dodany do MATMY LUX nie tylko w celu osiągnięcia symetrii. W istocie rzeczy symbole nadkreślone często występują w matematyce i fizyce, a i w innych obszarach mogą znaleźć zastosowanie. Podobna uwaga dotyczy różnych rodzajów podkreśleń. Dodajmy, że jednoczesne użycie stylów Dot i Two daje jeszcze jeden, a mianowicie podkreślenie mieszane (zob. Rys. 32). Nastepne dwa parametry określają wysokość i szerokość czcionek w jednostkach logicznych lub, tylko w przypadku height, w tzw. jednostkach względnych. Polega to na tym, że jeśli height jest równe h, gdzie h jest dodatnie (niekoniecznie całkowite), to system usiłuje dobrać font o wysokości h razy większej od wysokości domyślnej (przyjmowanej w przypadku braku argumentu). Dodajmy, że zmiana wysokości powoduje zawsze proporcjonalną zmianę szerokości czcionki, podczas gdy odwrotna zależność nie zachodzi. Set powinno być liczbą całkowitą z przedziału od 0 do 14 (domyślnie 0). Można wykorzystywać stałe zdefiniowane w pliku defs\lux.mtm. Ten parametr określa zestaw znaków zgodnie ze specyfikacją podaną w programie znaki.exe. Direct i orient podają (w stopniach, być może z jedną cyfrą po przecinku), jakie ma być odpowiednio nachylenie linii wyświetlania oraz znaków w stosunku do poziomu (domyślnie oczywiście zera). Jeśli podano tylko ten pierwszy, to przyjmuje się, że orient = direct. Kąty ujemne są odmierzane w kierunku zgodnym z kierunkiem ruchu zegara (zob. Rys. 32). Te opcje mogą występować tylko ze stylami Bold i/lub Italic (lub oczywiście normalnym). Skoro fonty kreślone nie mogą być nachylone, przyjęto że dla nich parametry direct i orient mają inne znaczenie. I tak ten pierwszy może być tablicą lub ciągiem znaków definiującym kolor kreski, podczas gdy drugi kolor tła między kreskami w stylach Two i Power (z tym, że orient nie może być wartością boolowską). Można np. mieć font czarny przekreślony na czerwono lub podkreślony grubą kreską (ze stylem Two jeśli orient=col). Przy podaniu mniej niż trzech nasyceń oba te parametry są uzupełniane zerami, zaś w przypadku ich całkowitego niepodania są one oczywiście zrównywane odpowiednio z col i back, Jeśli name jest tablicą, to funkcja przyjmuje, że faktyczne parametry (z wyjątkiem podanych w aktualnym wywołaniu) są składowane właśnie w tej tablicy. Dzięki temu możesz mieć nazwane fonty łatwe do uruchomienia. Np. po przypisaniu

41 TNR = {"Times New Roman",,, Bold, 1.5} wywołania font(tnr) font"times New Roman",,, Bold, 1.5) są równoważne. Możesz ponadto zmieniać niektóre parametry pisząc np. font(tnr, {255}, chr(0)+0) co spowoduje wyświetlanie czerwonych znaków na niebieskim tle. Rys. 32. Przegląd możliwości funkcji font i notice fontsize() getpen() zwraca wysokość aktualnego fontu w jednostkach logicznych. UWAGA: Wartość zwracana przez tę funkcję jest równa drugiemu elementowi tablicy zwracanej przez funkcję extent. zwraca aktualną pozycję pióra we współrzędnych logicznych jako tablicę dwuelementową. Niektóre funkcje wykorzystują pozycję pióra i/lub ją zmieniają. Pozycję pióra można ustawić bez rysowania czegokolwiek przy pomocy funkcji move. Po otwarciu okna graficznego, a także po każdym wywołaniu funkcji new lub change, pióro jest ustawiane w lewym górnym rogu okna.

42 zwraca dwuelementową tablicę współrzędnych logicznych punktu w aktualnie otwartym oknie graficznym, na którym znajduje się kursor myszy. Dzięki temu nie musisz zgadywać, jakie są współrzędne istotnych punktów. Np. jeśli chcesz umieścić pióro w określonej pozycji, ustaw tam kursor, a następnie w oknie tekstowym wprowadź move(getpos()) Jeśli występuje parametr in, to powinien on być nazwą istniejącej zmiennej. Zostanie w niej umieszczona wartość.1., gdy kursor znajduje się na powierzchni klienta okna oraz.0. w przeciwnym przypadku. getrgb(line,nr) traktuje line jako linię rastrową otrzymaną np. przy pomocy funkcji image i zwraca wartość tj. trzybajtowy ciąg nasyceń piksela o numerze nr (liczone od zera). Przykładowo, getrgb(chr(0) , 1) zwróci chr(1)+1+1. Funkcja ułatwia przetwarzanie wewnętrznych map bitowych. zwraca tablicę czterech współrzędnych logicznych obszaru zaznaczonego. Można to wykorzystać np. w wywołaniu funkcji bitmap w celu wczytania mapy bitowej z dysku tylko na wybrany obszar. Opcjonalny parametr stat musi być zmienną, która po powrocie otrzyma jedną z następujących wartości: 1 obszar zaznaczony istnieje, 0 nie ma zaznaczonego obszaru (zwracane są współrzędne ostatnio zaznaczonego), 1 obszar jest w trakcie zaznaczania (zwracane są jego aktualne współrzędne). Drugi przypadek można wykorzystać np. w celu wykonania dodatkowych operacji na obszarze wklejonym ze schowka. UWAGA: Przy ujemnej wartości stat współrzędne mogą być odwrócone, tzn. pierwsza para współrzędnych nie musi określać lewego górnego rogu obszaru. Zgodnie z wcześniejszą uwagą nie ma to żadnego znaczenia dla wykorzystania tych współrzędnych w innych funkcjach MATMY LUX. grab(source,target,mode) kopiuje obszar ekranu określony przez source (tablica współrzędnych dwóch rogów prostokąta wyrażonych w pikselach względem lewego górnego rogu ekranu) do prostokąta target (tablica współrzędnych logicznych) w oknie graficznym. Obszary mogą mieć różną wielkość (domyślnie maksymalną) i mogą się nakładać. Parametr mode ma takie same znaczenie jak w przypadku funkcji bitmap i copy (bez opcji = ). Na ogół kopiowany obszar nie powinien zawierać okna tekstowego i graficznego. Można to osiągnąć pisząc np. box(1); hide(); grab() Tutaj pierwsza funkcja ukryje okno tekstowe, druga okno graficzne, zaś trzecia wykona zrzut całego ekranu do okna graficznego. UWAGA 1: Funkcja grab nie działa w trybie pełnoekranowym okna tekstowego. W razie potrzeby stosuj np. expose(); hide(); grab() UWAGA 2: W celu uzyskania najlepszej jakości możesz przed wywołaniem grab zrównać rozmiary bitmapy przetwarzanej w oknie graficznym z rozdzielczością ekranu przy pomocy

43 @height); new(width+1, height+1) UWAGA 3: Współrzędne obszaru źródłowego dla funkcji grab najlepiej jest określać przy pomocy komendy Ctrl+Shift+WinLogo+= programu rezydentnego DEMORES.EXE dostępnego na stronie W ten sposób można także otrzymać składowe RGB dowolnego piksela wyświetlanego na całym ekranie. UWAGA 4: Funkcja może nie działać w przypadku wyświetleń tworzonych przez pewne programy piszące bezpośrednio do ekranu z pominięciem ich okien. Dotyczy w szczególności silnych okien powiadomień tworzonych przez funkcje tip i luxtip z użyciem opcji. graph(&fun,from,to,width,red,green,blue,set,cont) wyświetla wykres mającej jeden rzeczywisty argument funkcji fun (Rys. 33) począwszy (Rys. 34) od from (domyślnie skrajna lewa wartość logiczna) do to (domyślnie skrajna prawa). Wartości fun także muszą być rzeczywiste (lub równe infinity), co powoduje konieczność ograniczenia dziedzin niektórych funkcji (Rys. 35). Nie ma takiej potrzeby w przypadku istnienia izolowanych punktów prowadzących do wykonania błędnej operacji (np. dzielenia przez zero, zob. Rys. 36). Gwarantuje się ponadto, że funkcja fun zostanie wywołana tylko dla argumentów leżących w otwartym przedziale (from, to). Jeśli width jest różne od zera, graph nie korzysta z aktualnie wybranego pióra, a więc ewentualną zmianę szerokości (Rys. 37) i/lub koloru (Rys. 38) wykresu należy sygnalizować przy pomocy parametrów width (1 gdy pominięte), red, green i blue (domyślnie zera). Red może być również tablicą nasyceń i wtedy ewentualny argument set powinien występować bezpośrednio po tej tablicy. W przypadku gdy width = 0, grubość i kolor wykresu (ale bez stylów przerywanych) pobierana jest z aktualnego pióra. Parametry red, green i blue są wtedy ignorowane. Jeśli potrzebujesz parametrów set i/lub cont, możesz je pisać bezpośrednio po red równym { }. Graph stosuje się oczywiście zazwyczaj w połączeniu z axes w celu zbadania przebiegu jakiejś funkcji. Jednak możliwe jest również włączenie wykresu w skład kreślonych krzywych dzięki następującej opcji: jeśli width jest ujemne, to szerokość wykresu jest równa width, a po jego narysowaniu pozycja pióra jest aktualizowana i ustawiana na skrajny prawy punkt wykresu (Rys. 39). Przed wyświetleniem wykresu graph tablicuje funkcję fun w punktach, których ilość jest równa liczbie pikseli w poziomym rozmiarze wykresu. Dokładne argumenty próbek nie są zdefiniowane w sposób jawny (chociaż pozostają stałe w różnych przebiegach). W rezultacie istnieje znikome prawdopodobieństwo, że fun zostanie wywołana w jakimś określonym punkcie. Zazwyczaj jest to korzystne, gdyż unikamy w ten sposób wywołania w izolowanych miejscach powodujących wystąpienie błędu, ale czasem potrzebujemy umieszczenia na wykresie wartości w konkretnym punkcie. Może to być np. miejsce, gdzie fun nie jest ciągła z ani jednej strony. Z pomocą przychodzi tu parametr set; jeśli jest on równy pewnej liczbie z przedziału [from, to], to wartość fun dla tej liczby zostanie uwzględniona na wykresie. Przykładem zastosowania jest wykres delty Diraca (Rys. 40); bez parametru set

44 ustawionego na zero wartość funkcji dirac w tym punkcie, aczkolwiek nieskończona, byłaby niezauważona. Parametr set może być również tablicą argumentów fun, które chcesz koniecznie uwzględnić na wykresie. Przydatna tu może być funkcja numbers generująca kolejne liczby postępu arytmetycznego. Dzięki temu graph może tworzyć wykresy funkcji dyskretnych tj. przyjmujących wartości różne od zera tylko dla argumentów całkowitych (Rys. 41). Graph jest w stanie przedstawić każdą funkcję jako funkcję ciągłą (Rys. 42), ale czasami to nie jest wskazane. Jeśli parametr cont jest ustawiony na wartość.0., to graph nie dodaje nic od siebie do wykresu (Rys. 43). Jednak ta opcja nie powinna być nadużywana, gdyż niektóre rysunki mogą wtedy wyglądać dziwnie. Spośród wielu zastosowań funkcji graph warto tu zwrócić uwagę na możliwość znajdowania miejsc zerowych funkcji ciągłych (Rys. 44). W tym celu przy pomocy graph sprawdzamy najpierw, gdzie takie miejsca mogą być, a następnie przy użyciu search i/lub minmax znajdujemy ich dokładne wartości. Ta metoda jest na ogół znacznie szybsza niż wykorzystująca solver. Rys. 33. Wykres graph(&f) funkcji f definiowanej f(x) = sin(x)x

45 Rys. 34. axes(); graph(&sin, 5, 6) Rys. 35. axes(,,5,.0.); graph(&sqrt, 0); setsel(); alter(1.9,, "NE") Natomiast użycie graph(&sqrt) spowoduje wystąpienie błędu.

46 Rys. 36. Wykres graph(&f) funkcji f definiowanej f(x) = 1/x Rys. 37. Wykres funkcji ctg: graph(&ctg,,,3)

47 Rys. 38. Wykres funkcji wykładniczej graph(&exp,,,2,,200) Rys. 39. Pen(2); line( 2, sinh( 2)); graph(&sinh, 2, 1, 2,0, 200, 200); draw(8, 5)

48 Rys. 40. graph(&dirac,,,3,{255},0) dirac(x) = if(x==0,infinity(),0) Rys. 41. Wykres funkcji dyskretnej graph(&f,,,3, {0, 0, 255}, numbers( 10, 10))

49 Rys. 42. graph(&heaviside,,, 5, 255) heaviside(x) = if(x<0, 0, 1) Rys. 43. graph(&heaviside,,, 5, {255}, 0,.0.) heaviside(x) = if(x<0, 0, if(x>0, 1, 0.5))

50 Rys. 44. Szukanie w przedziale [ 10, 10] miejsc zerowych f(x) = if(x >= 0, (x sin(3x) 0.2) ^ 2, x sin(4x) + 0.2) Po axes(,, 2);graph(&f) dajemy search(&f, 1, 0.5) i minmax(&f, 0.5, 1). hide (mode) ukrywa otwarte okno graficzne, jeśli mode jest liczbą różną od zera (np. w celu wykonania szeregu operacji tworzących rysunek) i wyświetla je ponownie, jeśli mode jest równe 0. W przypadku ujemnego mode okno nie jest widoczne nawet na pasku zadań. Domyślną wartością mode jest 1. image(x1,y1,x2,y2) zwraca tablicę będącą bitmapą wewnętrzną reprezentującą całe okno (jeśli nie podano żadnych argumentów) lub prostokąt o podanych współrzędnych logicznych. Natomiast jeśli x2 i y2 są pominięte, podczas gdy y1 występuje, to zwracany jest albo łańcuch nasyceń RGB linii rastrowej o współrzędnej logicznej y1 (jeśli nie podano x1) albo trzybajtowy ciąg nasyceń koloru piksela o współrzędnych logicznych x1 i y1.

51 Funkcja umożliwia wykonywanie programowych modyfikacji map bitowych. Należy jednak pamiętać, że image nie może tworzyć bitmap mających więcej niż około milion pikseli. Zatem w przypadku dużego okna należy je podzielić na mniejsze fragmenty, np. linie rastrowe, tak jak w poniższym n, r real() // współrzędne fizyczne Pix = maxpixel() For (n = 1, n++, n<pix[2], r = image(,n) // wczytaj linię nr n... // przetwarzanie linii nr n... // np. przy pomocy getrgb i/lub setrgb bitmap({r},,{0, n, pix[1], n}) // wyświetl zmod. linię bitmap({r},, {0, n}, "=") // to Ponieważ takie przetwarzanie może być czasochłonne, należy uprzednio sprawdzić, czy problemu nie da się rozwiązać inną metodą. Np. manipulacje na kolorach można często wykonać przy pomocy działającej bardzo szybko funkcji color. Wiele warunków można zrealizować przy użyciu równie szybkiej funkcji undocolor. L2p(left,top,right,bottom) przekształca podane współrzędne logiczne prostokąta (przyjmujące domyślnie i dla współrzędnych nieprawidłowych wartości skrajne) na wyrażone w pikselach (w ramach aktualnie przetwarzanej bitmapy) i zwraca tablicę czteroelementową. Parametr left też może być tablicą i wtedy następne argumenty są ignorowane. Funkcja umożliwia odwoływanie się do pikseli (tam gdzie jest to niezbędne) nawet w czasie pracy ze współrzędnymi logicznymi. Załóżmy na przykład, że w zmiennej pro mamy tablicę współrzędnych logicznych jakiegoś obszaru i chcemy zastosować operację inwersji tylko do jego wnętrza. Można to zrealizować przy pomocy wywołania Area(P2L(L2P(Pro) + {1, 1, 1, 1}), Invert ) UWAGA: Aby otrzymać współrzędne fizyczne punktu, podaj tylko dwa pierwsze argumenty (albo tablicę dwuelementową left) i korzystaj z pierwszych dwóch elementów zwróconej tablicy. L2s(left,top,right,bottom) light(mult,rect, mean) działa bardzo podobnie do funkcji L2p, ale zwraca współrzędne ekranowe, tzn. takie, w których lewy górny róg ekranu ma współrzędne {0,0}. W szczególności, wywołanie L2s() zwraca współrzędne ekranowe powierzchni klienta okna graficznego. L2s może być przydatna np. przy korzystaniu z funkcji tip lub luxtip. UWAGA: W odróżnieniu od funkcji L2p, L2s uwzględnia bieżący tryb pracy i aktualne wymiary okna. mnoży nasycenia kolorów w prostokącie rect (tablica współrzędnych logicznych przyjmujących domyślnie wartości skrajne) przez liczby podane w parametrze mult i zwraca nową jasność tego obszaru. Ponadto jeśli podano zmienną mean, to zostanie w niej umieszczony średni piksel (tablica trzyelementowa) prostokąta.

52 (Nasycenia średniego piksela są średnimi arytmetycznymi składowych pikseli w obszarze, zaś jasność jest sumą nasyceń średniego piksela.) Parametr mult powinien być liczbą nieujemną (być może ułamkową, domyślnie równą 1) lub tablicą takich liczb. W pierwszym przypadku liczba, dajmy na to, x zostaje zastąpiona przez {x, x, x}. Elementy tablicy równe nil (lub nieistniejące) są zamieniane na 1 gdy występują na pozycji pierwszej, a w przeciwnym przypadku są zrównywane z poprzednim elementem tablicy. Jeśli po przemnożeniu zostanie otrzymana liczba większa niż 255, to będzie zastąpiona przez 255. Stąd m.in. wynika, że operacja wykonywana przez tę funkcję nie jest całkowicie odwracalna. Najprostszym zastosowaniem funkcji light jest oczywiście badanie i zmiana jasności obrazka. Wywołanie Light(x) zmienia jasność całego rysunku x razy. Ponadto ta funkcja jest wykorzystywana przez funkcję setlight. limits(left,top,right,bottom) zmienia współrzędne logiczne okna graficznego (aż do zmiany tą funkcją, origin, units, paint lub real) i zwraca czteroelementową tablicę zawierającą poprzednie współrzędne. Domyślnymi wartościami left i top są zera. Dwa następne argumenty muszą wystąpić i być także liczbami, a ponadto wymaga się, aby było left!= right, top!= bottom. Left może być także tablicą czterech współrzędnych i wtedy następne argumenty są ignorowane. Funkcję można stosować np. do ustawiania współrzędnych logicznych równych współrzędnym fizycznym w pikselach. Będzie tak, jeśli użyjesz Limits( {, } :: maxpixel() ) Wprawdzie zazwyczaj wygodniej jest wykorzystać funkcję real, ale powyższe polecenie nie zmienia wartości przełącznika real. Natomiast wyrażenie Limits( 10, 10, 10, 10) przywraca stan początkowy, ale ustawienie współrzędnych takich jak stosowane w matematyce lepiej jest robić przy pomocy funkcji origin i units. Powyższe wywołanie jest równoważne z origin(); units() gdzie nie potrzeba podawać żadnych liczb. W przypadku nieprawidłowych parametrów funkcja nie sygnalizuje błędu, a tylko zwraca tablicę aktualnie istniejących współrzędnych logicznych. Zatem w celu otrzymania tej informacji wystarczy użyć limits(). Funkcja pozwala także na łatwe przywracanie poprzednich współrzędnych zgodnie ze schematem Zap = limits(...) // zapamiętanie dotychczasowych i zmiana... // praca ze zmienionymi limits(zap) // przywrócenie starych Oczywiście, w pierwszej linii można by także wywołać limits bez parametrów, a potem zmienić współrzędne inną metodą.

53 line(x 1, y 1, x 2, y 2 ) kreśli aktualnie zdefiniowanym piórem linię łamaną od bieżącej pozycji pióra poprzez punkt o współrzędnych logicznych {x 1, y 1 } aż do {x n, y n } umieszczając pióro w tym ostatnim (z tym, że n może być równe 1 i wtedy będzie narysowana tylko jedna linia; Rys. 46). Jeśli n > 2, to pierwszy parametr musi być (a zawsze może) tablicą wszystkich punktów (o dowolnej strukturze) i wtedy następne parametry są ignorowane. UWAGA 1: Funkcja line różni się od move tylko tym, że ta druga zaczyna kreślenie od {x 1, y 1 }. UWAGA 2: Jeśli chcesz rysować linie bez zmiany pozycji pióra, zastosuj funkcję draw. lock(new) blokuje rysunek (jeśli new jest puste) lub okno graficzne (w przeciwnym przypadku) przed jakąkolwiek modyfikacją, co może być przydatne np. w czasie prezentacji. (Ściśle mówiąc, przy new pustym funkcja new działa normalnie.) Okno lub obraz można odblokować przy pomocy unlock. luxtip(file,x,y,w,h,time,mode,frame,source) działa podobnie do funkcji tip, ale zamiast tekstu wyświetla bitmapę wczytaną z pliku file w oknie powiadomień o współrzędnych ekranowych górnego lewego rogu x i y, szerokości w i wysokości h (te cztery parametry należy podawać w pikselach). Wartościami domyślnymi x i y są zera, zaś w i h otrzymują wartości równe wymiarom grafiki powiększonymi o szerokość ramki (ale niewykraczającymi poza granice ekranu). W trakcie wyświetlania powiadomienia okno tekstowe i inne okna MATMY mogą pracować równolegle. Jeśli podano time, to po tym czasie (w sekundach, można podawać ułamki) powiadomienie zostanie automatycznie zlikwidowane. Innymi sposobami osiągnięcia tego celu są: Kliknięcie przez użytkownika dowolnym przyciskiem myszy na powiadomieniu. Zakończenie przebiegu MATMY (kasuje wszystkie ustawione powiadomienia z jednym wyjątkiem, zob. Uwaga 3.). Wywołanie luxtip z pominiętym file tj. na przykład postaci Luxtip(, x, y) kasujące powiadomienie wyświetlone od pozycji x i y (ew. parametry za x i y są bez znaczenia). Parametr mode definiuje sposób wyświetlania źródłowej bitmapy i jej połączenia z celem czyli ekranem. Powinien on spełniać warunki określone dla funkcji bitmap z tym, że usunięto opcję =, a dodano "#" wprowadzającą tryb naukowy wyświetlania (zob. opis funkcji picture) oraz " " oznaczającą okno silne czyli takie, które nie może być zasłonięte przez inne okno ani nawet nadpisane. Parametr frame ma znaczenie dokładnie takie, jak podano w opisie funkcji tip. Natomiast source (zob. opis bitmap) należy podawać wtedy, gdy chcemy wczytać tylko fragment mapy bitowej z dysku. UWAGA 1: Okna powiadomień nie są częścią okna graficznego (mogą być używane bez funkcji paint), nawet jeśli są wyświetlane wewnątrz niego. Aby to zmienić, możesz zastosować wywołanie Grab(L2s( )).

54 To wczyta dowolne okna znajdujące się wewnątrz okna graficznego pod warunkiem, że okna powiadomień nie są silne. UWAGA 2: Aby sprawdzić, czy użytkownik zamknął okno powiadomienia, możesz stosować funkcję numlux. UWAGA 3: Jeśli chcesz utworzyć okno, które nie zniknie po zakończeniu przebiegu MATMY, podaj ujemny time. Czas istnienia takiego okna zostanie ustawiony na time. UWAGA 4: Ponieważ luxtip z pominiętym file wykonuje kasowanie okna powiadomień, w celu skorzystania z okna wyboru plików podaj w pierwszym parametrze pusty tekst. UWAGA 5: Zaleca się, aby okna powiadomień (zwłaszcza silne) nie miały jakichkolwiek wspólnych fragmentów powierzchni wyświetlania. UWAGA 6: Może się zdarzyć, że silne okno powiadomień nie daje się zamknąć przy użyciu myszy. W takim przypadku należy najpierw zamknąć, zminimalizować lub przesunąć okno znajdujące się pod oknem powiadomień. UWAGA 7: Opcja w połączeniu ze stylami "S&!T" lub "S^T" powoduje migotanie silnego okna. UWAGA 8: Ta funkcja nie powinna być wywoływana w trybie pełnoekranowym okna tekstowego. Rys. 45. paint(); axes(); luxtip("eye.bmp", 154, 135, 400, 400,,"S&T ", {255,,,2}) mapsize(file) zwraca dwuelementową tablicę zawierającą rozmiar (w pikselach) mapy bitowej file, przy czym ten parametr jest nazwą pliku

55 dyskowego lub bitmapą wewnętrzną. W przypadku braku pliku mapsize zwraca.0. UWAGA: Ta funkcja działa także przy nieistniejącym oknie graficznym. maxpixel() zwraca dwuelementową tablicę zawierającą maksymalne współrzędne w pikselach aktualnie przetwarzanej mapy bitowej. memo(left,top,right,bottom,mode) kopiuje prostokąt o podanych współrzędnych logicznych (domyślnie przyjmujących wartości skrajne) do mapy memo. Parametr left może być także tablicą i wtedy ewentualny argument mode powinien wystąpić na drugim miejscu. Zapamiętany obszar może być odtworzony przy pomocy funkcji rest lub recall. Mapa bitowa budowana przez funkcję memo jest wykorzystywana m.in. w funkcjach color i undocolor oraz przy tzw. bezpiecznym przeciąganiu zaznaczonych bloków. Parametr mode powinien, o ile jest podany, być ciągiem znakowym spełniającym warunki określone dla parametru o tej samej nazwie funkcji bitmap (z tym, że znak = jest tutaj nieistotny, a litera B nie powinna być używana). Operacje logiczne wykonywane na obu bitmapach umożliwiają szybkie uzyskanie różnych niezwykłych efektów (Rys. 50). mono(mult,rect) dla każdego piksela obszaru rect (tablica współrzędnych logicznych przyjmujących domyślnie wartości skrajne) wykonuje następujące operacje: Sumuje jego nasycenia, dzieli otrzymaną sumę przez 3, mnoży wynik trzy razy przez liczby podane w parametrze mult i traktuje otrzymane iloczyny jako nowe nasycenia piksela. Parametr mult jest domyślnie równy {1,1,1}, więc w przypadku jego pominięcia piksele są zastępowane przez odcienie szarości o tej samej jasności. Jeśli mult jest podane, to musi być albo tablicą trzech nieujemnych liczb, albo liczbą 0. W tym drugim przypadku piksele obszaru nie są zmieniane, a funkcja zwraca barwność obszaru zdefiniowaną w następujący sposób: Barwność piksela jest różnicą między jego największą oraz najmniejszą składową, podzieloną przez 255. Barwność obszaru jest średnią arytmetyczną barwności jego pikseli. Jeśli mult jest różne od 0, to zwracana jest nowa barwność obszaru. UWAGA 1: Funkcja mono stara się nie zmieniać jasności pikseli. Stąd liczby podane w parametrze mult są wstępnie normalizowane tak, aby ich suma była równa 3. UWAGA 2: W przypadku niektórych rysunków o niskim kontraście bezpośrednie użycie mono może dać kiepski efekt. W takiej sytuacji należy przedtem zastosować contrast. move(x 1, y 1, x 2, y 2 ) kreśli aktualnie zdefiniowanym piórem linię łamaną od punktu o współrzędnych logicznych {x 1, y 1 } do {x n, y n } umieszczając pióro w tym ostatnim (Rys. 46). Jeśli n > 2, to pierwszy parametr musi być (a zawsze może) tablicą wszystkich punktów (o dowolnej strukturze) i

56 wtedy następne parametry są ignorowane. W przypadku gdy n = 1 nic nie jest rysowane i tylko pióro zostaje umieszczone w położeniu {x 1, y 1 }. UWAGA 1: Funkcja move różni się od line tylko tym, że ta druga kreśli zawsze dodatkową linię z bieżącej pozycji pióra do {x 1, y 1 }. UWAGA 2: Jeśli chcesz rysować linie bez zmiany pozycji pióra, zastosuj funkcję draw. Rys. 46. move( 3, 9); line(4, 8) jest równoważne z move( 3, 9, 4, 8) new(file,source) rozpoczyna edycję nowego rysunku. Zazwyczaj jest on wczytywany z pliku dyskowego (lub wewnętrznej bitmapy) file być może ograniczonego do prostokąta source (tablica, której dwa pierwsze elementy domyślnie zera określają w pikselach współrzędne lewego górnego rogu, zaś dwa następne podają też w pikselach, domyślnie maksymalne szerokość i wysokość obszaru). Ilość i długość wczytanych linii rastrowych określają wymiary przetwarzanej dalej mapy bitowej. Parametry file i source mogą też być liczbami podającymi w pikselach poziomy i odpowiednio pionowy rozmiar bitmapy. W tym przypadku będzie ona początkowo zamalowana na biało. UWAGA: Funkcja ustawia współrzędne logiczne okna na równe

57 współrzędnym fizycznym, jeśli przełącznik real jest aktywny, a w przeciwnym przypadku ich nie zmienia. notice(text,style,left,top,right,bottom) wyświetla w oknie graficznym łańcuch text (jedyny parametr obowiązkowy) przy użyciu aktualnego fontu (Rys. 32). Funkcja posiada cztery podstawowe tryby pracy: Punktowy z piórem, punktowy mieszany, punktowy bez pióra, prostokątny. Z trybem prostokątnym mamy do czynienia wtedy, gdy podano współrzędne logiczne obszaru (przynajmniej right lub bottom, nawet tylko przez postawienie przecinków; argumenty równe nil otrzymają domyślne wartości skrajne), w którym ma być realizowane wyświetlenie lub gdy implikują go pewne wartości style. Wyłącznie w tym trybie można wyświetlać teksty wieloliniowe (w trybach punktowych znaki nowego wiersza, podobnie jak wszystkie znaki o kodach ASCII mniejszych od 32, traktowane są jak znaki drukowalne). W trybie punktowym z piórem wyświetlanie rozpoczyna się od aktualnej pozycji pióra, a po zakończeniu pozycja pióra jest aktualizowana. Dzięki temu można np. zmienić font i wyświetlać dalszy ciąg tekstu. Z tym trybem mamy do czynienia wtedy, gdy nie podano żadnego parametru począwszy od left (i wartości style nie implikują innego trybu). Tryb punktowy bez pióra występuje wtedy, gdy podano left i/lub top, ale nie ma right, bottom ani pewnych omówionych dalej wartości style. W tym przypadku wyświetlanie zaczyna się od punktu {left, top} i pozycja pióra nie jest aktualizowana. Parametr left może być tablicą i wtedy dalsze argumenty nie są już brane pod uwagę. Ponadto jeśli nie występuje style, to left może być podane bezpośrednio za text. Normalnie w stylach punktowych pozycja początkowa wyświetlania zrównuje się z początkiem tekstu, tj. jego najbardziej lewym punktem i najwyższym, ale bez uwzględnienia ewentualnego podwójnego nadkreślenia (ponieważ jest ono zazwyczaj dodatkiem do istniejących w tym samym wierszu zwykłych znaków). Ta zasada może być zmieniona przez niektóre z poniższych opcji. Style powinien być ciągiem znakowym, w którym istotne są tylko pewne znaki specjalne, cyfry i duże litery, ale małe mogą być dodawane w celu zwiększenia czytelności. Można w nim użyć następujące opcje: Move wymusza tryb punktowy mieszany. Wyświetlanie zaczyna się od punktu {left, top}, po czym pozycja pióra jest aktualizowana. Center w trybach punktowych powoduje, że punkt początkowy wyświetlania jest przyrównywany do środka tekstu. W trybie prostokątnym centruje tekst poziomo w obszarze. Right w trybach punktowych przyrównuje punkt początkowy wyświetlania do prawej strony tekstu. W trybie prostokątnym wymusza Single i justuje tekst w prawo.

58 Polish stosuj ten styl tylko wtedy, gdy polskie litery są wyświetlane nieprawidłowo. Ściśle mówiąc, jest to związane z faktem, że w systemie Microsoft Windows istnieją dwa standardy kodowania polskich liter; jeden z nich występuje w zestawach znaków OEM, a drugi w pozostałych. Żadne konwersje nie są potrzebne w następujących sytuacjach: Funkcja notice jest wywoływana w pliku skryptowym lub oknie Windows i font nie jest typu OEM (najczęstszy przypadek). Funkcja notice jest wywoływana w oknie tekstowym i font jest typu OEM. +n% działa tylko w trybach punktowych i podwyższa położenie tekstu o n% wysokości fontu (nie licząc podwójnego podkreślenia i nadkreślenia). Liczba całkowita n może być większa od 100, a znak % może być pominięty. Przykładowo, styl +100 może być interpretowany jako przyrównanie punktu początkowego do dolnej linii rastrowej tekstu, a +50 do środkowej. Jednak najczęstsze zastosowania tego stylu obejmują tworzenie indeksów górnych. Rozważmy jeszcze jeden przykład. Załóżmy, że chcesz wyświetlić tekst podwójnie nadkreślony (ale bez podwójnego podkreślenia) w taki sposób, aby początek górnej kreski znajdował się w punkcie {x,y}. Możesz wtedy napisać Notice(tekst, +100, x, y + k fontsize()) gdzie k jest równe 1 dla współrzędnych fizycznych oraz 1 dla domyślnych współrzędnych logicznych. n% analogicznie jak wyżej, ale przesuwa tekst w przeciwnym kierunku. Ułatwia tworzenie indeksów dolnych. >n% działa tylko w trybach punktowych i przesuwa tekst w prawo o n% szerokości spacji (stąd >100 jest dokładnie równoważne wyprowadzeniu przed tekstem spacji). W odróżnieniu od dwóch poprzednich opcji ten i następny styl aktualizują położenie pióra. <n% działa tylko w trybach punktowych i przesuwa tekst w lewo o n% szerokości spacji. #n ustawia na n ilość znaków (średniej szerokości) reprezentowanych przez znak tabulacji. Działa tylko w trybie prostokątnym ze stylem Tab. Pominięcie n lub ustawienie na zero spowoduje całkowite ignorowanie znaków o kodzie ASCII 9. [n ustawia na n ilość znaków (średniej szerokości) lewego marginesu. Działa tylko w trybie prostokątnym. ]n ustawia na n ilość znaków (średniej szerokości) prawego marginesu. Działa tylko w trybie prostokątnym z opcją Word. Word ta i wszystkie następne opcje wymuszają tryb prostokątny (o ile nie ma Move). Ten styl powoduje, że funkcja rozróżnia wyrazy ograniczone spacjami oraz znakami

59 numlux() origin(x,y) o kodach ASCII 9, 10 i 13 przenosząc je w razie potrzeby (przekroczenie obszaru lub prawego marginesu) do następnego wiersza. / powoduje, że każdy wiersz niemieszczący się w obszarze jest obcinany. Przekroczenie prawego marginesu nie powoduje obcięcia przez tę opcję i dwie następne. Line obcina każdą linię niemieszczącą się w obszarze i dodaje przed miejscem obcięcia trzy kropki. End obcina w razie potrzeby tylko koniec tekstu dodając trzy kropki. Single wyświetla tekst jako pojedynczą linię. Znaki nowego wiersza traktowane są jak znaki drukowalne. Down wymusza Single i przesuwa tekst w dół obszaru. Vcenter wymusza Single i centruje tekst pionowo w obszarze. & uruchamia specjalne traktowanie znaku &. Po jego napotkaniu w text wszystkie znaki aż do następnego & są podkreślane, podczas gdy ampersandy nie są wyświetlane. Natomiast podwójny ampersand && jest zawsze przekształcany w pojedynczy i niepodkreślony. Przykładowo, wywołanie notice( ABC &xyz0& && 1&23 && 45&67, & ) wyświetli ABC xyz0 & 123 & 4567 Ten styl powoduje ignorowanie znaków Tab niezależnie od tego, czy występuje # i następna opcja. Ponadto przy jednoczesnym stosowaniu stylu Word każdy fragment podkreślony traktowany jest jako jedno słowo. Tab rozszerza znaki Tab do wielokrotności ośmiu (chyba że użyto #). W przypadku braku tego stylu znak o kodzie ASCII 9 jest traktowany jako znak drukowalny.? nic nie będzie wyświetlone, ale funkcja zwróci wysokość (w jednostkach logicznych) tekstu, który pojawiłby się, gdyby nie było?. Można otrzymać również liczbę wierszy, np. w następujący sposób: W = round(notice(tekst, W?, obszar ) / fontsize(), 0) UWAGA 1: W przypadku próby użycia w trybie prostokątnym fontu o niezerowym nachyleniu linii wyświetlania lub znaków nic nie zostanie wyświetlone i funkcja zwróci 0. UWAGA 2: W trybie prostokątnym wszelkie style kreślone fontów są ignorowane, tj. tekst jest wyświetlany bez nich. Jednak dzięki stylowi & można podkreślać nie tylko cały, ale również wybrane partie tekstu. UWAGA 3: W trybie prostokątnym pozycja pióra nie jest używana i aktualizowana. zwraca liczbę aktualnie otwartych okien powiadomień graficznych. Może być wykorzystana podobnie jak funkcja numtip(). zmienia współrzędne logiczne środka okna graficznego na (x, y). Szerokość i wysokość (zarówno logiczna jak i fizyczna) okna pozostają niezmienione. Ponieważ domyślnymi wartościami parametrów są zera, wywołanie funkcji bez argumentów przywraca stan początkowy.

60 p2l(left,top,right,bottom) przekształca wyrażone w pikselach współrzędne prostokąta (przyjmujące domyślnie wartości skrajne) na współrzędne logiczne i zwraca tablicę czteroelementową. Parametr left też może być tablicą i wtedy następne argumenty są ignorowane. Funkcja umożliwia wykorzystywanie pikseli nawet w czasie pracy ze współrzędnymi logicznymi. Np. wywołanie Move(asize(P2L(0, 0), 2)) ustawi pióro w lewym górnym rogu okna niezależnie od stosowanych współrzędnych logicznych. paint(x,y,w,h,title,hide) wyświetla okno graficzne mające powierzchnię klienta (tj. bez ramek i paska tytułowego) o szerokości w i wysokości h. Lewy górny róg całego okna ma współrzędne ekranowe (x,y). Wszystkie argumenty są opcjonalne; domyślnymi wartościami x i y są zera, a w i h zostaną tak dobrane, aby były równe i przy bieżącej rozdzielczości ekranu okno było maksymalnie duże. Początkowym kolorem okna jest biel. Pierwsze cztery parametry należy zasadniczo podawać w pikselach. Jednak jeśli w lub h jest ujemne, to przyjmuje się, że szerokość (odpowiednio wysokość) okna ma być równa w (odpowiednio h) w milimetrach. To umożliwia pracę z fizycznymi jednostkami metrycznymi. Piąty argument określa tytuł okna (domyślny podany na Rys. 1). Powinien to być zwykle łańcuch tekstowy o długości co najwyżej 127 znaków i niezawierajacy wtrąconych zer. Jednak można również podać \0+1 (lub stałą _NONAME z pliku defs\lux.mtm), co spowoduje, że okno nie będzie miało paska tytułowego ani ramki (a więc cały jego obszar będzie powierzchnią klienta). Ponadto w tym przypadku przy pominiętych x, y, w, h (lub x, y ustawionych na zera i w, h na wartości rozdzielczości ekranu powiększone o 1; zob. omówienie w Rozdziale 3.) okno będzie zajmować cały ekran łącznie z paskiem zadań. Ten sposób pracy jest oczywiście najlepszy w czasie prezentacji. W razie ustawienia argumentu hide na liczbę różną od zera okno będzie początkowo widoczne tylko na pasku zadań (przy hide > 0) lub w ogóle niewidoczne (przy hide < 0). W każdej chwili można je później wyświetlić przy pomocy wywołania expose() czy też hide(0) lub nawet nie wyświetlać w ogóle (bo np. chodziło tylko o utworzenie rysunku i zapisanie go na dysku). UWAGA 1: Okno z ramką musi mieć szerokość większą od ok. 100 pikseli i dlatego zostanie ewentualnie powiększone. Jeśli potrzebujesz małego okna o dokładnie określonych wymiarach, stosuj opcję _NONAME. UWAGA 2: Jeśli wszystko pójdzie dobrze, to po wykonaniu funkcji będą zachodziły równości {x, y} = asize( winrect(), 2) {w 1, h 1} = maxpixel() UWAGA 3: Funkcja ustawia współrzędne logiczne okna na domyślne (-10, 10, 10, -10) lub równe współrzędnym fizycznym, jeśli przełącznik real jest aktywny.

61 part() zwraca tablicę czterech współrzędnych logicznych aktualnie widocznej części przetwarzanej mapy bitowej. Zatem w trybie normalnym wynik jest identyczny ze zwracanym przez limits(). Natomiast wywołanie setsel(part()) działa dokładnie tak jak klawisz ^A. paste(left,top,right,bottom,mode) kopiuje schowek Windows (o ile zawiera on grafikę zapisaną w formacie CF_BITMAP systemu Windows) do prostokąta o podanych współrzędnych logicznych (domyślnie przyjmujących wartości skrajne). Parametr left może być także czteroelementową tablicą i wtedy ewentualny argument mode powinien wystąpić na drugim miejscu. Ma to być ciąg znakowy spełniający warunki określone dla parametru o tej samej nazwie funkcji bitmap lub copy (z tym, że znak = jest tutaj nieistotny, ponieważ kopiowanie odbywa się zawsze bez rozciągania lub ściskania). Operacje logiczne wykonywane na zawartości schowka i obszaru umożliwiają szybkie uzyskanie różnych niezwykłych efektów. pen(style,red,green,blue) definiuje nowe pióro (Rys. 47), które będzie odtąd używane przy kreśleniu linii (tylko w aktualnym oknie graficznym). Parametr style może określać grubość linii w pikselach (jeśli jest liczbą całkowitą) lub wygląd linii (jeśli jest ciągiem znaków). W tym drugim przypadku istotne są tylko znaki myślnika, podkreślenia i kropki, ponieważ linia może składać się z kresek (przynajmniej jeden minus), kropek (przynajmniej jedna kropka), kresek i kropek (minusy i dokładnie jedna kropka) lub kresek sąsiadujących z dwoma kropkami z obu stron (minusy i przynajmniej dwie kropki). Ponadto zamiast minusa można stosować znak podkreślenia. Jeśli linia jest przerywana, to jej grubość jest zawsze równa 1. W przypadku, gdy style jest tekstem nie zawierającym ani kropki ani myślnika, pióro będzie niewidoczne. Można to wykorzystać przy rysowaniu zamkniętych figur bez obwodu. Numeryczna wartość style nie musi być dodatnia. Zero jest traktowane jak jeden, podczas gdy liczba ujemna jest zastępowana przez jej negację arytmetyczną z tym, że w funkcjach rect i ring rysowana krzywa będzie (niezależnie od grubości linii) zawierać się całkowicie wewnątrz prostokąta. Ostatnie trzy parametry definiują oczywiście nasycenia koloru pióra. Ponieważ wartości domyślne wszystkich argumentów są równe 0, wywołanie pen() przywraca pióro początkowe (ciągłe, czarne, o grubości 1).

62 Rys. 47. Przykładowe definicje pióra UWAGA: Jeśli style jest tablicą, to funkcja przyjmuje, że faktyczne parametry są składowane właśnie w tej tablicy. Dzięki temu możesz mieć nazwane pióra łatwe do uruchomienia. Np. po przypisaniu grube = {4, 0, 255} wywołania pen(grube) pen(4, 0, 255) są równoważne. picture(yes) wprowadza tryb obrazkowy (z łagodnymi przejściami między barwami) procedury zmiany rozmiarów map bitowych, jeśli yes jest niepuste i przechodzi do trybu naukowego (z ostro zarysowanymi kolorami) w przeciwnym przypadku. Domyślną wartością yes jest 1. Powyższe tryby pracy mają znaczenie także wtedy, gdy nie zmieniasz rozmiaru fragmentu lub całości przetwarzanej bitmapy, ale jej rozmiary różnią się od rozmiarów okna lub korzystasz z trybu powiększonego. MATMA LUX startuje w trybie obrazkowym, który na ogół daje lepszą jakość wyświetlania map bitowych, ale w pewnych przypadkach rysunek może być zamglony. Zastosuj wtedy wywołanie Picture(0) lub użyj klawisza ^P przełączającego te tryby.

63 pixel(x,y,col) zmienia kolor jednego lub większej liczby pikseli. W pierwszym przypadku x i y powinny być współrzędnymi logicznymi, a col żądanym kolorem w postaci łańcucha co najwyżej trzech bajtów określających nasycenia RGB (domyślnie 0). Jeśli col jest pominięte, zostanie użyty kolor aktualnie zdefiniowanego pióra. Aby zmienić kolor wielu pikseli, podaj x w postaci tablicy zawierających ich dane (pozostałe parametry będą wtedy zignorowane). Tablica może być jednowymiarowa, ale w celu zwiększenia czytelności można też wykorzystać dwa wymiary. Np. oba poniższe wywołania są równoważne: Pixel( { 1,0,\ , 2,3, 1,5,\255 } ) Piksel = array(3) Piksel [1] = { 1, 0, \ } Piksel [2] = { 2, 3 } Piksel [3] = { 1, 5, \255 } Pixel(piksel) Łączna ilość pikseli ustawianych jednorazowo tą funkcją nie może być większa od 1365 (jeśli każdy kolor jest podany) lub 2048 (jeśli każdy kolor jest pominięty). W poniższych przykładach zmieniany jest piksel, na którym aktualnie znajduje się kursor myszy: Pixel(getpos()) // pisze piksel aktualnym piórem Pixel(getpos()::chr(255)) // pisze piksel kolorem czerwonym real(mode) w otwartym oknie graficznym, przy mode niepustym lub pominiętym, zrównuje współrzędne logiczne aktualnie przetwarzanej bitmapy z fizycznymi (pikselami) i zapewnia, że to samo działanie będzie wykonywane automatycznie po każdej funkcji paint, change i new. Przełącznik realizujący ten drugi efekt zostanie ustawiony także przy zamkniętym oknie graficznym i stąd użytkownicy zamierzający pracować tylko z jednostkami fizycznymi mogą umieścić wywołanie tej funkcji w pliku konfiguracyjnym. W przypadku mode pustego (ale różnego od nil) gaszony jest powyższy przełącznik i współrzędne nie są zmieniane. Zatem jeśli chcesz wprowadzić współrzędne fizyczne tylko chwilowo, możesz napisać Real(); real(0) Natomiast jeśli musisz przywrócić współrzędne fizyczne bez zmiany nieznanego ci stanu przełącznika, wywołaj funkcję limits. recall(left,top,right,bottom) działa tak jak memo i rest jednocześnie tzn. zamienia zawartości wskazanego obszaru (domyślnie całe okno) w przetwarzanej bitmapie i memo. Następująca sekwencja umożliwia wykonanie dowolnych zmian w mapie memo: recall()... // dowolne operacje takie jak dla głównej bitmapy recall() UWAGA: Niezależnie od wielkości obszaru ta funkcja nie wykonuje alokacji żadnego roboczego bloku pamięci. rect(left,top,right,bottom,width,height) rysuje aktualnym piórem (bez zmiany jego pozycji) prostokąt określony przez cztery współrzędne logiczne (domyślnie przyjmujące wartości skrajne) podane albo w czterech

64 pierwszych argumentach albo w tablicy left (w tym przypadku width i height powinny znajdować się na drugiej i trzeciej pozycji). Ponadto wnętrze prostokąta jest zamalowywane aktualnym pędzlem. Wystąpienie choć jednego z parametrów width i height powoduje próbę zaokrąglenia rogów prostokąta. Te argumenty powinny być liczbami definiującymi szerokość i wysokość elipsy użytej do zaokrąglenia. Jeśli nie wiesz jaką szerokość i wysokość elipsy wybrać, podaj zero, a program dostarczy zaokrąglenie domyślne. Możesz również zastosować stałą _OVAL z pliku defs\lux.mtm w celu otrzymania wypukłych poziomych lub pionowych boków prostokąta (Rys. 48). Zaokrąglona figura będzie zawsze mieścić się w rozmiarach podanych w parametrach (jeśli tylko parametr style funkcji pen był znakowy lub niewiększy od 1). W szczególności, jeśli width i height będą równe lub większe od wymiarów obszaru, zostanie narysowana elipsa wpisana w prostokąt (tj. efekt będzie taki sam jak po użyciu ring z identycznymi pierwszymi czterema argumentami). Rys. 48. Przykładowe zastosowania funkcji rect reflect(rect,axis,after ) wykonuje odbicie zwierciadlane prostokąta rect (tablica czterech współrzędnych logicznych) względem osi axis czyli prostej przechodzącej przez dwa punkty (Rys. 49). Stąd axis jest także tablicą

65 czterech współrzędnych logicznych, z których dwie pierwsze są współrzędnymi pierwszego punktu, a dwie ostatnie drugiego. Ściśle mówiąc, każdy piksel prostokąta rect zostanie skopiowany na drugą stronę prostej axis do punktu równoodległego od osi w taki sposób, że odcinek łączący źródłowe i docelowe miejsce będzie prostopadły do axis. Domyślnie elementy axis przyjmują następujące wartości: right left Axis 1 Axis 3 left 2 Axis 2 top bottom top Axis 4 top 2 gdzie left, top, right, bottom rect Oznacza to, że w przypadku pominięcia axis odbicie będzie wykonywane względem pionowej prostej przechodzącej przez środek prostokąta. Ponieważ domyślnymi elementami rect są wartości skrajne, reflect bez parametrów wykona odbicie całego okna względem pionowej prostej przechodzącej jego środek czyli jest to odpowiednik odwrócenia slajdu lub negatywu. Skoro drugi domyślny punkt axis jest środkiem prostokąta, w celu wykonania odbicia względem przechodzącej przezeń poziomej prostej, wystarczy jako pierwszy punkt axis podać środek lewego boku prostokąta, tj. położyć bottom top Axis left, top 2 Zauważmy, że chociaż tutaj rysunek zostanie odwrócony do góry nogami, ta operacja nie jest na ogół równoważna z rotacją o 180º. Najczęściej wykonywane jest odbicie względem osi pionowej lub poziomej i wtedy określenie axis jest bardzo łatwe. W przypadku, gdy dwa punkty axis są identyczne, przyjmuje się, że osią jest pozioma prosta przechodząca przez ten punkt. Stąd {, y,, y} określa taką prostą o współrzędnej w pionie y. Natomiast określenie pionowej osi o współrzędnej x jest nawet prostsze, ponieważ wtedy wystarczy podać {x,, x}. Jeśli odbicie wykonywane jest względem pionowej lub poziomej prostej przechodzącej przez środek prostokąta, to każdy jego piksel jest zamazywany przez swój odpowiednik z drugiej strony osi. Jednak w ogólnym przypadku tak być nie musi i dlatego można podać parametr after określający, co należy zrobić z pikselami odbitymi lecz niezapisanymi przez inne. Jeśli chcesz, aby zostały one zabarwione pewnym kolorem, ustaw after na tablicę zawierającą jego nasycenia. Powinna ona składać się z co najwyżej trzech elementów domyślnie równych 255, a więc dla koloru białego wystarczy podać { }. After może być również ciągiem znakowym o następującym znaczeniu (tylko pierwsza litera jest istotna i może mieć dowolną wielkość): Black zamalowuje piksele kolorem czarnym, Pat wypełnia aktualnym pędzlem,

66 Invert wykonuje inwersję, XOR wykonuje operację różnicy symetrycznej z aktualnym pędzlem, White zamalowuje piksele kolorem białym. Rys. 49. Odbicia zwierciadlane prostokąta zawierającego łamaną: Draw( { 8, 5, 4, 3, 2, 8} ) Odbicie względem osi y: reflect( { 8, 3, 2, 8}, {0,, 0} ) Odbicie względem prostej NE SW: reflect( { 8, 3, 2, 8}, {3, 3, 2, 2} ) Odbicie względem osi x: reflect( { 8, 3, 2, 8}, {, 0,, 0}, Invert ) repaint(x,y,w,h) zmienia położenie i/lub rozmiar okna graficznego na podane w parametrach (można to zrobić także przy pomocy myszy). Argumenty pominięte otrzymują takie wartości jakie miały w funkcji paint. Ta możliwość powinna być wykorzystywana tylko sporadycznie w celu chwilowego dostosowania własności optycznych obrazka, ponieważ rozmiar przetwarzanej mapy bitowej pozostanie i tak ten sam (można go zmienić przy pomocy funkcji change). Natomiast jeśli na dłużej potrzebujesz okna o innych rozmiarach, zmodyfikuj raczej wywołanie funkcji paint.

67 UWAGA: Jeśli rozmiar okna został zmieniony, a ponadto obraz jest powiększony, to operacja przeciągania bloków może nie działać prawidłowo. resel() wyświetla ponownie zaznaczenie (to samo robi klawisz ^R w oknie graficznym). Uwzględniane są współrzędne logiczne poprzednio zaznaczonego bloku. To może być wykorzystane np. przy zaznaczeniu bloku w trybie powiększonym i przeciąganiu go w trybie normalnym. rest(left,top,right,bottom,mode) kopiuje prostokąt o podanych współrzędnych logicznych (domyślnie przyjmujących wartości skrajne) z mapy memo do aktualnie przetwarzanej mapy bitowej na obszar o tych samych współrzędnych. Jeśli funkcja memo ani recall nie była do tej pory użyta, obszar jest zamalowywany czarnym pędzlem. Parametr left może być także czteroelementową tablicą i wtedy ewentualny argument mode powinien wystąpić na drugim miejscu. Ma to być ciąg znakowy spełniający warunki określone dla parametru o tej samej nazwie funkcji bitmap (z tym, że znak = jest tutaj nieistotny). Operacje logiczne wykonywane na obu bitmapach umożliwiają szybkie uzyskanie różnych niezwykłych efektów (Rys. 50). Rys. 50. Nowy rodzaj pędzla kratka dwukolorowa : Brush(, 255); area( Pat ); memo(); brush(, 0, 255); area( Pat ); rest({ }, S&T ) lub Brush(' ', 255); area('pat'); memo(); brush(' ', 0, 255); area('pat'); memo({ },"S&T"); recall()

68 review() przełącza do poprzedniego widoku (tj. działa dokładnie tak jak klawisz Tab) ring(rect,arc,mode,bottom) wyświetla elipsę lub jej łuk (Rys. 51). Jeśli parametr rect jest tablicą, to przyjmuje się, że zawiera on cztery współrzędne logiczne prostokąta opisującego elipsę. Rect może być również liczbą i wtedy pozostałe trzy parametry powinny też być liczbami definiującymi ten prostokąt (argument bottom jest używany tylko w tym wariancie). Jeśli występuje parametr arc, to powinien być on tablicą (jednolub dla wygody dwuwymiarową) czterech liczb będących współrzędnymi logicznymi dwóch punktów określających rysowany wycinek elipsy. Mianowicie, łuk zaczyna się tam, gdzie z elipsą przecina się półprosta rozpoczynająca się od środka prostokąta opisującego i przechodząca przez punkt { arc[1], arc[2] } Koniec łuku wyznaczony jest analogicznie, ale przy użyciu punktu { arc[3], arc[4] } i łuk rysowany jest zawsze w kierunku przeciwnym do ruchu wskazówek zegara (w razie potrzeby zmień kolejność elementów arc). W przypadku, gdy oba powyższe punkty (lub tylko te dwie półproste) są identyczne, rysowana jest cała elipsa (czyli jest tak samo jak w razie braku arc). Argument mode jest brany pod uwagę tylko wtedy, gdy podano arc. Powinien on być łańcuchem znaków (tylko pierwszy jest istotny i może on mieć dowolną wielkość) o następującym znaczeniu: Chord dodatkowo rysowana jest cięciwa łuku, Pie dodatkowo rysowane są dwa promienie ze środka prostokąta opisującego do końców łuku, Front przed namalowaniem łuku rysowana jest linia od bieżącej pozycji pióra do początku łuku, a tuż przed zakończeniem wykonywania funkcji pióro jest ustawiane na koniec łuku, Back przed namalowaniem łuku rysowana jest linia od bieżącej pozycji pióra do końca łuku, a tuż przed zakończeniem wykonywania funkcji pióro jest ustawiane na początek łuku (może to być interpretowane jako rysowanie łuku do tyłu). Pozycja pióra jest aktualizowana przez funkcję ring tylko w dwóch ostatnich przypadkach (Rys. 52). Do kreślenia wykorzystywane jest bieżące pióro, a w razie otrzymania figury zamkniętej (tzn. bez arc bądź z Chord lub Pie ) jej wnętrze jest zamalowywane aktualnym pędzlem.

69 Rys. 51. Kilka elips i łuków: pen("."); rect( 9, 7, 2, 3); pen(2); ring( 9, 7, 2, 3) pen("."); draw(0, 0, 2, 9); pen(2, 255); ring( { 8, 8, 8, 8}, {1, 0, 2, 9} ) pen("."); draw( 5, 7, 0, 0); pen(4, 0, 255); brush(, 255) ring( { 8, 8, 8, 8}, { 9, 0, 5, 7}, "Chord") pen("."); draw( {6, 8, 0, 0, 9, 2} ); pen(4, 0, 0, 255) ring( { 8, 8, 8, 8}, {6, 8, 9, 2}, "Pie") Rys. 52. Różnice między stylami Front i Back funkcji ring: pen(2, 0, 255); ring( { 8, 8, 8, 8}, {1, 0, 0, 1}, "Front"); line(9, 9) move( 10, 10) pen(2, 255); ring( { 8, 8, 8, 8}, { 1, 0, 0, 1}, "Back"); line( 9, 9)

70 rotate(angle,rect,col,center) obraca prostokąt rect (tablica współrzędnych logicznych przyjmujących domyślnie wartości skrajne) o kąt angle, przy czym kąty ujemne odpowiadają obrotowi zgodnemu z kierunkiem ruchu zegara (Rys. 53). Parametr col określa, co należy zrobić z pikselami pozostającymi po obrocie i niezapisanymi przez inne piksele. Domyślnie są one zamalowywane na biało, ale col może być tablicą nasyceń (domyślnie zerowych) innego koloru. Ponadto col może być wartością boolowską;. 0. powoduje, że takie piksele pozostają niezmienione, zaś.1. że są zamalowywane aktualnym pędzlem. Normalnie obrót jest wykonywany wokół środka prostokąta (Rys. 54). Jednak w razie potrzeby można określić inne centrum rotacji przy pomocy argumentu center (tablica dwóch współrzędnych logicznych). Punkt ten może leżeć nawet poza prostokątem (Rys. 53). Rys. 53. Użycie wszystkich argumentów: rotate( 45, { 3, 3, 3, 3}, {255}, {6, 0})

71 Rys. 54. Rotacja elipsy: brush(,, 255); ring(t = { 9, 6, 9, 6}); rotate(60, t) s2l(left,top,right,bottom) działa odwrotnie do funkcji L2s, czyli zamienia współrzędne ekranowe, tzn. takie, w których lewy górny róg ekranu ma współrzędne {0, 0}, na logiczne. Pominięte parametry otrzymują wartości skrajne z uwzględnieniem aktualnej rozdzielczości całego ekranu. Funkcja umożliwia wykonywanie operacji przy użyciu współrzędnych ekranowych. UWAGA: W odróżnieniu od funkcji p2l, s2l uwzględnia bieżący tryb pracy i aktualne wymiary okna. saturate(mult,rect) mnoży nasycenia każdego piksela obszaru rect (tablica współrzędnych logicznych przyjmujących domyślnie wartości skrajne) przez liczby podane w parametrze mult, a następnie mnoży otrzymane wyniki przez współczynnik taki, aby jasność piksela (suma jego składowych) pozostała możliwie bliska wartości pierwotnej. Zwraca nową jasność obszaru (wg definicji podanej w opisie funkcji light). Inaczej mówiąc, funkcja wykonuje saturację koloru określonego przez mult, tj. to jest zmienia jego udział w pikselach bez znaczącej zmiany jasności obszaru (co jest główną różnicą między tą funkcją a light). Można saturować dowolny kolor z wyjątkiem odcieni szarości. Parametr mult powinien być liczbą nieujemną (być może ułamkową, domyślnie równą 1) lub tablicą takich liczb. W pierwszym przypadku liczba, dajmy na to, x zostaje zastąpiona przez {x, 1, 1}. Elementy tablicy równe nil (lub nieistniejące) są zawsze zamieniane na 1. Wynika stąd, że jeśli mult jest równy x lub {x}, gdzie x jest liczbą, to saturowany będzie kolor czerwony. Przy x > 1 jego nasycenie będzie zwiększane, a w przeciwnym przypadku zmniejszane.

72 save(file,x1,y1,x2,y2) zapisuje na dysku w pliku file prostokąt o podanych współrzędnych logicznych (domyślnie przyjmujących wartości skrajne). Parametr x1 może być także tablicą i wtedy dalsze argumenty są ignorowane. sepia(rect) jest równoważna z wywołaniem mono({1.62, 1.28, 1.01}, rect) UWAGA: W przypadku niektórych rysunków o niskim kontraście bezpośrednie użycie sepia może dać kiepski efekt. W takiej sytuacji należy przedtem zastosować contrast. setlight(val,rect) zmienia jasność prostokąta rect (tablica współrzędnych logicznych przyjmujących domyślnie wartości skrajne) do wartości równej val (domyślnie 382). Funkcja jest równoważna (z wyjątkiem działania opisanego w uwadze 2) z wywołaniem light( val/light(, rect), rect) Optymalna wartość val może zależeć od używanego sprzętu. UWAGA 1: Ostateczna wartość jasności obszaru może się nieco różnić od val. UWAGA 2: Ta funkcja zawsze zmienia nasycenia zerowe na 1 umożliwiając w pełni efektywną pracę funkcji contrast, light, i saturate. Bez zmiany jasności obszaru można to uzyskać przy pomocy wywołania setlight( light(, rect), rect) setpos(x,y) ustawia kursor myszy w położeniu określonym współrzędnymi logicznymi x i y lub dwuelementową tablicą x. Funkcja nie działa jeśli okno tekstowe pracuje w trybie pełnoekranowym. setrgb(&=line,nr,value,condition)) traktuje line jako linię rastrową otrzymaną np. przy pomocy funkcji image i ustawia wartość piksela o numerze nr (liczone od zera) na value. Ta operacja nie będzie zrealizowana, jeśli condition zostało podane i jest równe.0. (ten parametr musi być wartością boolowską). Jeśli value jest trzybajtowym ciągiem nasyceń, to będzie zmieniony dokładnie piksel o numerze nr, ale value może mieć długość różną od 3. Przykładowo, przy długości 1 będzie zmieniona tylko składowa koloru czerwonego, zaś przy długości 6 będą zmienione piksele o numerach nr i nr + 1. (Dostatecznie długie value może nawet zmienić długość line.) W przypadku pominięcia nr zostanie zapisany koniec line. Funkcja zwraca nową (lub niezmienioną) wartość line. Funkcja ułatwia przetwarzanie wewnętrznych map bitowych. Np. Setrgb(&=line, nr, chr(0)+0+0, getrgb(line,nr) $ piksele) zmienia kolor piksela o numerze nr na czarny, jeśli jego dotychczasowy kolor należy do łańcucha piksele. UWAGA 1: W przypadku gdy setrgb występuje wewnątrz pętli, można przyśpieszyć pracę wykonując operator kompilacji &= jednorazowo poza pętlą. Przykładowo, jeśli w pętli line jest zawsze równe tab[k], to można napisać m = &=tab[k] // przed pętlą... setrgb(m, nr, nowe, warunek) // w pętli UWAGA 2: Jeśli line nie jest elementem tablicy, to zamiast &= można (operator referencji jest nieco szybszy). Natomiast w

73 przypadku, gdy nie ma ani &= zmiana w line nie zostanie wykonana. setsel(x1,y1,x2,y2) zaznacza prostokąt o podanych współrzędnych logicznych (domyślnie przyjmujących wartości skrajne). Parametr x1 może być także czteroelementową tablicą i wtedy pozostałe argumenty są ignorowane. Funkcja może być użyta np. do powiększenia fragmentu rysunku przy pomocy funkcji alter. UWAGA: W trybie powiększonym nie można zaznaczyć powierzchni niewidocznej na ekranie. stop() kończy realizację trybu pracy zainicjowanego wywołaniem funkcji use. swap(arr1,arr2) zamienia zawartości prostokątnych obszarów określonych przez czteroelementowe tablice arr1 i arr2. Domyślną wartością tych parametrów jest blok zaznaczony lub ostatnio zaznaczony. Obszary mogą mieć różne rozmiary, ale nie powinny się nakładać, ponieważ rezultat jest wtedy niezdefiniowany. title(text) zmienia tytuł okna graficznego (o ile było ono tworzone bez opcji _NONAME) na text (co najwyżej 127 znaków). W przypadku pominięcia text zostanie użyty tytuł standardowy (Rys. 1 i 2). undo() anuluje ostatnią operację zmieniającą powierzchnię klienta okna graficznego (w tym także wywołanie funkcji undo) oraz położenie pióra. W razie potrzeby anulowania większej liczby operacji stosuj funkcje memo i rest, cut (^C lub ^X) i paste (^V) bądź też save (^S) i bitmap (^B) lub new (^N). undoblock() wykonuje to samo co klawisz ^U tj. anuluje ostatnią operację, ale tylko w odniesieniu do zaznaczonego (lub ostatnio zaznaczonego) bloku (Rys. 10). Pozycja pióra nie ulega zmianie, a zaznaczenie bloku zostaje zlikwidowane. undocolor(memo) anuluje ostatnią operację, ale tylko w odniesieniu do pikseli, które w bitmapie memo mają kolor memo (lub kolory, gdyż ten parametr powinien spełniać wymagania określone dla analogicznego argumentu funkcji color). Undocolor umożliwia nałożenie dodatkowych warunków na wiele innych funkcji. Przykładowo, sekwencja Recall() Area( B ) Ring( 5,5, 5, 5) Recall() Bitmap() Undocolor ( { } ) spowoduje wczytanie mapy bitowej z dysku tylko na obszar ograniczony przez okrąg (zob. Rys. 55).

74 Rys. 55. Wczytanie mapy bitowej na obszar ograniczony przez okrąg przy użyciu funkcji undocolor units(width,height) ustawia logiczną szerokość i wysokość okna graficznego. Logiczne współrzędne środka okna pozostają niezmienione. Parametry tej funkcji mogą być ujemne, co oznacza, że współrzędne będą rosnąć w kierunku przeciwnym do przyjętego w matematyce tj. przy ruchu z prawej strony do lewej lub z góry w dół (przy wartościach dodatnich jest odwrotnie). Wartością domyślną width jest 20, zaś height wartość width. W rezultacie wywołanie funkcji bez parametrów przywraca stan początkowy tj. (20, 20). Aby zmienić jednostki układu współrzędnych przy zachowaniu konwencji stosowanej w matematyce wystarczy podać jeden parametr, np. units(200). Wtedy współrzędne na osi x będą zmieniać się od 100 (z lewej strony) do 100, podczas gdy na osi y od 100 (u góry) do 100. Wywołując w odpowiedni sposób funkcję paint można spowodować, że jednostki logiczne będą równe fizycznym jednostkom metrycznym ekranu. Mianowicie, należy zastosować Paint(x, y, width dl, height dl), gdzie dl jest liczbą milimetrów w pożądanej jednostce. Np. po użyciu Paint(0, 0, width 10, height 10) (czyli paint(0, 0, 200, 200) przy ustawieniu początkowym) współrzędne będą wyrażone w centymetrach, zaś po Paint(0, 0, width 25.4, height 25.4) w calach. Oczywiście po paint należy wywołać units(width, height). unlock() odblokowuje okno zablokowane funkcją lock. unsel() likwiduje zaznaczenie, a także przerywa proces zaznaczania (to samo robi klawisz Esc w oknie graficznym). use(&left,&right,&mid,&move,&left2,&right2,&mid2,&space,&key) uaktywnia tryb pracy, w którym zdarzenia myszy i klawiatury w oknie graficznym (w razie jego braku use nie daje żadnego efektu) powodują wywołanie funkcji podanych w parametrach, a konkretnie: Naciśnięty lewy przycisk myszy wywołuje funkcję left. prawy right.

75 środkowy mid. Ruch kursora myszy powoduje wywołanie funkcji move. Podwójnie kliknięty lewy przycisk wywołuje funkcję left2. prawy right2. środkowy mid2. Naciśnięty klawisz spacji space. Naciśnięty dowolny klawisz key. Do wywołania oczywiście nie dojdzie, jeśli odpowiedni parametr był pominięty (ale left i right2 mają pewne przypisania domyślne, zob. dalej). Wywoływane funkcje związane z myszą będą otrzymywać trzy parametry: Współrzędna logiczna x aktualnej pozycji kursora myszy. Współrzędna logiczna y aktualnej pozycji kursora myszy. Dodatkowe informacje w postaci 8-znakowego tekstu, którego bajty mają zazwyczaj wartość binarną zero, ale: 4-y znak jest równy S, jeśli klawisz Shift jest naciśnięty, 5-y znak jest równy C, jeśli klawisz Ctrl jest naciśnięty, 6-y znak jest równy A, jeśli klawisz Alt jest naciśnięty, 7-y znak jest równy L, jeśli klawisz WinLogo jest naciśnięty, 8-y znak jest równy P, jeśli kursor myszy znajduje się poza powierzchnią klienta okna graficznego. Sygnalizowane są także jednoczesne naciśnięcia kilku klawiszy z wyjątkiem prawego Ctrl naciśniętego razem z Alt. Wszystkie argumenty funkcji use są opcjonalne; w przypadku braku left zostanie do niego przypisany &pixel. Dzięki temu naciśnięcie lewego przycisku będzie powodować namalowanie piksela o kolorze czarnym w miejscu kliknięcia. (Aby rysować kolorem aktualnego pióra zastosuj np. funkcję fun z Rys. 56). Tryb pracy zainicjowany przez use może być zakończony tylko przez wywołanie funkcji stop lub zamknięcie okna graficznego. Jeśli nie podano right2, to zostanie doń przypisany właśnie &stop, a więc możesz kończyć tę działalność klikając podwójnie prawym przyciskiem myszy. W przeciwnym przypadku powinieneś zapewnić możliwość wywołania stop w inny sposób, np. przytrzymując jeden z powyższych klawiszy sterujących. W czasie pracy use nie można w zasadzie wykonywać interaktywnie innych operacji w oknie tekstowym. Możesz oczywiście wychodzić chwilowo z tego trybu lub np. zdefiniować fu(x, y, z) if( C $ z, input(get(? )), pixel(x, y, kolor)) Teraz wywołanie Use(&fu) spowoduje, że kliknięcie lewym przyciskiem będzie normalnie rysowało piksel kolorem kolor w miejscu kliknięcia, ale wykonane razem z wciśniętym Ctrl umożliwi ci obliczenie dowolnego wyrażenia MATMY, w tym także zmianę zmiennej kolor poprzez napisanie po znaku? np. kolor = \ w celu malowania pikseli o kolorze czerwonym. (Oczywiście, gdyby tylko operacja tego typu była potrzebna, to kolor = można by włączyć

76 do określenia fu. Zauważmy też, że warunek w definicji fu można by równoważnie zapisać w postaci z && 5!= 0.) Jeśli w czasie pracy use zostanie rozpoczęta operacja zaznaczania, to funkcja podana w left będzie wywołana normalnie. Ponadto po zakończeniu zaznaczania (o ile tylko żaden klawisz sterujący nie będzie wciśnięty) zostanie wywołana funkcja z parametru mid. Możesz to wykorzystać do budowy własnych konstrukcji wykorzystujących prostokąt roboczy. Ich własności możesz też uzależnić od naciśniętych klawiszy sterujących, z tym że w odróżnieniu od standardu (omówionego w Roz. 4.) powinny być one użyte na początku zaznaczania. W przypadku podwójnego kliknięcia najpierw będzie wywołana funkcja przewidziana dla kliknięcia pojedynczego, a dopiero po niej odpowiednia funkcja określona przez parametr zakończony cyfrą 2. Zatem ta druga powinna rozwijać działanie pierwszej lub wykonać undo(). Ciekawe zastosowania związane są z parametrem move. Przypisując doń funkcję pixel lub pokrewną będziesz w stanie rysować myszą krzywe, których nie można opisać żadnym wzorem (Rys. 56). Przy pracy w trybie powiększonym łatwo jest uzyskać linię ciągłą, natomiast w trybie normalnym może być konieczne uzupełnienie jej operacjami punktowymi. Funkcja podana w move jest też w stanie podczas prezentacji zmieniać slajdy (czyli bitmapy wyświetlane w oknie graficznym), demonstrować bardziej szczegółowe opisy i obrazki (np. przy pomocy funkcji tip i luxtip) lub odtwarzać pliki multimedialne (przy użyciu funkcji play) zależne od położenia kursora myszy. W tych przypadkach może być istotna sygnalizacja wyjścia kursora myszy poza powierzchnię klienta okna graficznego (litera P na ostatnim znaku trzeciego parametru). Może się ona pojawić tylko dla funkcji z move i nie będzie powtarzana aż do powrotu kursora i ponownego opuszczenia przezeń powierzchni klienta. Ostatnie dwa argumenty mogą być one wykorzystane do wykonywania działań niezwiązanych z pozycją kursora myszy. Funkcja podana w parametrze space powinna być przygotowana do przetwarzania krótkich poleceń tekstowych (do 16 znaków). Ściśle rzecz biorąc, znaki drukowalne (z wyjątkiem + i = zachowujących znaczenie standardowe) są zbierane w buforze o długości 16 bajtów aż do naciśnięcia klawisza spacji, kiedy to wywoływana jest space z parametrem zawierającym ostatnio wprowadzone znaki (w kolejności ich wprowadzania bez spacji). Oczywiście, po wywołaniu space bufor jest czyszczony (robi to także klawisz Esc). W celu przetestowania tej opcji można w parametrze space podać &text. Funkcję space możesz wykorzystać np. w najbardziej tradycyjnej metodzie zmiany slajdów. Można tu wstawić np. &newslide wraz z następującą nr nr = val(text) // numer następnego slajdu

77 if(nr == 0, nr = cur + 1) if(nr <= _MAX & nr!= cur, do() ) // _MAX maks. nr bitmap(slide[nr] ) // tablica SLIDE zawiera nazwy plików cur = nr // cur jest globalną zmienną aktualnego slajdu tip(,_nx, _ny); tip(str(nr), _nx, _ny,,,, T ) // Dzięki temu samotna spacja będzie powodować przejście do następnego slajdu, zaś k n Space do slajdu o numerze kn. Funkcja z parametru key będzie wywoływana z dwoma parametrami: Wirtualny kod klawisza. Numer klawisza. Ten drugi można otrzymać przy pomocy programu tools\kody.com, natomiast pierwszy najlepiej wstawiając &display do &key. Nie są tutaj przekazywane klawisze nawigacyjne i Home, End, PageUp oraz PageDown przy pracy w trybie powiększonym, a także klawisz Del w przypadku istnienia zaznaczonego bloku. Jako przykład zastosowania ostatniego parametru można podać następującą _BSP 14 // nr BackSpace, dla czytelności // Tablicę slajdów najlepiej jest zbudować bez numerów: slide = { } slide ::= slide_a.bmp slide ::= slide_b.bmp slide ::= backslide(virt, nr if(key == _BSP, nr = cur 1; if(nr > 0, do(), nr = bitmap(slide[nr] ) // nowy slajd tip(,_nx, _ny); tip(str(nr), _nx, _ny,,,, T ) // wyświetla nr cur = nr // cur jest globalną zmienną Klawisz BackSpace służy normalnie do unieważniania operacji, ale w czasie prezentacji na ogół nie wprowadza się zmian do obrazów. Po wstawieniu &backslide do &key ten klawisz będzie powodował przejście do poprzedniego slajdu. Zatem uruchomienie typowej prezentacji mogłoby wyglądać następująco: Bitmap(slide[1] ) // wyświetlenie 1-go cur = 1 // globalny nr _nx... // pozycja x numeru _ny... // pozycja y numeru slajdu tip( 1, _nx, _ny,,,, T ) // wyświetla nr 1-go slajdu Use(,,,,,&part,, &newslide, &backslide)

78 W parametrze &right2 wstawiamy &part, aby uniknąć przypadkowego zakończenia przyciskiem myszy (funkcja part praktycznie nic nie robi w tym kontekście). Prezentację zakończy zamknięcie okna graficznego klawiszem Alt-F4. Zamiast funkcji bitmap można by powyżej używać następującej function ReadSlide(n) unlock(); bitmap(slide[n]); lock() To zapewnia, że wczytany slajd nie zostanie przypadkowo zmodyfikowany. Ponadto slajdy można też oczywiście zmieniać przy pomocy funkcji new i wtedy można wykonać jedno lock() przed rozpoczęciem prezentacji. Zauważmy też, że dzięki użyciu funkcji tip do wyświetlania numerów slajdów można bez przeszkód zmieniać ich kolejność, dodawać nowe, itd. Dodajmy, że niezależnie od tego jakie funkcje zostaną podane w parametrach &space and &key, wszystkie standardowe klawisze zachowują swe znaczenie. Zatem np. prezenter może sam lub na życzenie publiczności zaznaczyć dowolny obszar i naciskając + wyświetlić go w powiększeniu. Można nawet wyobrazić sobie niestandardową prezentację polegającą na wyświetleniu całości (np. schematu organizacyjnego korporacji), a następnie powiększaniu wybranych fragmentów i ich omawianiu. Rys. 56. Rysunki wykonane myszą przy pomocy funkcji fun(x, y) pixel(x, y) use(,,, &fun) Pierwszy rysunek został naszkicowany w trybie normalnym i wymaga uzupełnienia operacjami punktowymi. Krzywa zamknięta została namalowana w trybie powiększonym: pen(, 255); zoom(3); use(,,, &fun) Możesz też zdefiniować fun np. fun(x, y, z) if(z == \0 8, pixel(x, y)) To pozwoli ci przesuwać kursor myszy (przy wciśniętym klawiszu sterującym) bez rysowania. view(x1,y1,x2,y2) inicjuje tryb powiększony wyświetlając na całej powierzchni klienta okna prostokąt o podanych współrzędnych logicznych (Rys. 57). Parametr x1 może również być tablicą zawierającą wszystkie cztery

79 współrzędne; pozostałe argumenty są wtedy ignorowane. W przypadku braku argumentów pobierane są współrzędne bloku zaznaczonego lub ostatnio zaznaczonego. Bezpośrednio po wywołaniu paint lub new w oknie widoczna jest cała przetwarzana mapa bitowa. Jeśli bardziej interesuje cię jakiś jej fragment, po prostu go zaznacz i wykonaj view() w oknie tekstowym lub naciśnij klawisz + w oknie graficznym. Tę operację możesz powtarzać tyle razy, ile zechcesz (możesz np. sprawdzić, czy wszystko się zgadza z dokładnością do jednego piksela). Powrót do trybu normalnego uzyskasz wywołując zoom() lub naciskając klawisz =. Tryb powiększony nie powoduje żadnych zmian rozmiaru przetwarzanej mapy bitowej. Co więcej, jeśli pobierasz jakieś informacje o aktualnym stanie (np. pozycja pióra lub myszy czy też współrzędne obszaru zaznaczonego), to otrzymujesz je wyrażone we współrzędnych logicznych odnoszących się do całego rysunku. Możesz więc w oparciu o nie dalej edytować całą mapę bitową. W trybie powiększonym w oknie zawsze pojawia się poziomy i/lub pionowy suwak. Zatem po wystartowaniu od jakiegoś obszaru można przeglądać cały obrazek na tym samym poziomie. Suwak można bezpośrednio przesuwać lewym klawiszem myszy lub po kliknięciu na nim prawym klawiszem przy pomocy wyświetlonego menu kontekstowego. Zamiast suwaków można też stosować: klawisze nawigacyjne w celu przesunięcia widoku o jeden piksel lub o jedną linię rastrową, Home w celu przejścia na początek mapy bitowej w poziomie, End w celu przejścia na koniec mapy bitowej w poziomie, PageUp w celu przejścia na początek mapy bitowej w pionie, PageDown w celu przejścia na koniec mapy bitowej w pionie. wait(asc,num,message) powoduje zablokowanie okna tekstowego i oczekiwanie na naciśnięcie określonego klawisza w oknie graficznym lub jego zamknięcie. Dwa pierwsze argumenty funkcji powinny być łańcuchami niezerowych różnych bajtów o wartościach nieprzekraczających 127. Domyślnie ciągi te są puste (chyba że pominięte są oba; zob. dalej), a definiują one oczekiwane klawisze w następujący sposób: Poszczególne bajty asc są interpretowane jako kody ASCII, przy czym kod klawisza rzeczywiście naciśniętego zostanie zwrócony. Natomiast bajty num są traktowane jak numery klawiszy; w przypadku wykorzystania klawisza o numerze n zwracane jest n (a jeśli okno zostało zamknięte, będzie zwrócone 0). Np. wywołanie wait( /, chr(75) ) spowoduje oczekiwanie na wprowadzenie znaków bądź / lub naciśnięcie klawisza nawigacyjnego czy też F1. W zależności od tego, który z nich został użyty, w oknie graficznym można wyświetlać inną treść. Numery klawiszy otrzymasz przy użyciu polecenia run( tools\kody ) lub run() Zauważmy, że oczekiwanie na dowolny klawisz inicjuje wywołanie Wait(, chr(1) chr(127)) ale można także wykorzystać prostsze Wait()

80 Przy pomocy opcjonalnego parametru message można wyświetlić w pasku tytułowym okna graficznego odpowiedni komunikat dla użytkownika. W przypadku pominięcia wszystkich argumentów w message jest przesyłana wiadomość standardowa (Rys. 57.). Rys. 57. Tryb powiększony; widok tylko z pionowym suwakiem: pen(2); axes(); view( 10, 6, 10, 6); wait() winrect() zwraca tablicę zawierającą współrzędne ekranowe całego okna graficznego w pikselach. Analogiczną tablicę tylko dla powierzchni klienta można uzyskać przy pomocy L2s( ). zoom(times) włącza tryb powiększony times razy w stosunku do normalnego. Np. zoom(1.25) daje powiększenie identyczne z otrzymywanym po naciśnięciu znaku + przy braku zaznaczenia, ale tutaj mapa bitowa wyświetlana jest zawsze od jej lewego górnego rogu (+ zachowuje aktualnie wyświetlany lewy górny róg). Domyślną i najmniejszą dopuszczalną wartością times jest 1 powodująca powrót do trybu normalnego (równoważnie z naciśnięciem znaku =).

narzędzie Linia. 2. W polu koloru kliknij kolor, którego chcesz użyć. 3. Aby coś narysować, przeciągnij wskaźnikiem w obszarze rysowania.

narzędzie Linia. 2. W polu koloru kliknij kolor, którego chcesz użyć. 3. Aby coś narysować, przeciągnij wskaźnikiem w obszarze rysowania. Elementy programu Paint Aby otworzyć program Paint, należy kliknąć przycisk Start i Paint., Wszystkie programy, Akcesoria Po uruchomieniu programu Paint jest wyświetlane okno, które jest w większej części

Bardziej szczegółowo

1. Opis okna podstawowego programu TPrezenter.

1. Opis okna podstawowego programu TPrezenter. OPIS PROGRAMU TPREZENTER. Program TPrezenter przeznaczony jest do pełnej graficznej prezentacji danych bieżących lub archiwalnych dla systemów serii AL154. Umożliwia wygodną i dokładną analizę na monitorze

Bardziej szczegółowo

Maskowanie i selekcja

Maskowanie i selekcja Maskowanie i selekcja Maska prostokątna Grafika bitmapowa - Corel PHOTO-PAINT Pozwala definiować prostokątne obszary edytowalne. Kiedy chcemy wykonać operacje nie na całym obrazku, lecz na jego części,

Bardziej szczegółowo

TWORZENIE OBIEKTÓW GRAFICZNYCH

TWORZENIE OBIEKTÓW GRAFICZNYCH R O Z D Z I A Ł 2 TWORZENIE OBIEKTÓW GRAFICZNYCH Rozdział ten poświęcony będzie dokładnemu wyjaśnieniu, w jaki sposób działają polecenia służące do rysowania różnych obiektów oraz jak z nich korzystać.

Bardziej szczegółowo

Projekt współfinansowany ze środków Unii Europejskiej w ramach Europejskiego Funduszu Społecznego

Projekt współfinansowany ze środków Unii Europejskiej w ramach Europejskiego Funduszu Społecznego Projekt graficzny z metamorfozą (ćwiczenie dla grup I i II modułowych) Otwórz nowy rysunek. Ustal rozmiar arkusza na A4. Z przybornika wybierz rysowanie elipsy (1). Narysuj okrąg i nadaj mu średnicę 100

Bardziej szczegółowo

Temat: Organizacja skoroszytów i arkuszy

Temat: Organizacja skoroszytów i arkuszy Temat: Organizacja skoroszytów i arkuszy Podstawowe informacje o skoroszycie Excel jest najczęściej wykorzystywany do tworzenia skoroszytów. Skoroszyt jest zbiorem informacji, które są przechowywane w

Bardziej szczegółowo

Wprowadzenie do rysowania w 3D. Praca w środowisku 3D

Wprowadzenie do rysowania w 3D. Praca w środowisku 3D Wprowadzenie do rysowania w 3D 13 Praca w środowisku 3D Pierwszym krokiem niezbędnym do rozpoczęcia pracy w środowisku 3D programu AutoCad 2010 jest wybór odpowiedniego obszaru roboczego. Można tego dokonać

Bardziej szczegółowo

Informatyka Arkusz kalkulacyjny Excel 2010 dla WINDOWS cz. 1

Informatyka Arkusz kalkulacyjny Excel 2010 dla WINDOWS cz. 1 Wyższa Szkoła Ekologii i Zarządzania Informatyka Arkusz kalkulacyjny 2010 dla WINDOWS cz. 1 Slajd 1 Slajd 2 Ogólne informacje Arkusz kalkulacyjny podstawowe narzędzie pracy menadżera Arkusz kalkulacyjny

Bardziej szczegółowo

Podstawy Informatyki Wykład V

Podstawy Informatyki Wykład V Nie wytaczaj armaty by zabić komara Podstawy Informatyki Wykład V Grafika rastrowa Paint Copyright by Arkadiusz Rzucidło 1 Wprowadzenie - grafika rastrowa Grafika komputerowa tworzenie i przetwarzanie

Bardziej szczegółowo

Informatyka Arkusz kalkulacyjny Excel 2010 dla WINDOWS cz. 1

Informatyka Arkusz kalkulacyjny Excel 2010 dla WINDOWS cz. 1 Wyższa Szkoła Ekologii i Zarządzania Informatyka Arkusz kalkulacyjny Excel 2010 dla WINDOWS cz. 1 Slajd 1 Excel Slajd 2 Ogólne informacje Arkusz kalkulacyjny podstawowe narzędzie pracy menadżera Arkusz

Bardziej szczegółowo

Cykl lekcji informatyki w klasie IV szkoły podstawowej. Wstęp

Cykl lekcji informatyki w klasie IV szkoły podstawowej. Wstęp Cykl lekcji informatyki w klasie IV szkoły podstawowej Wstęp Poniżej przedstawiam cykl początkowych lekcji informatyki poświęconym programowi Paint. Nie są to scenariusze lekcji, lecz coś w rodzaju kart

Bardziej szczegółowo

Klawisze funkcyjne w OpenOffice.org Writer

Klawisze funkcyjne w OpenOffice.org Writer Klawisze funkcyjne w OpenOffice.org Writer F2 Ctrl + F2 F3 Ctrl + F3 F4 Shift + F4 F5 Ctrl + Shift + F5 F7 Ctrl + F7 F8 Ctrl + F8 Shift + F8 Ctrl+Shift+F8 F9 Ctrl + F9 Shift + F9 Ctrl + Shift + F9 Ctrl

Bardziej szczegółowo

Narzędzia programu Paint

Narzędzia programu Paint Okno programu Paint Narzędzia programu Paint Na karcie Start znajduje się przybornik z narzędziami. Narzędzia te są bardzo przydatne w pracy z programem. Można nimi rysować i malować, kolorować i pisać,

Bardziej szczegółowo

Ćw. I Projektowanie opakowań transportowych cz. 1 Ćwiczenia z Corel DRAW

Ćw. I Projektowanie opakowań transportowych cz. 1 Ćwiczenia z Corel DRAW Ćw. I Projektowanie opakowań transportowych cz. 1 Ćwiczenia z Corel DRAW Celem ćwiczenia jest wstępne przygotowanie do wykonania projektu opakowania transportowego poprzez zapoznanie się z programem Corel

Bardziej szczegółowo

Informatyka Edytor tekstów Word 2010 dla WINDOWS cz.3

Informatyka Edytor tekstów Word 2010 dla WINDOWS cz.3 Wyższa Szkoła Ekologii i Zarządzania Informatyka Edytor tekstów Word 2010 dla WINDOWS cz.3 Slajd 1 Slajd 2 Numerowanie i punktowanie Automatyczne ponumerowanie lub wypunktowanie zaznaczonych akapitów w

Bardziej szczegółowo

Tworzenie prezentacji w MS PowerPoint

Tworzenie prezentacji w MS PowerPoint Tworzenie prezentacji w MS PowerPoint Program PowerPoint dostarczany jest w pakiecie Office i daje nam możliwość stworzenia prezentacji oraz uatrakcyjnienia materiału, który chcemy przedstawić. Prezentacje

Bardziej szczegółowo

1. OPEN OFFICE RYSUNKI

1. OPEN OFFICE RYSUNKI 1. 1 1. OPEN OFFICE RYSUNKI 1.1 Wiadomości podstawowe Po uruchomieniu programu Draw okno aplikacji wygląda jak na poniższym rysunku. Składa się ono z głównego okna, w którym edytuje się rysunek oraz czterech

Bardziej szczegółowo

GRAFIKA. Rodzaje grafiki i odpowiadające im edytory

GRAFIKA. Rodzaje grafiki i odpowiadające im edytory GRAFIKA Rodzaje grafiki i odpowiadające im edytory Obraz graficzny w komputerze Może być: utworzony automatycznie przez wybrany program (np. jako wykres w arkuszu kalkulacyjnym) lub urządzenie (np. zdjęcie

Bardziej szczegółowo

1. Wprowadzenie. 1.1 Uruchamianie AutoCAD-a 14. 1.2 Ustawienia wprowadzające. Auto CAD 14 1-1. Aby uruchomić AutoCada 14 kliknij ikonę

1. Wprowadzenie. 1.1 Uruchamianie AutoCAD-a 14. 1.2 Ustawienia wprowadzające. Auto CAD 14 1-1. Aby uruchomić AutoCada 14 kliknij ikonę Auto CAD 14 1-1 1. Wprowadzenie. 1.1 Uruchamianie AutoCAD-a 14 Aby uruchomić AutoCada 14 kliknij ikonę AutoCAD-a 14 można uruchomić również z menu Start Start Programy Autodesk Mechanical 3 AutoCAD R14

Bardziej szczegółowo

KGGiBM GRAFIKA INŻYNIERSKA Rok III, sem. VI, sem IV SN WILiŚ Rok akademicki 2011/2012

KGGiBM GRAFIKA INŻYNIERSKA Rok III, sem. VI, sem IV SN WILiŚ Rok akademicki 2011/2012 Rysowanie precyzyjne 7 W ćwiczeniu tym pokazane zostaną wybrane techniki bardzo dokładnego rysowania obiektów w programie AutoCAD 2012, między innymi wykorzystanie punktów charakterystycznych. Narysować

Bardziej szczegółowo

Szybkie tworzenie grafiki w GcIde

Szybkie tworzenie grafiki w GcIde Szybkie tworzenie grafiki w GcIde Opracował: Ryszard Olchawa Poniższy opis dotyczy aplikacji okienkowej w systemie Windows lub Linux bazującej na obiektowej bibliotece rofrm stworzonej w środowisku GcIde.

Bardziej szczegółowo

4.6 OpenOffice Draw tworzenie ilustracji

4.6 OpenOffice Draw tworzenie ilustracji 4-82 4.6 OpenOffice Draw tworzenie ilustracji 4.6.1 Podstawowe informacje o grafice komputerowej Istnieją dwa rodzaje grafiki komputerowej: mapy bitowe (grafika rastrowa), grafiki wektorowe. Mapy bitowe

Bardziej szczegółowo

EDYCJA TEKSTU MS WORDPAD

EDYCJA TEKSTU MS WORDPAD EDYCJA TEKSTU MS WORDPAD EDYCJA TEKSTU - MS WORDPAD WordPad (ryc. 1 ang. miejsce na słowa) to bardzo przydatny program do edycji i pisania tekstów, który dodatkowo dostępny jest w każdym systemie z rodziny

Bardziej szczegółowo

Informatyka Edytor tekstów Word 2010 dla WINDOWS cz.1

Informatyka Edytor tekstów Word 2010 dla WINDOWS cz.1 Wyższa Szkoła Ekologii i Zarządzania Informatyka Edytor tekstów Word 2010 dla WINDOWS cz.1 Slajd 1 Uruchomienie edytora Word dla Windows otwarcie menu START wybranie grupy Programy, grupy Microsoft Office,

Bardziej szczegółowo

Podstawy WINDOWS 9x, 2000, XP

Podstawy WINDOWS 9x, 2000, XP - 1 - Podstawy Windows & Zarządzanie zasobami komputera opr.m r Osa Podstawy WINDOWS 9x, 2000, XP 1. System Windows składa się z następujących podstawowych elementów: ikona pulpit okno pasek zadań folder

Bardziej szczegółowo

Operacje na Wielu Arkuszach

Operacje na Wielu Arkuszach Operacje na Wielu Arkuszach 1. Operacje na wielu arkuszach na raz. 2. Przenoszenie i kopiowanie arkuszy pomiędzy plikami. 3. Ukrywanie arkuszy. Przykład 1. Operacje na wielu arkuszach na raz. Często pracując

Bardziej szczegółowo

Tworzenie i edycja dokumentów w aplikacji Word.

Tworzenie i edycja dokumentów w aplikacji Word. Tworzenie i edycja dokumentów w aplikacji Word. Polskie litery, czyli ąłóęśźżń, itd. uzyskujemy naciskając prawy klawisz Alt i jednocześnie literę najbardziej zbliżoną wyglądem do szukanej. Np. ł uzyskujemy

Bardziej szczegółowo

GIMP Grafika rastrowa (Ćwiczenia cz. 2)

GIMP Grafika rastrowa (Ćwiczenia cz. 2) Zjazd 1 GIMP Grafika rastrowa (Ćwiczenia cz. 2) Zaznaczenia Aby zacząć profesjonalnie rysować w programie GIMP należy opanować tematykę zaznaczeń. Zaznaczenia (inaczej maski) służą do zaznaczania obszarów

Bardziej szczegółowo

I Tworzenie prezentacji za pomocą szablonu w programie Power-Point. 1. Wybieramy z górnego menu polecenie Nowy a następnie Utwórz z szablonu

I Tworzenie prezentacji za pomocą szablonu w programie Power-Point. 1. Wybieramy z górnego menu polecenie Nowy a następnie Utwórz z szablonu I Tworzenie prezentacji za pomocą szablonu w programie Power-Point 1. Wybieramy z górnego menu polecenie Nowy a następnie Utwórz z szablonu 2. Po wybraniu szablonu ukaŝe się nam ekran jak poniŝej 3. Następnie

Bardziej szczegółowo

WINDOWS XP PRO WINDOWS XP PRO

WINDOWS XP PRO WINDOWS XP PRO WINDOWS XP PRO 1 WINDOWS XP PRO PLIK jest to ciąg informacji (bajtów) zapisany na nośniku zewnętrznym (dysku) pod określoną nazwą. Nazwa pliku może składać się z maksymalnie 256 znaków. W Windows XP plik

Bardziej szczegółowo

Tworzenie nowego rysunku Bezpośrednio po uruchomieniu programu zostanie otwarte okno kreatora Nowego Rysunku.

Tworzenie nowego rysunku Bezpośrednio po uruchomieniu programu zostanie otwarte okno kreatora Nowego Rysunku. 1 Spis treści Ćwiczenie 1...3 Tworzenie nowego rysunku...3 Ustawienia Siatki i Skoku...4 Tworzenie rysunku płaskiego...5 Tworzenie modeli 3D...6 Zmiana Układu Współrzędnych...7 Tworzenie rysunku płaskiego...8

Bardziej szczegółowo

Kurs Adobe Photoshop Elements 11

Kurs Adobe Photoshop Elements 11 Kurs Adobe Photoshop Elements 11 Gladiatorx1 Kształty, kształty własne 2015-01- 01 Spis treści Wstęp... 2 Kształty... 2 Opcje narzędzia... 2 Rysujemy kształty... 5 Opcje dodawania, odejmowania obszaru

Bardziej szczegółowo

Słowa kluczowe Sterowanie klawiaturą, klawiatura, klawisze funkcyjne, przesuwanie obiektów ekranowych, wydawanie poleceń za pomocą klawiatury

Słowa kluczowe Sterowanie klawiaturą, klawiatura, klawisze funkcyjne, przesuwanie obiektów ekranowych, wydawanie poleceń za pomocą klawiatury Obsługa za pomocą klawiatury Różnego typu interfejsy wykorzystują różne metody reagowania i wydawania poleceń przez użytkownika. W środowisku graficznym najpopularniejsza jest niewątpliwie mysz i inne

Bardziej szczegółowo

Co to jest arkusz kalkulacyjny?

Co to jest arkusz kalkulacyjny? Co to jest arkusz kalkulacyjny? Arkusz kalkulacyjny jest programem służącym do wykonywania obliczeń matematycznych. Za jego pomocą możemy również w czytelny sposób, wykonane obliczenia przedstawić w postaci

Bardziej szczegółowo

Ćwiczenie nr 2 - Rysowanie precyzyjne

Ćwiczenie nr 2 - Rysowanie precyzyjne Ćwiczenie nr 2 - Rysowanie precyzyjne Materiały do kursu Skrypt CAD AutoCAD 2D strony: 37-46. Wprowadzenie Projektowanie wymaga budowania modelu geometrycznego zgodnie z określonymi wymiarami, a to narzuca

Bardziej szczegółowo

Ćwiczenie 1: Pierwsze kroki

Ćwiczenie 1: Pierwsze kroki Ćwiczenie 1: Pierwsze kroki z programem AutoCAD 2010 1 Przeznaczone dla: nowych użytkowników programu AutoCAD Wymagania wstępne: brak Czas wymagany do wykonania: 15 minut W tym ćwiczeniu Lekcje zawarte

Bardziej szczegółowo

Instrukcja obsługi programu PowRek

Instrukcja obsługi programu PowRek Instrukcja obsługi programu PowRek środa, 21 grudnia 2011 Spis treści Przeznaczenie programu... 4 Prezentacja programu... 5 Okno główne programu... 5 Opis poszczególnych elementów ekranu... 5 Nowy projekt...

Bardziej szczegółowo

Edytor tekstu MS Office Word

Edytor tekstu MS Office Word Edytor tekstu program komputerowy ukierunkowany zasadniczo na samo wprowadzanie lub edycję tekstu, a nie na nadawanie mu zaawansowanych cech formatowania (do czego służy procesor tekstu). W zależności

Bardziej szczegółowo

WSTĘP; NARZĘDZIA DO RYSOWANIA

WSTĘP; NARZĘDZIA DO RYSOWANIA 1 z 5 Link do instalacji Gimpa Gimp WSTĘP; NARZĘDZIA DO RYSOWANIA Menu w Gimpie znajduje się w oknie głównym Gimpa i w oknie obrazu. Dostępne jest również po kliknięciu prawym klawiszem myszy na obraz.

Bardziej szczegółowo

Edytor tekstu OpenOffice Writer Podstawy

Edytor tekstu OpenOffice Writer Podstawy Edytor tekstu OpenOffice Writer Podstawy Cz. 3. Rysunki w dokumencie Obiekt Fontwork Jeżeli chcemy zamieścić w naszym dokumencie jakiś efektowny napis, na przykład tytuł czy hasło promocyjne, możemy w

Bardziej szczegółowo

Wprowadzenie do formuł i funkcji

Wprowadzenie do formuł i funkcji Wprowadzenie do formuł i funkcji Wykonywanie obliczeń, niezależnie od tego, czy są one proste czy złożone, może być nużące i czasochłonne. Przy użyciu funkcji i formuł programu Excel można z łatwością

Bardziej szczegółowo

Przykład 1 wałek MegaCAD 2005 2D przykład 1 Jest to prosty rysunek wałka z wymiarowaniem. Założenia: 1) Rysunek z branży mechanicznej; 2) Opracowanie w odpowiednim systemie warstw i grup; Wykonanie 1)

Bardziej szczegółowo

Rozdział II. Praca z systemem operacyjnym

Rozdział II. Praca z systemem operacyjnym Rozdział II Praca z systemem operacyjnym 55 Rozdział III - System operacyjny i jego hierarchia 2.2. System operacyjny i jego życie Jak już wiesz, wyróżniamy wiele odmian systemów operacyjnych, które różnią

Bardziej szczegółowo

Edytor tekstu MS Word 2003 - podstawy

Edytor tekstu MS Word 2003 - podstawy Edytor tekstu MS Word 2003 - podstawy Cz. 4. Rysunki i tabele w dokumencie Obiekt WordArt Jeżeli chcemy zamieścić w naszym dokumencie jakiś efektowny napis, na przykład hasło reklamowe, możemy wykorzystać

Bardziej szczegółowo

Europejski Certyfikat Umiejętności Komputerowych. Moduł 3 Przetwarzanie tekstów

Europejski Certyfikat Umiejętności Komputerowych. Moduł 3 Przetwarzanie tekstów Europejski Certyfikat Umiejętności Komputerowych. Moduł 3 Przetwarzanie tekstów 1. Uruchamianie edytora tekstu MS Word 2007 Edytor tekstu uruchamiamy jak każdy program w systemie Windows. Można to zrobić

Bardziej szczegółowo

1. Przypisy, indeks i spisy.

1. Przypisy, indeks i spisy. 1. Przypisy, indeks i spisy. (Wstaw Odwołanie Przypis dolny - ) (Wstaw Odwołanie Indeks i spisy - ) Przypisy dolne i końcowe w drukowanych dokumentach umożliwiają umieszczanie w dokumencie objaśnień, komentarzy

Bardziej szczegółowo

Użycie przestrzeni papieru i odnośników - ćwiczenie

Użycie przestrzeni papieru i odnośników - ćwiczenie Użycie przestrzeni papieru i odnośników - ćwiczenie Informacje ogólne Korzystanie z ćwiczeń Podczas rysowania w AutoCADzie, praca ta zwykle odbywa się w przestrzeni modelu. Przed wydrukowaniem rysunku,

Bardziej szczegółowo

Instrukcja wprowadzania graficznych harmonogramów pracy w SZOI Wg stanu na 21.06.2010 r.

Instrukcja wprowadzania graficznych harmonogramów pracy w SZOI Wg stanu na 21.06.2010 r. Instrukcja wprowadzania graficznych harmonogramów pracy w SZOI Wg stanu na 21.06.2010 r. W systemie SZOI została wprowadzona nowa funkcjonalność umożliwiająca tworzenie graficznych harmonogramów pracy.

Bardziej szczegółowo

Rysowanie precyzyjne. Polecenie:

Rysowanie precyzyjne. Polecenie: 7 Rysowanie precyzyjne W ćwiczeniu tym pokazane zostaną różne techniki bardzo dokładnego rysowania obiektów w programie AutoCAD 2010, między innymi wykorzystanie punktów charakterystycznych. Z uwagi na

Bardziej szczegółowo

O czym należy pamiętać?

O czym należy pamiętać? O czym należy pamiętać? Podczas pracy na płaszczyźnie możliwe jest wprowadzanie współrzędnych punktów w następujących układach: - układ współrzędnych kartezjańskich: x, y służy do rysowania odcinków o

Bardziej szczegółowo

Edytor tekstu OpenOffice Writer Podstawy

Edytor tekstu OpenOffice Writer Podstawy Edytor tekstu OpenOffice Writer Podstawy OpenOffice to darmowy zaawansowany pakiet biurowy, w skład którego wchodzą następujące programy: edytor tekstu Writer, arkusz kalkulacyjny Calc, program do tworzenia

Bardziej szczegółowo

Tworzenie dokumentacji 2D

Tworzenie dokumentacji 2D Tworzenie dokumentacji 2D Tworzenie dokumentacji technicznej 2D dotyczy określonej części (detalu), uprzednio wykonanej w przestrzeni trójwymiarowej. Tworzenie rysunku 2D rozpoczynamy wybierając z menu

Bardziej szczegółowo

Ćwiczenie 3: Rysowanie obiektów w programie AutoCAD 2010

Ćwiczenie 3: Rysowanie obiektów w programie AutoCAD 2010 Ćwiczenie 3: Rysowanie obiektów w programie AutoCAD 2010 1 Przeznaczone dla: nowych użytkowników programu AutoCAD Wymagania wstępne: brak Czas wymagany do wykonania: 15 minut W tym ćwiczeniu Lekcje zawarte

Bardziej szczegółowo

Jak uzyskać efekt 3D na zdjęciach z wykorzystaniem programu InkScape

Jak uzyskać efekt 3D na zdjęciach z wykorzystaniem programu InkScape Jak uzyskać efekt 3D na zdjęciach z wykorzystaniem programu InkScape Program InkScape jest bezpłatnym polskojęzycznym programem grafiki wektorowej do pobrania ze strony http://www.dobreprogramy.pl/inkscape,program,windows,12218.html.

Bardziej szczegółowo

Rysowanie punktów na powierzchni graficznej

Rysowanie punktów na powierzchni graficznej Rysowanie punktów na powierzchni graficznej Tworzenie biblioteki rozpoczniemy od podstawowej funkcji graficznej gfxplot() - rysowania pojedynczego punktu na zadanych współrzędnych i o zadanym kolorze RGB.

Bardziej szczegółowo

AutoCAD 1. Otwieranie aplikacji AutoCAD 2011. AutoCAD 1

AutoCAD 1. Otwieranie aplikacji AutoCAD 2011. AutoCAD 1 AutoCAD 1 Omówienie interfejsu programu AutoCAD (menu rozwijalne, paski przycisków, linia poleceń, linia informacyjna, obszar roboczy); rysowanie linii i okręgu; rysowanie precyzyjne z wykorzystaniem trybów

Bardziej szczegółowo

Przed rozpoczęciem pracy otwórz nowy plik (Ctrl +N) wykorzystując szablon acadiso.dwt

Przed rozpoczęciem pracy otwórz nowy plik (Ctrl +N) wykorzystując szablon acadiso.dwt Przed rozpoczęciem pracy otwórz nowy plik (Ctrl +N) wykorzystując szablon acadiso.dwt Zadanie: Utwórz szablon rysunkowy składający się z: - warstw - tabelki rysunkowej w postaci bloku (według wzoru poniżej)

Bardziej szczegółowo

Aplikacja projektu Program wycinki drzew i krzewów dla RZGW we Wrocławiu

Aplikacja projektu Program wycinki drzew i krzewów dla RZGW we Wrocławiu Aplikacja projektu Program wycinki drzew i krzewów dla RZGW we Wrocławiu Instrukcja obsługi Aplikacja wizualizuje obszar projektu tj. Dorzecze Środkowej Odry będące w administracji Regionalnego Zarządu

Bardziej szczegółowo

Spis treści. 1 Moduł Mapy 2

Spis treści. 1 Moduł Mapy 2 Spis treści 1 Moduł Mapy 2 1.1 Elementy planu............................. 2 1.1.1 Interfejs widoku......................... 3 1.1.1.1 Panel sterujacy.................... 3 1.1.1.2 Suwak regulujacy przybliżenie...........

Bardziej szczegółowo

1.3. Tworzenie obiektów 3D. Rysunek 1.2. Dostępne opcje podręcznego menu dla zaznaczonego obiektu

1.3. Tworzenie obiektów 3D. Rysunek 1.2. Dostępne opcje podręcznego menu dla zaznaczonego obiektu 1. Edytor grafiki Draw 1.1. Okno programu Draw W bezpłatnym pakiecie OpenOffice zawarty jest program graficzny Draw (rysunek 1.1), wyposażony w liczne narzędzia do obróbki obiektów. Program możesz uruchomić,

Bardziej szczegółowo

Arkusz kalkulacyjny EXCEL

Arkusz kalkulacyjny EXCEL ARKUSZ KALKULACYJNY EXCEL 1 Arkusz kalkulacyjny EXCEL Aby obrysować tabelę krawędziami należy: 1. Zaznaczyć komórki, które chcemy obrysować. 2. Kursor myszy ustawić na menu FORMAT i raz kliknąć lewym klawiszem

Bardziej szczegółowo

Grażyna Koba. Grafika komputerowa. materiały dodatkowe do podręcznika. Informatyka dla gimnazjum

Grażyna Koba. Grafika komputerowa. materiały dodatkowe do podręcznika. Informatyka dla gimnazjum Grażyna Koba Grafika komputerowa materiały dodatkowe do podręcznika Informatyka dla gimnazjum Rysunki i animacje w Edytorze postaci 1. Rysunek w Edytorze postaci Edytor postaci (rys. 1.) jest częścią programu

Bardziej szczegółowo

Wstęp 7 Rozdział 1. OpenOffice.ux.pl Writer środowisko pracy 9

Wstęp 7 Rozdział 1. OpenOffice.ux.pl Writer środowisko pracy 9 Wstęp 7 Rozdział 1. OpenOffice.ux.pl Writer środowisko pracy 9 Uruchamianie edytora OpenOffice.ux.pl Writer 9 Dostosowywanie środowiska pracy 11 Menu Widok 14 Ustawienia dokumentu 16 Rozdział 2. OpenOffice

Bardziej szczegółowo

INSTRUKCJA OBSŁUGI Iron - 2013

INSTRUKCJA OBSŁUGI Iron - 2013 INSTRUKCJA OBSŁUGI Iron - 2013 Fun With Art Oryginalny tekst: Bajtek tylko o atari 2 - Marek Zachar MENU Po uruchomieniu programu na ekranie pojawia się rysunkowe menu. Opcje wybierane są z niego joystickiem

Bardziej szczegółowo

Przetwarzanie grafiki rastrowej na wektorową

Przetwarzanie grafiki rastrowej na wektorową Przetwarzanie grafiki rastrowej na wektorową Inaczej wektoryzacja, lub trasowanie, czyli zastąpienie rysunku rastrowego rysunkiem wektorowym. Wykonanie: Piotr Dróżdż Podstawowe różnice między grafiką wektorową,

Bardziej szczegółowo

Celem ćwiczenia jest zapoznanie się z podstawowymi funkcjami i pojęciami związanymi ze środowiskiem AutoCAD 2012 w polskiej wersji językowej.

Celem ćwiczenia jest zapoznanie się z podstawowymi funkcjami i pojęciami związanymi ze środowiskiem AutoCAD 2012 w polskiej wersji językowej. W przygotowaniu ćwiczeń wykorzystano m.in. następujące materiały: 1. Program AutoCAD 2012. 2. Graf J.: AutoCAD 14PL Ćwiczenia. Mikom 1998. 3. Kłosowski P., Grabowska A.: Obsługa programu AutoCAD 14 i 2000.

Bardziej szczegółowo

Nawigacja po długim dokumencie może być męcząca, dlatego warto poznać następujące skróty klawiszowe

Nawigacja po długim dokumencie może być męcząca, dlatego warto poznać następujące skróty klawiszowe Zestawienie wydatków rok 2015 1 Wstaw numerację stron. Aby to zrobić przejdź na zakładkę Wstawianie i w grupie Nagłówek i stopka wybierz Numer strony. Następnie określ pozycję numeru na stronie (na przykład

Bardziej szczegółowo

Edytor tekstu Notatnik

Edytor tekstu Notatnik Temat: komputerowe pisanie w edytorze tekstu 1 (pierwsze dokumenty tekstowe) Edytor tekstu umożliwia tworzenie dokumentu tekstowego, jego wielokrotne redagowanie (pisanie, modyfikowanie istniejącego tekstu,

Bardziej szczegółowo

Przewodnik po obszarze roboczym

Przewodnik po obszarze roboczym Przewodnik po obszarze roboczym Witamy w programie CorelDRAW, wszechstronnym programie do tworzenia rysunków wektorowych i projektów graficznych przeznaczonym dla profesjonalnych grafików. Projekty tworzone

Bardziej szczegółowo

Podręcznik użytkownika programu. Ceremonia 3.1

Podręcznik użytkownika programu. Ceremonia 3.1 Podręcznik użytkownika programu Ceremonia 3.1 1 Spis treści O programie...3 Główne okno programu...4 Edytor pieśni...7 Okno ustawień programu...8 Edycja kategorii pieśni...9 Edytor schematów slajdów...10

Bardziej szczegółowo

Skróty klawiaturowe w PowerPoint

Skróty klawiaturowe w PowerPoint Pomoc online: W oknie Pomoc: Skróty klawiaturowe w PowerPoint F1 Otwieranie okna Pomoc. ALT+F4 Zamknięcie okna Pomoc. ALT+TAB Przełączenie między oknem Pomoc i aktywnym programem. ALT+HOME Powrót do strony

Bardziej szczegółowo

Przewodnik po soczewkach

Przewodnik po soczewkach Przewodnik po soczewkach 1. Wchodzimy w program Corel Draw 11 następnie klikamy Plik /Nowy => Nowy Rysunek. Następnie wchodzi w Okno/Okno dokowane /Teczka podręczna/ Przeglądaj/i wybieramy plik w którym

Bardziej szczegółowo

Druga aplikacja Prymitywy, alpha blending, obracanie bitmap oraz mały zestaw przydatnych funkcji wyświetlających własnej roboty.

Druga aplikacja Prymitywy, alpha blending, obracanie bitmap oraz mały zestaw przydatnych funkcji wyświetlających własnej roboty. Przyszedł czas na rysowanie własnych figur, czyli prymitywy, obracanie bitmap, oraz alpha blending-czyli półprzezroczystość. Będę opisywał tylko rzeczy nowe-nie ma potrzeby abym się powtarzał. Zaczynajmny

Bardziej szczegółowo

Laboratorium Napędu robotów

Laboratorium Napędu robotów WYDZIAŁ ELEKTRYCZNY INSTYTUT MASZYN, NAPĘDÓW I POMIARÓW ELEKTRYCZNYCH Laboratorium Napędu robotów INS 5 Ploter frezująco grawerujący Lynx 6090F 1. OPIS PRZYCISKÓW NA PANELU STEROWANIA. Rys. 1. Przyciski

Bardziej szczegółowo

AutoCAD LT praca na obiektach rastrowych i nakładanie barw z palety RGB na rysunki.

AutoCAD LT praca na obiektach rastrowych i nakładanie barw z palety RGB na rysunki. AutoCAD LT praca na obiektach rastrowych i nakładanie barw z palety RGB na rysunki. Niniejsza instrukcja jest przewodnikiem po narzędziach służących do wstawiania i edycji obiektów rastrowych dostępnych

Bardziej szczegółowo

Grafika rastrowa (bitmapa)-

Grafika rastrowa (bitmapa)- Grafika komputerowa Grafika rastrowa Grafika rastrowa (bitmapa)- sposób zapisu obrazów w postaci prostokątnej tablicy wartości, opisujących kolory poszczególnych punktów obrazu (prostokątów składowych).

Bardziej szczegółowo

Główne elementy zestawu komputerowego

Główne elementy zestawu komputerowego Główne elementy zestawu komputerowego Monitor umożliwia oglądanie efektów pracy w programach komputerowych Mysz komputerowa umożliwia wykonywanie różnych operacji w programach komputerowych Klawiatura

Bardziej szczegółowo

Compas 2026 Vision Instrukcja obsługi do wersji 1.07

Compas 2026 Vision Instrukcja obsługi do wersji 1.07 Compas 2026 Vision Instrukcja obsługi do wersji 1.07 1 2 Spis treści Integracja...5 1.Compas 2026 Lan...5 Logowanie...7 Użytkownicy...8 Raporty...10 Tworzenie wizualizacji Widoki...12 1.Zarządzanie widokami...12

Bardziej szczegółowo

na podstawie modelu 3D

na podstawie modelu 3D Przygotowanie dokumentacji technicznej 2D na podstawie modelu 3D SST-2013/2014 Przygotowanie dokumentacji technicznej 2D 1 Wydruk rysunku z AutoCAD 2D można przygotować na dwa sposoby 1. na zakładce Model

Bardziej szczegółowo

Mathcad c.d. - Macierze, wykresy 3D, rozwiązywanie równań, pochodne i całki, animacje

Mathcad c.d. - Macierze, wykresy 3D, rozwiązywanie równań, pochodne i całki, animacje Mathcad c.d. - Macierze, wykresy 3D, rozwiązywanie równań, pochodne i całki, animacje Opracował: Zbigniew Rudnicki Powtórka z poprzedniego wykładu 2 1 Dokument, regiony, klawisze: Dokument Mathcada realizuje

Bardziej szczegółowo

Po naciśnięciu przycisku Dalej pojawi się okienko jak poniżej,

Po naciśnięciu przycisku Dalej pojawi się okienko jak poniżej, Tworzenie wykresu do danych z tabeli zawierającej analizę rozwoju wyników sportowych w pływaniu stylem dowolnym na dystansie 100 m, zarejestrowanych podczas Igrzysk Olimpijskich na przestrzeni lat 1896-2012.

Bardziej szczegółowo

Rys. 1. Rozpoczynamy rysunek pojedynczej części

Rys. 1. Rozpoczynamy rysunek pojedynczej części Inventor cw1 Otwieramy nowy rysunek typu Inventor Part (ipt) pojedyncza część. Wykonujemy to następującym algorytmem, rys. 1: 1. Na wstędze Rozpocznij klikamy nowy 2. W oknie dialogowym Nowy plik klikamy

Bardziej szczegółowo

Prezentacja multimedialna MS PowerPoint 2010 (podstawy)

Prezentacja multimedialna MS PowerPoint 2010 (podstawy) Prezentacja multimedialna MS PowerPoint 2010 (podstawy) Cz. 4. Animacje, przejścia, pokaz slajdów Dzięki animacjom nasza prezentacja może stać się bardziej dynamiczna, a informacje, które chcemy przekazać,

Bardziej szczegółowo

czyli Arkuszy / Układów na podstawie modelu

czyli Arkuszy / Układów na podstawie modelu Przygotowanie dokumentacji technicznej czyli Arkuszy / Układów na podstawie modelu Przygotowanie dokumentacji technicznej w AutoCAD 1 Wydruk rysunku z AutoCAD można przygotować na dwa sposoby 1. na zakładce

Bardziej szczegółowo

Instrukcja użytkownika ARSoft-WZ3

Instrukcja użytkownika ARSoft-WZ3 02-699 Warszawa, ul. Kłobucka 8 pawilon 119 tel. 0-22 853-48-56, 853-49-30, 607-98-95 fax 0-22 607-99-50 email: info@apar.pl www.apar.pl Instrukcja użytkownika ARSoft-WZ3 wersja 1.5 1. Opis Aplikacja ARSOFT-WZ3

Bardziej szczegółowo

Podstawy technologii cyfrowej i komputerów

Podstawy technologii cyfrowej i komputerów BESKIDZKIE TOWARZYSTWO EDUKACYJNE Podstawy technologii cyfrowej i komputerów Budowa komputerów cz. 2 systemy operacyjne mgr inż. Radosław Wylon 2010 1 Spis treści: Rozdział I 3 1. Systemy operacyjne 3

Bardziej szczegółowo

LABORATORIUM 1 STUDIA PODYPLOMOWE. Przed rozpoczęciem korzystania z programu MS WORD zapoznamy się z wyglądem okna roboczego:

LABORATORIUM 1 STUDIA PODYPLOMOWE. Przed rozpoczęciem korzystania z programu MS WORD zapoznamy się z wyglądem okna roboczego: WSTĘP Przed rozpoczęciem korzystania z programu MS WORD zapoznamy się z wyglądem okna roboczego: 1. Pasek tytułowy, w którym wyświetlana jest nazwa dokumentu 2. Pasek narzędzi szybki dostęp, w którym wyświetlane

Bardziej szczegółowo

Ćwiczenie nr 1. Kliknij myszką w trójkąt, aby otrzymać dostęp do uchwytów obrotów:

Ćwiczenie nr 1. Kliknij myszką w trójkąt, aby otrzymać dostęp do uchwytów obrotów: Ćwiczenie nr 1 Wybierz narzędzie wielokąt, ustaw na pasku własności liczbę boków równą 3 i z pomocą klawisza Ctrl narysuj trójkąt równoboczny, po czym naciśnij spację, aby przełączyć się na wskaźnik: Kliknij

Bardziej szczegółowo

RYSUNEK TECHNICZNY I GEOMETRIA WYKREŚLNA INSTRUKCJA DOM Z DRABINĄ I KOMINEM W 2D

RYSUNEK TECHNICZNY I GEOMETRIA WYKREŚLNA INSTRUKCJA DOM Z DRABINĄ I KOMINEM W 2D Politechnika Białostocka Wydział Budownictwa i Inżynierii Środowiska Zakład Informacji Przestrzennej Inżynieria Środowiska INSTRUKCJA KOMPUTEROWA z Rysunku technicznego i geometrii wykreślnej RYSUNEK TECHNICZNY

Bardziej szczegółowo

OKNO NA ŚWIAT - PRZECIWDZIAŁANIE WYKLUCZENIU CYFROWEMU W MIEŚCIE BRZEZINY

OKNO NA ŚWIAT - PRZECIWDZIAŁANIE WYKLUCZENIU CYFROWEMU W MIEŚCIE BRZEZINY Projekt OKNO NA ŚWIAT - PRZECIWDZIAŁANIE WYKLUCZENIU CYFROWEMU W MIEŚCIE BRZEZINY współfinansowany przez Unię Europejską ze środków Europejskiego Funduszu Rozwoju Regionalnego w ramach Programu Operacyjnego

Bardziej szczegółowo

Oprogramowanie powiększające obraz na ekranie, zmniejszające zmęczenie wzroku. Podręcznik Szybkiego Startu

Oprogramowanie powiększające obraz na ekranie, zmniejszające zmęczenie wzroku. Podręcznik Szybkiego Startu Oprogramowanie powiększające obraz na ekranie, zmniejszające zmęczenie wzroku. Podręcznik Szybkiego Startu Witaj w ZoomText Express ZoomText Express to niedrogi i łatwy program powiększający obraz komputerowy.

Bardziej szczegółowo

W tym ćwiczeniu zostanie wykonany prosty profil cienkościenny, jak na powyŝszym rysunku.

W tym ćwiczeniu zostanie wykonany prosty profil cienkościenny, jak na powyŝszym rysunku. ĆWICZENIE 1 - Podstawy modelowania 3D Rozdział zawiera podstawowe informacje i przykłady dotyczące tworzenia trójwymiarowych modeli w programie SolidWorks. Ćwiczenia zawarte w tym rozdziale są podstawą

Bardziej szczegółowo

Windows XP - lekcja 3 Praca z plikami i folderami Ćwiczenia zawarte w tym rozdziale pozwolą na tworzenie, usuwanie i zarządzanie plikami oraz folderami znajdującymi się na dysku twardym. Jedną z nowości

Bardziej szczegółowo

Dlaczego stosujemy edytory tekstu?

Dlaczego stosujemy edytory tekstu? Edytor tekstu Edytor tekstu program komputerowy służący do tworzenia, edycji i formatowania dokumentów tekstowych za pomocą komputera. Dlaczego stosujemy edytory tekstu? możemy poprawiać tekst możemy uzupełniać

Bardziej szczegółowo

Praca w programie Power Draft

Praca w programie Power Draft Praca w programie Power Draft I. Przygotowanie foldera roboczego 1. Na ostatnim (alfabetycznie np. D) dysku komputera: - sprawdzić czy istnieje folder Geomat (jeŝeli nie proszę go utworzyć); - w folderze

Bardziej szczegółowo

Dodatek 4. Zadanie 1: Liczenie plam słonecznych w różnych dniach. Po uruchomieniu programu SalsaJ otworzy się nam okno widoczne na rysunku 4.1.

Dodatek 4. Zadanie 1: Liczenie plam słonecznych w różnych dniach. Po uruchomieniu programu SalsaJ otworzy się nam okno widoczne na rysunku 4.1. Dodatek 4 W niniejszym załączniku przedstawiona została alternatywna metoda realizowania zadań numer 1, 4 i 6 w ćwiczeniu Słońce dla każdego za pomocą programu SalsaJ, który można ściągnąć ze strony internetowej

Bardziej szczegółowo

Dokument zawiera podstawowe informacje o użytkowaniu komputera oraz korzystaniu z Internetu.

Dokument zawiera podstawowe informacje o użytkowaniu komputera oraz korzystaniu z Internetu. Klub Seniora - Podstawy obsługi komputera oraz korzystania z Internetu Str. 1 Dokument zawiera podstawowe informacje o użytkowaniu komputera oraz korzystaniu z Internetu. Część 3 Opis programu MS Office

Bardziej szczegółowo

1. Wprowadzanie danych z klawiatury funkcja scanf

1. Wprowadzanie danych z klawiatury funkcja scanf 1. Wprowadzanie danych z klawiatury funkcja scanf Deklaracja int scanf ( const char *format, wskaźnik, wskaźnik,... ) ; Biblioteka Działanie stdio.h Funkcja scanf wczytuje kolejne pola (ciągi znaków),

Bardziej szczegółowo

INSTRUKCJA OBSŁUGI DIODOWEGO WYŚWIETLACZA TEKSTÓW PIEŚNI STEROWANEGO Z TABLETU 10,1 '

INSTRUKCJA OBSŁUGI DIODOWEGO WYŚWIETLACZA TEKSTÓW PIEŚNI STEROWANEGO Z TABLETU 10,1 ' INSTRUKCJA OBSŁUGI DIODOWEGO WYŚWIETLACZA TEKSTÓW PIEŚNI STEROWANEGO Z TABLETU 10,1 ' -1- Spis treści - 1. O programie... 3 2. Uruchomienie programu... 3 3. Przygotowanie urządzenia do pracy... 4 4. Wyświetlanie

Bardziej szczegółowo