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í metody addShapes(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.IChangeable

    getArea, setArea, setArea, setArea

    Methods inherited from interface eu.pedu.lib20s.geom.IMovable

    getPosition, moveDown, moveRight, setPosition, setX, setY

    Methods inherited from interface eu.pedu.lib20s.geom.IResizable

    getSize, setHeight, setSize, setSize, setWidth
  • Field Details

    • DEFAULT_DIRECTION

      public static final Direction8 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 height
      Výška instance.
  • Constructor Details

    • Multishape

      public Multishape()
      Vytvoří prázdný mnohotvar očekávající, že jeho jednotlivé části budou teprve dodány pomocí metody addShapes(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

      public 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. 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í mnohotvaru
      parts - Předlohy dalších součástí mnohotvaru
    • Multishape

      public 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. 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í mnohotvaru
      parts - 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

      public Direction8 getDirection()
      Vrátí směr, do nějž je instance otočena.
      Specified by:
      getDirection in interface IDirectable
      Returns:
      Instance třídy Direction8 definující aktuálně nastavený směr
    • setDirection

      public void setDirection​(Direction8 direction)
      Otočí instanci do zadaného směru. Souřadnice instance se otočením nezmění.
      Specified by:
      setDirection in interface IDirectable
      Parameters:
      direction - Směr, do nějž má být instance otočena
    • setInitialDirection

      public void setInitialDirection​(Direction8 initialDirection)
      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.
      Specified by:
      getX in interface IMovable
      Returns:
      Aktuální vodorovná (x-ová) souřadnice instance, x=0 má levý okraj plátna, souřadnice roste doprava
    • 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.
      Specified by:
      getY in interface IMovable
      Returns:
      Aktuální svislá (y-ová) souřadnice instance, y=0 má horní okraj plátna, souřadnice roste dolů
    • 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 interface IMovable
      Parameters:
      x - Nově nastavovaná vodorovná (x-ová) souřadnice instance, x=0 má levý okraj plátna, souřadnice roste doprava
      y - 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 interface IResizable
      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 interface IResizable
      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 interface IResizable
      Parameters:
      width - Nově nastavovaná šířka; šířka >= 0
      height - 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

      public final void addShapes​(ICanvasShape... shapes)
      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

      public final void addTheShape​(ICanvasShape shape)
      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 interfejsu ICopyable, bude celý mnohotvar označen za nekopírovatelný.
      Parameters:
      shape - Přidávaný tvar
    • copy

      public Multishape 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.
      Specified by:
      copy in interface ICanvasShape
      Specified by:
      copy in interface ICopyable
      Specified by:
      copy in interface IShape
      Returns:
      Požadovaná kopie
    • 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 interface ICanvasPaintable
    • rubOut

      public void rubOut()
      Smaže obraz své instance z plátna (nakreslí ji barvou pozadí plátna).
      Specified by:
      rubOut in interface ICanvasPaintable
    • 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 class java.lang.Object
      Returns:
      Název instance následovaný jejími souřadnicemi, rozměry a barvou