<?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 "rocs">
  <!ENTITY % addindex "IGNORE">
  <!ENTITY % Dutch "INCLUDE">

  <!ENTITY apiConsole SYSTEM "apiConsole.docbook">
  <!ENTITY apiDatastructure SYSTEM "apiDatastructure.docbook">
  <!ENTITY apiGraphstructure SYSTEM "apiGraphstructure.docbook">
  <!ENTITY apiLinkedListstructure SYSTEM "apiLinkedListstructure.docbook">
  <!ENTITY apiRootedTreestructure SYSTEM "apiRootedTreestructure.docbook">

  <!ENTITY chapterImportExport SYSTEM "chapterImportExport.docbook">
]>
<book id="rocs" 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@kde.org</email
> </author>

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

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

<date
>2013-07-03</date>
<releaseinfo
>1.9.0 &kde; 4.11</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
>In dit hoofdstuk vindt u een overzicht van de kerneigenschappen en manier van werken met &rocs;. Als u direct wilt beginnen met werken met &rocs; raden we u aan <xref linkend="introduction-nutshell"/> te lezen en <xref linkend="scripting"/> te gebruiken als referentie bij het schrijven van algoritmes. </para>

<sect1 id="introduction-goals">
<title
>Doelen, voor wie is dit bestemd en manier van werken.</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 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 verder iedereen die belang stelt in gegevensstructuren en algoritmes.</para
></listitem>
</itemizedlist>

<para
>Iedereen kan &rocs; goed gebruiken voor het aanmaken van gegevensstructuren, als een krachtig hulpmiddel voor het maken van scripts voor het uitvoeren van algoritmes, en als hulpmiddel voor het uitvoeren van simulaties en experimenten. </para>

<para
>De eerste stap in &rocs; is gewoonlijk een graaf aanmaken in het visuele bewerkingsprogramma voor grafen. U kunt dit met de hand doen, dat wil zeggen gegevenselementen toevoegen en die met elkaar verbinden, of met behulp van een van de hulpalgoritmes (indien aanwezig voor de huidige plugin voor gegevensstructuren), die u vindt in <menuchoice
><guimenu
>Graafdocument</guimenu
> <guimenuitem
>Hulpmiddelen</guimenuitem
> <guimenuitem
>Graaf aanmaken</guimenuitem
></menuchoice
>. U kunt verder waarden toekennen aan de elementen van de gegevensstructuren, met de hand, of met <menuchoice
><guimenu
>Graafdocument</guimenu
> <guimenuitem
>Hulpmiddelen</guimenuitem
> <guimenuitem
>Waarden toekennen</guimenuitem
></menuchoice
>. Tenslotte kunt u een algoritme schrijven in JavaScript en die met de zojuist aangemaakte gegevensstructuur laten uitvoeren (werken). De door uw algoritme aangebrachte veranderingen zijn dan direct zichtbaar in het visuele bewerkingsprogramma. </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>
</sect1>

<sect1 id="introduction-nutshell">
<title
>&rocs; in een notendop</title>
<para
>In dit deel geven we een kort overzicht van de kernelementen van &rocs;. We leggen de belangrijke begrippen uit van gegevensstructuren, de bijbehorende  backends,en  typen van elementen. Kennis hiervan is nodig om te kunnen begrijpen hoe in &rocs; gegevensstructuren kunnen worden aangemaakt en gewijzigd. </para>
<para
>In het algemeen werkt men in &rocs; met projecten: wanneer &rocs; wordt gestart, wordt een leeg project aangemaakt, dat u kunt vervangen door het inlezen of importeren van een ander project. Hierbij bestaat een project zelf uit <emphasis
>graafdocumenten</emphasis
> en <emphasis
>scripts</emphasis
>. </para>

