~ubuntu-branches/ubuntu/raring/kde-l10n-nl/raring

« back to all changes in this revision

Viewing changes to docs/kdeedu/rocs/index.docbook

  • Committer: Package Import Robot
  • Author(s): Felix Geyer
  • Date: 2012-09-11 11:10:45 UTC
  • mfrom: (1.12.17)
  • Revision ID: package-import@ubuntu.com-20120911111045-zv7fe4pkrjzslyq1
Tags: 4:4.9.1-0ubuntu1
New upstream release

Show diffs side-by-side

added added

removed removed

Lines of Context:
4
4
  <!ENTITY kappname "&rocs;">
5
5
  <!ENTITY package "kdeedu">
6
6
  <!ENTITY % addindex "IGNORE">
7
 
  <!ENTITY % Dutch "INCLUDE">
 
7
  <!ENTITY % Dutch "INCLUDE"
 
8
8
9
]>
9
10
<book lang="&language;">
10
11
 
22
23
> <email
23
24
>tomaz.canabrava@gmail.com</email
24
25
> </author>
25
 
<author
26
 
><personname
27
 
> <firstname
28
 
>Andreas</firstname
29
 
> <surname
30
 
>Cord-Landwehr</surname
31
 
> </personname
32
 
> <email
33
 
>cordlandwehr@googlemail.com</email
34
 
> </author>
35
 
 
36
26
&Freek.de.Kruijf;&Jaap.Woldringh; 
37
27
</authorgroup>
38
28
 
39
 
<copyright
40
 
><year
41
 
>2009</year
42
 
><holder
43
 
>Tomaz Canabrava</holder
44
 
></copyright>
45
 
<copyright
46
 
><year
47
 
>2011-2012</year
48
 
><holder
49
 
>Andreas Cord-Landwehr</holder
50
 
></copyright>
 
29
<copyright>
 
30
<year
 
31
>2009</year>
 
32
<holder
 
33
>Tomaz Canabrava</holder>
 
34
</copyright>
 
35
<legalnotice
 
36
>&FDLNotice;</legalnotice>
51
37
 
52
38
<date
53
 
>2012-05-27</date>
 
39
>2009-11-05</date>
54
40
<releaseinfo
55
 
>1.7 &kde; 4.9</releaseinfo>
56
 
 
57
 
<legalnotice
58
 
>&FDLNotice;</legalnotice>
 
41
>1.0</releaseinfo>
59
42
 
60
43
<abstract>
61
44
<para
62
 
>&rocs; is een hulpmiddel van KDE voor de grafentheorie. </para>
 
45
>&rocs; is a graph theory viewer tool for KDE. </para>
63
46
</abstract>
64
47
 
65
48
<keywordset>
85
68
<title
86
69
>Inleiding</title>
87
70
<para
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>
89
 
 
90
 
<sect1 id="introduction-goals">
91
 
<title
92
 
>Doelen, en voor wie is dit bestemd.</title>
93
 
<para
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>
95
 
<itemizedlist>
96
 
    <listitem
97
 
><para
98
 
>docenten die algoritmes aan hun studenten willen demonstreren,</para
99
 
></listitem>
100
 
    <listitem
101
 
><para
102
 
>studenten die willen begrijpen en zien hoe een algoritme werkt,</para
103
 
></listitem>
104
 
    <listitem
105
 
><para
106
 
>en verder iedereen die belang stelt in gegevensstructuren en algoritmes.</para
107
 
></listitem>
108
 
</itemizedlist>
109
 
 
110
 
<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>
112
 
 
113
 
<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
115
 
><guimenu
116
 
>Graafdocument</guimenu
117
 
> <guimenuitem
118
 
>Hulpmiddelen</guimenuitem
119
 
> <guimenuitem
120
 
>Graaf aanmaken</guimenuitem
121
 
></menuchoice
122
 
>. U kunt verder waarden toekennen aan de elementen van de gegevensstructuren, met de hand, of met <menuchoice
123
 
><guimenu
124
 
>Graafdocument</guimenu
125
 
> <guimenuitem
126
 
>Hulpmiddelen</guimenuitem
127
 
> <guimenuitem
128
 
>Waarden toekennen</guimenuitem
129
 
></menuchoice
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>
131
 
 
132
 
<screenshot>
133
 
<screeninfo
134
 
>Schermbeeld van &rocs;.</screeninfo>
135
 
<mediaobject>
136
 
<imageobject>
137
 
<imagedata fileref="rocs-screenshot.png" format="PNG"/>
138
 
</imageobject>
139
 
<textobject>
140
 
<phrase
141
 
>Schermbeeld van &rocs;.</phrase>
142
 
</textobject>
143
 
</mediaobject>
144
 
</screenshot>
145
 
</sect1>
146
 
 
147
 
<sect1 id="introduction-nutshell">
148
 
<title
149
 
>&rocs; in een notendop</title>
150
 
<para
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>
152
 
<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
155
 
> en <emphasis
156
 
>scripts</emphasis
157
 
>. </para>
158
 
 
159
 
<sect2>
160
 
<title
161
 
>Plugins voor graafdocumenten en gegevensstructuren</title>
162
 
<para
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>
164
 
<para
165
 
>Graafdocumenten vormen ook de basis voor de definitie van pijltypen en gegevenstypen. </para>
166
 
</sect2>
167
 
 
168
 
<sect2>
169
 
<title
170
 
>Gegevensstructuren </title>
171
 
<para
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>
173
 
</sect2>
174
 
 
175
 
<sect2>
176
 
<title
177
 
>Pijltypen</title>
178
 
<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>
180
 
</sect2>
181
 
 
182
 
<sect2>
183
 
<title
184
 
>Gegevenstypen</title>
185
 
<para
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>
187
 
</sect2>
188
 
 
189
 
<sect2>
190
 
<title
191
 
>Dynamische eigenschappen</title>
192
 
<para
193
 
>Elk gegevenselement en elke pijl heeft twee eigenschappen: <literal
194
 
>naam</literal
195
 
> en <literal
196
 
>waarde</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
201
 
> en <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>
204
 
</sect2>
205
 
</sect1>
206
 
 
207
 
<sect1 id="introduction-tutorial">
208
 
<title
209
 
>Instructie</title>
210
 
<para
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>
214
 
<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>
216
 
 
217
 
<sect2>
218
 
<title
219
 
>Een graaf genereren</title>
220
 
<para
221
 
>Voor de graaf-plugin levert &rocs; een hulpmiddel waarmee grafen kunnen worden aangemaakt. We gaan naar het menu <menuchoice
222
 
><guimenu
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>
 
72
 
 
73
<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>
 
75
</chapter>
 
76
 
 
77
<chapter id="using-rocs">
 
78
<title
 
79
>Using &rocs;</title>
 
80
<para
 
81
>The user interface is divided in two parts: </para
 
82
 
83
 
 
84
<itemizedlist>
 
85
<listitem
 
86
><para
 
87
>the top right part is where you draw your graphs, and the bottom right one is where you create your algorithms, </para
 
88
></listitem>
 
89
<listitem
 
90
><para
 
91
>the left sidebar is where all your open graphs stay, you can open multiple graphs per file. </para
 
92
></listitem>
 
93
</itemizedlist>
 
94
 
 
95
 
 
96
<sect1 id="rocs-features">
 
97
<title
 
98
>&rocs; global settings</title>
 
99
<para
 
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>
 
101
<itemizedlist>
 
102
<listitem
 
103
><para>
 
104
<guilabel
 
105
>Graph Name</guilabel>
 
106
</para
 
107
></listitem>
 
108
<listitem
 
109
><para
 
110
><guilabel
 
111
>Node Color</guilabel
 
112
> for new created nodes, you can change the node color for all current nodes by clicking the <guilabel
 
113
>All</guilabel
 
114
> button </para
 
115
></listitem>
 
116
<listitem
 
117
><para>
 
118
<guilabel
 
119
>Edge Color</guilabel>
 
120
</para
 
121
></listitem>
 
122
</itemizedlist>
 
123
<para
 
124
>The last row of options consists in toggled buttons:</para>
 
125
<itemizedlist>
 
126
<listitem
 
127
><para
 
128
><guilabel
 
129
>Show names in:</guilabel
 
130
> <guilabel
 
131
>Nodes</guilabel
 
132
> or <guilabel
 
133
>Edges</guilabel
 
134
>. </para
 
135
></listitem>
 
136
<listitem
 
137
><para
 
138
><guilabel
 
139
>Show values in:</guilabel
 
140
> <guilabel
 
141
>Nodes</guilabel
 
142
> or <guilabel
 
143
>Edges</guilabel
 
144
>. </para
 
145
></listitem>
 
146
<!--listitem
 
147
><para>
 
148
<guilabel
 
149
>Graph is oriented</guilabel>
 
150
</para
 
151
></listitem>
 
152
<listitem
 
153
><para>
 
154
<guilabel
 
155
>Graph is Automate</guilabel>
 
156
</para
 
157
></listitem-->
 
158
</itemizedlist>
 
159
</sect1>
 
160
 
 
161
<sect1 id="rocs-toolbars">
 
162
<title
 
163
>&rocs; toolbars</title>
 
164
<para
 
165
>There are two toolbars, on the top. The main one has the following tools:</para>
 
166
<itemizedlist>
 
167
<listitem
 
168
><para
 
169
><guilabel
 
170
>Move Node</guilabel
 
171
>: moves a node around the drawing area.</para
 
172
></listitem>
 
173
<listitem
 
174
><para
 
175
><guilabel
 
176
>Add Node</guilabel
 
177
>: creates a new node at the clicked position on the drawing area.</para
 
178
></listitem>
 
179
<listitem
 
180
><para
 
181
><guilabel
 
182
>Add Edge</guilabel
 
183
>: creates a new edge between two nodes.</para
 
184
></listitem>
 
185
<listitem
 
186
><para
 
187
><guilabel
 
188
>Select</guilabel
 
189
>: select items by clicking on them.</para
 
190
></listitem>
 
191
<listitem
 
192
><para
 
193
><guilabel
 
194
>Delete</guilabel
 
195
>: delete items by clicking on them.</para
 
196
></listitem>
 
197
<listitem
 
198
><para
 
199
>Use the align tools to place selected nodes.</para
 
200
></listitem>
 
201
</itemizedlist>
 
202
 
 
203
<para
 
204
>A right mouse click on a node or edge brings you the property dialog for that node or edge.</para>
 
205
<para
 
206
>The layout toolbar consists in various aligns icons.</para>
 
207
 
 
208
<para
 
209
>To align nodes, choose the <guiicon
 
210
>Select</guiicon
 
211
> tool, click and drag a rectangle, then choose the alignement that you want. </para>
 
212
</sect1>
 
213
</chapter>
 
214
 
 
215
<chapter id="scripting-rocs">
 
216
<title
 
217
>Scripting &rocs;</title>
 
218
<para
 
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>
 
220
 
 
221
<sect1 id="script-graph">
 
222
<title
 
223
>Graph</title>
 
224
<programlisting
 
225
>array list_nodes();
 
226
     array list_edges();
 
227
     node add_node(name);
 
228
     edge add_edge(from, to);
 
229
     node node_byname(QString&amp; name);
 
230
     node begin_node();
 
231
     array end_nodes();
 
232
</programlisting
 
233
 
234
<para
 
235
>Graph variables that can be changed:</para>
 
236
<programlisting
 
237
>bool directed
 
238
     bool automate
 
239
     string name
 
240
     string nodeDefaultColor // in HEXA
 
241
     string edgeDefaultColor  // in HEXA 
 
242
</programlisting>
 
243
</sect1>
 
244
 
 
245
<sect1 id="script-nodes">
 
246
<title
 
247
>Nodes</title>
 
248
<programlisting
 
249
>array adj_nodes();
 
250
     array adj_edges();
 
251
     array  input_edges();
 
252
     array output_edges();
 
253
     array loop_edges();
 
254
     array connected_edges(Node *n);
 
255
     void self_remove();
 
256
</programlisting
 
257
 
258
<para
 
259
>Node Variables:</para>
 
260
<programlisting
 
261
>double x
 
262
    double y
 
263
    double width
 
264
    string value
 
265
    string name
 
266
    string color  // in HEXA
 
267
    bool begin
 
268
    bool end
 
269
</programlisting>
 
270
</sect1>
 
271
 
 
272
<sect1 id="script-edges">
 
273
<title
 
274
>Edges</title>
 
275
<programlisting
 
276
>string color ( em hexa )
 
277
    string value
 
