Package eu.pedu.lib20s.canvas
Class Multishape
java.lang.Object
eu.pedu.lib20s.canvas.Multishape
- All Implemented Interfaces:
ICanvasPaintable
,ICanvasShape
,IDirectable
,IFlexible
,IChangeable
,IMovable
,IResizable
,IShape
,ICopyable
public class Multishape extends java.lang.Object implements ICanvasShape, IDirectable
Instance třídy
Multishape
představují složitější geometrické tvary
určené pro práci na virtuálním plátně
při prvním seznámení s třídami a objekty.
Tyto tvary mohou být složeny z několika tvarů jednodušších,
které jsou instancemi rozhraní ICanvasShape
.
Mnohotvar je postupně skládán z řady jednodušších tvarů,
které musejí být instancemi rozhraní ICanvasShape
.
Jiné požadavky na ně kladeny nejsou.
Při sestavování mnohotvar automaticky upravuje
interní informaci o své pozici a rozměru tak,
aby pozice byla neustále v levém rohu opsaného obdélníku
a rozměr mnohotvaru odpovídal rozměru tohoto obdélníku.
-
Field Summary
Fields Modifier and Type Field Description static Direction8
DEFAULT_DIRECTION
Směr, kam bude mnohotvar nasměrován v případě, když uživatel žádný preferovaný směr nezadá.protected int
height
Výška instance.protected int
width
Šířka instance. -
Constructor Summary
Constructors Constructor Description Multishape()
Vytvoří prázdný mnohotvar očekávající, že jeho jednotlivé části budou teprve dodány pomocí metodyaddShapes(ICanvasShape...)
.Multishape(ICanvasShape part1, ICanvasShape... parts)
Vytvoří mnohotvar skládající se z kopií zadaných tvarů a otočený do implicitního směru; do tohoto mnohotvaru již nebude možno přidávat další tvary.Multishape(Direction8 direction, ICanvasShape part1, ICanvasShape... parts)
Vytvoří mnohotvar skládající se ze zadaných tvarů a otočený do zadaného směru; do tohoto mnohotvaru již nebude možno přidávat další tvary. -
Method Summary
Modifier and Type Method Description void
addShapes(ICanvasShape... shapes)
Přidá do mnohotvaru kopie zadaných tvarů a příslušně upraví novou pozici a velikost mnohotvaru.void
addTheShape(ICanvasShape shape)
Přidá do mnohotvaru zadaný objekt (tj. ne jeho kopii) a příslušně upraví novou pozici a velikost mnohotvaru.Multishape
copy()
Vytvoří stejně velkou a stejně umístěnou hlubokou kopii daného mnohotvaru.void
creationDone()
Ukončí tvorbu mnohotvaru; od této chvíle již nebude možno přidat žádný další objekt.Direction8
getDirection()
Vrátí směr, do nějž je instance otočena.int
getHeight()
Vrátí výšku instance v bodech.java.lang.String
getName()
Vrátí název instance.int
getNumberOfShapes()
Return the number of shapes constituting the multishape.int
getNumberOfSimpleShapes()
Return the number of simple shapes constituting the multishape.int
getWidth()
Vrátí šířku instance v bodech.int
getX()
Vrátí x-ovou (vodorovnou) souřadnici pozice instance, tj. vodorovnou souřadnici levého horního rohu opsaného obdélníku.int
getY()
Vrátí y-ovou (svislou) souřadnici pozice instance, tj. svislou souřadnici levého horního rohu opsaného obdélníku.boolean
isCopyable()
Vrátí informaci o tom, je-li daný mnohotvar kopírovatelný.void
paint()
Zobrazí svoji instanci, tj.vykreslí její obraz na plátno.void
rubOut()
Smaže obraz své instance z plátna (nakreslí ji barvou pozadí plátna).void
setDirection(Direction8 direction)
Otočí instanci do zadaného směru.void
setInitialDirection(Direction8 initialDirection)
Nastaví zadaný směr jako výchozí směr vytvářené instance.void
setName(java.lang.String name)
Nastaví nový název instance.void
setPosition(int x, int y)
Přemístí instanci na zadanou pozici.void
setSize(int width, int height)
Nastaví nové rozměry instance.java.lang.String
toString()
Vrátí textový podpis instance, tj. její řetězcovou reprezentaci.Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Methods inherited from interface eu.pedu.lib20s.geom.IMovable
getPosition, moveDown, moveRight, setPosition, setX, setY
-
Field Details
-
DEFAULT_DIRECTION
Směr, kam bude mnohotvar nasměrován v případě, když uživatel žádný preferovaný směr nezadá. -
width
protected int widthŠířka instance. -
height
protected int heightVýška instance.
-
-
Constructor Details
-
Multishape
public Multishape()Vytvoří prázdný mnohotvar očekávající, že jeho jednotlivé části budou teprve dodány pomocí metodyaddShapes(ICanvasShape...)
.Ukončení sestavování mnohotvaru je třeba oznámit zavoláním metody
creationDone()
. Dokud není sestavování ukončeno, není možno nastavovat pozici ani rozměr vznikajícího mnohotvaru. Je však možno se na ně zeptat a současně je možno rozdělaný mnohotvar nakreslit. -
Multishape
Vytvoří mnohotvar skládající se z kopií zadaných tvarů a otočený do implicitního směru; do tohoto mnohotvaru již nebude možno přidávat další tvary. Vkládané tvary jsou skládány na sebe, takže první vložený bude zobrazen vespod a poslední vložený nahoře nade všemi.- Parameters:
part1
- Předloha první ze součástí mnohotvaruparts
- Předlohy dalších součástí mnohotvaru
-
Multishape
Vytvoří mnohotvar skládající se ze zadaných tvarů a otočený do zadaného směru; do tohoto mnohotvaru již nebude možno přidávat další tvary. Tvary jsou skládány na sebe, takže první vložený bude zobrazen vespod a poslední vložený nahoře nade všemi.- Parameters:
direction
- Směr, do nějž bude mnohotvar natočen; tento směr musí být jedním ze 4 hlavních směrůpart1
- První ze součástí mnohotvaruparts
- Další součásti mnohotvaru
-
-
Method Details
-
isCopyable
public boolean isCopyable()Vrátí informaci o tom, je-li daný mnohotvar kopírovatelný.- Returns:
- Je-li kopírovatelný, vrátí
true
, jinak vrátífalse
-
getDirection
Vrátí směr, do nějž je instance otočena.- Specified by:
getDirection
in interfaceIDirectable
- Returns:
- Instance třídy
Direction8
definující aktuálně nastavený směr
-
setDirection
Otočí instanci do zadaného směru. Souřadnice instance se otočením nezmění.- Specified by:
setDirection
in interfaceIDirectable
- Parameters:
direction
- Směr, do nějž má být instance otočena
-
setInitialDirection
Nastaví zadaný směr jako výchozí směr vytvářené instance. Tato metoda instancí neotáčí, pouze nastavují výchozí směr. Instance je implicitně považována za otočenou na sever. Má-li mít instance jiný výchozí směr, musí být nastaven před jejím dokončením.- Parameters:
initialDirection
- Nastavovaný výchozí směr instance
-
getName
public java.lang.String getName()Vrátí název instance. Výchozí podoba názvu názvu sestává z názvu třídy následovaného znakem podtržení a ID instance. Název je ale možné kdykoliv změnit.- Returns:
- Název instance
-
setName
public void setName(java.lang.String name)Nastaví nový název instance.- Parameters:
name
- Nový název instance
-
getX
public int getX()Vrátí x-ovou (vodorovnou) souřadnici pozice instance, tj. vodorovnou souřadnici levého horního rohu opsaného obdélníku. -
getY
public int getY()Vrátí y-ovou (svislou) souřadnici pozice instance, tj. svislou souřadnici levého horního rohu opsaného obdélníku. -
setPosition
public void setPosition(int x, int y)Přemístí instanci na zadanou pozici. Všechny její součásti jsou přesouvány současně jako jeden objekt. Pozice instance je přitom definována jako pozice levého horního rohu opsaného obdélníku.- Specified by:
setPosition
in interfaceIMovable
- Parameters:
x
- Nově nastavovaná vodorovná (x-ová) souřadnice instance, x=0 má levý okraj plátna, souřadnice roste dopravay
- Nově nastavovaná svislá (y-ová) souřadnice instance, y=0 má horní okraj plátna, souřadnice roste dolů
-
getWidth
public int getWidth()Vrátí šířku instance v bodech. Šířka instance jsou přitom definována jako šířka opsaného obdélníku.- Specified by:
getWidth
in interfaceIResizable
- Returns:
- Aktuální šířka instance v bodech
-
getHeight
public int getHeight()Vrátí výšku instance v bodech. Výška instance jsou přitom definována jako výška opsaného obdélníku.- Specified by:
getHeight
in interfaceIResizable
- Returns:
- Aktuální výška instance v bodech
-
setSize
public void setSize(int width, int height)Nastaví nové rozměry instance. Upraví rozměry a pozice všech jeho součástí tak, aby výsledný mnohotvar měl i při novém rozměru stále stejný celkový vzhled. Rozměry instance jsou přitom definovány jako rozměry opsaného obdélníku. Nastavované rozměry musí být nezáporné, místo nulového rozměru se nastaví rozměr rovný jedné.- Specified by:
setSize
in interfaceIResizable
- Parameters:
width
- Nově nastavovaná šířka; šířka >= 0height
- Nově nastavovaná výška; výška >= 0
-
getNumberOfShapes
public int getNumberOfShapes()Return the number of shapes constituting the multishape. If the multishape contains another multishape, this embedded multishape is counted as one shape.- Returns:
- Number of shapes constituting the multishape.
-
getNumberOfSimpleShapes
public int getNumberOfSimpleShapes()Return the number of simple shapes constituting the multishape. If the multishape contains another multishape, all its subshapes are counted.- Returns:
- Number of simple shapes constituting the multishape
-
addShapes
Přidá do mnohotvaru kopie zadaných tvarů a příslušně upraví novou pozici a velikost mnohotvaru.- Parameters:
shapes
- Přidávané tvary
-
addTheShape
Přidá do mnohotvaru zadaný objekt (tj. ne jeho kopii) a příslušně upraví novou pozici a velikost mnohotvaru. Neimplementuje-li přidávaný tvar interfejsuICopyable
, bude celý mnohotvar označen za nekopírovatelný.- Parameters:
shape
- Přidávaný tvar
-
copy
Vytvoří stejně velkou a stejně umístěnou hlubokou kopii daného mnohotvaru. Termín hluboká kopie označuje skutečnost, že tvary, které budou součástí vytvořené kopie, budou kopiemi odpovídajících součástí originálu. -
creationDone
public void creationDone()Ukončí tvorbu mnohotvaru; od této chvíle již nebude možno přidat žádný další objekt. -
paint
public void paint()Zobrazí svoji instanci, tj.vykreslí její obraz na plátno.- Specified by:
paint
in interfaceICanvasPaintable
-
rubOut
public void rubOut()Smaže obraz své instance z plátna (nakreslí ji barvou pozadí plátna).- Specified by:
rubOut
in interfaceICanvasPaintable
-
toString
public java.lang.String toString()Vrátí textový podpis instance, tj. její řetězcovou reprezentaci. Používá se především při ladění.- Overrides:
toString
in classjava.lang.Object
- Returns:
- Název instance následovaný jejími souřadnicemi, rozměry a barvou
-