<sect2>
<title
>Backends voor graafdocumenten en gegevensstructuren</title>
<para
>Een graafdocument bevat de inhoud van een whiteboard, in het visuele  bewerkingsprogramma voor de graaf.  Hierin kan een graafdocument diverse gegevensstructuren tegelijk bevatten, maar slechts één bijbehorende backend. Er zijn backends aanwezig voor voor diverse graaftypen (algemene grafen, gekoppelde lijsten (linked lists), boomstructuren (rooted trees)), die toegevoegde functionaliteit bieden voor hun specifieke graaftypen. Dat kan het automatisch positioneren zijn van de elementen, speciale verzamelingen van pictogrammen (iconsets), of een uitgebreide verzameling van scriptfuncties, die in algoritmes kunnen worden gebruikt. (details vindt u elders in dit handboek). In een graafdocument kunt u een andere backend kiezen voor een gegevensstructuur, maar er kan hierdoor wel informatie verloren gaan (bv. kanten van een cirkel in een algemene graaf worden niet aan een boomstructuur toegevoegd, als u overschakelt naar de backend voor een boomstructuur). </para>
<para
>Graafdocumenten vormen ook de basis voor de definitie van pijltypen en gegevenstypen. </para>
</sect2>

<sect2>
<title
>Gegevensstructuren </title>
<para
>Gegevensstructuren vormen de basis van het werken in &rocs;. U kunt er een of meer aan een graafgdocument toevoegen, gegevenselementen toevoegen (knopen, data) en pijlen, en die wijzigen in scripts. Daarom moet elke gegevensstructuur een unieke naam hebben, waarmee die in de scripts kan worden genoemd. Als gevolg van de huidig gekozen backend voor de gegevensstructuren, kan het zijn dat u de gegevensstructuren niet willekeurig kunt wijzigen (bv. een boomstructuur mag nooit een cyclische structuur bevatten). De backend voor gegevensstructuren moet passen bij de gegevensstructuur in het graafdocument. </para>
</sect2>

<sect2>
<title
>Pijltypen</title>
<para
>Met pijltypen kunt u verschillende typen van pijlen definiëren, die in de gegevensstructuren kunnen worden gebruikt. Dit betekent dat een pijltype afzonderlijk kan worden opgemaakt (vooral de kleur), en dat het eenvoudig is in uw scripts alleen pijlen te gebruiken van een bepaald type. Een typisch voorbeeld van het gebruik van pijlen is bij de implementatie van meta-kanten in gegevensstructuren die relaties visualiseren tussen gegevenselementen (bv. communicatie). Maar ook kunnen pijltypen worden gebruikt om op een elegante manier bepaalde soorten kanten te beschrijven (bijvoorbeeld in het algoritme voor het zoeken volgens de methode met de naam "depth first search").  </para>
</sect2>

<sect2>
<title
>Gegevenstypen</title>
<para
>In sommige problemen met gegevensstructuren moet een verzameling van gegevenselementen in groepen met een verschillend type worden verdeeld (bv. bij "clustering" problemen en "covering" problemen). Of is het nuttig om in een algoritme een gegevenselement op te geven voor een bepaald type (bv. bij "breath first search"). Elk gegevenstype heeft zijn eigen pictogram en in uw scripts kunt u de gegevenstypen van een bepaald type eenvoudig gebruiken. </para>
</sect2>

<sect2>
<title
>Dynamische eigenschappen</title>
<para
>Elk gegevenselement en elke pijl kan vele eigenschappen hebben. Sommige hiervan zijn standaard vanuit de backend voor de gegevensstructuur. Zie voor meer hierover de documentatie van deze backend. U kunt eigenschappen toevoegen middels <emphasis
>dynamische eigenschappen</emphasis
>. Iedere dynamische eigenschap heeft een naam en kan elke waarde krijgen. De naam moet met een letter (a-z of A-Z) beginnen, en kan alleen letters, cijfers en '_' bevatten. Indien u een ongeldig teken gebruikt voor de naam van de eigenschap, wordt de eigenschap niet gewijzigd. </para>
<para
>U kunt  dynamische eigenschappen toevoegen in de dialogen  <guilabel
>Eigenschappen gegevenselementen</guilabel
> en <guilabel
>Eigenschappen pijlen</guilabel
> in de erbij behorende contextmenu's  of met de scriptfuncties, zoals wordt uitgelegd in <xref linkend="scripting-data-structure"/>. </para>
<para
>U kunt ook de scripts gebruiken. U hoeft hiervoor alleen <literal
>eigenschap_toevogen</literal
> te gebruiken, met de naam en waarde van de nieuwe eigenschap. Daarna kunt u de waarden ophalen of instellen met knoop/pijl.NaamEigenschap </para>
<para
>Hier volgt een voorbeeld van het gebruik van dynamische eigenschappen met de backend voor grafen. <programlisting
>nodes = mijnGraaf.list_nodes()
for (var i = 0; i &lt; nodes.lengte; ++i ){
    nodes[i].add_property("mijnEigenschap", 0)
}
nodes[0].mijnEigenschap = 2
nodes[1].mijnEigenschap = nodes[0].mijnEigenschap + 2
    </programlisting>