278
    string name
 
279
    double width
 
280
    string style ( dot, dash, dash dot, solid )
 
281
 
 
282
    node start();
 
283
    node  end();
 
284
 
 
285
    void self_remove();
 
286
</programlisting
 
287
 
288
</sect1>
 
289
 
 
290
<sect1 id="script-example">
 
291
<title
 
292
>Example</title>
 
293
<para
 
294
>Here is a simple script example that sets the color of the 4 first nodes in the first graph:</para>
 
295
<programlisting
 
296
>/* A simple example that sets the color of the 4 first nodes in the first 
 
297
graph: */
 
298
 
 
299
var colours = new Array("red", "green", "blue", "yellow");
 
300
 
 
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
 
306
 
 
307
 for ( var i = 0; i &lt; colours.length; i++){
 
308
        if (i 
 
309
> list2.length) break;
 
310
        list2[i].color = colours[i]
 
311
 }
 
312
</programlisting>
 
313
</sect1>
 
314
 
 
315
</chapter>
 
316
 
 
317
<chapter id="commands">
 
318
<title
 
319
>Command Reference</title>
 
320
 
 
321
<sect1 id="rocs-mainwindow">
 
322
<title
 
323
>Menus and Shortcut Keys</title>
 
324
 
 
325
<sect2>
 
326
<title
 
327
>The <guimenu
 
328
>File</guimenu
 
329
> Menu</title>
 
330
<variablelist>
 
331
<varlistentry>
 
332
<term
 
333
><menuchoice
 
334
><shortcut
 
335
> <keycombo action="simul"
 
336
>&Ctrl;<keycap
 
337
>Q</keycap
 
338
></keycombo
 
339
> </shortcut
 
340
> <guimenu
 
341
>File</guimenu
 
342
> <guimenuitem
 
343
>Quit</guimenuitem
 
344
> </menuchoice
 
345
></term>
 
346
<listitem
 
347
><para
 
348
><action
 
349
>Quits</action
 
350
> &rocs;</para
 
351
></listitem>
 
352
</varlistentry>
 
353
</variablelist>
 
354
 
 
355
</sect2>
 
356
 
 
357
 
 
358
<sect2>
 
359
<title
 
360
>The <guimenu
 
361
>Settings</guimenu
 
362
> Menu</title>
 
363
 
 
364
<variablelist>
 
365
<varlistentry>
 
366
<term
 
367
><menuchoice
 
368
><guimenu
 
369
>Settings</guimenu
224
370
> <guisubmenu
225
 
>Hulpmiddelen</guisubmenu
226
 
> <guimenuitem
227
 
>Graaf aanmaken</guimenuitem
228
 
></menuchoice
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
230
 
>testgraaf</literal
231
 
>. </para>
232
 
</sect2>
233
 
 
234
 
<sect2>
235
 
<title
236
 
>Typen genereren</title>
237
 
<para
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
241
 
>1</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
243
 
>1</literal
244
 
> (Vert.: ? ), en we stellen de kleur in op blauw. </para>
245
 
</sect2>
246
 
 
247
 
<sect2>
248
 
<title
249
 
>Het algoritme</title>
250
 
<para
251
 
>Tenslotte moeten we het benaderingsalgoritme implementeren. Hiervoor gebruiken we het volgende:  </para>
252
 
<programlisting
253
 
>var E = testgraph.list_edges(); // niet verwerkte kanten
254
 
var C = new Array();            // overeenkomende kanten
255
 
while (E.length 
256
 
> 0) {
257
 
    var e = E[0];        // we nemen eerste kant e={u,v}
258
 
    var u = e.start();
259
 
    var v = e.end();
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
264
 
 
265
 
    // merk u,v als knopen in C
266
 
    u.set_type(1);
267
 
    v.set_type(1);
268
 
 
269
 
    // verwijder uit E alle kanten die in u of v eindigen
270
 
    var adjacent = u.adj_edges();
271
 
    for (var i=0; i &lt; adjacent.length; i++) {
272
 
        var index = E.indexOf(adjacent[i]); // zoek de index
273
 
        if (index!=-1) {
274
 
            E.splice(index, 1); // verwijder indien gevonden
275
 
        }
276
 
    }
277
 
    var adjacent = v.adj_edges();
278
 
    for (var i=0; i &lt; adjacent.length; i++) {
279
 
        var index = E.indexOf(adjacent[i]); // zoek de index
280
 
        if (index!=-1) {
281
 
            E.splice(index, 1); // verwijder indien gevonden
282
 
        }
283
 
    }
284
 
}
285
 
output("Vertex Cover bevat " + C.length + " knopen.");
286
 
</programlisting>
287
 
</sect2>
288
 
 
289
 
<sect2>
290
 
<title
291
 
>Het algoritme uitvoeren</title>
292
 
<para
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>
296
 
</sect2>
297
 
</sect1>
298
 
</chapter>
299
 
 
300
 
<chapter id="user-interface">
301
 
<title
302
 
>De gebruikersinterface van &rocs;</title>
303
 
 
304
 
<sect1 id="user-interface-all">
305
 
<title
306
 
>Algemene elementen van de gebruikersinterface</title>
307
 
<para
308
 
>De gebruikersinterface is verdeeld in een aantal logische gedeelten, zoals getoond in onderstaand schermbeeld. </para>
309
 
<screenshot>
310
 
    <screeninfo
311
 
>GUI-elementen van de interface van &rocs;.</screeninfo>
312
 
    <mediaobject>
313
 
    <imageobject>
314
 
    <imagedata fileref="rocs-interfaces.png" format="PNG"/>
315
 
    </imageobject>
316
 
    <textobject>
317
 
    <phrase
318
 
>GUI-elementen van de interface van &rocs;.</phrase>
319
 
    </textobject>
320
 
    </mediaobject>
321
 
</screenshot>
322
 
<variablelist>
323
 
<varlistentry>
324
 
    <term
325
 
>Visuele graafbewerker</term>
326
 
    <listitem
327
 
><para
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
331
 
></listitem>
332
 
</varlistentry>
333
 
<varlistentry>
334
 
    <term
335
 
>Werkbalk voor de Werkbalk visuele graafbewerker</term>
336
 
    <listitem
337
 
><para
338
 
>Dit zijn de hulpmiddelen waarmee gegevensstructuren in het visuele bwerkingsprogramma van het whiteboard kunnen worden gewijzigd. Met <guibutton
339
 
