<?xml version="1.0" ?>
<!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN" "dtd/kdex.dtd" [

  <!ENTITY kappname "&rocs;">
  <!ENTITY package "kdeedu">
  <!ENTITY % addindex "IGNORE">
  <!ENTITY % Estonian  "INCLUDE">
]>
<book id="rocs" lang="&language;">

<bookinfo>
<title
>&rocs;i käsiraamat</title>
<authorgroup>
<author
><personname
> <firstname
>Tomaz</firstname
> <surname
>Canabrava</surname
> </personname
> <email
>tomaz.canabrava@gmail.com</email
> </author>
<author
><personname
> <firstname
>Andreas</firstname
> <surname
>Cord-Landwehr</surname
> </personname
> <email
>cordlandwehr@googlemail.com</email
> </author>

<othercredit role="translator"
><firstname
>Marek</firstname
><surname
>Laane</surname
><affiliation
><address
><email
>bald@smail.ee</email
></address
></affiliation
><contrib
>Tõlge eesti keelde</contrib
></othercredit
> 
</authorgroup>

<copyright
><year
>2009</year
><holder
>Tomaz Canabrava</holder
></copyright>
<copyright
><year
>2011-2012</year
><holder
>Andreas Cord-Landwehr</holder
></copyright>

<date
>2012-12-02</date>
<releaseinfo
>1.7.80 &kde; 4.10</releaseinfo>

<legalnotice
>&FDLNotice;</legalnotice>

<abstract>
<para
>&rocs; on KDE graafiteooria tööriist. </para>
</abstract>

<keywordset>
<keyword
>KDE</keyword>
<keyword
>kdeedu</keyword>
<keyword
>matemaatika</keyword>
<keyword
>matemaatika</keyword>
<keyword
>graafid</keyword>
<keyword
>tipp</keyword>
<keyword
>seos</keyword>
</keywordset>

</bookinfo>

<chapter id="introduction">
<title
>Sissejuhatus</title>
<para
>Käesolev peatükk annab ülevaate &rocs;i põhiomadustest ja töövoost. Lugejatel, kes soovivad kohe hakata &rocs;i kasutama, soovitame läbi lugeda vähemalt <xref linkend="introduction-nutshell"/> ja võtta ette <xref linkend="scripting"/>, mis selgitab, kuidas kirjutada algoritme. </para>

<sect1 id="introduction-goals">
<title
>Eesmärgid, sihtrühmad ja töövoog</title>
<para
>&rocs; on graafiteooria arenduskeskkond kõigile, keda huvitab graafialgoritmide loomine ja analüüs. See hõlmab muu hulgas</para>
<itemizedlist>
    <listitem
><para
>õppejõude, kes soovivad demonstreerida algoritme oma õpilastele,</para
></listitem>
    <listitem
><para
>õppureid, kes soovivad mõista ja näha algoritmide tööd,</para
></listitem>
    <listitem
><para
>kõiki, kes tunnevad huvi andmestruktuuride ja algoritmide vastu.</para
></listitem>
</itemizedlist>

<para
>Kõigile neile pakub &rocs; hõlpsasti pruugitava andmestruktuuride redaktori, millega luua andmestruktuure, võimsa skriptimismootori algoritmide täitmiseks ja mitu abitööriista simulatsioonide ja katsete korraldamiseks. </para>

<para
>Tavaliselt on esimene samm &rocs;i kasutamisel graafi loomine visuaalse graafiredaktoriga. Seda võib teha käsitsi, see tähendab andmeelemente luues ja neid ühendades, või siis kasutades mõnda andmestruktuuri genereerijat (kui need on aktiivse andmestruktuuri taustaprogrammi jaoks olemas), mida pakub menüükäsk <menuchoice
><guimenu
>Graafidokument</guimenu
> <guimenuitem
>Tööriistad</guimenuitem
> <guimenuitem
>Graafi genereerimine</guimenuitem
></menuchoice
>. Samuti võib lõpuks kasutada tööriista <menuchoice
><guimenu
>Tööriistad</guimenu
> <guimenuitem
>Väärtuste omistamine</guimenuitem
></menuchoice
>, millega saab anda andmestruktuurielementidele väärtused. Neid saab omistada ka käsitsi. Lõpuks saab kirjutada JavaScriptis valmis oma algoritmi ja selle käivitada vastselt loodud andmestruktuuriga. Muudatused, mida algoritm andmestruktuuris teeb, on kohe näha visuaalses graafiredaktoris. </para>

<screenshot>
<screeninfo
>&rocs;i pilt.</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="rocs-screenshot.png" format="PNG"/>
</imageobject>
<textobject>
<phrase
>&rocs;i pilt.</phrase>
</textobject>
</mediaobject>
</screenshot>
</sect1>

<sect1 id="introduction-nutshell">
<title
>&rocs;i põhitõed</title>
<para
>Selles osas antakse lühiülevaade &rocs;i tähtsaimatest elementidest. Me selgitame olulisi andmestruktuuri, andmestruktuuri taustaprogrammi ja elemenditüübi mõisteid. Nende teadmine aitab mõista, kuidas käib &rocs;is andmestruktuuride loomine ja muutmine. </para>
<para
>Üldiselt töötab &rocs; projektidega: &rocs;i avamisel luuakse tühi projekt, mida sa võid asendada, kui laadid või impordid mõne muu projekti. Projekt ise aga koosneb <emphasis
>graafidokumentidest</emphasis
> ja <emphasis
>skriptidest</emphasis
>. </para>

<sect2>
<title
>Graafidokumendid ja andmestruktuuri taustaprogrammid</title>
<para
>Graafidokument tähendab visuaalse graafiredaktori lõuendi sisu. Graafidokument võib sisaldada korraga mitut andmestruktuuri, aga ainult üht andmestruktuuri taustaprogrammi. Andmestruktuuri taustaprogramme on mitmele graafitüübile (üldised graafid, lingitud loendid, juurega puu) ja need pakuvad konkreetsele graafitüübile lisavõimalusi. Selleks võivad olla elementide automaatne paigutamine, spetsiaalsed ikoonikogumid või ka algoritmides kasutavate skriptifunktsioonide täiendamine (üksikasju vaata käsiraamatu vastavatest osadest). Võimalik on muuta graafidokumendi andmestruktuuri taustaprogrammi, kuigi sellega võib kaasneda teabekadu (näiteks ei saa üldise graafi ringi seoseid lisada puule, kui lülitud juurega puu taustaprogrammile). </para>
<para
>Graafidokumendid on ühtlasi aluseks viida- ja andmetüüpide defineerimisel. </para>
</sect2>