</para>
</sect2>
</sect1>

<sect1 id="introduction-tutorial">
<title
>Instructie</title>
<para
>In dit gedeelte maken we een voorbeeldproject aan, waarin enkele van de meest belangrijke eigenschappen van &rocs; worden gebruikt. Het doel is een graaf en een script te maken voor een eenvoudig 2-benaderingsalgoritme voor het <emphasis
>"minimum vertex cover"</emphasis
>- probleem. Dit houdt in het zoeken naar de kleinste deelverzameling C van de knopen van de graaf, zodat elke kant van de graaf met tenminste een knoop van C is verbonden. Het is bekend dat dit probleem "NP-hard" is, en we willen laten zien hoe we een benadering met een factor 2 kunnen vinden door een overeenkomst in de bestaande graaf te zoeken (in het volgende gebruiken we de gebruikelijke termen in graafalgoritmes: graaf is de gegevensstructuur, knopen zijn de gegevenselementen, kanten zijn de pijlen). (Noot vertaler: ik handhaaf vele Engelse benamingen, ten eerste om de gebruiker van deze tekst in de gelegenheid te stellen om naar deze namen te googlen, en ten tweede omdat ik van de meeste niet de Nederlandse naam (als die er is) ken, of kan vinden). </para>
<para
>Ons doel is de overeenkomst zichtbaar te maken tussen de overeenkomende en de "minimum match cover". Hiervoor moeten we twee pijltypen specificeren, een voor het tonen van de overeenkomende kanten, en een voor de gewone kanten. En verder twee gegevenstypen, die gebruikt worden voor het onderscheid tussen knopen in C en knopen die niet tot C behoren. </para>

<sect2>
<title
>Een graaf genereren</title>
<para
>Voor de graaf-backend <quote
>Graph</quote
> is in &rocs; een hulpmiddel aanwezig waarmee grafen kunnen worden aangemaakt. We gaan naar het menu <menuchoice
><guimenu
>Graafdocument</guimenu
> <guisubmenu
>Hulpmiddelen</guisubmenu
> <guimenuitem
>Graaf aanmaken</guimenuitem
></menuchoice
>. Hier genereren we een <guilabel
>Wllekeurige graaf</guilabel
>, met 30 knopen, 90 kanten en met het zaadje 1 (het zaadje is de startwaarde voor het genereren van willekeurige getallen; meerdere keren dit zelfde zaadje gebruiken resulteert in dezelfde, en dus reproduceerbare grafen). Tenslotte veranderen we de naam van de graaf in het paneel voor de gegevensstructuur in <literal
>testgraaf</literal
>. </para>
</sect2>

<sect2>
<title
>Typen genereren</title>
<para
>We gebruiken de knoppen <guibutton
>Eigenschappen</guibutton
> in het balk voor het kiezen van gegevens, voor het openen van de dialoog voor gegevens- en pijltypen, van het huidige graafdocument. We voegen een nieuw gegevenstype toe met de naam "C", dat automatisch ID (identificatienummer) <literal
>1</literal
> krijgt. Voor dit type selecteren we het pictogram voor de server. Verder gaan we naar de pagina voor de pijltypen, en selecteren een nieuw pijltype dat we "overeenkomend" gaan noemen. Dit krijgt automatisch de naam <literal
>1</literal
>, en we stellen de kleur in op blauw. </para>
</sect2>

