<?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 % Dutch "INCLUDE">
]>
<book lang="&language;">

<bookinfo>
<title
>Het handboek van &rocs;</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>

&Freek.de.Kruijf;&Jaap.Woldringh; 
</authorgroup>

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

<date
>2011-12-04</date>
<releaseinfo
>1.1 &kde; 4.8</releaseinfo>

<legalnotice
>&FDLNotice;</legalnotice>

<abstract>
<para
>&rocs; is een hulpmiddel van KDE voor de grafentheorie. </para>
</abstract>

<keywordset>
<keyword
>KDE</keyword>
<keyword
>kdeedu</keyword>
<keyword
>wiskunde</keyword>
<keyword
>wiskunde</keyword>
<keyword
>grafen</keyword>
<keyword
>knoop</keyword>
<keyword
>kant</keyword>
</keywordset>

</bookinfo>

<chapter id="introduction">
<title
>Inleiding</title>
<para
>&rocs; is een IDE (werkomgeving) voor de grafentheorie, te gebruiken door iedereen die algoritmes in de grafentheorie wil ontwerpen en analyseren. Dit houdt expliciet in</para>
<itemizedlist>
	<listitem
><para
>docenten die mogelijk algoritmes aan hun studenten willen demonstreren,</para
></listitem>
	<listitem
><para
>studenten die willen begrijpen en zien hoe een algoritme werkt,</para
></listitem>
	<listitem
><para
>en iedereen die algoritmes voor grafen moeten ontwerpen, en die een hulpmiddel nodig hebben voor het testen van een prototype.</para
></listitem>
</itemizedlist>
<para
>Ieder van hen kan &rocs; prima gebruiken om grafen te bewerken, grafen op te zetten, en scripts te maken en uit te voeren met de krachtige "Qt Script scripting engine". Er zijn ook hulpmiddelen aanwezig voor het opzetten van grafen en gegevensstructuren, voor experimenten. De gebruikelijke werkwijze is dus het schrijven van een algoritme, het ontwerpen van een graaf, en het in real time zien welk effect het algoritme op de graaf heeft.</para>

<screenshot>
<screeninfo
>Schermbeeld van &rocs;.</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="rocs-screenshot.png" format="PNG"/>
</imageobject>
<textobject>
<phrase
>Schermbeeld van &rocs;.</phrase>
</textobject>
</mediaobject>
</screenshot>
</chapter>

<chapter id="user-interface">
<title
>De gebruikersinterface van &rocs;</title>

<sect1 id="user-interface-all">
<title
>Algemene elementen van de gebruikersinterface</title>
<para
>De gebruikersinterface is verdeeld in een aantal logische gedeelten, zoals getoond in onderstaand schermbeeld. </para>
<screenshot>
	<screeninfo
>GUI-elementen van de interface van &rocs;.</screeninfo>
	<mediaobject>
	<imageobject>
	<imagedata fileref="rocs-interfaces.png" format="PNG"/>
	</imageobject>
	<textobject>
	<phrase
>GUI-elementen van de interface van &rocs;.</phrase>
	</textobject>
	</mediaobject>
</screenshot>
<variablelist>
<varlistentry>
	<term
>Werkbalk voor de Visual Graph Editor (visueel bewerken van grafen)</term>
	<listitem
><para
>Om grafen met het whiteboard van de Visual Graph Editor te kunnen maken of wijzigen, moet u hier eerst een hulpmiddel selecteren</para
></listitem>
</varlistentry>
<varlistentry>
	<term
>Visual Graph Editor</term>
	<listitem
><para
>Hier kunt u de grafen tekenen. Rechtsklikken op het whiteboard, op de onderdelen van grafen, of op geselecteerde onderdelen van grafen, opent een contextmenu dat afhangt van waarop is geklikt.</para
></listitem>
</varlistentry>
<varlistentry>
	<term
>Eigenschappen grafen</term>
	<listitem