<sect2>
<title
>Andmestruktuurid</title>
<para
>Andmestruktuurid on kogu &rocs;i töö alus. Neid võib lisada ühele graafidokumendile ka mitu, samuti saab lisada neile andmeelemente (sõlmed, andmed) ja viitu ning muuta neid skriptidega. Selleks on igal andmestruktuuril unikaalne nimi, mille järgi saab seda kasutada skriptis. Sõltuvalt parajasti valitud andmestruktuuri taustaprogrammist võib juhtuda, et andmestruktuure ei saa päris igatmoodi muuta (näiteks ei saa puu kunagi sisaldada tsüklit). Andmestruktuuri taustaprogrammi määrab kindlaks selle seos andmestruktuuri sisaldava graafidokumendiga. </para>
</sect2>

<sect2>
<title
>Viidatüübid</title>
<para
>Viidatüüpidega saab kindlaks määrata erinevad andmestruktuurides kasutatavad viidad. Viidatüüp võib näiteks saada konkreetse paigutuse (sisuliselt värvi) ja sellele on lihtne skriptis ligi pääseda ainult konkreetset tüüpi viita määrates. Viitade tüüpiline kasutamine on andmestruktuuride metaseoste teostamine, mis visualiseerivad andmeelementide seoseid (nt. visualiseerivad kommunikeerimishuve). Ka siis, kui sinu skript peab tuvastama konkreetset laadi sesoseid (nt. puu ja risti seoseid sügavutiotsingu algoritmi korral), on viidatüübid elegantne viis seda teostada. </para>
</sect2>

<sect2>
<title
>Andmetüübid</title>
<para
>Mitmegi andmestruktuuri probleemi korral tuleks andmeelementide kogum jagada eri tüüpi rühmadeks (näiteks klastri- või katvusprobleemide korral). Samuti võib olla tulus algoritmi täitmiseks kindlaks määrata, et andmeelemendi tüüp väljendab konkreetset tüüpi (nt. laiutiotsingu korral). Sellisel juhul on mõttekas defineerida andmetüübid. Igal andmetüübil on oma ikoon ja teatavaid andmetüüpe on hõlpus kasutada skriptides. </para>
</sect2>

<sect2>
<title
>Dünaamilised omadused</title>
<para
>Kõigil andmeelementidel ja viitadel võib olla hulk omadusi. Mõned neist on vaikeväärtused andmestruktuuri taustaprogrammist. Sellest kõneleb lähemalt andmestruktuuride taustaprogrammide dokumentatsioon. Täiendavate omaduste lisamiseks andmeelementidele ja viitadele võib neile lisada <emphasis
>dünaamilisi omadusi</emphasis
>. Iga dünaamilist omadust tuvastab selle nimi ning sellega võib olla seotud mis tahes väärtus. Nimi peab algama tähega ning võib sisaldada ainult tähti, numbreid ja märki '_'. Eesti täpitähti kasutada ei tohi. Kui üritad omaduse nimes kasutada mõnda keelatud märki, omadust ei muudeta. </para>
<para
>Dünaamilise omaduse lisamiseks kasuta vastavate elementide kontekstimenüüst avatavaid dialooge <guilabel
>Andmete omadused</guilabel
> ja <guilabel
>Viida omadused</guilabel
> või skripti funktsioone, nagu selgitab <xref linkend="scripting-data-structure"/>. </para>
<para
>Samuti võib kasutada skripte. Selles peab olema lihtsalt <literal
>add_property</literal
> koos omaduse nime ja väärtusega. Selle järel võib väärtuste määramiseks või hankimiseks kasutada node/pointer.propertyName. </para>
<para
>Siin on näide, kuidas kasutada dünaamilisi omadusi andmestruktuuri taustaprogrammis "Graaf". <programlisting
>nodes = myGraph.list_nodes()
for (var i = 0; i &lt; nodes.length; ++i ){
    nodes[i].add_property("MinuOmadus", 0)
}
nodes[0].MinuOmadus = 2
nodes[1].MinuOmadus = nodes[0].MinuOmadus + 2
    </programlisting>
</para>
</sect2>
</sect1>

<sect1 id="introduction-tutorial">
<title
>Õppematerjal</title>
<para
>Selles osas loome näidisprojekti, et uurida mõningaid &rocs;i tähtsamaid võimalusi. Eesmärk on luua graaf ja skript, mis näitlikustaksid <emphasis
>minimaalse tipukatte</emphasis
> probleemi lahendamiseks loodud lihtsat teist järku aproksimeerimise algoritmi. Minimaalse tipukatte probleemi korral püütakse leida minimaalse suurusega graafisõlmede alamhulka C, mille puhul iga graafi seos oleks ühendatud vähemalt ühe C tipuga. See probleem on NP-keerukusega ja me tahame siin näidata, kuidas leida teise järgu lähendust, leides sobivuse antud graafis (edaspidi kasutame graafialgoritmide puhul levinud mõisteid: graaf on andmestruktuur, tipud andmeelemendid, seosed viidad) </para>
<para
>Meie eesmärk on visualiseerida sobiva ja minimaalse tipukatte vastavust. Selleks tuleb kindlaks määrata kaks viidatüüpi: üks kujutab sobivaid ja teine tavalisi seoseid, samuti kaks andmetüüpi, mida me kasutame esitamaks C-s sisalduvaid ja selles mittesisalduvaid tippe. </para>

<sect2>
<title
>Graafi genereerimine</title>
<para
>Andmestruktuuri taustaprogrammi "Graaf" puhul pakub &rocs; tööriista, mis võib graafe genereerida. Valime menüükäsu <menuchoice
><guimenu
>Graafidokument</guimenu
> <guisubmenu
>Tööriistad</guisubmenu
> <guimenuitem
>Graafi genereerimine</guimenuitem
></menuchoice
>. Nüüd genereerime "juhusliku graafi" 30 tipu, 90 seose ja 1 seemnega (seeme on juhusliku graafi genereerija algseeme, sama seemne mitmekordsel kasutamisel saadakse samasugused, korratavad graafid). Lõpuks muudame andmestruktuuri paneelil graafi nime ja anname sellele nimeks <literal
>testgraph</literal
>. </para>
</sect2>