<sect2>
<title
>Het algoritme</title>
<para
>Tenslotte moeten we het benaderingsalgoritme implementeren. Hiervoor gebruiken we het volgende:  </para>
<programlisting
>var E = testgraph.list_edges(); // niet verwerkte kanten
var C = new Array();            // overeenkomende kanten
while (E.length 
> 0) {
    var e = E[0];        // we nemen eerste kant e={u,v}
    var u = e.start();
    var v = e.end();
    e.set_type(1);        // maak kant overeenkomend
    E.shift();            // verwijder e (bv. E[0]) uit kantenlijst
    C.push(u);            // voeg u toe aan C
    C.push(v);            // voeg v toe aan C

    // merk u,v als knopen in C
    u.set_type(1);
    v.set_type(1);

    // verwijder uit E alle kanten die in u of v eindigen
    var adjacent = u.adj_edges();
    for (var i=0; i &lt; adjacent.length; i++) {
        var index = E.indexOf(adjacent[i]); // zoek de index
        if (index!=-1) {
            E.splice(index, 1); // verwijder indien gevonden
        }
    }
    var adjacent = v.adj_edges();
    for (var i=0; i &lt; adjacent.length; i++) {
        var index = E.indexOf(adjacent[i]); // zoek de index
        if (index!=-1) {
            E.splice(index, 1); // verwijder indien gevonden
        }
    }
}
Console.log("Vertex Cover bevat " + C.length + " knopen.");
</programlisting>
</sect2>

<sect2>
<title
>Het algoritme uitvoeren</title>
<para
>Tenslotte willen we het algoritme uitvoeren. W kunnen dit starten met de knop <guibutton
>Uitvoeren</guibutton
> in het controlepaneel voor scripts. </para>
</sect2>
</sect1>
</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
>Documenten selecteren</term>
    <listitem
><para
>In deze bovenste menubalk moet u het huidige document en de gegevensstructuur selecteren. U kunt hierin ook gegevensstructuren aanmaken en wissen, en ook toegang krijgen tot de eigenschappen van gegevensstructuren. </para
></listitem>
</varlistentry>
<varlistentry>
    <term
>Visuele graafbewerker</term>
    <listitem
><para
>Dit is het zogenaamde "whiteboard", waarin u gegevensstructuren kunt aanmaken en wijzigen. Rechtsklikken in het whiteboard, op gegevenselementen, of op pijlen, opent contextmenu's. U kunt met de hulpmiddelen in de <emphasis
>Werkbalk visuele graafbewerker</emphasis
> de elementen wijzigen in het visuele bewerkingsprogramma van het whiteboard.</para
></listitem>
</varlistentry>
<varlistentry>
    <term
>Werkbalk voor de Werkbalk visuele graafbewerker</term>
    <listitem
><para
>In deze werkbalk zijn de hulpmiddelen beschikbaar voor het visuele bewerkingsprogramma. Met de knoppen <inlinemediaobject
><imageobject
><imagedata fileref="hi22-action-rocsadddata.png" format="PNG"/></imageobject
> </inlinemediaobject
><guibutton
> Element toevoegen</guibutton
> of <inlinemediaobject
><imageobject
><imagedata fileref="hi22-action-rocsaddedge.png" format="PNG"/></imageobject
></inlinemediaobject
><guibutton
>Verbinding toevoegen</guibutton
> kunnen nieuwe elementen of gegevens worden toegevoegd. Nieuwe gegevenselementen worden toegevoegd aan de gegevensstructuur die thans is geselecteerd in de <emphasis
>Documentkiezer</emphasis
>.  Merk op dat bij zowel <guibutton
>Gegevens toevoegen</guibutton
> als <guibutton
>Verbinding toevoegen</guibutton
> contextmenu's behoren waarin het type kan worden geselecteerd van de  aan te maken gegevens of pijlen. Voor de details, zie <xref linkend="user-interface-toolbars"/>. </para
></listitem>
</varlistentry>
<varlistentry>
    <term
>Zijbalk </term>
    <listitem
><para
>Rechts vindt u de zijbalk waarin u diverse hulpmiddelen vindt om mee te werken: <itemizedlist>
        <listitem
><para
>Elementtypen: Hiermee heeft u direct toegang tot de beschikbare pijl- en gegevenstypen.</para
></listitem>
        <listitem
><para
>Journaal: Bij elk project hoort een eigen journaal waarin &eg; taken, resultaten of waarnemingen kunnen worden genoteerd.</para
></listitem>
        <listitem
><para
>Handboek: Hiermee krijgt u direct toegang tot het handboek, en zo tot de documentatie over scripts.</para
></listitem>
        <listitem
><para
>API voor scripts: Hiermee krijgt u direct toegang tot de documentatie over scripts.</para
></listitem>
        </itemizedlist>
    </para
></listitem>
</varlistentry>
<varlistentry>
    <term
>Bewerken van scripts</term>
    <listitem
><para
>In deze tekstverwerker kunt u algoritmes schrijven, zoals in detail is uitgelegd in <xref linkend="scripting"/>. U kunt aan verschillende scriptdocumenten tegelijk werken, in verschillende tabbladen. Indien wijzigingen in een script nog niet zijn opgeslagen verschijnt er een klein schijfsymbooltje in het tabblad. </para
></listitem>
</varlistentry>
<varlistentry>
    <term
>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, bovenin. Als het script een fout meldt, wordt automatisch de debug-uitvoer geselecteerd. </para
></listitem>
</varlistentry>
<varlistentry>
    <term
>Besturing</term>
    <listitem
><para
>Hierin kunt u het uitvoeren van scripts regelen. U kunt het script uitvoeren (draaien, laten wereken) dat op dit moment in de scriptbewerker is geopend, door op <guiicon
>Uitvoeren</guiicon
> te klikken. Een script kan tijdens het uitvoeren worden gestopt door op de knop <guiicon
>Stop</guiicon
> te klikken. Merk op dat het uitvoeren met de optie  <guibutton
>Enkele stap</guibutton
> alleen bij specifieke kenwoorden stopt.(zie <xref linkend="scripting"/>). </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>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsselectmove.png" format="PNG"/></imageobject>
</inlinemediaobject
> <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 gegevenselementen en/of pijlen 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>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsadddata.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Element toevoegen</guilabel
>: Klik op een willekeurige plaats in het whiteboard van het visuele bewerkingsprogramma, om zo een nieuw gegevenselement aan te maken voor de huidig geselecteerde gegevensstructuur. Door de muisaanwijzer op de knop ingedrukt te houden, komt er een contextmenu, waarin het type kan worden gekozen van de nieuw aangemaakte gegevenselementen (alleen wanneer daarvoor meerdere typen bestaan).</para
></listitem>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsaddedge.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Verbinding toevoegen</guilabel
>: Klik op een gegevenselement, houdt de muisknop ingedrukt, en trek een lijn naar een ander gegevenselement 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 gegevenselementen). Door de muisaanwijzer op de knop ingedrukt te houden, komt er een contextmenu, waarin het type kan worden gekozen van de nieuw aangemaakte pijlen (alleen wanneer daarvoor meerdere typen bestaan).</para
></listitem>
<!--FIXME no different pointer names here -->
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsdeletedata.png" format="PNG"/></imageobject>
</inlinemediaobject
> <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>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocszoom.png" format="PNG"/></imageobject>
</inlinemediaobject
> <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>
</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 gegevenselementen verticaal uitlijnen op de positie van het bovenste gegevenselement. 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 gegevenselementen uitlijnen op de verticale positie van het middelste van de geselecteerde gegevenselementen. 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 gegevenselementen verticaal uitlijnen op de positie van de onderste gegevenselement. Dit betreft alleen de verticale posities.</para
></listitem>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsalignleft.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Midden</guilabel
>: Alle gegevenselementen uitlijnen op de horizontale positie van het meest rechtse gegevenselement. 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 gegevenselementen uitlijnen op de horizontale positie van het meest rechtse gegevenselement. 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 gegevenselementen uitlijnen op de horizontale positie van het meest rechtse gegevenselement. 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 gegevenselementen uit op een cirkel, waarvan de diameter gelijk is aan de grootste afstand tussen de gegevenselementen. De gegevenselementen worden geplaatst in dezelfde volgorde, als waarin ze worden gezien vanuit het meetkundige zwaartepunt van de de gegevenselementen.</para
></listitem>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsaligntree.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Kruisende kanten minimaliseren</guilabel
>:  De geselecteerde gegevenselementen worden zo gerangschikt, dat het aantal elkaar kruisende verbindingen zo klein mogelijk is (met het algoritme van Fruchterman-Reingold).</para
></listitem>
</itemizedlist>
</sect2>
</sect1>