>Gegevens toevoegen</guibutton
340
 
> of <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
346
 
> als <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
349
 
></listitem>
350
 
</varlistentry>
351
 
<varlistentry>
352
 
    <term
353
 
>Eigenschappen van grafen</term>
354
 
    <listitem
355
 
><para
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
357
 
></listitem>
358
 
</varlistentry>
359
 
<varlistentry>
360
 
    <term
361
 
>Bewerken van Scripts</term>
362
 
    <listitem
363
 
><para
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
365
 
></listitem>
366
 
</varlistentry>
367
 
<varlistentry>
368
 
    <term
369
 
>Debug &amp; Script-uitvoer</term>
370
 
    <listitem
371
 
><para
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
373
 
></listitem>
374
 
</varlistentry>
375
 
<varlistentry>
376
 
    <term
377
 
>Besturing</term>
378
 
    <listitem
379
 
><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
381
 
>Uitvoeren</guiicon
382
 
> te klikken. Een script kan tijdens het uitvoeren worden gestopt door op de knop <guiicon
383
 
>Stop</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
387
 
></listitem>
388
 
</varlistentry>
389
 
</variablelist>
390
 
</sect1>
391
 
 
392
 
<sect1 id="user-interface-toolbars">
393
 
<title
394
 
>Werkbalken</title>
395
 
<para
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>
397
 
<itemizedlist>
398
 
    <listitem
399
 
><para
400
 
>Hoofdwerkbalk</para
401
 
></listitem>
402
 
    <listitem
403
 
><para
404
 
>Opmaakwerkbalk</para
405
 
></listitem>
406
 
</itemizedlist>
407
 
<!--  -->
408
 
<sect2 id="user-interface-toolbars-main">
409
 
<title
410
 
>Hoofdwerkbalk</title>
411
 
<para
412
 
>In de <emphasis
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>
415
 
<itemizedlist>
416
 
<listitem
417
 
><para
418
 
><guilabel
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
421
 
></listitem>
422
 
<listitem
423
 
><para
424
 
><guilabel
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
427
 
></listitem>
428
 
<listitem
429
 
><para
430
 