<sect2>
<title
>Tüüpide loomine</title>
<para
>Avame andmestruktuuri paneeli nupuga <guibutton
>Dokumendi omadused</guibutton
> aktiivse graafidokumendi andme- ja viidatüüpide omaduste dialoogi. Andmetüüpide juures lisame uue tüübi "C", mis saab automaatselt ID <literal
>1</literal
>. Valime sellele tüübile ikooniks serveripildi. Nüüd lülitume viidatüübi leheküljele ja lisame uue viidatüübi "matching". See saab automaatselt ID <literal
>1</literal
> ja me anname talle sinise värvi. </para>
</sect2>

<sect2>
<title
>Algoritm</title>
<para
>Lõpuks tuleb teostada lähenduse algoritm. Selleks kasutame järgmist teostust: </para>
<programlisting
>var E = testgraph.list_edges(); // set of unprocessed edges
var C = new Array();            // matching edges
while (E.length 
> 0) {
    var e = E[0];        // we take first edge e={u,v}
    var u = e.start();
    var v = e.end();
    e.set_type(1);        // set edge to be a matching edge
    E.shift();            // remove e (i.e., E[0]) from edge list
    C.push(u);            // add u to C
    C.push(v);            // add v to C

    // mark u,v as nodes in C
    u.set_type(1);
    v.set_type(1);

    // remove from E all edges incident to u or v
    var adjacent = u.adj_edges();
    for (var i=0; i &lt; adjacent.length; i++) {
        var index = E.indexOf(adjacent[i]); // find the index
        if (index!=-1) {
            E.splice(index, 1); // remove it if really found
        }
    }
    var adjacent = v.adj_edges();
    for (var i=0; i &lt; adjacent.length; i++) {
        var index = E.indexOf(adjacent[i]); // find the index
        if (index!=-1) {
            E.splice(index, 1); // remove it if really found
        }
    }
}
output("Tipukate sisaldab " + C.length + " tippu.");
</programlisting>
</sect2>

<sect2>
<title
>Algoritmi täitmine</title>
<para
>Lõpuks tuleb algoritm ka täita. Selleks käivitame selle skripti juhtimise paneelil klõpsuga nupule <guibutton
>Käivita</guibutton
>. </para>
</sect2>
</sect1>
</chapter>

<chapter id="user-interface">
<title
>&rocs;i kasutajaliides</title>

<sect1 id="user-interface-all">
<title
>Kasutajaliidese põhielemendid</title>
<para
>Kasutajaliides jaguneb mitmeks loogiliseks osaks, nagu on näha ka juuresoleval pildil. </para>
<screenshot>
    <screeninfo
>&rocs;i liidese graafilised elemendid.</screeninfo>
    <mediaobject>
    <imageobject>
    <imagedata fileref="rocs-interfaces.png" format="PNG"/>
    </imageobject>
    <textobject>
    <phrase
>&rocs;i liidese graafilised elemendid.</phrase>
    </textobject>
    </mediaobject>
</screenshot>
<variablelist>
<varlistentry>
    <term
>Dokumendivalija</term>
    <listitem
><para
>Sellel ülal asuval menüüribal tuleb valida aktiivne dokument ja andmestruktuur. Samuti saab siin luua ja kustutada andmestruktuure ning pääseda ligi andmestruktuuri omadustele. </para
></listitem>
</varlistentry>
<varlistentry>
    <term
>Visuaalne graafiredaktor</term>
    <listitem
><para
>See on lõuend, kus saab luua ja muuta andmestruktuure. Paremklõpsuga lõuendil, andmeelementidel või viitadel saab avada kontekstimenüü. <emphasis
>Visuaalse graafiredaktori tööriistariba</emphasis
> vahenditega saab muuta visuaalse graafiredaktori lõuendi elemente.</para
></listitem>
</varlistentry>
<varlistentry>
    <term
>Visuaalse graafiredaktori riba</term>
    <listitem
><para
>Siin paiknevad kõik visuaalse graafiredaktori tööriistad. Kasutades nuppe <guibutton
>Lisa andmed</guibutton
> või <guibutton
>Lisa ühendus</guibutton
>, saab vastavalt luua uusi elemente või elemente ühendada. Uued andmeelemendid lisatakse andmestruktuuri, mis on parajasti valitud <emphasis
>dokumendivalijas</emphasis
>. Pane tähele, et nii nupul <guibutton
>Lisa andmed</guibutton
> kui ka nupul <guibutton
>Lisa ühendus</guibutton
> on oma kontekstimenüü, milles saab valida loodavate elementide tüübi. Täpsemalt kõneleb sellest <xref linkend="user-interface-toolbars"/>. </para
></listitem>
</varlistentry>
<varlistentry>
    <term
>Külgriba</term>
    <listitem
><para
>Paremal näeb külgriba, kus paikneb mitu töövoole tulusat tööriista: <itemizedlist>
        <listitem
><para
>Elemenditüübid: see vidin võimaldab kasutada kõiki saadaolevaid viida- ja andmetüüpe.</para
></listitem>
        <listitem
><para
>Päevik: igal projektil on oma päevik, millesse saab näiteks üles tähendada ülesanded, tulemused või vaatlusandmed.</para
></listitem>
        <listitem
><para
>Dokumentatsioon: selle vidina abil saab otse kasutada käsiraamatut ning selle vahendusel ka skripti dokumentatsiooni.</para
></listitem>
        </itemizedlist>
    </para
></listitem>
</varlistentry>
<varlistentry>
    <term
>Skriptiredaktor</term>
    <listitem
><para
>Selles tekstiredaktoris saab kirjutada algoritme, nagu selgitab täpsemalt <xref linkend="scripting"/>. Korraga võib tegutseda ka mitme algoritmi kallal, kasutades selleks eri kaarte. Kui skripti tehtud muudatused on salvestamata, näeb kaardi sakil väikest ketast. </para
></listitem>
</varlistentry>
<varlistentry>
    <term
>Skripti väljund</term>
    <listitem
><para
>Selles tekstialas näeb kas sinu algoritmi silumisteavet või skripti väljundit sõltuvalt vidina ülaosas langetatud valikust. Kui skript tekitab vigu, valitakse automaatselt silumisväljund. </para
></listitem>
</varlistentry>
<varlistentry>
    <term
>Juhtelemendid</term>
    <listitem
><para
>Siin tegeldakse skriptide töölepanekuga. Parajasti avatud skripti saab täitma asuda, kui klõpsata nupule <guiicon
>Käivita</guiicon
>. Skripti käivitamise järel saab selle täitmist ka peatada, kui klõpsata nupule <guiicon
>Peata</guiicon
>. Pane tähele, et täitmisviisi <guibutton
>Üks samm</guibutton
> kasutamisel peatub täitmine ainukt konkreetsete võtmesõnade juures (vt. <xref linkend="scripting"/>). </para
></listitem>
</varlistentry>
</variablelist>
</sect1>

