Druhá domácí úloha z předmětu X36API


Řešitelé: Jan Skalický <mail>, Filip Šimek <mail>
  1. Zadání
  2. Screenshoty
  3. Prostředí
  4. Struktura programu
  5. Ovládání
  6. Odkazy
  1. Zadání:

    Vytvořte aplikaci, která bude bez nutnosti změny zdrojového kódu přeložitelná na operačních systémech Microsoft Windows i GNU/Linux.
    Aplikace bude vektorový editor, který bude umožňovat umístit na pracovní plochu Základní grafické elementy, přesouvat je a seskupovat, nastavovat jejich parametry. To vše převážně pomocí myši.


  2. Screenshoty:

    GVec Linux    GVec Windows



  3. Prostředí:

    Aplikace je napsána v programovacích jazycích C a C++. Použili jsme toolkit GTK+2.0 pro vytvoření přenositelného GUI, na základ jeho návrhu posloužil program GLADE. Překlad prováděl kompilátor gcc ve verzi 4.0.2 na operačním systému GNU/Linux Slackware 10.2 a portace tohoto překladače, MinGW, v prostředí Cygwin na Windows.



  4. Struktura programu:

    Jádrem datové části programu je abstraktní třída CElem a jednotlivé elementy z ní odvozené, držící informace o jednotlivých grafických elementech. Datová část je zcela nezávislá na zobrazovací části vytvořené v knihovně GTK. Pro své zobrazení využívají grafické mezivrstvy, která abstrahuje od GDK a je tedy možné použít datové třídy i v projektech postavených na jiných toolkitech. Třída CElem obsahuje také třídní metody (tedy nezávislé na konkrétních instancích objektů), které se starají například o vybrání všech elementů, kterým náleží zadaný bod, které leží v zadaném odbélníku, nebo přesun či zrušení vybraných objektů. Takto třída CElem a třídy od ní odvozené prakticky zapouzdřuje všechny operace, prováděné s objekty.

    Základ grafického rozhraní byl navržen v programu GLADE a byl postupně rozšiřován. Program nevykonává žádnou činnost na pozadí, pouze reaguje na uživatelský vstup, proto mu stačí reagovat na signály, zasílané knihovnou glib. Signály od tlačítek na toolbaru byly spojeny s příslušnými signály z menu. Vykonává-li uživatel operaci, která mění vlastnosti již vytvořených objektů, pak jsou volány metody třídy CElem; pokud uživatel nastavuje vlastnosti budoucích objektů, nebo styl zobrazení, pak handler příslušného signálu nastavuje globální proměnné. Překreslování pracovní plochy má na starost opět grafická mezivrstva.

    Tato grafická mezivrstva obsahuje funkce pro vykreslení grafických primitiv: bodů, úseček, polygonů a elips. Také se stará o přepočet mezi souřadnicemi obrazovky (pixely) a logickými souřadnicemi, se kterými pracuje jádro programu. Přes logické souřadnice je řešeno ovládání zoomu (prakticky násobení logických souřadnic koeficientem) a scrollování (přičítání koeficientů k souřadnicím).



  5. Ovládání programu:

    Program se ovládá převážně myší, všechny operace mají svou ikonu na panelu nástrojů.

    new Nový dokument Všechny objekty jsou vymazány
    group Seskupit Vybrané objekty seskupí do jedné skupiny
    ungroup Rozdělit skupinu Vybrané vytvořené skupiny objektů rozloží zpět na jednotlivé objekty
    selection type Typ selekce Je-li tlačítko nezmáčknuté, pak při výběru objektů tažením myši (obdélníkem) jsou vybrány všechny objekty, které v odbélníku leží alespoň jedním vrcholem. V opačném případě jsou vybrány jen ty, které leží uvnitř všemi vrcholy
    grid Mřížka Je-li tlačítko stlačeno, jsou včechny vrcholy nově vytvořených objektů zarovnány do předkreslené mřížky. V opačném případě mohou být rozmístěny libovolně
    zoomip Lupa+ Zvětšení, přiblížení. Souřadnice levého horního rohu zůstanou nezměněny a okno bude dvakrát přiblíženo
    zoomout Lupa- Zmenšení, oddálení. Souřadnice levého horního rohu zůstanou nezměněny a okno bude dvakrát oddáleno
    lupa100 Lupa 1:1 Přenastavení lupy na výchozí hodnotu
      Barva popředí Vybraným objektům se změní barva popředí na barvu zvolenou v dialogu. Další vytvářené objekty budou mít také tuto barvu
      Barva pozadí Vybraným objektům se změní barva pozadí na barvu zvolenou v dialogu. Další vytvářené objekty budou mít také tuto barvu
    filled Vyplnění Je-li tlačítko stisknuté, budou vybrané plošné objekty vyplněny barvou pozadí. V opačném případě budou průhledné. Tato vlastnost nemá vliv u čárových elementů
    dashed Styl čáry Obrysová čára objektů bude buď plná, nebo přerušovaná
      Tloušťka čáry Nastavení tloušťky obrysové čáry objektů

    V levém panelu nástrojů lze nalézt tlačítka, která mění chování myšího kurzoru. První z nich slouží k vybírání objektů nebo skupin objektů, další umožňuje vybrané objekty posouvat. Ostatní tlačítka již slouží k vytváření jednotlivých grafických elementů, jsou to po řadě: čára, multičára, trojúhelník, obdélník, elipsa a polygon. Po výběru příslušného typu elementu může uživatel klikat levým tlačítkem myši na hlavní plochu dokumentu a vkládat tak jednotlivé vrcholy objektu. Pro ukončení vkládání lze použít kliknutí pravým myším tlačítkem. Ne zcela dokončené objekty nebudou vytvořeny.



  6. Odkazy: