# Het handboek van &rocs;

## Inleiding

&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

- docenten die mogelijk algoritmes aan hun studenten willen demonstreren,

- studenten die willen begrijpen en zien hoe een algoritme werkt,

- en iedereen die algoritmes voor grafen moeten ontwerpen, en die een hulpmiddel nodig hebben voor het testen van een prototype.

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.

Schermbeeld van &rocs;. Schermbeeld van &rocs;.

## De gebruikersinterface van &rocs;

### Algemene elementen van de gebruikersinterface

De gebruikersinterface is verdeeld in een aantal logische gedeelten, zoals getoond in onderstaand schermbeeld.

GUI-elementen van de interface van &rocs;. GUI-elementen van de interface van &rocs;.

Werkbalk voor de Visual Graph Editor (visueel bewerken van grafen)

- Om grafen met het whiteboard van de Visual Graph Editor te kunnen maken of wijzigen, moet u hier eerst een hulpmiddel selecteren

Visual Graph Editor

- 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.

Eigenschappen grafen

- 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, ⪚ die in de naam van de graaf, zichtbare eigenschappen zoals namen of waarden van knopen, of kleuren vaststellen voor de elementen van de graaf.

Bewerken van Scripts

- 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.

Debug & Script-uitvoer

- 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.

Script uitvoeren

- 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 Uitvoeren te klikken. Een script kan tijdens het uitvoeren worden gestopt door op de knop Stop te klikken.

### Werkbalken

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:

- Hoofdwerkbalk

- Opmaakwerkbalk

#### Hoofdwerkbalk

In de Hoofdwerkbalk vindt u de volgende acties. Hierop klikken maakt dat uw muisaanwijzer deze actie toepast op het whiteboard van het visuele bewerkingsprogramma voor grafen:

- Verplaatsen: 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.

- Knoop toevoegen: 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.

- Kant toevoegen: 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 (⪚, in een ongerichte graaf kunt u niet meerdere kanten toevoegen tussen knopen).

- Verwijderen: Klik op het element om het te verwijderen. Bij het verwijderen van een knoop worden meteen alle ermee verbonden kanten verwijderd.

- Zoom: 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.

De hoofdwerkbalk. De hoofdwerkbalk.

#### Opmaakwerkbalk

U kunt de optionele Opmaakwerkbalk toevoegen. Op een actie hierin klikken heeft direct effect op de huidig geselecteerde knopen:

- Boven: Alle knopen verticaal uitlijnen op de positie van de bovenste knoop. Dit betreft alleen de verticale posities.

- Midden: De knopen uitlijnen op de verticale positie van het middelste van de geselecteerde knopen. Dit betreft alleen de verticale posities.

- Onder: Alle knopen verticaal uitlijnen op de positie van de onderste knoop. Dit betreft alleen de verticale posities.

- Links: Alle knopen uitlijnen op de horizontale positie van de meest linkse knoop. Dit betreft alleen de horizontale posities.

- Midden: Alle knopen uitlijnen op de horizontale positie van de meest rechtse knoop. Dit betreft alleen de horizontale posities.

- Rechts: Alle knopen uitlijnen op de horizontale positie van de meest rechtse knoop. Dit betreft alleen de horizontale posities.

- Cirkel: 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.

- Kruisende kanten minimaliseren: Het algoritme van Fruchterman-Reingold wordt gebruikt om het aantal elkaar kruisende kanten zo klein mogelijk te maken.

De opmaakwerkbalk. De opmaakwerkbalk.

### Eigenschappen van grafen

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.

- Naam: Met deze naam heeft het algoritme toegang tot de graaf.

- Gegevenskleur voor nieuwe knopen. U kunt de kleur van alle huidige knopen veranderen door op de knop Alle te klikken

- Pijlkleur

De laatste rij opties bestaat uit aan/uit-knoppen:

- Namen tonen in: Gegevens of Pijlen.

- Waarden tonen in: Knopen of Kanten.

## &rocs; gebruiken

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 Hulpmiddelen Graaf aanmaken. Eventueel kunt u ook met de hulpmiddelen in Hulpmiddelen Waarden toekennen beginwaarden toekennen aan de knopen en kanten van de graaf. Tenslotte moet de graaf een naam krijgen, die in scripts kan worden gebruikt.

### Maken van scripts

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.

#### Toegang tot een graaf

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

Graafobjecten

-     // functions
           array list_nodes();
           array list_edges();
           node add_node(name);
           edge add_edge(from, to);
           node node_byname(QString& 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

Knoopobjecten

-     // 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

Kantobjecten

-     string color ( em hexa )
          string value
          string name
          double width
          string style ( dot, dash, dash dot, solid )

          node start();
          node  end();

          void self_remove();

#### Algoritmes voor grafieken

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.

Berekening kortste afstand

- Berekent de kortste afstand tussen twee knopen start en eind. Beide knopen moeten tot dezelfde graaf behoren. In deze berekening wordt rekening gehouden met het gericht zijn of niet van de graaf.

      	array dijkstra_shortest_path Node* start Node* eind

### Voorbeeld

Hier volgt een eenvoudig voorbeeld van een script, dat de kleuren instelt van de eerste 4 knopen in de eerste graaf:

    /* 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 < kleuren.length; i++){
            if (i
    > list2.length) break;
            list2[i].color = kleuren[i]
     }

### Import en export

Import en export naar de volgende formaten worden door &rocs; ondersteund:

- DOT-bestanden, ook wel bekend als Graphviz-bestanden.

- GML-bestanden

- Plain-Text-bestanden.

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.

## Dankbetuiging en licentie

&rocs;

Programma Copyright:

- Copyright 2008 Ugo Sangiori (ugorox AT gmail.com)

- Copyright 2008-2011 Tomaz Canabrava (tcanabrava AT kde.org)

- Copyright 2008-2011 Wagner Reck (wagner.reck AT gmail.com)

- Copyright 2011 Andreas Cord-Landwehr (cordlandwehr AT googlemail.com)

Documentatie Copyright:

- Documentatie copyright 2009 &Anne-Marie.Mahfouf; &Anne-Marie.Mahfouf.mail;

- Documentatie copyright 2009 Tomaz Canabrava (tcanabrava AT kde.org)

- Documentatie copyright 2011 Andreas Cord-Landwehr (cordlandwehr AT googlemail.com)

&meld.fouten;&vertaling.jaap; &underFDL; &underGPL;

## Installatie

### Hoe u &rocs; kunt verkrijgen

&install.intro.documentation;

### Compileren en installeren

&install.compile.documentation;
&documentation.index;