<sect1 id="user-interface-toolbars">
<title
>Tööriistaribad</title>
<para
>Siin on mitmesugused visuaalse graafiredaktori tööriistaribad, mis võimaldavad vajalikke võimalusi kasutada üheainsa klõpsuga. Vaikimisi näeb järgmisi tööriistaribasid:</para>
<itemizedlist>
    <listitem
><para
>Peamine tööriistariba</para
></listitem>
    <listitem
><para
>Joondusriba</para
></listitem>
</itemizedlist>
<!--  -->
<sect2 id="user-interface-toolbars-main">
<title
>Peamine tööriistariba</title>
<para
><emphasis
>Peamine tööriistariba</emphasis
> koosneb järgmistest toimingutest. Toimingule klõpsamine tähendab seda, et saad hiirega rakendada antud toimingu visuaalse graafiredaktori lõuendis:</para>
<itemizedlist>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsselectmove.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Liiguta</guilabel
>: elementide valimiseks klõpsa lõuendi tühjal alal, hoia hiirenupp all ja joonista ristkülik, mis sisaldab mõningaid andmeelemente ja/või viitu, mis sel juhul valitakse, või klõpsa vahetult valimata elemendi peal selle valimiseks. Kui klõpsad valitud elemendil või elementidel, saab hiirenuppu all hoides ja hiirt liigutades elemente liigutada. Valitud elemente saab liigutada ka nooleklahvidega.</para
></listitem>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsadddata.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Lisa andmed</guilabel
>: klõpsa visuaalse graafiredaktori lõuendil vajalikus kohas ja loo uus andmeelement, mis kuulub parajasti valitud  andmestruktuurile. Hiirekursorit nupul all hoides ilmub kontekstimenüü, mille abil saab valida loodavate andmeelementide andmetüübi (muidugi kui eri andmetüüpe saab ikka kasutada).</para
></listitem>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsaddedge.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Lisa ühendus</guilabel
>: klõpsa mõnel andmeelemendil, hoia hiir all ja tõmba joon teise andmeelemendini, milleni viit/seos peab ulatuma. Seda toimingut saadab edu ainult siis, kui aktiivne graaf võimaldab sellist seost lisada (nt. orienteerimata graafil ei ole lubatud lisada kahe andmeelemendi vahele mitut seost). Hiirekursorit nupul all hoides ilmub kontekstimenüü, mille abil saab valida loodavate viitade viidatüübi (muidugi kui eri viidatüüpe saab ikka kasutada).</para
></listitem>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsdeletedata.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Kustuta</guilabel
>: klõpsa elemendil selle kustutamiseks. Kui kustutad tipu, kustutatakse ka kõik sellega seotud seosed.</para
></listitem>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocszoom.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Suurendus</guilabel
>: klõpsa lõuendil, hoia &HVN; all ja joonista sellega ristkülik. Lõuendit suurendatakse, nii et näed ainult valitud osa. Samuti võib suurendada või vähendada hiirerattaga. Topeltklõps &HVNga; taastab esialgse suurenduse.</para
></listitem>
</itemizedlist>
</sect2>

<sect2 id="user-interface-toolbars-alignment">
<title
>Joondusriba</title>
<para
>Lisada võib ka <emphasis
>joondusriba</emphasis
>. Mõnele selle riba toimingule klõpsates saab vahetult mõjutada parajasti valitud tippe:</para>
<itemizedlist>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsaligntop.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Üles</guilabel
>: andmeelemendid joondatakse kõige ülemise andmeelemendi vertikaalse positsiooni järgi. See puudutab ainult vertikaalset positsiooni.</para
></listitem>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsalignvmiddle.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Keskele</guilabel
>: andmeelementide joondamine kõigi valitud admeelementide vertikaalsete positsioonide keskme järgi. See puudutab ainult vertikaalset positsiooni.</para
></listitem>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsalignbottom.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Alla</guilabel
>: andmeelemendid joondatakse kõige alumise andmeelemendi vertikaalse positsiooni järgi. See puudutab ainult vertikaalset positsiooni.</para
></listitem>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsalignleft.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Vasakule</guilabel
>: andmeelemendid joondatakse kõige vasakpoolsema andmeelemendi horisontaalse positsiooni järgi. See puudutab ainult horisontaalset positsiooni.</para
></listitem>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsalignhmiddle.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Keskele</guilabel
>: andmeelemendid joondatakse kõige ülemise andmeelemendi horisontaalse positsiooni järgi. See puudutab ainult horisontaalset positsiooni.</para
></listitem>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsalignright.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Paremale</guilabel
>: andmeelemendid joondatakse kõige parempoolsema andmeelemendi horisontaalse positsiooni järgi. See puudutab ainult horisontaalset positsiooni.</para
></listitem>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsaligncircle.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Ring</guilabel
>: andmeelemendid joondatakse ringi, mille diameeter võrdub andmeelementide maksimaalse vahemaaga. Andmeelemendid paigutatakse samas järjekorras nagu vaates alates andmeelementide raskuskeskmest.</para
></listitem>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsaligntree.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Kattuvate seoste minimeerimine</guilabel
>: valitud andmeelemendid korraldatakse ümber kattuvate seoste arvu minimeerikiseks (rakendatakse Fruchterman-Reingoldi algoritmi).</para
></listitem>
</itemizedlist>
</sect2>
</sect1>

<sect1 id="user-interface-documents">
<title
>Graafidokumentide töövoog</title>
<para
>&rocs;i projekt koosneb vähemalt ühest graafidokumendist, mida saab muuta visuaalses graafiredaktoris. Lisaks võib iga dokument sisaldada suvalise arvu andmestruktuure. Dokumendi andmestruktuurid kasutavad kõik üht ja sama andmestruktuuri taustaprogrammi. Allpool selgitatakse, kuidas liikuda dokumentide vahel ja kuidas luua uusi. </para>

<sect2 id="user-interface-documents-selector">
<title
>Dokumendivalija riba</title>
<para
>Dokumendivalija ribal saab valida aktiivse graafidokumendi ja ka aktiivse andmestruktuuri. Kui luua visuaalse graafiredaktori tööriistadega andmestruktuuride elemente, lisatakse need automaatselt aktiivsesse andmestruktuuri. Samuti saab selle riba abil aktiivses dokumendis kustutada olemasolevaid või luua uusi andmestruktuure. </para>