><guilabel
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 (&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
433
 
></listitem>
434
 
<listitem
435
 
><para
436
 
><guilabel
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
439
 
></listitem>
440
 
<listitem
441
 
><para
442
 
><guilabel
443
 
>Zoom</guilabel
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
445
 
></listitem>
446
 
</itemizedlist>
447
 
<screenshot>
448
 
<screeninfo
449
 
>De hoofdwerkbalk.</screeninfo>
450
 
<mediaobject>
451
 
<imageobject>
452
 
<imagedata fileref="rocs-toolbar-main.png" format="PNG"/>
453
 
</imageobject>
454
 
<textobject>
455
 
<phrase
456
 
>De hoofdwerkbalk.</phrase>
457
 
</textobject>
458
 
</mediaobject>
459
 
</screenshot>
460
 
</sect2>
461
 
 
462
 
<sect2 id="user-interface-toolbars-alignment">
463
 
<title
464
 
>Opmaakwerkbalk</title>
465
 
<para
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>
469
 
<itemizedlist>
470
 
<listitem
471
 
><para>
472
 
<inlinemediaobject
473
 
><imageobject>
474
 
<imagedata fileref="hi22-action-rocsaligntop.png" format="PNG"/></imageobject>
475
 
</inlinemediaobject
476
 
> <guilabel
477
 
>Boven</guilabel
478
 
>: Alle gegevenselementen verticaal uitlijnen op de positie van het bovenste gegevenselement. Dit betreft alleen de verticale posities.</para
479
 
></listitem>
480
 
<listitem
481
 
><para>
482
 
<inlinemediaobject
483
 
><imageobject>
484
 
<imagedata fileref="hi22-action-rocsalignvmiddle.png" format="PNG"/></imageobject>
485
 
</inlinemediaobject
486
 
> <guilabel
487
 
>Midden</guilabel
488
 
>: De gegevenselementen uitlijnen op de verticale positie van het middelste van de geselecteerde gegevenselementen. Dit betreft alleen de verticale posities.</para
489
 
></listitem>
490
 
<listitem
491
 
><para>
492
 
<inlinemediaobject
493
 
><imageobject>
494
 
<imagedata fileref="hi22-action-rocsalignbottom.png" format="PNG"/></imageobject>
495
 
</inlinemediaobject
496
 
> <guilabel
497
 
>Onder</guilabel
498
 
>: Alle gegevenselementen verticaal uitlijnen op de positie van de onderste gegevenselement. Dit betreft alleen de verticale posities.</para
499
 
></listitem>
500
 
<listitem
501
 
><para>
502
 
<inlinemediaobject
503
 
><imageobject>
504
 
<imagedata fileref="hi22-action-rocsalignleft.png" format="PNG"/></imageobject>
505
 
</inlinemediaobject
506
 
> <guilabel
507
 
>Midden</guilabel
508
 
>: Alle gegevenselementen uitlijnen op de horizontale positie van het meest rechtse gegevenselement. Dit betreft alleen de horizontale posities.</para
509
 
></listitem>
510
 
<listitem
511
 
><para>
512
 
<inlinemediaobject
513
 
><imageobject>
514
 
<imagedata fileref="hi22-action-rocsalignhmiddle.png" format="PNG"/></imageobject>
515
 
</inlinemediaobject
516
 
> <guilabel
517
 
>Midden</guilabel
518
 
>: Alle gegevenselementen uitlijnen op de horizontale positie van het meest rechtse gegevenselement. Dit betreft alleen de horizontale posities.</para
519
 
></listitem>
520
 
<listitem
521
 
><para>
522
 
<inlinemediaobject
523
 
><imageobject>
524
 
<imagedata fileref="hi22-action-rocsalignright.png" format="PNG"/></imageobject>
525
 
</inlinemediaobject
526
 
> <guilabel
527
 
>Rechts</guilabel
528
 
>: Alle gevenselementen uitlijnen op de horizontale positie van het meest rechtse gegevenselement. Dit betreft alleen de horizontale posities.</para
529
 
></listitem>
530
 
<listitem
531
 
><para>
532
 
<inlinemediaobject
533
 
><imageobject>
534
 
<imagedata fileref="hi22-action-rocsaligncircle.png" format="PNG"/></imageobject>
535
 
</inlinemediaobject
536
 
> <guilabel
537
 
>Cirkel</guilabel
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
539
 
></listitem>
540
 
<listitem
541
 
><para>
542
 
<inlinemediaobject
543
 
><imageobject>
544
 
<imagedata fileref="hi22-action-rocsaligntree.png" format="PNG"/></imageobject>
545
 
</inlinemediaobject
546
 
> <guilabel
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
549
 
></listitem>
550
 
</itemizedlist>
551
 
<screenshot>
552
 
<screeninfo
553
 
>De opmaakwerkbalk.</screeninfo>
554
 
<mediaobject>
555
 
<imageobject>
556
 
<imagedata fileref="rocs-toolbar-alignment.png" format="PNG"/>
557
 
</imageobject>
558
 
<textobject>
559
 
<phrase
560
 
>De opmaakwerkbalk.</phrase>
561
 
</textobject>
562
 
</mediaobject>
563
 
</screenshot>
564
 
</sect2>
565
 
</sect1>
566
 
 
567
 
<sect1 id="user-interface-graph-properties">
568
 
<title
569
 
>Het paneel voor de eigenschappen van grafen</title>
570
 
<para
571
 
>Bovenin het paneel kan het huidige graafdocument worden geselecteerd. Hieronder kunnen nieuwe gegevensstructuren worden aangemaakt, of bestaande gegevensstructuren worden ingesteld. </para>
572
 
 
573
 
<sect2 id="user-interface-graph-properties-document">
574
 
<title
575
 
>Selectie en eigenschappen documenten</title>
576
 
<para
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
578
 
><guimenu
579
 
>Project</guimenu
580
 
> <guimenuitem
581
 
>Nieuw graafdocument</guimenuitem
582
 
></menuchoice
583
 
> of met <menuchoice
584
 
><guimenu
585
 
>Project</guimenu
586
 
> <guimenuitem
587
 
>&rocs;-graaf importeren</guimenuitem
588
 
></menuchoice
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>
592
 
</sect2>
593
 
 
594
 
<sect2 id="user-interface-graph-properties-datastructure-create">
595
 
<title
596
 
>Nieuwe gegevensstructuur aanmaken</title>
597
 
<para
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>
601
 
</sect2>
602
 
 
603
 
<sect2 id="user-interface-graph-properties-datastructure-config">
604
 
<title
605
 
>Gegevensstructuur configureren </title>
606
 
<para
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>
608
 
    
609
 
<itemizedlist>
610
 
    <listitem
611
 
><para
612
 
><guibutton
613
 
>Wissen</guibutton
614
 
>: Deze gegevenssstructuur wissen. </para
615
 
></listitem>
616
 
    <listitem
617
 
><para
618
 
><guilabel
619
 
>Naam</guilabel
620
 
> Dit is de naam van de gegevensstructuur.  Deze naam wordt in de algoritmes voor deze gegevensstructuur gebruikt. </para
621
 
></listitem>
622
 
    <listitem
623
 
><para
624
 
><guilabel
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
627
 
></listitem>
628
 
</itemizedlist>
629
 
</sect2>
630
 
 
631
 
<sect2 id="user-interface-graph-properties-datastructure-individual">
632
 
<title
633
 
>Plugin instellen voor Opties van gegevensstructuur</title>
634
 
<para
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>
636
 
    
637
 
<sect3>
638
 
<title
639
 
>Graafplugin</title>
640
 
<para
641
 
>Use <guilabel
642
 
>Graaftype</guilabel
643
 
> voor het selecteren van het type van de graaf. De betekenis van deze typen zijn als volgt: </para>
644
 
<itemizedlist>
645
 
    <listitem
646
 
><para
647
 
><guilabel
648
 
>Gerichte graaf</guilabel
649
 
>: Graaf met gerichte kanten, waar meerdere zelfde gerichte kanten tussen dezelfde knopen niet zijn toegestaan. </para
650
 
></listitem>
651
 
    <listitem
652
 
><para
653
 
><guilabel
654
 
>Ongerichte graaf</guilabel
655
 
>: Graaf met ongerichte kanten waar meerdere kanten tussen dezelfde knopen niet zijn toegestaan.  </para
656
 
></listitem>
657
 
    <listitem
658
 
><para
659
 
><guilabel
660
 
>Gerichte multigraaf</guilabel
661
 
>: Graaf met gerichte kanten waar meerdere zelfde gerichte kanten tussen dezelfde knopen zijn toegestaan. </para
662
 
></listitem>
663
 
    <listitem
664
 
><para
665
 
><guilabel
666
 
>Ongerichte multigraaf</guilabel
667
 
>: Graaf met ongerichte kanten waar meerdere zelfde  kanten tussen dezelfde knopen zijn toegestaan. </para
668
 
></listitem>
669
 
</itemizedlist>
670
 
</sect3>
671
 
 
672
 
<sect3>
673
 
<title
674
 
>Plugin voor de boomstructuur</title>
675
 
<para
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>
679
 
</sect3>
680
 
 
681
 
</sect2>
682
 
</sect1>
683
 
</chapter>
684
 
 
685
 
<chapter id="scripting">
686
 
<title
687
 
>Het schrijven en uitvoeren (laten werken) van algoritmes in &rocs; </title>
688
 
 
689
 
<para
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>
691
 
<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>
693
 
 
694
 
<sect1 id="scripting-data-structure">
695
 
<title
696
 
>De basiselementen van gegevensstructuren </title>
697
 
<para
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>
699
 
<sect2
700
 
><title
701
 
>Basiseigenschappen van gegevensstructuren</title>
702
 
<para
703
 
>Gegevensstructuren worden geïdentificeerd door hun namen. Aangenomen dat een gegevensstructuur is aangemaakt met de naam <literal
704
 
>testgraaf</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
707
 
> </para>
708
 
 
709
 
<sect3>
710
 
<title
711
 
>Basisigenschappen en functies van gegevensstructuren</title>
712
 
<para
713
 
>Elke gegevensstructuur <literal
714
 
>testgraaf</literal
715
 
> heeft de volgende eigenschappen die kunnen worden gelezen of geschreven met de <literal
716
 
>testgraaf.eigenschap</literal
717
 
>: </para>
718
 
<programlisting
719
 
>tekenreeks voor de naam  // naam van de gegevensstructuur
720
 
</programlisting>
721
 
</sect3>
722
 
</sect2>
723
 
 
724
 
<sect2>
725
 
<title
726
 
>Basiseigenschappen en functies van de gegevenselementen</title>
727
 
<para
728
 
>Elk gegevenselement heeft de volgende eigenschappen die kunnen worden gelezen en geschreven: </para>
729
 
<programlisting
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
734
 
    string name   // naam
735
 
    string color  // kleur in HEXAdecimaal
736
 
</programlisting>
737
 
<para
738
 
>Verder kan elke dynamische eigenschap van een gegevenselement worden gebruikt met behulp van zijn naam. </para>
739
 
 
740
 
<para
741
 
>Bij elk gegevenselementobject horen de volgende methodes (functies): </para>
742
 
<programlisting
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
746
 
                      string 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 
754
 
</programlisting>
755
 
</sect2>
756
 
 
757
 
<sect2>
758
 
<title
759
 
>Basiseigenschappen en functies van de pijlen</title>
760
 
<para
761
 
>Elk pijl heeft de volgende eigenschappen die kunnen worden gelezen en geschreven: </para>
762
 
<programlisting
763
 
>string color  // kleur in HEXAdecimaal
764
 
    string value  // waarde
765
 
    string name   // naam
766
 
    double width  // dikte
767
 
    string style  // waarde: dot, dash, dash dot, solid
768
 
 
769
 
(vert.: dot: stip; dash: streep; solid: lijn)
770
 
</programlisting>
771
 
<para
772
 
>Verder kan elke dynamische eigenschap van een pijl worden gebruikt met behulp van zijn naam. </para>
773
 
 
774
 
<para
775
 
>Bij elk pijlobject horen de volgende methodes (functies): </para>
776
 
<programlisting
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
780
 
                      string waarde);