><para
>U ziet een complete lijst van alle verschillende grafen die thans op het whiteboard aanwezig zijn van de Visual Graph Editor. Hier kunt u wijzigingen aanbrengen, &eg; die in de naam van de graaf, zichtbare eigenschappen zoals namen of waarden van knopen, of kleuren vaststellen voor de elementen van de graaf.</para
></listitem>
</varlistentry>
<varlistentry>
	<term
>Bewerken van Scripts</term>
	<listitem
><para
>In deze tekstverwerker kunt u algoritmes schrijven in een Qt script (voor ons doel is dit in essentie hetzelfde als JavaScript). U kunt aan verschillende scripts tegelijk werken, door in het hoofdmenu verschillende tabbladen te openen of aan te maken. Indien wijzigingen nog niet zijn opgeslagen verschijnt er een klein schijfsymbooltje in het tabblad.</para
></listitem>
</varlistentry>
<varlistentry>
	<term
>Debug &amp; Script-uitvoer</term>
	<listitem
><para
>In dit tekstgebied staat informatie over het herstellen van fouten (debug), of de script-uitvoer van uw algoritme, afhankelijk van de selectie van de ingestelde uitvoer. Als het script een fout meldt, wordt automatisch de debug-uitvoer geselecteerd. Verder geeft de debug-uitvoer ook alle berichten weer van de programma-uitvoer.</para
></listitem>
</varlistentry>
<varlistentry>
	<term
>Script uitvoeren</term>
	<listitem
><para
>Dit menu regelt het uitvoeren van de algoritmes. U kunt het script uitvoeren dat op dit moment in de scriptbewerker is geopend op het whiteboard van de Visual Graph Editor (bewerkingsprogramma voor grafen), door op <guiicon
>Uitvoeren</guiicon
> te klikken. Een script kan tijdens het uitvoeren worden gestopt door op de knop <guiicon
>Stop</guiicon
> te klikken.</para
></listitem>
</varlistentry>
</variablelist>
</sect1>

<sect1 id="user-interface-toolbars">
<title
>Werkbalken</title>
<para
>Er zijn een aantal verschillende werkbalken beschikbaar voor het visuele bewerkingsprogramma voor grafen, waarin u met één klik over bepaalde bewerkingen kunt beschikken. Standaard worden de volgende werkbalken getoond:</para>
<itemizedlist>
	<listitem
><para
>Hoofdwerkbalk</para
></listitem>
	<listitem
><para
>Opmaakwerkbalk</para
></listitem>
</itemizedlist>

<sect2 id="user-interface-toolbars-main">
<title
>Hoofdwerkbalk</title>
<para
>In de <emphasis
>Hoofdwerkbalk</emphasis
> vindt u de volgende acties. Hierop klikken maakt dat uw muisaanwijzer deze actie toepast op het whiteboard van het visuele bewerkingsprogramma voor grafen:</para>
<itemizedlist>
<listitem
><para
><guilabel
>Verplaatsen</guilabel
>: U kunt elementen selecteren door in het whiteboard op een lege plek te klikken, of door de muisknop ingedrukt te houden en een rechthoek te "trekken" om enige knopen en/of kanten heen om deze elementen te selecteren, of door direct op een niet geselecteerd element te klikken om dit te selecteren. Indien u op een geselecteerd element klikt, of op een verzameling van geselecteerde elementen, kunt u die verplaatsen met de muis, met ingedrukte muisknop. Geselecteerde elementen kunnen ook met de pijltjestoetsen worden verplaatst.</para
></listitem>
<listitem
><para
><guilabel
>Knoop toevoegen</guilabel
>: Klik op een willekeurige plaats in het whiteboard van het visuele bewerkingsprogramma voor grafen, om zo een nieuwe knoop aan te maken voor de huidig geselecteerde graaf.</para
></listitem>
<listitem
><para
><guilabel
>Kant toevoegen</guilabel
>: Klik op een knoop, houdt de muisknop ingedrukt, en trek een lijn naar een andere knoop waarnaar de pijl/kant zal wijzen. Dit zal alleen lukken als het in de huidige graaf is toegestaan deze kant toe te voegen (&eg;, in een ongerichte graaf kunt u niet meerdere kanten toevoegen tussen knopen).</para
></listitem>
<listitem
><para
><guilabel
>Verwijderen</guilabel
>: Klik op het element om het te verwijderen. Bij het verwijderen van een knoop worden meteen alle ermee verbonden kanten verwijderd.</para
></listitem>
<listitem
><para
><guilabel
>Zoom</guilabel
>: Klik op het whiteboard, houdt de &LMB; ingedrukt, en "trek" op deze manier een rechthoek. Er wordt dan op deze rechthoek ingezoomd. U kunt ook met het muiswiel in- en uitzoomen. Door met de &LMB; te dubbelklikken wordt de originele zoom hersteld.</para
></listitem>
</itemizedlist>
<screenshot>
<screeninfo
>De hoofdwerkbalk.</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="rocs-toolbar-main.png" format="PNG"/>
</imageobject>
<textobject>
<phrase
>De hoofdwerkbalk.</phrase>
</textobject>
</mediaobject>
</screenshot>
</sect2>