<itemizedlist>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsnew.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Uus</guilabel
>: selle abil saab luua uue andmestruktuuri, mille puhul kasutatakse parajasti kasutusel oleva andmestruktuuri taustaprogrammi automaatset nimemustrit. Loodud andmestruktuur lisatakse aktiivsesse graafidokumenti. </para
></listitem>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsdelete.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Kustuta</guilabel
>: selle abil saab kustutada andmestruktuuri, mis on parajasti valitud aktiivse dokumendi andmestruktuuri valijas. </para
></listitem>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsproperties.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Andmestruktuuri omadused</guilabel
>: sellega saab avada dialoogi, kus näeb ja saab muuta andmestruktuuri omadusi. </para
></listitem>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsproperties.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Dokumendi omadused</guilabel
>: selle abil saab avada dialoogi, kus näeb ja saab muuta nii dokumendi omadusi kui ka dokumendi andme- ja viidatüüpe. </para
></listitem>
</itemizedlist>

<screenshot>
<screeninfo
>Peamine tööriistariba.</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="document-selector.png" format="PNG"/>
</imageobject>
<textobject>
<phrase
>Dokumendivalija riba.</phrase>
</textobject>
</mediaobject>
</screenshot>
</sect2>

<sect2 id="user-interface-documents-menu">
<title
>Graafidokumentide loomine ja import</title>
<para
>Uue graafidokumendi loomiseks või olemasoleva lisamiseks projekti kasuta menüükäsku <menuchoice
><guimenu
>Projekt</guimenu
> <guimenuitem
>Uus graafidokument</guimenuitem
></menuchoice
> või <menuchoice
><guimenu
>Projekt</guimenu
> <guimenuitem
>Impordi &rocs;i graaf</guimenuitem
></menuchoice
>. Samuti võib importida mõne muu rakenduse graafidokumendi (täpsemalt kõneleb sellest <xref linkend="import-export"/>). </para>
</sect2>

</sect1>
</chapter>

<chapter id="scripting">
<title
>Algoritmide kirjutamine ja täitmine &rocs;is</title>

<para
>&rocs; kasutab seesmiselt QtScripti skriptimootorit, mis on otseselt JavaScripti mootor. See tähendab, et kõik teostatud algoritmid peavad kasutama JavaScripti. Kuidas JavaScript toimib ja kuidas JavaScripti koodi kirjutada, väljub käsiraamatu piiridest, ehkki me selgitame siin, kuidas pääseda skriptimootoriga ligi andmestruktuuridele, andmeelementidele ja viitadele. Et tegelikult ei kasutata kunagi vahetut andmestruktuuri objekti, vaid seda, mida pakub parajasti kasutusele andmestruktuuri taustaprogramm, laiendab vastav taustaprogramm andmestruktuuri ja sestap tuleb kasutada just seda spetsiaalset funktsionaalsust. Eriti tasub tähele panna, et andmestruktuuri taustaprogrammid kasutavad oma eripärast terminoloogiat (tipud ja seosed graafides, lehed ja juured puudes jne.). </para>
<para
>Oluline on tähele panna, et skriptimootori tehtud muudatused kajastuvad otseselt omadustes visuaalse graafiredaktori lõuendil. Niisiis muudavad skriptid ka tegelikult andmestruktuure. </para>

<sect1 id="scripting-data-structure">
<title
>Baasandmestruktuurielemendid</title>
<para
>Iga taustaprogramm pakub konkreetse valiku funktsioone ja omadusi enda andmestruktuuridele ja nende elementidele. Kuid samamoodi pakub iga taustaprogramm omadusi ja funktsioone, mis kehtivad baasandmestruktuurile. Seepärast kehtib kõik siin räägitav kõigi andmestruktuuri taustaprogrammide puhul. </para>
<sect2
><title
>Baasandmestruktuuride omadused</title>
<para
>Andmestruktuure tuvastatakse nende nime järgi. Oletades, et oled loonud andmestruktuuri nimega <literal
>testgraph</literal
>, saab seda andmestruktuuri kasutada lihtsalt selle identifikaatori abil. Näiteks kõigi selle andmestruktuuri andmeelementide massiivi hankimiseks tuleks skripti kirjutada <literal
>testgraph.list_nodes();</literal
>. </para>

<sect3>
<title
>Baasandmestruktuuri omadused ja funktsioonid</title>
<para
>Igal andmestruktuuril <literal
>testgraph</literal
> on järgmised omadused, mida saab lugeda või kirjutada <literal
>testgraph.property</literal
> vahendusel: </para>
<programlisting
>string name  // andmestruktuuri identifikaator
</programlisting>
</sect3>
</sect2>

<sect2>
<title
>Baasandmeelemendi omadused ja funktsioonid</title>
<para
>Igal andmeelemendil on järgmised omadused, mida saab lugeda või kirjutada: </para>
<programlisting
>double x      // aktiivse asukoha x-koordinaat
    double y      // aktiivse asukoha y-koordinaat
    double width  // suurus
    string value  // väärtus
    int id        // andmeelemendi unikaalne identifikaator
    string name   // nimi
    string color  // värv 16ndsüsteemis
</programlisting>
<para
>Lisaks saab kõiki andmeelemendi dünaamilisi omadusi kasutada nende nime järgi. </para>

<para
>Iga andmeelemendi objekt pakub järgmisi meetodeid: </para>
<programlisting
>int type();                         // andmeelemendi andmetüüp
    int set_type(int);                  // andmeelemendi andmetüübi määramine
    void add_property(string name,      // määratud nime ja väärtusega dünaamilise omaduse lisamine andmeelemendile
                      string value);
    array adj_data();                   // külgnevate andmete loend
    array adj_pointers();               // külgnevate viitade loend
    array input_pointers();             // sisendviitade loend
    array output_pointers();            // väljundviitade loend
    array loop_pointers();              // silmust moodustavate viitade loend
    array connected_pointers(target);   // sihtmärgile 'target' osutavate  viitade loend
    void  remove();                     // andmeelemendi eemaldamine
</programlisting>
</sect2>

<sect2>
<title
>Baasviida omadused ja funktsioonid</title>
<para
>Igal viidal on järgmised omadused, mida saab lugeda või kirjutada: </para>
<programlisting
>string color  // värv 16ndsüsteemis
    string value  // väärtus
    string name   // nimi
    double width  // laius
    string style  // stiili väärtus: punkt (dot), kriips (dash), punkt-kriips (dash dot), ühtlane (solid)