781
 
    node start();                       // startknoop van de pijl
782
 
    node end();                         // eindknoop van de pijl
783
 
    void self_remove();                 // deze pijl wissen
784
 
</programlisting>
785
 
</sect2>
786
 
</sect1>
787
 
 
788
 
<sect1 id="scripting-plugin-graph">
789
 
<title
790
 
>De graafplugin</title>
791
 
<sect2>
792
 
<title
793
 
>Eigenschappen en functies van grafen</title>
794
 
 
795
 
<sect3>
796
 
<title
797
 
>Gegevensstructuur van een graaf</title>
798
 
<para
799
 
>Gegeven een gegevensstructuurobject van het type "Graaf", kunt u de volgende functies gebruiken: </para>
800
 
<programlisting
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,
807
 
                          node tot,
808
 
                          int laagID); // voeg kant toe van gegeven pijltype/in opgegeven laag (overlay)
809
 
</programlisting>
810
 
</sect3>
811
 
 
812
 
<sect3>
813
 
<title
814
 
>Knopen van grafen</title>
815
 
<para
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>
817
 
<programlisting
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
824
 
</programlisting>
825
 
</sect3>
826
 
 
827
 
<sect3>
828
 
<title
829
 
>Graafkanten</title>
830
 
<para
831
 
>Gegeven de kanten van een gegevensstructuur van het type "Graaf", zijn alleen de eigenschappen beschikbaar van de basisgegevensstructuur. </para>
832
 
</sect3>
833
 
</sect2>
834
 
 
835
 
<sect2>
836
 
<title
837
 
>Algoritmes voor graafstructuren</title>
838
 
<para
839
 
>De plugin voor grafen levert enige speciale functies, die in scripts kunnen worden gebruikt.</para>
840
 
<variablelist>
841
 
<varlistentry>
842
 
<term
843
 
>Berekening kortste weg</term>
844
 
<listitem>
845
 
    <para
846
 
>Berekent de kortste weg tussen twee knopen <emphasis
847
 
>start</emphasis
848
 
> en <emphasis
849
 
>eind</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>
851
 
    <funcsynopsis>
852
 
    <funcprototype
853
 
><funcdef
854
 
>array <function
855
 
>dijkstra_shortest_path</function
856
 
></funcdef
857
 
> <paramdef
858
 
>knoop <parameter
859
 
><replaceable
860
 
>start</replaceable
861
 
></parameter
862
 
></paramdef
863
 
> <paramdef
864
 
>knoop<parameter
865
 
><replaceable
866
 
>eind</replaceable
867
 
></parameter
868
 
></paramdef
869
 
> </funcprototype>
870
 
    </funcsynopsis>
871
 
</listitem>
872
 
</varlistentry>
873
 
<varlistentry>
874
 
<term
875
 
>Afstanden kortste weg</term>
876
 
<listitem>
877
 
    <para
878
 
>Berekent de kortste wegen tussen de knoop <emphasis
879
 
>start</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>
881
 
    <funcsynopsis>
882
 
    <funcprototype
883
 
><funcdef
884
 
>array <function
885
 
>afstanden</function
886
 
></funcdef
887
 
> <paramdef
888
 
>knoop <parameter
889
 
><replaceable
890
 
>start</replaceable
891
 
></parameter
892
 
></paramdef
893
 
> </funcprototype>
894
 
    </funcsynopsis>
895
 
</listitem>
896
 
</varlistentry>
897
 
</variablelist>
898
 
</sect2>
899
 
</sect1>
900
 
 
901
 
<sect1 id="scripting-plugin-linkedlist">
902
 
<title
903
 
>De plugin voor gekoppelde lijsten (Linked List)</title>
904
 
<sect2>
905
 
<title
906
 
>Eigenschappen en functies voor gekoppelde lijsten</title>
907
 
 
908
 
<sect3>
909
 
<title
910
 
>De structuur Gekoppelde lijst</title>
911
 
<para
912
 
>Gegeven een gegevensstructuurobject van het type "Gekoppelde lijst" (Linked List), kunt u de volgende functies gebruiken: </para>
913
 
<programlisting
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
917
 
</programlisting>
918
 
</sect3>
919
 
 
920
 
<sect3>
921
 
<title
922
 
>Knopen van gekoppelde lijst</title>
923
 
<para
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>
925
 
<programlisting
926
 
>node front();                           // geeft de vorige knoop in de lijst terug
927
 
</programlisting>
928
 
</sect3>
929
 
 
930
 
<sect3>
931
 
<title
932
 
