Třída DrawingTool. Obrázek 1: Prázdné okno připravené pro kreslení



Podobné dokumenty
2 Grafický výstup s využitím knihovny

Java aplety. Předávání parametrů z HTML

Cvičení 7: Delphi objekty CheckedBox, Radio- Button, EditBox

Projekt Obrázek strana 135

Programování v jazyku LOGO - úvod

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd

8 Třídy, objekty, metody, předávání argumentů metod

Java - Kresba. 2/28/11 1/8 Java - kresba

Soukromá střední odborná škola Frýdek-Místek, s.r.o. VY_32_INOVACE_92_IVT_HTML_12_nase_www

Tisk výkresu. Projekt SIPVZ 2006 Řešené příklady AutoCADu Autor: ing. Laďka Krejčí

Pokročilé programování v jazyce C pro chemiky (C3220) Dědičnost tříd v C++

1. Dědičnost a polymorfismus

Knihovna CanvasLib TXV první vydání prosinec 2014 změny vyhrazeny

Obsah. Úvod do studia 11 Co byste měli předem znát 13. Úvod do obsluhy AutoCADu 23. Kapitola Kapitola 1 23

. Grafika a plovoucí prostředí. Zpracování textů na počítači. Ing. Pavel Haluza, Ph.D. ústav informatiky PEF MENDELU v Brně haluza@mendelu.

Závěrečná práce. AutoCAD Inventor (Zadání D1)

MISYS. Seznam souřadnic

Uživatelská příručka Autor: Martin Fiala

POPIS NOVINEK A VYLEPŠENÍ

POSTUP PŘI NASTAVENÍ OVLÁDACÍHO PANELU S DOTYKOVÝM DISPLEJEM JAK PŘEJÍT DO SPRÁVCE NASTAVENÍ

je aplikace určená k editaci videozáznamu, funguje v operačních systémech Windows Vista a Windows7

Rasterizace je proces při kterém se vektorově definovaná grafika konvertuje na. x 2 x 1

Pracovní plocha. V první kapitole se seznámíme s pracovním prostředím ve Photoshopu.

Zobrazování bannerů podporují pouze nově vytvořené šablony motivů vzhledu.

Téma: Arkanoid. X36SOJ Strojově orientované jazyky Semestrální práce. Vypracoval: Marek Handl Datum: červen 2006

6 Příkazy řízení toku

Úloha 1. Text úlohy. Vyberte jednu z nabízených možností: NEPRAVDA. PRAVDA Úloha 2. Text úlohy

Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody

Algoritmizace a programování

Popis základního prostředí programu AutoCAD

Úvod 2 Snížení intervalu pro automatický import zásilek 3 Možnost použít jiné jméno odesílatele na štítku 4 Podporujeme i webový prohlížeč Opera

Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++

Pokyny pro žáky k testování písemné zkoušky na počítači

Elektronické publikování - prezentace. 23. dubna 2009 VŠB - TUO. Beamer - grafické zpracování prezentace. Rostislav Šuta, sut017.

2 Tvorba interaktivních grafických programů

MS PowerPoint ZÁKLADY

02. HODINA. 2.1 Typy souborů a objektů. 2.2 Ovládací prvky Label a TextBox

Popis rozšířujících funkcí JScriptu

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

Dotykova obrazovka v programu TRIFID

UNIVERZITA PARDUBICE

umenugr JEDNOTKA PRO VYTVÁŘENÍ UŽIVATELSKÝCH GRAFICKÝCH MENU Příručka uživatele a programátora

Comenius Logo. Princip programování. Prostředí Comenius Logo

Připravil: David Procházka. Vertex Buffer Objects

Indexové seznamy. známe už pole, kde ale musí být předem známa velikost indexové seznamy umí růst dynamicky

Dotyková obrázovká v prográmu TRIFID

přetížení operátorů (o)

Úvod do počítačových sítí

8. GRAFICKÉ UŽIVATELSKÉ ROZHRANÍ

pro začátečníky pro pokročilé na místě (dle požadavků zákazníka)

ČSFD.cz - technická specifikace reklamních formátů

Jednoduché stříhání videa

Obrázek. Základní popis, zadání úkolu. Struktura tříd,

