# Handbok &rocs;

## Inledning

&rocs; är en integrerad utvecklingsmiljö för grafteori avsedd för alla som är intresserade av att konstruera och analysera grafalgoritmer. Det omfattar speciellt

- föreläsare som till sist vill demonstrera algoritmer för sina studenter,

- studenter som vill förstå och se hur en algoritm fungerar,

- och alla som måste konstruera grafalgoritmer och behöver ett verktyg för att prova ut prototyper.

För alla dessa användare tillhandahåller &rocs; en lättanvänd grafeditor för att skapa grafer, en kraftfullt Qt Script-skriptverktyg för att utföra algoritmer, och flera hjälpverktyg för att ställa in grafer och datastrukturer för experiment. Det vanliga arbetssättet är att skriva en algoritm, skapa en graf, och se i realtid hur algoritmen fungerar för grafen.

En skärmbild av &rocs;. En skärmbild av &rocs;.

## &rocs; användargränssnitt

### Allmänna delar i användargränssnittet

Användargränssnittet är uppdelat i flera logiska delar som framgår av skärmbilden nedan.

Grafiska element i &rocs; användargränssnitt. Grafiska element i &rocs; användargränssnitt.

Verktygsrad för visuell grafeditor

- för att kunna rita eller ändra grafer på den visuella grafeditorns skrivtavla, måste först ett verktyg väljas här

Visuell grafeditor

- Detta är området där grafer kan ritas. Att högerklicka på skrivtavlan, grafelement, eller markerade grafelement visar en sammanhangsberoende meny, beroende av vad man klickar på.

Grafegenskaper

- Det här ger en fullständig lista med alla olika grafer som för närvarande finns på den visuella grafeditorns skrivtavla. Här kan ändringar av t.ex. grafens namn, synliga egenskaper som nodnamn eller värden göras, eller standardfärger på grafelementen definieras.

Skripteditor

- I texteditorn kan algoritmer skrivas i Qt Script (som i stort sett är samma sak som Javascript för vårt syfte). Det går att arbeta med flera algoritmer samtidigt genom att öppna eller skapa nya skriptflikar i huvudmenyn. Den lilla skivsymbolen på en flik visas om det för närvarande finns osparade ändringar.

Felsöknings- och skriptutmatning

- I det här textområdet skrivs antingen felsökningsinformation eller skriptutmatning från algoritmer ut, beroende på val av utmatningsinställning. Om ett fel uppstår i skriptet, väljes automatiskt felsökningsutmatning. Dessutom visas också alla meddelanden utmatade av programmet i felsökningsutmatningen.

Körning av skript

- Den här området styr körning av algoritmerna. Skriptet som för närvarande är öppet i skripteditorn kan köras med grafen på den visuella grafeditorns skrivtavla, genom att klicka på Kör. Medan skriptet körs, är det möjligt att stoppa det genom att klicka på knappen Stopp.

### Verktygsrader

Det finns olika möjliga verktygsrader för den visuella grafeditorn som gör det möjligt att komma åt funktioner med bara ett klick. Med standardinställningen visas följande verktygsrader:

- Huvudverktygsrad

- Justeringsverktygsrad

#### Huvudverktygsrad

Huvudverktygsraden innehåller följande åtgärder. Att klicka på en åtgärd leder till att muspekaren utför den åtgärden på den visuella grafeditorns skrivtavla:

- Flytta: För att markera element, klicka antingen på en oanvänd plats på skrivtavlan, håll musknappen nertryckt och rita en rektangel som innehåller några noder och/eller bågar för att markera dessa element, eller klicka annars direkt på ett omarkerat element för att markera det. Om du klickar på ett markerat element, eller en uppsättning markerade element, kan de flyttas omkring genom att hålla musknappen nertryckt och flytta omkring musen. Det är också möjligt att flytta markerade element med piltangenterna.

- Lägg till nod: Klicka på ett godtyckligt ställe på den visuella grafeditorns skrivtavla för att skapa en ny nod som hör till grafen som för närvarande är markerad.

- Lägg till båge: Klicka på en nod, håll musknappen nertryckt och rita en linje till en annan nod, dit pilen/bågen ska peka. Åtgärden lyckas bara om den aktuella grafen tillåter att bågen läggs till (i en oriktad graf får t.ex. inte mer än en båge läggas till mellan två noder).

- Ta bort: Klicka på ett element för att ta bort det. Om du tar bort en nod, tas också alla intilliggande bågar bort.

- Zooma: Klicka på skrivtavlan, håll vänster musknapp nertryckt, och rita på så sätt en rektangel. Skrivtavlan zoomas till det markerade området. Använd också mushjulet för att zooma in eller ut. Ett dubbelklick med musens vänsterknapp återställer ursprunglig zoomnivå.

Huvudverktygsraden. Huvudverktygsraden.

#### Justeringsverktygsrad

Det går att lägga till en valfri justeringsverktygsrad. Genom att klicka på ett alternativ i verktygsraden erhålls direkt en effekt på noderna som för närvarande är markerade:

- Upp: Justera noderna längs den vertikala positionen av den översta noden. Detta påverkar bara vertikala positioner.

- Mitt: Justera noderna längs den vertikala positionen som anges av centrum för alla markerade noders vertikala position. Detta påverkar bara vertikala positioner.