<sect2 id="user-interface-toolbars-alignment">
<title
>Opmaakwerkbalk</title>
<para
>U kunt de optionele <emphasis
>Opmaakwerkbalk</emphasis
> toevoegen. Op een actie hierin klikken heeft direct effect op de huidig geselecteerde knopen:</para>
<itemizedlist>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsaligntop.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Boven</guilabel
>: Alle knopen verticaal uitlijnen op de positie van de bovenste knoop. Dit betreft alleen de verticale posities.</para
></listitem>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsalignvmiddle.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Midden</guilabel
>: De knopen uitlijnen op de verticale positie van het middelste van de geselecteerde knopen. Dit betreft alleen de verticale posities.</para
></listitem>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsalignbottom.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Onder</guilabel
>: Alle knopen verticaal uitlijnen op de positie van de onderste knoop. Dit betreft alleen de verticale posities.</para
></listitem>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsalignleft.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Links</guilabel
>: Alle knopen uitlijnen op de horizontale positie van de meest linkse knoop. Dit betreft alleen de horizontale posities.</para
></listitem>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsalignhmiddle.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Midden</guilabel
>: Alle knopen uitlijnen op de horizontale positie van de meest rechtse knoop. Dit betreft alleen de horizontale posities.</para
></listitem>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsalignright.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Rechts</guilabel
>: Alle knopen uitlijnen op de horizontale positie van de meest rechtse knoop. Dit betreft alleen de horizontale posities.</para
></listitem>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsaligncircle.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Cirkel</guilabel
>: Lijnt de knopen uit op een cirkel, waarvan de diameter gelijk is aan de grootste afstand tussen de knopen. De knopen worden geplaatst in dezelfde volgorde, als waarin ze worden gezien vanuit het meetkundige zwaartepunt van de de knopen.</para
></listitem>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsaligntree.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Kruisende kanten minimaliseren</guilabel
>: Het algoritme van Fruchterman-Reingold wordt gebruikt om het aantal elkaar kruisende kanten zo klein mogelijk te maken.</para
></listitem>
</itemizedlist>
<screenshot>
<screeninfo
>De opmaakwerkbalk.</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="rocs-toolbar-alignment.png" format="PNG"/>
</imageobject>
<textobject>
<phrase
>De opmaakwerkbalk.</phrase>
</textobject>
</mediaobject>
</screenshot>
</sect2>
</sect1>

<sect1 id="user-interface-graph-properties">
	<title
>Eigenschappen van grafen</title>
	<para
>In de linker zijbalk vindt u de opties voor elke geopende graaf. Al deze opties zijn globaal voor elke grafiek, en kunnen  voor elke knoop en kant worden gewijzigd in de dialogen voor de eigenschappen van knopen en kanten.</para>

	<itemizedlist>
	<listitem
><para
><guilabel
>Naam</guilabel
>: Met deze naam heeft het algoritme toegang tot de graaf. </para
></listitem>
	<listitem