</programlisting>
<para
>Lisaks saab kõiki viida dünaamilisi omadusi kasutada nende nime järgi. </para>

<para
>Iga viidaobjekt pakub järgmisi meetodeid: </para>
<programlisting
>int type();                         // viida viidatüüp
    int set_type(int);                  // viida viidatüübi määramine
    void add_property(string name,      // määratud nime ja väärtusega dünaamilise omaduse lisamine andmeelemendile
                      string value);
    node start();                       // viida algustipp
    node end();                         // viida sihttipp
    void remove();                      // viida eemaldamine
</programlisting>
</sect2>
</sect1>

<sect1 id="scripting-backend-graph">
<title
>Graafi taustaprogramm</title>
<sect2>
<title
>Graafi omadused ja funktsioonid</title>



<sect3>
<title
>Graafi taustaprogrammi eriomadused</title>
<para
>Andmestruktuuri omaduste dialoog võimaldab kasutada graafi taustaprogrammile eripäraseid seadistusi. <guilabel
>Graafi tüüp</guilabel
> võimaldab valida graafi tüübi. See võib olla üks järgmistest: </para>
<itemizedlist>
    <listitem
><para
><guilabel
>Graaf</guilabel
>: graaf, milles ei saa mitu korda esineda samad seosed (mis on määratud algus- ja lõpp-punktiga). </para
></listitem>
    <listitem
><para
><guilabel
>Multigraaf</guilabel
>: graaf, milles saavad mitu korda esineda samad seosed (mis on määratud algus- ja lõpp-punktiga). </para
></listitem>
</itemizedlist>
</sect3>

<sect3>
<title
>Graafi struktuur</title>
<para
>Kui andmestruktuuriobjekti tüüp on "graaf", saab välja kutsuda järgmisi liikmesfunktsioone: </para>
<programlisting
>array list_nodes();                   // graafi kõigi tippude loend
    array list_nodes(int type);           // kõigi antud tüüpi tippude loend
    array list_edges();                   // graafi kõigi seoste loend
    array list_edges(int type);           // kõigi antud tüüpi seoste loend
    node add_node(name);                  // uue tipu lisamine ja selle tagastamine
    edge add_edge(node from, node to);    // uue seose lisamine alates (from) kuni (to) ja selle tagastamine
    array overlay_edges(int overlayID);   // kõigi seoste loend määratud ülekattes
    edge add_overlay_edge(node from,
                          node to,
                          int overlayID); // määratud viidatüübiga seose lisamine määratud ülekattesse
</programlisting>
</sect3>

<sect3>
<title
>Graafi tipud</title>
<para
>Kui andmestruktuuriobjekti tüüp on "graaf", saab lisaks omadustele, mida pakuvad andmeelemendid, graafi tippudel välja kutsuda järgmised liikmesfunktsioonid: </para>
<programlisting
>array adj_nodes();                    // kõigi külgnevate tippude loend
    array adj_edges();                    // ühendatud seoste loend
    array input_edges();                  // sisendseoste loend
    array output_edges();                 // väljundseoste loend
    array loop_edges();                   // kõigi tipul silmuse tegevate seoste loend
    array connected_edges(node target);   // kõik seosed, mis ühenduvad selle tipu kui sihtmärgiga (target)
</programlisting>
</sect3>

<sect3>
<title
>Graafi seosed</title>
<para
>Kui andmestruktuuriobjekti tüüp on "graaf", on saadaval ainult baasandmestruktuuri omadused. </para>
</sect3>
</sect2>

<sect2>
<title
>Graafi stuktuuri algoritmid</title>
<para
>Graafi taustaprogramm pakub mõningaid erifunktsioone, mida saab kasutada skriptimootori vahendusel.</para>
<variablelist>
<varlistentry>
<term
>Lühima teekonna arvutamine</term>
<listitem>
    <para
>Arvutab lühima tee tippude <emphasis
>algus</emphasis
> ja <emphasis
>lõpp</emphasis
> vahel. Mõlemad tipud peavad asuma ühel graafil. Arvutamine arvestab ka seda, kas graaf on orienteeritud või orienteerimata.</para>
    <funcsynopsis>
    <funcprototype
><funcdef
>array <function
>dijkstra_shortest_path</function
></funcdef
> <paramdef
>node <parameter
><replaceable
>algus</replaceable
></parameter
></paramdef
> <paramdef
>node <parameter
><replaceable
>lõpp</replaceable
></parameter
></paramdef
> </funcprototype>
    </funcsynopsis>
</listitem>
</varlistentry>
<varlistentry>
<term
>Lühima teekonna vahemaad</term>
<listitem>
    <para
>Arvutab lühima tee vahemaad tipust <emphasis
>algus</emphasis
> kõigi graafi teiste tippudeni. Arvutamine arvestab ka seda, kas graaf on orienteeritud või orienteerimata.</para>
    <funcsynopsis>
    <funcprototype
><funcdef
>array <function
>distances</function
></funcdef
> <paramdef
>node <parameter
><replaceable
>algus</replaceable
></parameter
></paramdef
> </funcprototype>
    </funcsynopsis>
</listitem>
</varlistentry>
</variablelist>
</sect2>
</sect1>

<sect1 id="scripting-backend-linkedlist">
<title
>Lingitud loendi taustaprogramm</title>
<sect2>
<title
>Lingitud loendi omadused ja funktsioonid</title>

<sect3>
<title
>Lingitud loendi struktuur</title>
<para
>Kui andmestruktuuriobjekti tüüp on "lingitud loend", saab välja kutsuda järgmisi liikmesfunktsioone: </para>
<programlisting
>node begin();                           // lingitud loendi peasõlme määramine
    setBegin(node begin):                   // tipu määramine loendi alguseks ja loendi ümberkorraldamine
    createNode();                           // loendi uue tipu loomine
</programlisting>
</sect3>

<sect3>
<title
>Lingitud loendi tipud</title>
<para
>Kui andmestruktuuriobjekti tüüp on "lingitud loend", saab lisaks omadustele, mida pakuvad andmeelemendid, graafi tippudel välja kutsuda järgmised liikmesfunktsioonid: </para>
<programlisting
>node front();                           // tipu eelkäija tagastamine
</programlisting>
</sect3>

<sect3>
<title
>Lingitud loendi seosed</title>
<para
>Kui andmestruktuuriobjekti tüüp on "lingitud loend", on saadaval ainult baasandmestruktuuri omadused. </para>
</sect3>
</sect2>
</sect1>

