# Visage

## Visage: Visualization of Graph Algorithms

The Visage extension of Cinderella has it origins in a project started in 2005 in the DFG research center Matheon in Berlin.

We will give only a brief overview over the basic elements of Visage here. You can find more information about Visage (mostly in German language) on its webpage at http://cinderella.de/visage, currently hosted by the Centre for Educational Research in Mathematics Education (CERMAT). We also refer to [GKLWM05] and [FK09] for more information about how you can use Visage in teaching.

### Starting Visage

You can access Visage from the Scripting menu. Choosing the Visage menu item will open a window for choosing the basic graph algorithm underlying your explorations.

 Choosing the underlying algorithm for Visage

For now, choose the "Draw Graph" algorithm. The Cinderella toolbar will change to a Visage-specific toolbar that contains tools for drawing vertices and edges.

 A famous graph

You can draw undirected or directed and unweighted or weighted graphs. Usually, the chosen graph algorithms governs the available types. You can always choose a new algorithm (and its corresponding toolbar) using the button, and, if applicable, the existing graph will be reused.

### Running Algorithms

Visage comes with several built-in algorithms that can be applied to graphs. By default the algorithms run in step-by-step mode, as Visage is not meant for high-performance calculations but for visualization in educational settings. Pressing the play button will execute one step each time. The rewind button reinitializes the algorithm and you can start it again.

 Visualizing Depth First Search

### Interaction With CindyScript

You can write graph algorithms also in CindyScript. On the Visage website you find a small library that makes it easy to access vertices and edges of a graph. This library relies on user attributes of geometric elements. These user attributes are accessible via two CindyScript commands:

#### Set a user attribute: `attribute(<geo>,<string1>,<string2>)`

Description: Sets the user attribute of <geo> identified by <string1> to the value <string2>.

#### Read a user attribute: `attribute(<geo>,<string>)`

Description: Returns the user attribute identified by <string> of the geometric element <geo> .

The Visage extension sets the attribute `"edge"` of undirected edges to `"u"` and of directed edges to `"d"`. The attribute `"vertex"` of vertices is set to "v". Thus, you can identify the vertices and edges of a graph by checking these attributes:

```alledges():=select(allsegments(),
attribute(#,"edge")=="u" % attribute(#,"edge")=="v");
allvertices():=select(allpoints(),attribute(#,"vertex")=="v");
```

If you mark a vertex as a start or end vertex for a graph algorithm it will have the attribute `"specialvertex"` with a value of either `"start"` or `"finish"`. Finally, weighted edges store their weight in the user attribute `"weight"`. For flow algorithms the capacity and flow are stored in the user attributes `"capacity"` and `"flow"`, as expected.

### Java Extensions

Actually, it is also possible to write algorithms in Java that interact with the Visage extension. However, the API for such interaction is only available online at http://cinderella.de/visage. If you are interested in using Visage with Java we ask you to contact us at `visage@cinderella.de`.