- obvyklejší, výpočetně dražší - každé písmeno je definováno jako zakřivený nebo polygonální obrys

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Pokročilé programování v jazyce C pro chemiky (C3220) Statické proměnné a metody, šablony v C++

Autodesk AutoCAD 2018

Naším cílem je Vaše spokojenost...

Z. Kotala, P. Toman: Java ( Obsah )

-menu: dává přístup k funkcím programu. v návodech, pokud chceme říct "klikněte na Soubor a pak na volbu Nový", to zapisujeme jako: Soubor / Nový

Mezi přednastavenými vizualizačními styly se přepínáme některou z těchto možností:

Grafické adaptéry a monitory

CADKON -TZB POPIS NOVINEK A VYLEPŠENÍ. Tento dokument obsahuje pouze popis vylepšení verze vůči verzi Podporované platformy

1. Paleta History (Historie)

Formulář pro křížový filtr

4 Želva se učí nové příkazy

Comenius Logo. Úterý 20. března. Princip programování. Prostředí Comenius Logo

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Rektifikace rastrových dat

Vytváříme prezentaci její strukturu a celkový vzhled Práce s textem a vkládání objektů 1

Aplikované úlohy Solid Edge. SPŠSE a VOŠ Liberec. Ing. Jan Boháček [ÚLOHA 23 FORMÁT SOUČÁSTI]

OOPR_05. Případové studie

TDS-TECHNIK 13.1 pro AutoCAD

Zadání soutěžních úloh

Regulární výrazy. Vzory

Práce s texty, Transformace rastru, Připojení GPS

Hlavní okno aplikace

Základy programování. Úloha: Eratosthenovo síto. Autor: Josef Hrabal Číslo: HRA0031 Datum: Předmět: ZAP

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech

Při studiu tohoto bloku se předpokládá, že student je zvládá základy programování v jazyce Java s využitím vývojového prostředí NetBeans.

9. Práce s naskenovanými mapami

1. Úvod do obsluhy AutoCADu

Kreslíme do webu. Canvas

Hlavní okno aplikace

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Synchronizace dvou pohybů - posuvného ve směru osy x a totačního kolem osy z. scena.pov. anim.ini #include colors.inc

Vlastnosti dokumentu/stránky

Gymnázium Ostrava Hrabůvka, příspěvková organizace Františka Hajdy 34, Ostrava Hrabůvka

Controlweb. Úvod. Specifikace systému

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

JSR tutorial 1 Úvod do JSR-184

Dotyková obrázovká v prográmu TRIFID

TDS-TECHNIK 13.1 pro SolidWorks

Aplikace pro vykreslování grafů elementárních funkcí

Inovace a zkvalitnění výuky prostřednictvím ICT Pokročilé metody parametrického modelování

TDS-TECHNIK 13.0 pro BricsCad

Ovládání Open Office.org Calc Ukládání dokumentu : Levým tlačítkem myši kliknete v menu na Soubor a pak na Uložit jako.

TDS-TECHNIK 13.0 pro ZwCAD

Připravil: David Procházka. Projekce

Transkript:

Třída DrawingTool strana 1 1. Základ Třída DrawingTool Třída DrawingTool je určena k jednoduchému kreslení pomocí několika základních příkazů do grafického okna zadaných rozměrů (nastavení v konstruktoru), které se při vytvoření instance této třídy objeví na obrazovce (viz Obrázek 1). // DrawingTool dt = new DrawingTool(int width, int height); DrawingTool dt = new DrawingTool(250,200); Obrázek 1: Prázdné okno připravené pro kreslení Důležité je si uvědomit, že souřadný systém má svůj počátek v bodě [0,0]. Tento bod se nalézá v levém horním rohu grafického okna, přičemž směrem doprava roste souřadnice x a směrem dolů roste souřadnice y (viz Obrázek 1). Velikost grafického okna (šířka, výška) je zadávána v pixelech (obrazovkových bodech). Je tedy vhodné nenastavovat velikost okna větší než je aktuální nastavené rozlišení pracovní plochy vašeho operačního systému (běžně bývá např. 1024x768). Základními příkazy, které třída DrawingTool poskytuje, jsou a line(int x1, int y1, int x2, int y2); o Vykreslí čáru od bodu (x1,y1) do bodu (x2,y2) včetně, clear(); o Smaže obsah celého okna. Pokud tedy budeme chtít vykreslit čáru, která bude začínat v bodu [20,20] a končit v bodu [80,80], bude programový kód vypadat následovně: DrawingTool dt = new DrawingTool(width, height); dt.line(20, 20, 80, 80);

