1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
-- Copyright 2010 by Renée Ahrens, Olof Frahm, Jens Kluttig, Matthias Schulz, Stephan Schuster
-- Copyright 2012 by Till Tantau
--
-- This file may be distributed an/or modified
--
-- 1. under the LaTeX Project Public License and/or
-- 2. under the GNU Public License
--
-- See the file doc/generic/pgf/licenses/LICENSE for more information
-- @release $Header$
---
-- @section subsubsection {The ``Hello World'' of Graph Drawing}
--
-- @end
-- Inputs
local declare = require "pgf.gd.interface.InterfaceToAlgorithms".declare
---
declare {
key = "simple demo layout",
algorithm = {
run =
function (self)
local g = self.digraph
local alpha = (2 * math.pi) / #g.vertices
for i,vertex in ipairs(g.vertices) do
local radius = vertex.options['radius'] or g.options['radius']
vertex.pos.x = radius * math.cos(i * alpha)
vertex.pos.y = radius * math.sin(i * alpha)
end
end
},
summary = [["
This algorithm is the ``Hello World'' of graph drawing.
"]],
documentation = [=["
The algorithm
arranges nodes in a circle (without paying heed to the sizes of the
nodes or to the edges). In order to ``really'' layout nodes in a
circle, use |simple necklace layout|; the present layout is only intended
to demonstrate how much (or little) is needed to implement a graph
drawing algorithm.
\begin{codeexample}[code only, tikz syntax=false]
-- File pgf.gd.examples.SimpleDemo
local declare = require "pgf.gd.interface.InterfaceToAlgorithms".declare
declare {
key = "simple demo layout",
algorithm = {
run =
function (self)
local g = self.digraph
local alpha = (2 * math.pi) / #g.vertices
for i,vertex in ipairs(g.vertices) do
local radius = vertex.options['radius'] or g.options['radius']
vertex.pos.x = radius * math.cos(i * alpha)
vertex.pos.y = radius * math.sin(i * alpha)
end
end
},
summary = "This algorithm is the 'Hello World' of graph drawing.",
documentation = [["
This algorithm arranges nodes in a circle ...
"]]
}
\end{codeexample}
On the display layer (\tikzname, that is) the algorithm can now
immediately be employed; you just need to say
|\usegdlibrary{examples.SimpleDemo}| at the beginning
somewhere.
"]=]
}
|