<sect1 id="user-interface-documents">
<title
>Werken met graafdocumenten</title>
<para
>Een project in &rocs; bevat een of meer graafdocumenten die in het visuele grafische bewerkingsprogramma kunnen worden bewerkt. Verder kan elk document een willekeurig aantal gegevensstructuren bevatten. Hierbij wordt voor alle gegevensstructuren in een document dezelfde backend voor gegevensstructuren gebruikt. In deze sectie wordt beschreven hoe u tussen documenten kunt schakelen, en hoe u nieuwe kunt aanmaken. </para>

<sect2 id="user-interface-documents-selector">
<title
>De werkbalk voor het selecteren van documenten</title>
<para
>In de werkbalk voor het selecteren van documenten selecteert u het huidige graafdocument en de huidige gegevensstructuur. Als u gegevenselementen in gegevensstructuren aanmaakt, met de hulpmiddelen in  het visuele grafische bewerkingsprogramma, dan worden deze nieuwe elementen automatisch aan de huidige gegevensstructuur toegevoegd. In deze balk kunt u ook in het huidige document bestaande gegevensstructuren wissen, of nieuwe aanmaken.  </para>

<itemizedlist>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsnew.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Nieuw</guilabel
>: Hiermee maakt u een nieuwe gegevensstructuur aan, met  een automatische naamgeving afkomstig van de backend voor de gegevensstructuur. De aangemaakte gegevensstructuur wordt toegevoegd aan het huidig geselecteerde graafdocument. </para
></listitem>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsdelete.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Wissen</guilabel
>: Hiermee wordt de huidig geselecteerde gegevensstructuur gewist in het huidige document. </para
></listitem>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsproperties.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Eigenschappen</guilabel
> van <guilabel
>Graafdocument</guilabel
> : Openen van een dialoog voor de eigenschappen van het document, alsmede die van de gegevenstypen en pijltypen in het document. </para
></listitem>
<listitem
><para>
<inlinemediaobject
><imageobject>
<imagedata fileref="hi22-action-rocsproperties.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Eigenschappen</guilabel
> van <guilabel
>Gegevensstructuur</guilabel
> : Openen van een dialoog voor de eigenschappen van gegevensstructuren. </para
></listitem>
  </itemizedlist>

<screenshot>
<screeninfo
>De hoofdwerkbalk.</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="document-selector.png" format="PNG"/>
</imageobject>
<textobject>
<phrase
>Balk voor het selecteren van het document.</phrase>
</textobject>
</mediaobject>
</screenshot>
</sect2>

<sect2 id="user-interface-documents-menu">
<title
>Aanmaken en importeren van graafdocumenten</title>
<para
>U kunt een nieuw graafdocument aanmaken, of een bestaand document aan het project toevoegen met  <menuchoice
><guimenu
>Bestand</guimenu
> <guimenuitem
>Nieuw project</guimenuitem
></menuchoice
> of <menuchoice
><guimenu
>Graafdocument</guimenu
> <guimenuitem
>Graaf importeren</guimenuitem
></menuchoice
>. U kunt ook graafdocumenten van elders importeren (zie hiervoor <xref linkend="import-export"/>). </para>
</sect2>

</sect1>
</chapter>


<chapter id="scripting">
<title
>Het schrijven en uitvoeren (laten werken) van algoritmes in &rocs; </title>

<para
>In &rocs; wordt intern het programma QtScript (een soort JavaScript) gebruikt. Dit betekent dat alle door u geïmplementeerde scripts in JavaScript moeten worden geschreven. Hoe JavaScript werkt, en hoe u in JavaScript programmeert, wordt in dit handboek niet beschreven, maar we leggen wel uit hoe u met gegevensstructuren, gegevenselementen en pijlen moet werken. Omdat u nooit direct het basisobject gebruikt van de gegevensstructuren, maar een dat geleverd wordt door de backend voor de huidige gegevensstructuur, wordt de functionaliteit door deze backend uitgebreid, en zult u deze speciale functionaliteit moeten bestuderen. In het bijzonder worden in de backends passende termen op hun gebied gebruikt, zoals knopen en kanten in grafen, bladeren en wortels (leafs en roots) in boomstructuren, etc.  </para>
<para
>Het is goed te weten dat veranderingen als gevolg van scripts direct hun weerslag vinden in de eigenschappen in het "whiteboard" van het visuele bewerkingsprogramma. Dat betekent dat scripts de gegevensstructuren daadwerkelijk wijzigen. </para>