>Kanten van gekoppelde lijst</title>
933
 
<para
934
 
>Gegeven de kanten van een gegevensstructuur van het type "Gekoppelde lijst" (Linked List), zijn alleen de eigenschappen beschikbaar van de basisgegevensstructuur. </para>
935
 
</sect3>
936
 
</sect2>
937
 
</sect1>
938
 
 
939
 
<sect1 id="scripting-plugin-rootedtree">
940
 
<title
941
 
>De plugin voor de boomstructuur</title>
942
 
<sect2>
943
 
<title
944
 
>Eigenschappen en functies voor de boomstructuur</title>
945
 
 
946
 
<sect3>
947
 
<title
948
 
>De boomstructuur</title>
949
 
<para
950
 
>Gegeven een gegevensstructuurobject van het type "Boomstructuur" (Rooted Tree), kunnen de volgende eigenschappen worden gelezen of geschreven: </para>
951
 
<programlisting
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.
953
 
</programlisting>
954
 
<para
955
 
>Gegeven een gegevensstructuurobject van het type "Boomstructuur" (Rooted Tree), kunt u de volgende functies gebruiken: </para>
956
 
<programlisting
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
960
 
</programlisting>
961
 
</sect3>
962
 
 
963
 
<sect3>
964
 
<title
965
 
>Knopen in boomstructuur als root (beginpunt) beschouwd </title>
966
 
<para
967
 
>Gegeven een knoopobject van het type "Boomstructuur" (Rooted Tree), kunnen de volgende eigenschappen worden gelezen of geschreven: </para>
968
 
<programlisting
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
973
 
</programlisting>
974
 
<para
975
 
>Gegeven knoopobject van het type "Boomstructuur" (Rooted Tree), kunt u de volgende functies gebruiken: </para>
976
 
<programlisting
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
985
 
</programlisting>
986
 
</sect3>
987
 
 
988
 
<sect3>
989
 
<title
990
 
>Kanten in boomstructuur</title>
991
 
<para
992
 
>Gegeven kanten van een gegevensstructuur van het type "Boomstructuur" (Rooted Tree), zijn alleen de eigenschappen beschikbaar van de basisgegevensstructuur. </para>
993
 
</sect3>
994
 
</sect2>
995
 
</sect1>
996
 
 
997
 
<sect1 id="scripting-controls">
998
 
<title
999
 
>Script uitvoeren besturen</title>
1000
 
     
1001
 
 
1002
 
<sect2>
1003
 
<title
1004
 
>Include-bestanden (ingesloten bestanden)</title>
1005
 
<para
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
1007
 
><guimenu
1008
 
>Scriptdocument</guimenu
1009
 
><guimenuitem
1010
 
>Mogelijke Includes</guimenuitem
1011
 
></menuchoice
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>
1013
 
<programlisting
1014
 
>include_script(string pad);            // relatieve of absolute pad naar scriptbestand
1015
 
</programlisting>
1016
 
</sect2>
1017
 
 
1018
 
<sect2 id="scripting-output">
1019
 
<title
1020
 
>Script-uitvoer</title>
1021
 
<para
1022
 
>Gedurende het uitvoeren (werking) van een algoritme, worden debug (programmafouten) en programmauitvoer getoond in de <emphasis
1023
 
>Debug &and; 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>
1025
 
<para
1026
 
>U kunt met de volgende functies de tekst regelen, die in de scriptuitvoer wordt getoond: </para>
1027
 
<programlisting
1028
 
>output(string bericht);            // toont bericht als scriptuitvoer
1029
 
    debug(string bericht);             // toont bericht als debug output
1030
 
</programlisting>
1031
 
</sect2>
1032
 
 
1033
 
<sect2 id="scripting-controlling">
1034
 
<title
1035
 
>Regelen script uitvoeren</title>
1036
 
<para
1037
 
>U kunt scripts op verschillende manieren uitvoeren (laten werken). </para>
1038
 
<para
1039
 
>U kunt met de volgende functies de tekst regelen, die in de scriptuitvoer wordt getoond: </para>
1040
 
<itemizedlist>
1041
 
    <listitem
1042
 
><para>
1043
 
        <inlinemediaobject
1044
 
><imageobject>
1045
 
        <imagedata fileref="rocs-control-engine-run.png" format="PNG"/></imageobject>
1046
 
</inlinemediaobject
1047
 
> <guilabel
1048
 
>Start</guilabel
1049
 
>: Script uitvoeren tot het einde.</para
1050
 
></listitem>
1051
 
    <listitem
1052
 
><para>
1053
 
        <inlinemediaobject
1054
 
><imageobject>
1055
 
        <imagedata fileref="rocs-control-engine-stop.png" format="PNG"/></imageobject>
1056
 
</inlinemediaobject
1057
 
> <guilabel
1058
 
>Stop</guilabel
1059
 
>: Stop het uitvoeren van het script (alleen wanneer een script bezig is).</para
1060
 
></listitem>
1061
 
    <listitem
1062
 
><para>
1063
 
        <inlinemediaobject
1064
 
><imageobject>
1065
 
        <imagedata fileref="rocs-control-engine-step.png" format="PNG"/></imageobject>
1066
 
</inlinemediaobject
1067
 
> <guilabel
1068
 
>Enkele stap</guilabel
1069
 
>: Voer een enkele stap uit van het script. Een stap eindigt met de  functie <literal
1070
 
>interrupt()</literal
1071
 
>:</para>
1072
 
    <programlisting
1073
 
>interrupt();    // einde van een stap
1074
 
    </programlisting>
1075
 
    </listitem>
1076
 
    <listitem
1077
 
><para>
1078
 
        <inlinemediaobject
1079
 
><imageobject>
1080
 
        <imagedata fileref="rocs-control-engine-debug.png" format="PNG"/></imageobject>
1081
 
</inlinemediaobject
1082
 
> <guilabel
1083
 
>Debug</guilabel
1084
 
>: Voer een stap uit in debug-modus. Hiermee wordt dedebug-dialoog van QtScript geopend. (Debug is zoeken en verbeteren van programmafouten).</para
1085
 
></listitem>
1086
 
</itemizedlist>
1087
 
</sect2>
1088
 
</sect1>
1089
 
</chapter>
1090
 
 
1091
 
<chapter id="import-export">
1092
 
<title
1093
 
