88
>In dit hoofdstuk vindt u een overzicht van &rocs;.Als u direct wilt beginnen met het gebruiken van &rocs; raden we u aan <xref linkend="introduction-nutshell"/> door te nemen, en <xref linkend="scripting"/> als referentie bij het maken van scripts. </para>
90
<sect1 id="introduction-goals">
92
>Doelen, en voor wie is dit bestemd.</title>
94
>&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>
98
>docenten die algoritmes aan hun studenten willen demonstreren,</para
102
>studenten die willen begrijpen en zien hoe een algoritme werkt,</para
106
>en verder iedereen die belang stelt in gegevensstructuren en algoritmes.</para
111
>Iedereen kan &rocs; prima gebruiken voor het opzetten van grafen, lijsten en boomstructuren. Verder is er een krachtig bewerkingsprogramma voor het maken van Qt-scripts, en hulpmiddelen voor het opzetten van gegevensstructuren, voor experimenten en simulaties. </para>
114
>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
116
>Graafdocument</guimenu
118
>Hulpmiddelen</guimenuitem
120
>Graaf aanmaken</guimenuitem
122
>. U kunt verder waarden toekennen aan de elementen van de gegevensstructuren, met de hand, of met <menuchoice
124
>Graafdocument</guimenu
126
>Hulpmiddelen</guimenuitem
128
>Waarden toekennen</guimenuitem
130
>. Tenslotte kunt u een algoritme schrijven in JavaScript en de zojuist gemaakte gegevensstructuur laten uitvoeren (werken). De door uw algoritme aangebrachte veranderingen zijn direct zichtbaar in het "whiteboard" van het visuele bewerkingsprogramma. </para>
134
>Schermbeeld van &rocs;.</screeninfo>
137
<imagedata fileref="rocs-screenshot.png" format="PNG"/>
141
>Schermbeeld van &rocs;.</phrase>
147
<sect1 id="introduction-nutshell">
149
>&rocs; in een notendop</title>
151
>In dit deel geven we een compact overzicht van de kernelementen van &rocs;. We leggen de belangrijke begrippen uit van gegevensstructuren, plugins hiervoor, en elementtypen. Kennis van deze elementen is nuttig voor het begrip hoe in &rocs; gegevensstructuren kunnen worden aangemaakt en gewijzigd. </para>
153
>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
154
>graafdocumenten</emphasis
161
>Plugins voor graafdocumenten en gegevensstructuren</title>
163
>Een graafdocument bevat de inhoud van een whiteboard, in het visuele bewerkingsprogramma voor de graaf. Hierin kan een graafdocument diverse gegevensstructuren tegelijk bevatten, maar alleen één plugin hiervoor. Er zijn plugins aanwezig voor voor diverse graaftypen (algemene grafen, gekoppelde lijsten (linked lists), boomstructuren (rooted trees)), die toegevoegde functionaliteit bieden voor hun specifieke graaftypen. Dat kan 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 plugin kiezen voor een gegevensstructuur, maar er kan hierbij informatie verloren gaan (bv. kanten van een cirkel in een algemene graaf worden niet aan de boomstructuur toegevoegd, als u overschakelt naar de plugin voor een boomstructuur). </para>
165
>Graafdocumenten vormen ook de basis voor de definitie van pijltypen en gegevenstypen. </para>
170
>Gegevensstructuren </title>
172
>Gegevensstructuren vormen de basis van alle werk 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 het in de scripts kan worden genoemd. Als gevolg van de huidig gekozen plugin voor de gegevensstructuren, kan het zijn dat u de gegevensstructuren niet willekeurig kunt wijzigen (bv. een boomstructuur mag nooit een cyclische structuur bevatten). De plugin voor gegevensstructuren moet passen bij het graafdocument. </para>
179
>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 mega-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>
184
>Gegevenstypen</title>
186
>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>
191
>Dynamische eigenschappen</title>
193
>Elk gegevenselement en elke pijl heeft twee eigenschappen: <literal
197
>. U kunt deze eigenschappen uitbreiden met <emphasis
198
>dynamische eigenschappen</emphasis
199
>. Elke dynamische eigenschap heeft een naam, en kan elke willekeurige tekenreeks bevatten. U kunt dynamische eigenschappen toevoegen in de dialogen <guilabel
200
>Eigenschappen gegevens</guilabel
202
>Eigenschappen pijlen</guilabel
203
> in de erbij behorende contextmenu's of de scriptfuncties, zoals wordt uitgelegd in <xref linkend="scripting-data-structure"/>. </para>
207
<sect1 id="introduction-tutorial">
211
>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
212
>"minimum vertex cover"</emphasis
213
>- 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>
215
>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>
219
>Een graaf genereren</title>
221
>Voor de graaf-plugin levert &rocs; een hulpmiddel waarmee grafen kunnen worden aangemaakt. We gaan naar het menu <menuchoice
223
>Graafdocument</guimenu
71
>&rocs; aims to be a Graph Theory IDE for helping professors to show the results of a graph algorithm and also helping students to do the algorithms.</para>
74
>&rocs; has a scripting module, done in Qt Script, that interacts with the drawn graph and every change in the graph with the script is reflected on the drawn one.</para>
77
<chapter id="using-rocs">
81
>The user interface is divided in two parts: </para
87
>the top right part is where you draw your graphs, and the bottom right one is where you create your algorithms, </para
91
>the left sidebar is where all your open graphs stay, you can open multiple graphs per file. </para
96
<sect1 id="rocs-features">
98
>&rocs; global settings</title>
100
>On the left sidebar you can find the options for each opened graph, all these options are global per graph and can be changed per node and edge with the Node Properties and the Edge Properties dialogs.</para>
105
>Graph Name</guilabel>
111
>Node Color</guilabel
112
> for new created nodes, you can change the node color for all current nodes by clicking the <guilabel
119
>Edge Color</guilabel>
124
>The last row of options consists in toggled buttons:</para>
129
>Show names in:</guilabel
139
>Show values in:</guilabel
149
>Graph is oriented</guilabel>
155
>Graph is Automate</guilabel>
161
<sect1 id="rocs-toolbars">
163
>&rocs; toolbars</title>
165
>There are two toolbars, on the top. The main one has the following tools:</para>
171
>: moves a node around the drawing area.</para
177
>: creates a new node at the clicked position on the drawing area.</para
183
>: creates a new edge between two nodes.</para
189
>: select items by clicking on them.</para
195
>: delete items by clicking on them.</para
199
>Use the align tools to place selected nodes.</para
204
>A right mouse click on a node or edge brings you the property dialog for that node or edge.</para>
206
>The layout toolbar consists in various aligns icons.</para>
209
>To align nodes, choose the <guiicon
211
> tool, click and drag a rectangle, then choose the alignement that you want. </para>
215
<chapter id="scripting-rocs">
217
>Scripting &rocs;</title>
219
>After the graph is on screen, you can start creating the script for it. The language uses a Javascript syntax and following are the Graph, Node and Edge objects.</para>
221
<sect1 id="script-graph">
228
edge add_edge(from, to);
229
node node_byname(QString& name);
235
>Graph variables that can be changed:</para>
240
string nodeDefaultColor // in HEXA
241
string edgeDefaultColor // in HEXA
245
<sect1 id="script-nodes">
252
array output_edges();
254
array connected_edges(Node *n);
259
>Node Variables:</para>
266
string color // in HEXA
272
<sect1 id="script-edges">
276
>string color ( em hexa )
280
string style ( dot, dash, dash dot, solid )
290
<sect1 id="script-example">
294
>Here is a simple script example that sets the color of the 4 first nodes in the first graph:</para>
296
>/* A simple example that sets the color of the 4 first nodes in the first
299
var colours = new Array("red", "green", "blue", "yellow");
301
/* graphs is an array of graphs, you can access a graph by its index in the
302
array or by its name, so if the first graph's name is Untitled0, the following
303
sentence are right */
304
var list1= graphs[0].list_nodes(); // 1st form.
305
var list2=Untitled0.list_nodes(); // 2nd form
307
for ( var i = 0; i < colours.length; i++){
309
> list2.length) break;
310
list2[i].color = colours[i]
317
<chapter id="commands">
319
>Command Reference</title>
321
<sect1 id="rocs-mainwindow">
323
>Menus and Shortcut Keys</title>
335
> <keycombo action="simul"
225
>Hulpmiddelen</guisubmenu
227
>Graaf aanmaken</guimenuitem
229
>. Hier genereren we een "Willekeurige graaf", 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
236
>Typen genereren</title>
238
>We gebruiken de knop <guibutton
239
>Documenteigenschappen</guibutton
240
> in het paneel voor de gegevensstructuur, 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
242
> 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 ID <literal
244
> (Vert.: ? ), en we stellen de kleur in op blauw. </para>
249
>Het algoritme</title>
251
>Tenslotte moeten we het benaderingsalgoritme implementeren. Hiervoor gebruiken we het volgende: </para>
253
>var E = testgraph.list_edges(); // niet verwerkte kanten
254
var C = new Array(); // overeenkomende kanten
257
var e = E[0]; // we nemen eerste kant e={u,v}
260
e.set_type(1); // maak kant overeenkomend
261
E.shift(); // verwijder e (bv. E[0]) uit kantenlijst
262
C.push(u); // voeg u toe aan C
263
C.push(v); // voeg v toe aan C
265
// merk u,v als knopen in C
269
// verwijder uit E alle kanten die in u of v eindigen
270
var adjacent = u.adj_edges();
271
for (var i=0; i < adjacent.length; i++) {
272
var index = E.indexOf(adjacent[i]); // zoek de index
274
E.splice(index, 1); // verwijder indien gevonden
277
var adjacent = v.adj_edges();
278
for (var i=0; i < adjacent.length; i++) {
279
var index = E.indexOf(adjacent[i]); // zoek de index
281
E.splice(index, 1); // verwijder indien gevonden
285
output("Vertex Cover bevat " + C.length + " knopen.");
291
>Het algoritme uitvoeren</title>
293
>Tenslotte willen we het algoritme uitvoeren. Die kunnen we starten met de knop <guibutton
294
>Uitvoeren</guibutton
295
> in het controlepaneel voor scripts. </para>
300
<chapter id="user-interface">
302
>De gebruikersinterface van &rocs;</title>
304
<sect1 id="user-interface-all">
306
>Algemene elementen van de gebruikersinterface</title>
308
>De gebruikersinterface is verdeeld in een aantal logische gedeelten, zoals getoond in onderstaand schermbeeld. </para>
311
>GUI-elementen van de interface van &rocs;.</screeninfo>
314
<imagedata fileref="rocs-interfaces.png" format="PNG"/>
318
>GUI-elementen van de interface van &rocs;.</phrase>
325
>Visuele graafbewerker</term>
328
>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
329
>Werkbalk visuele graafbewerker</emphasis
330
> de elementen wijzigen in het visuele bewerkingsprogramma van het whiteboard.</para
335
>Werkbalk voor de Werkbalk visuele graafbewerker</term>
338
>Dit zijn de hulpmiddelen waarmee gegevensstructuren in het visuele bwerkingsprogramma van het whiteboard kunnen worden gewijzigd. Met <guibutton
339
>Gegevens toevoegen</guibutton
341
>Verbinding toevoegen</guibutton
342
> kunnen nieuwe gegevenselementen of nieuwe pijlen worden toegevoegd aan de huidig geselecteerde gegevensstructuur, in de <emphasis
343
>Widget voor graafeigenschappen</emphasis
344
>. Merk op dat bij zowel <guibutton
345
>Gegevens toevoegen</guibutton
347
>Verbinding toevoegen</guibutton
348
> 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
353
>Eigenschappen van grafen</term>
356
>Bovenaan kunt u het huidige graafdocument selecteren, de instellingendialoog ervan openen, en aan het graafdocument nieuwe gegevensstructuren toevoegen (&ie; aan het huidige whiteboard). Onderaan kunt u de huidige gegevensstructuur selecteren. Daar kunt u wijzigen welke eigenschappen van gegevenselementen en pijlen (namen, waarden, objecten) zichtbaar moeten zijn, door op de juiste knoppen te klikken. Door op de typenamen te klikken van gegevens en pijlen, krijgt u de instellingendialogen te zien. Voor details, zie <xref linkend="user-interface-graph-properties"/>. </para
361
>Bewerken van Scripts</term>
364
>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
369
>Debug & Script-uitvoer</term>
372
>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. Naast de debug-berichten, geeft de debug-uitvoer ook alle berichten weer. </para
380
>Dit menu regelt het uitvoeren van scripts. U kunt het script uitvoeren dat op dit moment in de scriptbewerker is geopend, door op <guiicon
382
> te klikken. Een script kan tijdens het uitvoeren worden gestopt door op de knop <guiicon
384
> te klikken. Merk op dat het uitvoeren met de optie <guibutton
385
>Enkele stap</guibutton
386
> alleen bij specifieke kenwoorden stopt.(zie <xref linkend="scripting"/>). </para
392
<sect1 id="user-interface-toolbars">
396
>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>
404
>Opmaakwerkbalk</para
408
<sect2 id="user-interface-toolbars-main">
410
>Hoofdwerkbalk</title>
413
>Hoofdwerkbalk</emphasis
414
> vindt u de volgende acties. Hierop klikken maakt dat uw muisaanwijzer deze actie toepast op het whiteboard van het visuele bewerkingsprogramma voor grafen:</para>
419
>Verplaatsen</guilabel
420
>: 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
425
>Gegeven toevoegen</guilabel
426
>: 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
431
>Verbinding toevoegen</guilabel
432
>: 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 (⪚, 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
437
>Verwijderen</guilabel
438
>: Klik op het element om het te verwijderen. Bij het verwijderen van een knoop worden meteen alle ermee verbonden kanten verwijderd.</para
444
>: 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
449
>De hoofdwerkbalk.</screeninfo>
452
<imagedata fileref="rocs-toolbar-main.png" format="PNG"/>
456
>De hoofdwerkbalk.</phrase>
462
<sect2 id="user-interface-toolbars-alignment">
464
>Opmaakwerkbalk</title>
466
>U kunt de optionele <emphasis
467
>Opmaakwerkbalk</emphasis
468
> toevoegen. Op een actie hierin klikken heeft direct effect op de huidig geselecteerde knopen:</para>
474
<imagedata fileref="hi22-action-rocsaligntop.png" format="PNG"/></imageobject>
478
>: Alle gegevenselementen verticaal uitlijnen op de positie van het bovenste gegevenselement. Dit betreft alleen de verticale posities.</para
484
<imagedata fileref="hi22-action-rocsalignvmiddle.png" format="PNG"/></imageobject>
488
>: De gegevenselementen uitlijnen op de verticale positie van het middelste van de geselecteerde gegevenselementen. Dit betreft alleen de verticale posities.</para
494
<imagedata fileref="hi22-action-rocsalignbottom.png" format="PNG"/></imageobject>
498
>: Alle gegevenselementen verticaal uitlijnen op de positie van de onderste gegevenselement. Dit betreft alleen de verticale posities.</para
504
<imagedata fileref="hi22-action-rocsalignleft.png" format="PNG"/></imageobject>
508
>: Alle gegevenselementen uitlijnen op de horizontale positie van het meest rechtse gegevenselement. Dit betreft alleen de horizontale posities.</para
514
<imagedata fileref="hi22-action-rocsalignhmiddle.png" format="PNG"/></imageobject>
518
>: Alle gegevenselementen uitlijnen op de horizontale positie van het meest rechtse gegevenselement. Dit betreft alleen de horizontale posities.</para
524
<imagedata fileref="hi22-action-rocsalignright.png" format="PNG"/></imageobject>
528
>: Alle gevenselementen uitlijnen op de horizontale positie van het meest rechtse gegevenselement. Dit betreft alleen de horizontale posities.</para
534
<imagedata fileref="hi22-action-rocsaligncircle.png" format="PNG"/></imageobject>
538
>: 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
544
<imagedata fileref="hi22-action-rocsaligntree.png" format="PNG"/></imageobject>
547
>Kruisende kanten minimaliseren</guilabel
548
>: De geselecteerde gegevenselementen worden zo gerangschikt, dat het aantal elkaar kruisende verbindingen zo klein mogelijk is (met het algoritme van Fruchterman-Reingold).</para
553
>De opmaakwerkbalk.</screeninfo>
556
<imagedata fileref="rocs-toolbar-alignment.png" format="PNG"/>
560
>De opmaakwerkbalk.</phrase>
567
<sect1 id="user-interface-graph-properties">
569
>Het paneel voor de eigenschappen van grafen</title>
571
>Bovenin het paneel kan het huidige graafdocument worden geselecteerd. Hieronder kunnen nieuwe gegevensstructuren worden aangemaakt, of bestaande gegevensstructuren worden ingesteld. </para>
573
<sect2 id="user-interface-graph-properties-document">
575
>Selectie en eigenschappen documenten</title>
577
>Bovenin het paneel kunt u het huidige graafdocument selecteren. Het graafdocument wordt in het visuele bewerkingsprogramma voor grafen weergegeven als het zogenaamde "whiteboard". U kunt een nieuw graafdocument aanmaken, of een bestaand document toevoegen aan een project, met <menuchoice
581
>Nieuw graafdocument</guimenuitem
587
>&rocs;-graaf importeren</guimenuitem
589
>. U kunt ook graafdocumenten uit toepassingen van derden importeren (zie <xref linkend="import-export"/>). Door op <guibutton
590
>Eigenschappen</guibutton
591
> te klikken, krijgt u toegang tot de eigenschappen van het graafdocument. </para>
594
<sect2 id="user-interface-graph-properties-datastructure-create">
596
>Nieuwe gegevensstructuur aanmaken</title>
598
>Een nieuwe gegevensstructuur kunt u aanmaken door een naam in te voeren (zonder spaties of bijzondere karakters) en daarna te klikken op <guibutton
599
>Toevoegen</guibutton
600
>. De naam wordt gebruikt voor het gebruik van de gegevensstructuur in algoritmes. </para>
603
<sect2 id="user-interface-graph-properties-datastructure-config">
605
>Gegevensstructuur configureren </title>
607
>Alle beschikbare gegevensstructuren in het huidige graafdocument worden getoond in een keuzelijst. Wanneer er een wordt gekozen, worden de instellingen van deze gegevensstructuur getoond: </para>
614
>: Deze gegevenssstructuur wissen. </para
620
> Dit is de naam van de gegevensstructuur. Deze naam wordt in de algoritmes voor deze gegevensstructuur gebruikt. </para
625
>Opties tonen</guilabel
626
> Hieronder worden alle gegevens en pijltypen getoond van de gegevensstructuur. Door op de naam te klikken worden de instellingendialogen geopend voor de typen. Verder kan het zichtbaar zijn worden geregeld van gegevenselementen en pijlen, namen en waarden van een gegeven type, door op de juiste knoppen te klikken. </para
631
<sect2 id="user-interface-graph-properties-datastructure-individual">
633
>Plugin instellen voor Opties van gegevensstructuur</title>
635
>Elke plugin (invoegprogramma) voor gegevensstructuren kan opties toevoegen aan de instellingendialoog voor gegevensstructuren. De standaard plugins voor gegevensstructuren bieden de volgende opties aan: </para>
643
> voor het selecteren van het type van de graaf. De betekenis van deze typen zijn als volgt: </para>
648
>Gerichte graaf</guilabel
649
>: Graaf met gerichte kanten, waar meerdere zelfde gerichte kanten tussen dezelfde knopen niet zijn toegestaan. </para
654
>Ongerichte graaf</guilabel
655
>: Graaf met ongerichte kanten waar meerdere kanten tussen dezelfde knopen niet zijn toegestaan. </para
660
>Gerichte multigraaf</guilabel
661
>: Graaf met gerichte kanten waar meerdere zelfde gerichte kanten tussen dezelfde knopen zijn toegestaan. </para
666
>Ongerichte multigraaf</guilabel
667
>: Graaf met ongerichte kanten waar meerdere zelfde kanten tussen dezelfde knopen zijn toegestaan. </para
674
>Plugin voor de boomstructuur</title>
676
>Door te klikken op de eigenschap <guilabel
677
>Alle pijlen tonen</guilabel
678
>, worden alle pijlen tussen de knopen van de boomstructuur getoond. Indien niet geselecteerd, worden eventuele meerdere pijlen tussen dezelfde knopen als een pijl getoond. </para>
685
<chapter id="scripting">
687
>Het schrijven en uitvoeren (laten werken) van algoritmes in &rocs; </title>
690
>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 wel een dat geleverd wordt door de plugin voor de huidige gegevensstructuur, wordt de functionaliteit door deze plugin uitgebreid, en zult u deze speciale functionaliteit moeten bestuderen. In het bijzonder worden in de plugins passende termen gebruikt, zoals knopen en kanten in grafen, bladeren en wortels (leafs en roots) in boomstructuren, etc. </para>
692
>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>
694
<sect1 id="scripting-data-structure">
696
>De basiselementen van gegevensstructuren </title>
698
>Iedere plugin levert een eigen verzameling van functies en eigenschappen voor zijn gegevensstructuren met hun elementen. Maar elke plugin levert ook de functies en eigenschappen die gedefinieerd zijn voor de basisstructuur. Dit betekent dat alles dat hier wordt uitgelegd, geldt voor elke plugin voor gegevensstructuren. </para>
701
>Basiseigenschappen van gegevensstructuren</title>
703
>Gegevensstructuren worden geïdentificeerd door hun namen. Aangenomen dat een gegevensstructuur is aangemaakt met de naam <literal
705
>, kunt u deze gegevensstructuur gebruiken door eenvoudig deze naam te noemen. Bijvoorbeeld, om een rij met alle gegevenselementen in de gegevensstructuur te verkrijgen, kunt u in het script schrijven: <literal
706
>testgraaf.list_nodes();</literal
711
>Basisigenschappen en functies van gegevensstructuren</title>
713
>Elke gegevensstructuur <literal
715
> heeft de volgende eigenschappen die kunnen worden gelezen of geschreven met de <literal
716
>testgraaf.eigenschap</literal
719
>tekenreeks voor de naam // naam van de gegevensstructuur
726
>Basiseigenschappen en functies van de gegevenselementen</title>
728
>Elk gegevenselement heeft de volgende eigenschappen die kunnen worden gelezen en geschreven: </para>
730
>double x // x-coördinaat huidige positie
731
double y // y-coördinaat of huidige positie
732
double width // grootte
733
string value // waarde
735
string color // kleur in HEXAdecimaal
738
>Verder kan elke dynamische eigenschap van een gegevenselement worden gebruikt met behulp van zijn naam. </para>
741
>Bij elk gegevenselementobject horen de volgende methodes (functies): </para>
743
>int type(); // type elk gegevenselement
744
int set_type(int); // Instellen type van gegevenselement
745
void add_property(string naam, // dynamische eigenschap toevoegen aan gegevenselement met opgegeven naam en waarde
747
array adj_data(); // lijst van aangrenzende gegevens
748
array adj_pointers(); // lijst van aangrenzendepijlen
749
array input_pointers(); // lijst van invoerpijlen
750
array output_pointers(); // lijst van uitvoerpijlen
751
array loop_pointers(); // lijst van cyclische pijlen
752
array connected_pointers(target); // lijst van pijlen naar 'doel'
753
void self_remove(); // Dit gegevenselement wissen
759
>Basiseigenschappen en functies van de pijlen</title>
761
>Elk pijl heeft de volgende eigenschappen die kunnen worden gelezen en geschreven: </para>
763
>string color // kleur in HEXAdecimaal
764
string value // waarde
766
double width // dikte
767
string style // waarde: dot, dash, dash dot, solid
769
(vert.: dot: stip; dash: streep; solid: lijn)
772
>Verder kan elke dynamische eigenschap van een pijl worden gebruikt met behulp van zijn naam. </para>
775
>Bij elk pijlobject horen de volgende methodes (functies): </para>
777
>int type(); // pijltype van pijl
778
int set_type(int); // stel pijltype van pijl in van de pijl
779
void add_property(string naam, // dynamische eigenschap toevoegen aan gegevenselement met opgegeven naam en waarde
781
node start(); // startknoop van de pijl
782
node end(); // eindknoop van de pijl
783
void self_remove(); // deze pijl wissen
788
<sect1 id="scripting-plugin-graph">
790
>De graafplugin</title>
793
>Eigenschappen en functies van grafen</title>
797
>Gegevensstructuur van een graaf</title>
799
>Gegeven een gegevensstructuurobject van het type "Graaf", kunt u de volgende functies gebruiken: </para>
801
>array list_nodes(); // lijst van alle knopen van de graaf
802
array list_edges(); // lijst van alle kanten van de graaf
803
node add_node(naam); // voeg een nieuwe knoop toe en geef die terug
804
edge add_edge(node from, node to); // voeg een nieuwe kant toe van 'vanaf' tot 'tot' en geef die terug
805
array overlay_edges(int laagID); // lijst van alle kanten in een gegeven laag (overlay)
806
edge add_overlay_edge(node van,
808
int laagID); // voeg kant toe van gegeven pijltype/in opgegeven laag (overlay)
814
>Knopen van grafen</title>
816
>Gegeven een gegevensstructuurobject van het type "Graaf", kunt u de volgende functies gebruiken voor de knopen van de graaf, naast de eigenschappen die worden geleverd door de gegevenselementen: </para>
818
>array adj_nodes(); // lijst van alle aangrenzende knopen
819
array adj_edges(); // lijst van alle aangrenzende kanten
820
array input_edges(); // lijst van alle invoerkanten
821
array output_edges(); // lijst van alle uitvoerkanten
822
array loop_edges(); // lijst van alle kanten die met een lus met de knoop verbonden zijn
823
array connected_edges(node doel); // lijst van alle kanten die deze knoop als eindpunt hebben
831
>Gegeven de kanten van een gegevensstructuur van het type "Graaf", zijn alleen de eigenschappen beschikbaar van de basisgegevensstructuur. </para>
837
>Algoritmes voor graafstructuren</title>
839
>De plugin voor grafen levert enige speciale functies, die in scripts kunnen worden gebruikt.</para>
843
>Berekening kortste weg</term>
846
>Berekent de kortste weg tussen twee knopen <emphasis
850
>. Beide knopen moeten tot dezelfde graaf behoren. In deze berekening wordt rekening gehouden met het wel of niet gericht zijn van de graaf.</para>
855
>dijkstra_shortest_path</function
875
>Afstanden kortste weg</term>
878
>Berekent de kortste wegen tussen de knoop <emphasis
880
> en alle andere knopen van de graaf.In deze berekening wordt rekening gehouden met het wel of niet gericht zijn van de graaf.</para>
901
<sect1 id="scripting-plugin-linkedlist">
903
>De plugin voor gekoppelde lijsten (Linked List)</title>
906
>Eigenschappen en functies voor gekoppelde lijsten</title>
910
>De structuur Gekoppelde lijst</title>
912
>Gegeven een gegevensstructuurobject van het type "Gekoppelde lijst" (Linked List), kunt u de volgende functies gebruiken: </para>
914
>node begin(); // geeft de beginknoop van de gekoppelde lijst
915
setBegin(node begin): // instellen van de knoop begin als beginknoop van de lijst en lijst opnieuw ordenen
916
createNode(); // een nieuwe knoop aanmaken voor de lijst
922
>Knopen van gekoppelde lijst</title>
924
>Gegeven een gegevensstructuurobject van het type "Gekoppelde lijst" (Linked List), kunt u de volgende functies gebruiken voor de knopen van de graaf, naast de eigenschappen die worden geleverd door de gegevenselementen: </para>
926
>node front(); // geeft de vorige knoop in de lijst terug
932
>Kanten van gekoppelde lijst</title>
934
>Gegeven de kanten van een gegevensstructuur van het type "Gekoppelde lijst" (Linked List), zijn alleen de eigenschappen beschikbaar van de basisgegevensstructuur. </para>
939
<sect1 id="scripting-plugin-rootedtree">
941
>De plugin voor de boomstructuur</title>
944
>Eigenschappen en functies voor de boomstructuur</title>
948
>De boomstructuur</title>
950
>Gegeven een gegevensstructuurobject van het type "Boomstructuur" (Rooted Tree), kunnen de volgende eigenschappen worden gelezen of geschreven: </para>
952
>ShowAllPointers // stel in op true (waar), voor het tonen van alle kanten, stel in op false (onwaar), als meerdere kanten als één moeten worden weergegeven.
955
>Gegeven een gegevensstructuurobject van het type "Boomstructuur" (Rooted Tree), kunt u de volgende functies gebruiken: </para>
957
>node add_data(string naam); // voeg een knoop toe aan een boom met de gegeven naam
958
void set_root_node(node root); // stel root in als rootknoop (beginpunt) van de boom
959
node root_node(); // geef rootknoop (beginpunt) terug van de boom
965
>Knopen in boomstructuur als root (beginpunt) beschouwd </title>
967
>Gegeven een knoopobject van het type "Boomstructuur" (Rooted Tree), kunnen de volgende eigenschappen worden gelezen of geschreven: </para>
969
>int numberOfChilds // stel aantal in van (mogelijke) onderliggende knopen
970
node left_child // alleen lezen: onderliggende knoop links
971
node right_child // alleen lezen: onderliggende knoop rechts
972
node node_parent // alleen lezen: voortbrengende (bovenliggende) knoop
975
>Gegeven knoopobject van het type "Boomstructuur" (Rooted Tree), kunt u de volgende functies gebruiken: </para>
977
>node add_left_child(node child); // onderliggende knoop child links toevoegen
978
node add_right_child(node child); // onderliggende knoop child rechts toevoegen
979
node add_child(node child, int i); // child als i-de onderliggende knoop toevoegen
980
node add_node_parent(node child); // aan knoop child een voortbrengende knoop toevoegen (kan alleen als die er nog niet is)
981
node left_child(); // onderliggende knoop links teruggeven
982
node right_child(); // onderliggende knoop rechts teruggeven
983
node child_at(int i); // de i-de onderliggende knoop teruggeven
984
node node_parent(); // de voortbrengende knoop teruggeven
990
>Kanten in boomstructuur</title>
992
>Gegeven kanten van een gegevensstructuur van het type "Boomstructuur" (Rooted Tree), zijn alleen de eigenschappen beschikbaar van de basisgegevensstructuur. </para>
997
<sect1 id="scripting-controls">
999
>Script uitvoeren besturen</title>
1004
>Include-bestanden (ingesloten bestanden)</title>
1006
>In scriptdocumenten kunnen andere scripts worden opgenomen. Dit is nuttig om de grootte van scripts te beperken, en voor een betere leesbaarheid. Met <menuchoice
1008
>Scriptdocument</guimenu
1010
>Mogelijke Includes</guimenuitem
1012
> 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>
1014
>include_script(string pad); // relatieve of absolute pad naar scriptbestand
1018
<sect2 id="scripting-output">
1020
>Script-uitvoer</title>
1022
>Gedurende het uitvoeren (werking) van een algoritme, worden debug (programmafouten) en programmauitvoer getoond in de <emphasis
1023
>Debug ∧ scriptuitvoer</emphasis
1024
>. 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>
1026
>U kunt met de volgende functies de tekst regelen, die in de scriptuitvoer wordt getoond: </para>
1028
>output(string bericht); // toont bericht als scriptuitvoer
1029
debug(string bericht); // toont bericht als debug output
1033
<sect2 id="scripting-controlling">
1035
>Regelen script uitvoeren</title>
1037
>U kunt scripts op verschillende manieren uitvoeren (laten werken). </para>
1039
>U kunt met de volgende functies de tekst regelen, die in de scriptuitvoer wordt getoond: </para>
1045
<imagedata fileref="rocs-control-engine-run.png" format="PNG"/></imageobject>
1049
>: Script uitvoeren tot het einde.</para
1055
<imagedata fileref="rocs-control-engine-stop.png" format="PNG"/></imageobject>
1059
>: Stop het uitvoeren van het script (alleen wanneer een script bezig is).</para
1065
<imagedata fileref="rocs-control-engine-step.png" format="PNG"/></imageobject>
1068
>Enkele stap</guilabel
1069
>: Voer een enkele stap uit van het script. Een stap eindigt met de functie <literal
1070
>interrupt()</literal
1073
>interrupt(); // einde van een stap
1080
<imagedata fileref="rocs-control-engine-debug.png" format="PNG"/></imageobject>
1084
>: Voer een stap uit in debug-modus. Hiermee wordt dedebug-dialoog van QtScript geopend. (Debug is zoeken en verbeteren van programmafouten).</para
1091
<chapter id="import-export">
1093
>Import en export</title>
1094
<sect1 id="import-export-projects">
1096
>&rocs;-projecten uitwisselen</title>
1098
>&rocs; projecten kunnen worden geïmporteerd en geëxporteerd als archiefbestanden (<literal
1100
>-bestanden). Deze archieven kunnen worden gebruikt om projecten uit te wisselen met anderen. Importeren en exporteren doet u met <menuchoice
1104
>Project importeren</guimenuitem
1110
>Project exporteren</guimenuitem
1115
<sect1 id="import-export-graphs">
1117
>Importeren van graafdocumenten</title>
1119
>Import en export naar de volgende formaten worden door &rocs; ondersteund: </para>
1123
>DOT-bestanden, ook wel bekend als Graphviz-bestanden.</para
1127
>GML-bestanden</para
1131
>Plain-Text-bestanden.</para
1135
>De ondersteuning voor de meeste van deze bestanden is erg summier, en behelst alleen de basisgegevens. Geïmporteerd worden gegevenselementen en de bijbehorende verbindingen, namen van alle elementen, waarden , en coördinaten. </para>
371
>Toolbars Shown</guisubmenu
393
>Show Statusbar</guimenuitem
400
> the statusbar.</para
410
>Configure Shortcuts...</guimenuitem
417
> standard &kde; setting dialog that allows you to choose different shortcut keys for different actions. </para
427
>Configure Toolbars...</guimenuitem
434
> the items you want to put in the toolbar. </para
447
&help.menu.documentation; </sect2>
1139
452
<chapter id="credits">
1141
455
>Dankbetuiging en licentie</title>
1146
>Programma Copyright:</para>
1150
>Copyright 2008 Ugo Sangiori (ugorox AT gmail.com)</para
1154
>Copyright 2008-2012 Tomaz Canabrava (tcanabrava AT kde.org)</para
1158
>Copyright 2008-2012 Wagner Reck (wagner.reck AT gmail.com)</para
1162
>Copyright 2011-2012 Andreas Cord-Landwehr (cordlandwehr AT googlemail.com)</para
460
>Program copyright 2009 Tomaz Canabrava tcanabrava at kde dot org </para>
1167
>Documentatie Copyright:</para>
1171
>Documentatie copyright 2009 &Anne-Marie.Mahfouf; &Anne-Marie.Mahfouf.mail;</para
1175
>Documentatie copyright 2009 Tomaz Canabrava (tcanabrava AT kde.org)</para
1179
>Documentatie copyright 2011-2012 Andreas Cord-Landwehr (cordlandwehr AT googlemail.com)</para
463
>Documentation copyright 2009 &Anne-Marie.Mahfouf; &Anne-Marie.Mahfouf.mail; and Tomaz Canabrava tcanabrava at kde dot org </para>
1183
465
&meld.fouten;&vertaling.freek;&vertaling.jaap;
1184
466
&underFDL; &underGPL; </chapter>