<sect1 id="scripting-backend-rootedtree">
<title
>Juurega puu taustaprogramm</title>
<sect2>
<title
>Juurega puu omadused ja funktsioonid</title>

<sect3>
<title
>Juurega puu taustaprogramm</title>
<para
>Andmestruktuuri omaduste dialoog võimaldab kasutada graafi taustaprogrammile eripäraseid seadistusi. Omaduse <guilabel
>Kõigi viitade näitamine</guilabel
> märkimisel näidatakse kõiki viitu puu tippude vahel. Kui see on märkimata, koondatakse mitu viita samade tippude vahel üheks. </para>
</sect3>

<sect3>
<title
>Juurega puu struktuur</title>
<para
>Kui andmestruktuuriobjekti tüüp on "juurega puu", saab lugeda või kirjutada järgmisi omadusi: </para>
<programlisting
>ShowAllPointers     // tõene (true), kui näidatakse kõiki seoseid, väär (false), kui mitu seost tuleb ühendada
</programlisting>
<para
>Kui andmestruktuuriobjekti tüüp on "juurega puu", saab välja kutsuda järgmisi liikmesfunktsioone: </para>
<programlisting
>node add_data(string name);         // määratud nimega tipu lisamine puule
    void set_root_node(node root);      // puu juurtipu määramine
    node root_node();                   // puu juurtipu tagastamine
</programlisting>
</sect3>

<sect3>
<title
>Juurega puu tipud</title>
<para
>Kui tipuobjekti tüüp on "juurega puu", saab lugeda või kirjutada järgmisi omadusi: </para>
<programlisting
>int numberOfChilds                  // määratud tipu (lubatud) järglaste arvu määramine
    node left_child                     // ainult loetav: vasakpoolsest järglasest tipp
    node right_child                    // ainult loetav: parempoolsest järglasest tipp
    node node_parent                    // ainult loetav: eellasest tipp
</programlisting>
<para
>Kui tipuobjekti tüüp on "juurega puu", saab välja kutsuda järgmisi liikmesfunktsioone: </para>
<programlisting
>node add_left_child(node child);    // vasaku järglase lisamine
    node add_right_child(node child);   // parema järglase lisamine
    node add_child(node child, int i);  // järglase lisamine tipu i-nda järglasena
    node add_node_parent(node child);   // eellase lisamine (õnnestub ainult siis, kui eellast pole veel määratud)
    node left_child();                  // parema järglase tagastamine
    node right_child();                 // vasaku järglase tagastamine
    node child_at(int i);               // tipu i-nda järglase tagastamine
    node node_parent();                 // tipu eellase tagastamine
</programlisting>
</sect3>

<sect3>
<title
>Juurega puu seosed</title>
<para
>Kui andmestruktuuriobjekti tüüp on "juurega puu", on saadaval ainult baasandmestruktuuri omadused. </para>
</sect3>
</sect2>
</sect1>

<sect1 id="scripting-controls">
<title
>Skripti täitmise juhtimine</title>
 

<sect2>
<title
>Päisefailid</title>
<para
>Skriptidokument võib kaasata ka teisi skripte. See võib olla abiks skriptidokumendi mahu vähendamisel ja loetavuse parandamisel. Menüükäsuga <menuchoice
><guimenu
>Skriptidokument</guimenu
> <guimenuitem
>Võimalikud päised</guimenuitem
></menuchoice
> saab teada skriptifailide nimekirja, mis on &rocs;iga juba kaasas ja mida on võimalik sel moel kaasta. Skriptifaili saab kaasata järgmise käsuga: </para>
<programlisting
>include_script(string path);            // skriptifaili suhteline või absoluutne asukoht
</programlisting>
</sect2>

<sect2 id="scripting-output">
<title
>Skripti väljund</title>
<para
>Algoritmi täitmise ajal näeb programmi- ja silumisväljundit alas <emphasis
>Silumis- ja skriptiväljund</emphasis
>. Kui skriptimootor tuvastab skriptis süntaksivigu, näeb seda ka silumisteatena. Pane tähele, et silumisväljundis näeb ka kõiki programmi sõnumeid (neid näidatakse rasvases kirjas). </para>
<para
>Teksti, mida näidatakse skriptiväljundis, saab juhtida järgmiste funktsioonidega: </para>
<programlisting
>output(string message);            // sõnumi näitamine skriptiväljundina
    debug(string message);             // sõnumi näitamine silumisväljundina
</programlisting>
</sect2>

<sect2 id="scripting-controlling">
<title
>Skripti täitmise juhtimine</title>
<para
>Skripte saab täita eri moel. </para>
<para
>Teksti, mida näidatakse skriptiväljundis, saab juhtida järgmiste funktsioonidega: </para>
<itemizedlist>
    <listitem
><para>
        <inlinemediaobject
><imageobject>
        <imagedata fileref="rocs-control-engine-run.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Käivita</guilabel
>: skripti täitmine algusest lõpuni.</para
></listitem>
    <listitem
><para>
        <inlinemediaobject
><imageobject>
        <imagedata fileref="rocs-control-engine-stop.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Peata</guilabel
>: skripti täitmise peatamine (saab kasutada ainult siis, kui skripti täidetakse).</para
></listitem>
    <listitem
><para>
        <inlinemediaobject
><imageobject>
        <imagedata fileref="rocs-control-engine-step.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Üks samm</guilabel
>: skripti täitmine kuni ühe sammu lõpuni. Samm lõpeb, kui skript kutsub välja funktsiooni <literal
>interrupt()</literal
>:</para>
    <programlisting
>interrupt();    // sammu lõpetamine
    </programlisting>
    </listitem>
    <listitem
><para>
        <inlinemediaobject
><imageobject>
        <imagedata fileref="rocs-control-engine-debug.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Silu</guilabel
>: skripti täitmine silumisrežiimis. See avab QtScripti silumisdialoogi.</para
></listitem>
</itemizedlist>
</sect2>
</sect1>
</chapter>

<chapter id="import-export">
<title
>Import ja eksport</title>
<sect1 id="import-export-projects">
    <title
>&rocs;i projektide vahetamine</title>
    <para
>&rocs;i projekte saab importida ja eksportida arhiveeritud <literal
>.tar.gz</literal
>-failidena. Nende arhiivide abil saab projekte teistega vahetada. Importida ja eksportida saab vastavalt menüükäskudega <menuchoice
><guimenu
>Fail</guimenu
> <guimenuitem
>Impordi projekt</guimenuitem
></menuchoice
> ja <menuchoice
><guimenu
>Fail</guimenu
> <guimenuitem
>Ekspordi projekt</guimenuitem
></menuchoice
>. </para>
</sect1>