><para
><guilabel
>Gegevenskleur</guilabel
> voor nieuwe knopen. U kunt de kleur van alle huidige knopen veranderen door op de knop <guilabel
>Alle</guilabel
> te klikken  </para
></listitem>
	<listitem
><para>
	  <guilabel
>Pijlkleur</guilabel
> <!--FIXME color of edges?-->
	</para
></listitem>
	</itemizedlist>
	<para
>De laatste rij opties bestaat uit aan/uit-knoppen:</para>
	<itemizedlist>
	<listitem
><para
><guilabel
>Namen tonen in:</guilabel
> <guilabel
>Gegevens</guilabel
> of <guilabel
>Pijlen</guilabel
>. </para
></listitem>
	<listitem
><para
><guilabel
>Waarden tonen in:</guilabel
> <guilabel
>Knopen</guilabel
> of <guilabel
>Kanten</guilabel
>. </para
></listitem>
	<!-- FIXME missing Graph Type Undirected Graph, Directed Graph, Multigraph -->
	</itemizedlist>
</sect1>
</chapter>

<chapter id="using-rocs">
<title
>&rocs; gebruiken</title>
<para
>De eerste stap is gewoonlijk een graaf aanmaken in het visuele bewerkingsprogramma voor grafen. U kunt dit met de hand doen, dat wil zeggen knopen toevoegen, en die met elkaar verbinden, of met behulp van een van de hulpalgoritmes, die u vindt in <guimenu
>Hulpmiddelen</guimenu
> <guimenuitem
>Graaf aanmaken</guimenuitem
>. Eventueel kunt u ook met de hulpmiddelen in <guimenu
>Hulpmiddelen</guimenu
> <guimenuitem
>Waarden toekennen</guimenuitem
> beginwaarden toekennen aan de knopen en kanten van de graaf. Tenslotte moet de graaf een naam krijgen, die in scripts kan worden gebruikt.</para>

<sect1 id="using-rocs-scripting">
<title
>Maken van scripts</title>
<para
>De scripttaal van &rocs; lijkt op JavaScript. Dit betekent dat in essentie het definiëren van variabelen en functies, en het gebruik ervan, net zo  gaat als in JavaScript. Daarnaast zijn er in &rocs; functies aanwezig, die toegang geven tot de grafen in het whiteboard van het visuele bewerkingsprogramma voor grafen, en de elementen daarvan. </para>

<sect2
><title
>Toegang tot een graaf</title>
<para
>In de scriptinterface krijgt u toegang tot een graaf door gewoon de naam ervan in te typen, en het als een object te gebruiken met een van de volgende functies. Voor toegang tot een knoop of kant, moet u een identificerende naam uit het graafobject gebruiken</para>
<variablelist>
<varlistentry>
<term
>Graafobjecten</term>
<listitem>
<programlisting
>// functions
     array list_nodes();
     array list_edges();
     node add_node(name);
     edge add_edge(from, to);
     node node_byname(QString&amp; name);
     node begin_node();
     array end_nodes();

// variables
     bool directed
     bool automate
     string name
     string nodeDefaultColor // in HEXA
     string edgeDefaultColor  // in HEXA


//Vert.: node: knoop, edge: kant
</programlisting>
</listitem>
</varlistentry>

<varlistentry>
<term
>Knoopobjecten</term>
<listitem>
<programlisting
>// functions
     array adj_nodes();
     array adj_edges();
     array input_edges();
     array output_edges();
     array loop_edges();
     array connected_edges(Node *n);
     void self_remove();

// variables
    double x
    double y
    double width
    string value
    string name
    string color  // in HEXA
    bool begin
    bool end
</programlisting>
</listitem>
</varlistentry>

<varlistentry>
<term
>Kantobjecten</term>
<listitem>
<programlisting
>string color ( em hexa )
    string value
    string name
    double width
    string style ( dot, dash, dash dot, solid )

    node start();
    node  end();

    void self_remove();
</programlisting>
</listitem>
</varlistentry>
</variablelist>
</sect2>

<sect2 id="script-graph-algorithms">
<title
>Algoritmes voor grafieken</title>
<para
>Het is soms wel handig functies te gebruiken voor standaard taken, zoals het berekenen van de kortste afstand tussen twee knopen in een graaf. Op dit moment worden de volgende algoritmen ondersteund, die voor knopen in dezelfde graaf kunnen worden gebruikt.</para>
<variablelist>
<varlistentry>
<term
>Berekening kortste afstand</term>
<listitem>
	<para
>Berekent de kortste afstand tussen twee knopen <emphasis
>start</emphasis
> en <emphasis
>eind</emphasis
>. Beide knopen moeten tot dezelfde graaf behoren. In deze berekening wordt rekening gehouden met het gericht zijn of niet van de graaf.</para>
	<funcsynopsis>
	<funcprototype
><funcdef
>array <function
>dijkstra_shortest_path</function
></funcdef
> <paramdef
>Node* <parameter
><replaceable
>start</replaceable
></parameter
></paramdef
> <paramdef
>Node* <parameter
><replaceable
>eind</replaceable
></parameter
></paramdef
> </funcprototype>
	</funcsynopsis>
</listitem>
</varlistentry>
</variablelist>
</sect2>
</sect1>

<sect1 id="script-example">
<title
>Voorbeeld</title>
<para
>Hier volgt een eenvoudig voorbeeld van een script, dat de kleuren instelt van de eerste 4 knopen in de eerste graaf:</para>
<programlisting
>/* Een eenvoudig voorbeeld dat de kleur instelt van de eerste 4 knopen in de eerste graaf: */

var kleuren = new Array("red", "green", "blue", "yellow");

/* graphs is een array van grafen, u kunt een graaf kiezen met zijn index in de
array, of met zijn naam, dus als de naam van de eerste graaf name Untitled0 is, zijn   de volgende
twee regels goed  */
var list1= graphs[0].list_nodes();            // 1e methode.
var list2=Untitled0.list_nodes();              // 2de methode

 for ( var i = 0; i &lt; kleuren.length; i++){
        if (i 
> list2.length) break;
        list2[i].color = kleuren[i]
 }
</programlisting>
</sect1>
<sect1>
	<title
>Import en export</title>
	<para
>Import en export naar de volgende formaten worden door &rocs; ondersteund: </para>
	<itemizedlist>
		<listitem
><para
>DOT-bestanden, ook wel bekend als Graphviz-bestanden.</para
></listitem>
		<listitem
><para
>GML-bestanden</para
></listitem>
		<listitem
><para
>Plain-Text-bestanden.</para
></listitem>
	</itemizedlist>
	<para
>Thans kunnen in de meeste van deze bestanden slechts een beperkt aantal waarden worden geïmporteerd. Hiertoe behoren de waarden van knopen en hun verbindingen, namen van alle elementen, waarden, en indien gegeven, ook coördinaten.</para>
</sect1>
</chapter>

<chapter id="credits">
<title
>Dankbetuiging en licentie</title>

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

<para
>Documentatie Copyright:</para>
<itemizedlist>
	<listitem
><para
>Documentatie copyright 2009 &Anne-Marie.Mahfouf; &Anne-Marie.Mahfouf.mail;</para
></listitem>
	<listitem
><para
>Documentatie copyright 2009 Tomaz Canabrava (tcanabrava AT kde.org)</para
></listitem>
	<listitem
><para
>Documentatie copyright 2011 Andreas Cord-Landwehr (cordlandwehr AT googlemail.com)</para
></listitem>
</itemizedlist>

&meld.fouten;&vertaling.jaap; 
&underFDL; &underGPL; </chapter>

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

<sect1 id="getting-rocs">
<title
>Hoe u &rocs; kunt verkrijgen</title>
&install.intro.documentation; </sect1>

<sect1 id="compilation">
<title
>Compileren en installeren</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:
-->
