Package eu.pedu.lib20s.canvasmanager
Class Multishape
java.lang.Object
eu.pedu.lib20s.geom.ANamed
eu.pedu.lib20s.geom.AMovable
eu.pedu.lib20s.geom.AChangeable
eu.pedu.lib20s.geom.AShape
eu.pedu.lib20s.canvasmanager.Multishape
- All Implemented Interfaces:
ICMPaintable
,ICMShape
,IDirectable
,IFlexible
,IChangeable
,IMovable
,IResizable
,IShape
,ICopyable
public class Multishape extends AShape implements ICMShape, IDirectable
Instance třídy
Mnohotvar
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 interfejsu ICMShape
,
ve zvláštních případech interfejsu IChangeable
– v takovém
případě pak ale není vytvořený mnohotvar kopírovatelný.
Mnohotvar je postupně skládán z řady jednodušších tvarů,
které musejí být instancemi rozhraní ICMShape
,
(případně. IChangeable
). 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á. -
Constructor Summary
Constructors Constructor Description Multishape()
Vytvoří prázdný mnohotvar očekávající, že jeho jednotlivé části budou teprve dodány pomocí metodyaddShapes(ICMShape...)
.Multishape(ICMShape part1, ICMShape... 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, ICMShape part1, ICMShape... 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(ICMShape... shapes)
Přidá do mnohotvaru kopie zadaných tvarů a příslušně upraví novou pozici a velikost mnohotvaru.<T extends IChangeable & ICMPaintable>
MultishapeaddTheShape(T 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.protected java.lang.String
forToString()
Vrací charakteristiky dané instance do jejího podpisu.Direction8
getDirection()
Vrátí směr, do nějž je instance otočena.int
getNumberOfShapes()
Return the number of shapes constituting the multishape.int
getNumberOfSimpleShapes()
Return the number of simple shapes constituting the multishape.boolean
isCopyable()
Vrátí informaci o tom, je-li daný mnohotvar kopírovatelný.void
paint(Painter painter)
Prostřednictvím dodaného kreslítka vykreslí obraz své instance.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
setPosition(int x, int y)
Přemístí instanci na zadanou pozici.void
setSize(int width, int height)
Nastaví nové rozměry instance.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, getX, getY, 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á.
-
-
Constructor Details
-
Multishape
public Multishape()Vytvoří prázdný mnohotvar očekávající, že jeho jednotlivé části budou teprve dodány pomocí metodyaddShapes(ICMShape...)
.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
-
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
- Overrides:
setPosition
in classAMovable
- 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ů
-
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
- Overrides:
setSize
in classAChangeable
- 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 rozhraníICopyable
, bude celý mnohotvar označen za nekopírovatelný.- Type Parameters:
T
- Skutečný typ argumentu- Parameters:
shape
- Přidávaný tvar- Returns:
- Instance daného mnohotvaru, aby bylo možno příkazy řetězit
-
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
Prostřednictvím dodaného kreslítka vykreslí obraz své instance.- Specified by:
paint
in interfaceICMPaintable
- Parameters:
painter
- Kreslítko schopné kreslit na plátno ovládané správcem
-
forToString
protected java.lang.String forToString()Vrací charakteristiky dané instance do jejího podpisu.- Overrides:
forToString
in classAChangeable
- Returns:
- Charakteristiky dané instance
-