JaGrLib: Cviceni cislo 2

Dulezite protokoly (interface)

Protokoly *Render

Definuji rutiny, ktere je nutno implementovat pro vykreslovani danych grafickych objektu (usecky, kruznice, elipsy, oblouky, krivky, polygony, apod.). Jednotlive podrobnosti viz package iface.

Typicky jsou kreslici objekty napojeny na vystup ve tvaru BitMask nebo AlphaMask (jedna-li se o anti-aliasing).

Vsechny protokoly typu *Render maji jako predka protokol Property (viz), tj musi implementovat jednoduche metody na cteni a nastavovani atributu (viz dalsi oddil).

Protokol Property

Jednoduchy protokol pro cteni a nastavovani libovolnych atributu. Atributy se oznacuji retezcovymi identifikatory a maji libovolny Javovsky typ (potomek tridy Object).
Kazdy potomek Piece implementuje implicitne tento protokol.

Cteni atributu:
Object get ( String key ). Vraci null, kdyz danemu atributu nerozumi nebo je nastavena prazdna hodnota.

Zapis atributu:
void set ( String key, Object value ).

Skutecne zapsani nastavenych atributu do vnitrniho stavu objektu. Neni povinne na tuto zpravu reagovat, ale klient by mel vzdycky commit volat:
void commit ().

Protokol BitMask

Slouzi k reprezentaci mnoziny pixelu v rovine. Standarni implementaci je vhodna datova struktura, do ktere se daji pixely zapisovat a zpatky take cist.

Interface lze vsak pouzit i k reprezentaci charakteristicke funkce mnoziny pixelu v rovine (lze jen cist, zapis se ignoruje) nebo naopak vystupniho filtru (lze jen zapisovat, cist nikoli).

Detaily viz on-line dokumentaci.

Trida BinaryOperation (sada konstant)

Obsahuje sadu konstant definujicich vsechny mozne binarni boolovske operace. Pouziva se pri kresleni (potomci protokolu Render) nebo v metodach realizujicich mnozinove operace.

Dokumentace viz tato stranka.

Protokol BitMaskEnumerator

Pouziva se pro efektivni prochazeni mnozinami typu BitMask nebo AlphaMask. Na pozadani (metoda enumerator()) se k dane mnozine vytvori trida implementujici tento enumerator. Lze pracovat najednou s vice enumeratory nad jednou mnozinou. Neni zaruceno poradi prochazeni prvku (ani deterministicnost!).

Protokol AlphaMask

Slouzi k reprezentaci "fuzzy" mnoziny pixelu v rovine. Kazdy pixel nese informaci, z kolika procent je jeho plocha "pokryta" (analogie alfa-kanalu). Pristupove funkce jsou velmi podobne tem z BitMask.

Detaily viz on-line dokumentaci.

Protokol RasterGraphics

Slouzi k reprezentaci rastroveho obrazku v rovine. Bezny vyznam tohoto protokolu predpoklada implementaci pomoci vhodne datove struktury (dvojrozmerne pole pixelu), ale existuji i aplikace pouzivajici pouze vstup (napr. vypocet proceduralniho obrazku za behu "on-the-fly") nebo pouze vystup (vystupni filtr).

Detaily viz on-line dokumentaci.

Protokol VectorGraphics

Slouzi k reprezentaci vektorove grafiky (posloupnost kreslicich prikazu). Zatim neni v JagrLib implementovan.

Zakladni logika je odvozena od systemu kresleni v jazyce Adobe PostScript. Tzv. "cesta" (Path) se nejprve konstruuje za pomoci prikazu newPath, moveTo, lineTo, arcTo, closePath, apod. Potom ji lze obkreslit (stroke), vybarvit jeji vnitrek (fill), nastavit podle ni orezavani (clip), atd. S celymi cestami se da zachazet pomoci prikazu pushPath a popPath. Sada prikazu obsahuje rovnez funkce pro praci s pismem (typu textPath i drawText).

Vektorovy format predpoklada uzivatelsky system souradnic pouzivajici floating-point aritmetiku (double).

Zatim se lze podivat do definic VectorGraphics, VectorCommand a VCommand.

 Souhrn vsech protokolu bude obsahovat tato stranka.


[Predchozi cviceni]  [Nasledujici cviceni]  [JaGrLib home-page]  [CGG at MFF UK]

Copyright (c) 2002-2006 Josef Pelikán, last change: $Date: 2013-11-22 23:47:16 +0100 (Fri, 22 Nov 2013) $