Třída DrawingTool strana 2 a výstup programu bude vypadat takto: Obrázek 2: Vykreslená čára z bodu [20,20] do bodu [80,80] Chceme-li do okna náhodně vykreslit 10 čar, bude programový kód vypadat například následovně: DrawingTool dt = new DrawingTool(width, height); for (int i=0; i<10; i++) { int x1 = (int) (Math.random()*width) + 1; int y1 = (int) (Math.random()*height) + 1; int x2 = (int) (Math.random()*width) + 1; int y2 = (int) (Math.random()*height) + 1; dt.line(x1,y1,x2,y2); Výstup tohoto programu viz Obrázek 3. Obrázek 3: Výstup předchozího programového kódu náhodné čáry Obdobně lze voláním metody dt.clear() obrazovku smazat a začít znovu kreslit do prázdného okna.

Třída DrawingTool strana 3 2. Další možnosti 2.1 Nastavení barev Barva pozadí okna, do kterého se kreslí, je implicitně bílá a barva kreslených čar je implicitně černá (viz Obrázek 3). Barvu pozadí je možné definovat v konstruktoru DrawingTool dt = new DrawingTool(int width, int height, Color color); Aby bylo možné definovat barvy, je vždy nutné importovat balík java.awt.color; (popis viz Java dokumentace). Pokud bychom tedy chtěli nastavit barvu pozadí okna na černou, bude programový kód vypadat následovně: import java.awt.color;... DrawingTool dt = new DrawingTool(width, height, Color.BLACK); Výstup tohoto programu viz Obrázek 4. Obrázek 4: Výstup předchozího programového kódu Pokud bychom chtěli změnit barvu vykreslovaných čar, je k dispozici metoda setcolor() s parametrem barvy popředí (tedy barvy vykreslovaných objektů): setcolor(color fgcolor); Ukázka program. kódu a výstupu s definováním vlastních barev pozadí a vykreslovaných čar: DrawingTool dt = new DrawingTool(width, height, Color.BLACK); dt.setcolor(color.red); for (int i=0; i<10; i++) { int x1 = (int) (Math.random()*width) + 1; int y1 = (int) (Math.random()*height) + 1; int x2 = (int) (Math.random()*width) + 1; int y2 = (int) (Math.random()*height) + 1; dt.line(x1, y1, x2, y2); Výstup tohoto programu viz Obrázek 5.

Třída DrawingTool strana 4 Obrázek 5: Výstup předchozího programu vlastní barvy Poznámka: Při definování vlastních barev je potřeba být obezřetný. Může se stát, že nedopatřením nastavíme stejnou barvu pozadí okna i barvy vykreslovaných čar. Při spuštění se potom může zdát, že váš program nic nedělá, že nefunguje. Je zbytečné nad takovouto záležitostí trávit dlouhé chvíle a hledat chybu ve vašem programu žádná tam vlastně není. 2.2 Antialiasing Při kreslení čar je možné zapnout antialiasing 1, čímž bude vaše vykreslená čára vizuálně hladší (potlačí se chyby v diskretizaci). Zapnout antialiasing je možné v konstruktoru DrawingTool dt = new DrawingTool(int width, int height, Color color, boolean antialiasing); nebo v konstruktoru DrawingTool dt = new DrawingTool(int width, int height, boolean antialiasing); Na obrázku 6 je zobrazen výstup programu z předchozí kapitoly se zapnutým antialiasingem. Obrázek 6: Výstup programu z předchozí kapitoly se zapnutým antialiasingem Poznámka: Pokud vám záleží na rychlosti běhu vašeho programu, antialiasing nezapínejte, protože zpomaluje vykreslování, což je patrné především na slabších počítačích. 2.3 Animace Třída DrawingTool je koncipována tak, aby její použití bylo co nejjednodušší. Protože obsah okna je potřeba uchovávat, aby při překrytí jiným oknem nedošlo ke ztrátě obsahu, je v mechanismu vykreslování implementován princip double bufferingu 2. Při požadavku na 1 http://en.wikipedia.org/wiki/antialiasing 2 http://en.wikipedia.org/wiki/double_buffering

Třída DrawingTool strana 5 vykreslení je grafický objekt (například čára) ihned zapsán do paměťového bufferu (back bufferu) a ten je potom okamžitě zkopírován do obrazovkového bufferu (screen bufferu). To je samozřejmě pro účely animace nevhodné, protože toto okamžité zobrazení na obrazovce po provedení jakékoliv změny v obraze způsobuje nepříjemné blikání obrazu (flickering), nemluvě o zbytečném zpomalení vykreslování vlivem kopírování obsahu back bufferu do screen bufferu. Tuto skutečnost je možné změnit pomocí metod a stopupdate(); o zakáže vykreslování grafických objektů na obrazovku kreslení bude realizováno pouze do paměťového bufferu (back bufferu) startupdate(); o opět povolí vykreslování grafických objektů na obrazovku opět bude docházet ke kopírování paměťového bufferu (back bufferu) do obrazovkového bufferu (screen bufferu) Ukázka použití metod stopupdate() a startupdate() při realizaci animace: import java.awt.color; int count = 200; int width = 600; int height = 600; int[][] body = new int[count*2][2]; int[][] smer = new int[count*2][2]; int[] barva = new int[count]; Color[] barvy = { Color.BLACK, Color.BLUE, Color.CYAN, Color.DARK_GRAY, Color.GRAY, Color.GREEN, Color.LIGHT_GRAY, Color.MAGENTA, Color.ORANGE, Color.PINK, Color.RED, Color.WHITE, Color.YELLOW ; DrawingTool dt = new DrawingTool(width, height, Color.BLACK, false); for (int i=0; i<count; i=i+2) { body[i][0] = (int) (Math.random()*width) + 1; body[i][1] = (int) (Math.random()*height) + 1; body[i+1][0] = (int) (Math.random()*width) + 1; body[i+1][1] = (int) (Math.random()*height) + 1; smer[i][0] = (Math.random()*(width/2)) > width/2? 1 : -1; smer[i][1] = (Math.random()*height) > height/2? 1 : -1; smer[i+1][0] = (Math.random()*width) > height/2? 1 : -1; smer[i+1][1] = (Math.random()*height) > height/2? 1 : -1; barva[i] = (int)(math.random()*barvy.length); dt.setcolor(barvy[barva[i]]); dt.line(body[i][0], body[i][1], body[i+1][0], body[i+1][1]); do { dt.stopupdate(); dt.clear(); for (int i=0; i<count; i=i+2) { body[i][0] += smer[i][0]; body[i][1] += smer[i][1]; body[i+1][0] += smer[i+1][0]; body[i+1][1] += smer[i+1][1]; if (body[i][0]>=width body[i][0]<=0) smer[i][0] = -smer[i][0]; if (body[i][1]>=height body[i][1]<=0) smer[i][1] = -smer[i][1]; if (body[i+1][0]>=width body[i+1][0]<=0) smer[i+1][0] = -smer[i+1][0]; if (body[i+1][1]>=height body[i+1][1]<=0) smer[i+1][1] = -smer[i+1][1]; dt.setcolor(barvy[barva[i]]); dt.line(body[i][0], body[i][1], body[i+1][0], body[i+1][1]); dt.startupdate(); while (1==1);

Třída DrawingTool strana 6 Poznámka: Pokud zakomentujete příkazy dt.stopupdate() a dt.startupdate(), uvidíte při spuštění programu efekt blikání a pomalého vykreslování, které použití těchto příkazů odstraňuje. Obecný cyklus jak dělat animace je: 1. zakázat vykreslování na obrazovku příkazem dt.stopupdate(); 2. připravit scénu (klasicky vykreslit objekty kreslení bude probíhat do paměťového bufferu (back bufferu); (v předchozím kódu tento bod odpovídá smazání obsahu okna, posunu bodů jednotlivých čar na novou pozici a následně jejich vykreslení na nových pozicích) 3. povolit vykreslování na obrazovku příkazem dt.startupdate() (ihned dojde k vykreslení paměťového bufferu na obrazovku)