>Import en export</title>
1094
 
<sect1 id="import-export-projects">
1095
 
    <title
1096
 
>&rocs;-projecten uitwisselen</title>
1097
 
    <para
1098
 
>&rocs; projecten kunnen worden geïmporteerd en geëxporteerd als archiefbestanden (<literal
1099
 
>.tar.gz</literal
1100
 
>-bestanden). Deze archieven kunnen worden gebruikt om projecten uit te wisselen met anderen. Importeren en  exporteren doet u met <menuchoice
1101
 
><guimenu
1102
 
>Bestand</guimenu
1103
 
> <guimenuitem
1104
 
>Project importeren</guimenuitem
1105
 
></menuchoice
1106
 
> en <menuchoice
1107
 
><guimenu
1108
 
>Bestand</guimenu
1109
 
> <guimenuitem
1110
 
>Project exporteren</guimenuitem
1111
 
></menuchoice
1112
 
>. </para>
1113
 
</sect1>
1114
 
 
1115
 
<sect1 id="import-export-graphs">
1116
 
    <title
1117
 
>Importeren van graafdocumenten</title>
1118
 
    <para
1119
 
>Import en export naar de volgende formaten worden door &rocs; ondersteund: </para>
1120
 
    <itemizedlist>
1121
 
        <listitem
1122
 
><para
1123
 
>DOT-bestanden, ook wel bekend als Graphviz-bestanden.</para
1124
 
></listitem>
1125
 
        <listitem
1126
 
><para
1127
 
>GML-bestanden</para
1128
 
></listitem>
1129
 
        <listitem
1130
 
><para
1131
 
>Plain-Text-bestanden.</para
1132
 
></listitem>
1133
 
    </itemizedlist>
1134
 
    <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>
1136
 
</sect1>
1137
 
</chapter>
 
371
>Toolbars Shown</guisubmenu
 
372
> </menuchoice
 
373
></term>
 
374
<listitem
 
375
><para
 
376
><action
 
377
>Toggle</action
 
378
> the <guimenuitem
 
379
>Main</guimenuitem
 
380
>, and <guimenuitem
 
381
>Layout</guimenuitem
 
382
> toolbars.</para
 
383
></listitem>
 
384
</varlistentry>
 
385
 
 
386
 
 
387
<varlistentry>
 
388
<term
 
389
><menuchoice
 
390
><guimenu
 
391
>Settings</guimenu
 
392
> <guimenuitem
 
393
>Show Statusbar</guimenuitem
 
394
> </menuchoice
 
395
></term>
 
396
<listitem
 
397
><para
 
398
><action
 
399
>Toggle</action
 
400
> the statusbar.</para
 
401
></listitem>
 
402
</varlistentry>
 
403
 
 
404
<varlistentry>
 
405
<term
 
406
><menuchoice
 
407
><guimenu
 
408
>Settings</guimenu
 
409
> <guimenuitem
 
410
>Configure Shortcuts...</guimenuitem
 
411
> </menuchoice
 
412
></term>
 
413
<listitem
 
414
><para
 
415
><action
 
416
>Open</action
 
417
> standard &kde; setting dialog that allows you to choose different shortcut keys for different actions. </para
 
418
></listitem>
 
419
</varlistentry>
 
420
 
 
421
<varlistentry>
 
422
<term
 
423
><menuchoice
 
424
><guimenu
 
425
>Settings</guimenu
 
426
> <guimenuitem
 
427
>Configure Toolbars...</guimenuitem
 
428
> </menuchoice
 
429
></term>
 
430
<listitem
 
431
><para
 
432
><action
 
433
>Configure</action
 
434
> the items you want to put in the toolbar. </para
 
435
></listitem>
 
436
</varlistentry>
 
437
 
 
438
</variablelist>
 
439
 
 
440
</sect2>
 
441
 
 
442
<sect2>
 
443
<title
 
444
>The <guimenu
 
445
>Help</guimenu
 
446
> Menu</title>
 
447
&help.menu.documentation; </sect2>
 
448
</sect1>
 
449
</chapter>
 
450
 
1138
451
 
1139
452
<chapter id="credits">
 
453
 
1140
454
<title
1141
455
>Dankbetuiging en licentie</title>
1142
456
 
1143
457
<para
1144
458
>&rocs; </para>
1145
459
<para
1146
 
>Programma Copyright:</para>
1147
 
<itemizedlist>
1148
 
        <listitem
1149
 
><para
1150
 
>Copyright 2008 Ugo Sangiori (ugorox AT gmail.com)</para
1151
 
></listitem>
1152
 
        <listitem
1153
 
><para
1154
 
>Copyright 2008-2012 Tomaz Canabrava (tcanabrava AT kde.org)</para
1155
 
></listitem>
1156
 
        <listitem
1157
 
><para
1158
 
>Copyright 2008-2012 Wagner Reck (wagner.reck AT gmail.com)</para
1159
 
></listitem>
1160
 
        <listitem
1161
 
><para
1162
 
>Copyright 2011-2012 Andreas Cord-Landwehr (cordlandwehr AT googlemail.com)</para
1163
 
></listitem>
1164
 
</itemizedlist>
 
460
>Program copyright 2009 Tomaz Canabrava tcanabrava at kde dot org </para>
1165
461
 
1166
462
<para
1167
 
>Documentatie Copyright:</para>
1168
 
<itemizedlist>
1169
 
        <listitem
1170
 
><para
1171
 
>Documentatie copyright 2009 &Anne-Marie.Mahfouf; &Anne-Marie.Mahfouf.mail;</para
1172
 
></listitem>
1173
 
        <listitem
1174
 
><para
1175
 
>Documentatie copyright 2009 Tomaz Canabrava (tcanabrava AT kde.org)</para
1176
 
></listitem>
1177
 
        <listitem
1178
 
><para
1179
 
>Documentatie copyright 2011-2012 Andreas Cord-Landwehr (cordlandwehr AT googlemail.com)</para
1180
 
></listitem>
1181
 
</itemizedlist>
 
463
>Documentation copyright 2009 &Anne-Marie.Mahfouf; &Anne-Marie.Mahfouf.mail; and Tomaz Canabrava tcanabrava at kde dot org </para>
1182
464
 
1183
465
&meld.fouten;&vertaling.freek;&vertaling.jaap; 
1184
466
&underFDL; &underGPL; </chapter>