- Bas: Justera noderna längs den vertikala positionen av den understa noden. Detta påverkar bara vertikala positioner.

- Vänster: Justera noderna längs den horisontella positionen för noden längst åt vänster. Detta påverkar bara horisontella positioner.

- Mitt: Justera noderna längs den horisontella positionen för noden längst åt höger. Detta påverkar bara horisontella positioner.

- Höger: Justera noderna längs den horisontella positionen för noden längst åt höger. Detta påverkar bara horisontella positioner.

- Cirkel: Justera noderna längs en cirkel vars diameter är lika med den maximala avståndet mellan noderna. Noderna placeras i samma följd som ges av nodernas positioner i förhållande till deras gemensamma masscentrum.

- Minimera korsande bågar: Applicerar Fruchterman-Reingold-algoritmen för att (approximativt) minimera antal korsande bågar.

Justeringsverktygsraden. Justeringsverktygsraden.

### Grafegenskaper

I den vänstra sidoraden finns alternativ för varje öppen graf. Alla dessa alternativ är allmänna per graf, och kan ändras per nod och båge med dialogrutorna Nodegenskaper och Bågegenskaper.

- Namn: Detta är namnet som algoritmen måste använda för att komma åt grafen.

- Datafärg För nyskapade noder, kan nodfärgen för alla aktuella noder ändras genom att klicka på knappen Alla.

- Pilfärg

Den sista raden alternativ består av alternativknappar:

- Visa namn för: Data eller Pilar.

- Visa värden för: Noder eller Bågar.

## Använda &rocs;

Oftast är det första steget att skapa en graf med den visuella grafeditorn. Det kan man antingen göra för hand, genom att lägga till noder och koppla ihop dem, eller genom att använda en av hjälpalgoritmerna som finns under Verktyg Skapa graf. Vid något tillfälle behöver man också använda hjälpverktygen Verktyg Tilldela värden för att tilldela ursprungliga värden till grafens noder och bågar. Till sist måste grafen ges ett namn. Namnet är därefter identifieraren som ska användas i skriptverktyget.

### Använda skript

&rocs; använder ett Javascript-liknande skriptspråk. Det innebär i huvudsak en definitionen av variabler och funktioner och deras användning görs på exakt samma sätt som i Javascript. Dessutom tillhandahåller &rocs; en uppsättning funktioner som låter dig komma åt graferna och deras element på den visuella grafeditorns skrivtavla.

#### Komma åt en graf

En graf kan kommas åt från skriptgränssnittet genom att helt enkelt skriva dess namn och använda det som ett objekt med en av följande funktioner. För att komma åt en nod eller en båge måste en identifierare hämtas från grafobjektet.

Grafobjekt

-     // funktioner
           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();

      // variabler
           bool directed
           bool automate
           string name
           string nodeDefaultColor // i HEX
           string edgeDefaultColor  // i HEX

Nodobjekt

-     // funktioner
           array adj_nodes();
           array adj_edges();
           array input_edges();
           array output_edges();
           array loop_edges();
           array connected_edges(Node *n);
           void self_remove();

      // variabler
          double x
          double y
          double width
          string value
          string name
          string color  // i HEX
          bool begin
          bool end

Bågobjekt

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

          node start();
          node  end();

          void self_remove();

#### Grafalgoritmer

Ibland är det användbart att kunna använda funktioner för vanliga uppgifter, som att beräkna kortaste avståndet mellan två noder. För närvarande stöder vi följande algoritmer som kan anropas från skriptverktyget med noder från samma graf.

Beräkning av kortaste vägen

- Beräknar kortaste väg mellan noderna start och slut. Båda noderna måste ingå i samma graf. Beräkningen tar hänsyn till om grafen är riktad eller inte.

      	array dijkstra_shortest_path Node* start Node* slut

### Exempel

Här är ett enkelt exempel på ett skript som ställer in färgen på de fyra första noderna i den första grafen:

    /* Ett enkelt exempel som ställer in färgen på de fyra första noderna
    i den första grafen: */

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

    /* graphs är ett fält av grafer, du kan komma åt en graf med dess index i
    fältet eller med dess namn, så om den första grafens namn är Untitled0,
    är följande sats riktig */
    var list1 = graphs[0].list_nodes(); // 1:a formen
    var list2 = Untitled0.list_nodes(); // 2.a formen

     for ( var i = 0; i < colors.length; i++){
            if (i
    > list2.length) break;
            list2[i].color = colors[i]
     }

### Import och export

&rocs; stöder för närvarande import och export av följande filformat:

- DOT-filer, också kända som Graphviz-filer.

- GML-filer

- Vanliga textfiler.

För närvarande importeras bara några få värden med de flesta av dessa filtyper. De importerade värdena omfattar noder och deras motsvarande anslutningar, namn på alla element, värden, och också koordinater om de är angivna.

## Tack till och licens

&rocs;

Program Copyright:

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

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

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

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

Dokumentation Copyright:

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

- Dokumentation copyright 2009 Tomaz Canabrava (tcanabrava SNABELA kde.org)

- Dokumentation copyright 2011 Andreas Cord-Landwehr (cordlandwehr SNABELA googlemail.com)

Översättning Stefan Asserhäll stefan.asserhall@comhem.se

&underFDL; &underGPL;

## Installation

### Hur man skaffar &rocs;

&install.intro.documentation;

### Kompilering och installation

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