<sect1 id="scripting-controls">
<title
>Script uitvoeren besturen</title>
 

<sect2>
<title
>Include-bestanden (ingesloten bestanden)</title>
<para
>In scriptdocumenten kunnen andere scripts worden opgenomen. Dit is nuttig om de grootte van scripts te beperken, en voor een betere leesbaarheid. Met <menuchoice
><guimenu
>Scriptdocument</guimenu
><guimenuitem
>Mogelijke Includes</guimenuitem
></menuchoice
> verkrijgt u een lijst met de reeds in &rocs; aanwezige scripts, die kunnen worden ingesloten (include). U kunt een scriptbestand met de volgende opdracht insluiten (dus toevoegen):   </para>
<programlisting
>include_script(string pad);            // relatieve of absolute pad naar scriptbestand
</programlisting>
</sect2>

<sect2 id="scripting-output">
<title
>Scriptuitvoer</title>
<para
>Gedurende het uitvoeren (werking) van een algoritme, worden debug (programmafouten) en programmauitvoer getoond in de <emphasis
>Debug &and; scriptuitvoer</emphasis
>. Indien er een syntaxisfout in uw script wordt ontdekt, wordt de fout ook getoond als een debugbericht. Merk op dat alle programmaberichten ook in de debuguitvoer worden getoond (in een vette letter). </para>
<para
>U kunt met de volgende functies de tekst regelen, die in de scriptuitvoer wordt getoond: </para>
<programlisting
>Console.log(string bericht);            // toont bericht als scriptuitvoer
    Console.debug(string bericht);             // toont bericht als debuguitvoer
</programlisting>
</sect2>

<sect2 id="scripting-controlling">
<title
>Regelen script uitvoeren</title>
<para
>U kunt scripts op verschillende manieren uitvoeren (laten werken). </para>
<para
>U kunt met de volgende functies de tekst regelen, die in de scriptuitvoer wordt getoond: </para>
<itemizedlist>
    <listitem
><para>
        <inlinemediaobject
><imageobject>
        <imagedata fileref="rocs-control-engine-run.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Start</guilabel
>: Script helemaal uitvoeren.</para
></listitem>
    <listitem
><para>
        <inlinemediaobject
><imageobject>
        <imagedata fileref="rocs-control-engine-step.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Enkele stap</guilabel
>: Voer een enkele stap uit van het script. Een stap eindigt met de  functie <literal
>interrupt()</literal
>:</para>
    <programlisting
>interrupt();    // einde van een stap
    </programlisting>
    </listitem>
    <listitem
><para>
        <inlinemediaobject
><imageobject>
        <imagedata fileref="rocs-control-engine-debug.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Debug</guilabel
>: Voer een stap uit in debug-modus. Hiermee wordt de debug-dialoog van QtScript geopend. (Debug is zoeken en verbeteren van programmafouten).</para
></listitem>
    <listitem
><para>
        <inlinemediaobject
><imageobject>
        <imagedata fileref="rocs-control-engine-stop.png" format="PNG"/></imageobject>
</inlinemediaobject
> <guilabel
>Stop</guilabel
>: Stop het uitvoeren van het script (alleen wanneer een script bezig is).</para
></listitem>
</itemizedlist>
</sect2>
</sect1>
</chapter>


<chapter id="scripting-API">
<title
>API maken van scripts</title>
<para
>Iedere backend heeft een eigen verzameling van functies en eigenschappen voor zijn gegevensstructuren en hun elementen. Maar elke backend levert ook de functies en eigenschappen die gedefinieerd zijn voor de basisstructuur. </para>
&apiDatastructure; &apiGraphstructure; &apiLinkedListstructure; &apiRootedTreestructure; &apiConsole; </chapter>


&chapterImportExport;


<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-2012 Tomaz Canabrava (tcanabrava AT kde.org)</para
></listitem>
	<listitem
><para
>Copyright 2008-2012 Wagner Reck (wagner.reck AT gmail.com)</para
></listitem>
	<listitem
><para
>Copyright 2011-2013 Andreas Cord-Landwehr (cordlandwehr AT kde.org)</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-2013 Andreas Cord-Landwehr (cordlandwehr AT kde.org)</para
></listitem>
</itemizedlist>

&meld.fouten;&vertaling.freek;&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:
-->