<sect1 id="import-export-graphs">
    <title
>Graafidokumentide import ja eksport</title>
    <para
>&rocs; toetab praegu importimisel ja eksportimisel järgmisi failivorminguid:</para>
    <itemizedlist>
        <listitem
><para
>DOT-failid, tuntud ka kui Graphviz-failid</para
></listitem>
        <listitem
><para
>GML-failid</para
></listitem>
        <listitem
><para
>TGF (Trivial Graph Format) failid</para
></listitem>
    </itemizedlist>

<sect2 id="format-specification-tgf">
<title
>Trivial Graph failivorming</title>
<para
><emphasis
>Trivial Graph Format</emphasis
> (TGF) on lihtne graafe kirjeldav tekstipõhine failivorming. TGF-fail koosneb tipudefinitsioonide loendist, mis seovad tippude ID-d pealdistega ja millele järgneb seoste loend. Selles vormingus saab igal tipul olla ainult üks pealdis ja igal seosel ainult üks väärtus. &rocs; tõlgendab imporditud graafe orienteerimata graafidena. Eksporditud graafid sisaldavad ühenduse kohta kaks seost, kui ühendused on kahesuunalised. </para>

<sect3>
<title
>Vormingu spetsifikatsioon</title>
    <itemizedlist>
        <listitem
><para
>FAil algab tippude loendiga (üks tipp rea kohta), millele järgneb rida, millel on ainult märk "#". Sellele järgneb seoste loend (üks seos igal real).</para
></listitem>
        <listitem
><para
>Tipp koosneb täisarvust (identifikaator), millele järgneb tühik, millele järgneb suvaline string.</para
></listitem>
        <listitem
><para
>Seos koosneb kahest tühikuga eraldatud täisarvust (identifikaatoritest), millele järgneb tühik, millele järgneb suvaline string. Eeldatakse, et suunaga seos kulgeb esimeselt identifikaatorilt teisele.</para
></listitem>
    </itemizedlist>
</sect3>
<sect3>
<title
>Näide</title>
<programlisting
>1 algustipp
2 saatja
3 neel
#
1 2 sinine
2 1 punane
2 3 roheline
</programlisting>
</sect3>
</sect2>

<sect2 id="format-specification-dot">
<title
>DOT-keele / Graphcizi graafi failivorming</title>
<para
>DOT-keel on lihttekstis graafi kirjeldamise keel, mis võimaldab nii graafide inimsilmale kergesti haaratavat esitamist kui ka tõhusat töötlemist graafipaigutusprogrammide polt. DOT on Graphvizi graafide visualiseerimise komplekti vaikimisi failivorming, aga seda kasutavad ka paljud muud graafitööriistad. DOT-faili tavaline lõpp on <emphasis
>.gv</emphasis
> või <emphasis
>.dot</emphasis
>. </para>

<sect3>
<title
>Toetamata võimalused</title>
<para
>&rocs; suudab parsida kõiki graafifaile, mis sisaldavad graafi, mis on loodud DOT-keele spetsifikatsiooni alusel<footnote
><para
>http://www.graphviz.org/content/dot-language</para
></footnote
>. Keele omadused on täielikult toetatud, ehkki kehtivad järgmised erandid: </para>
    <itemizedlist>
        <listitem
><para
>alamgraafik (subgraph): et &rocs; ei kasuta alamgraafiku kontseptsiooni, imporditakse alamgraafikud lihtsalt andmeelementide ja ühenduste kogumina. Eriti tuleb tähele panna, et ei impordita ühendusi alamgraafikust või alamgraafikusse.</para
></listitem>
        <listitem
><para
>&HTML;-i ja &XML;-i atribuudid: atribuudid (näiteks pealdised), mis sisaldavad &HTML;-i või &XML;-i süntaksit, loetakse sisse muutmata kujul. Eriti tuleb tähele panna, et neist atribuutidest ei loeta välja fontide ja stiilide kohandamist.</para
></listitem>
    </itemizedlist>
</sect3>
<sect3>
<title
>Näide</title>
<programlisting
>digraph myGraph {
    a -> b -> c;
    b -> d;
}
</programlisting>
</sect3>
</sect2>

</sect1>
</chapter>

<chapter id="credits">
<title
>Autorid ja litsents</title>

<para
>&rocs; </para>
<para
>Rakenduse autoriõigus:</para>
<itemizedlist>
	<listitem
><para
>Autoriõigus 2008: Ugo Sangiori (ugorox AT gmail.com)</para
></listitem>
	<listitem
><para
>Autoriõigus 2008-2012: Tomaz Canabrava (tcanabrava AT kde.org)</para
></listitem>
	<listitem
><para
>Autoriõigus 2008-2012: Wagner Reck (wagner.reck AT gmail.com)</para
></listitem>
	<listitem
><para
>Autoriõigus 2011-2012: Andreas Cord-Landwehr (cordlandwehr AT googlemail.com)</para
></listitem>
</itemizedlist>

<para
>Dokumentatsiooni autoriõigus:</para>
<itemizedlist>
	<listitem
><para
>Dokumentatsiooni autoriõigus 2009: &Anne-Marie.Mahfouf; &Anne-Marie.Mahfouf.mail;</para
></listitem>
	<listitem
><para
>Dokumentatsiooni autoriõigus 2009: Tomaz Canabrava (tcanabrava AT kde.org)</para
></listitem>
	<listitem
><para
>Dokumentatsiooni autoriõigus 2011-2012: Andreas Cord-Landwehr (cordlandwehr AT googlemail.com)</para
></listitem>
</itemizedlist>

<para
>Tõlge eesti keelde: Marek Laane <email
>bald@smail.ee</email
></para
> 
&underFDL; &underGPL; </chapter>

<appendix id="installation">
<title
>Paigaldamine</title>

<sect1 id="getting-rocs">
<title
>&rocs;i hankimine</title>
&install.intro.documentation; </sect1>

<sect1 id="compilation">
<title
>Kompileerimine ja paigaldamine</title>
&install.compile.documentation; </sect1>
</appendix>

&documentation.index;
</book>
<!--
Local Variables:
mode: sgml
sgml-minimize-attributes: nil
sgml-general-insert-case: lower
sgml-indent-step:0
sgml-indent-data:nil
End:
-->
