GraphViz
view release on metacpan or search on metacpan
lib/GraphViz.pm view on Meta::CPAN
the nodes from and to which the edge should be are specified. This
works well visually in the program code:
$g->add_edge('London' => 'Paris');
Attributes such as 'label' can also be used. This specifies a label
for the edge. The label can contain embedded newlines with '\n', as
well as '\c', '\l', '\r' for center, left, and right justified lines.
$g->add_edge('London' => 'New York', label => 'Far');
Note that multiple attributes can be specified. Other attributes
include:
=over 4
=item minlen
sets an integer factor that applies to the edge length (ranks for
normal edges, or minimum node separation for flat edges)
=item weight
sets the integer cost of the edge. Values greater than 1 tend to
shorten the edge. Weight 0 flat edges are ignored for ordering
nodes
=item fontsize
sets the label type size in points
=item fontname
sets the label font family name
=item fontcolor
sets the label text colour
=item color
sets the line colour for the edge
A colour value may be "h,s,v" (hue, saturation, brightness) floating
point numbers between 0 and 1, or an X11 color name such as 'white',
'black', 'red', 'green', 'blue', 'yellow', 'magenta', 'cyan', or
'burlywood'
=item style
sets the style of the node. Can be one of: 'filled', 'solid',
'dashed', 'dotted', 'bold', 'invis'
=item dir
sets the arrow direction. Can be one of: 'forward', 'back', 'both', 'none'
=item tailclip, headclip
when set to false disables endpoint shape clipping
=item arrowhead, arrowtail
sets the type for the arrow head or tail. Can be one of: 'none',
'normal', 'inv', 'dot', 'odot', 'invdot', 'invodot.'
=item arrowsize
sets the arrow size: (norm_length=10,norm_width=5,
inv_length=6,inv_width=7,dot_radius=2)
=item headlabel, taillabel
sets the text for port labels. Note that labelfontcolor,
labelfontname, labelfontsize are also allowed
=item labeldistance, port_label_distance
sets the distance from the edge / port to the label. Also labelangle
=item decorate
if set, draws a line from the edge to the label
=item samehead, sametail
if set aim edges having the same value to the same port, using the
average landing point
=item constraint
if set to false causes an edge to be ignored for rank assignment
=back
Additionally, adding edges between ports of a node is done via the
'from_port' and 'to_port' parameters, which currently takes in the
offset of the port (ie 0, 1, 2...).
$g->add_edge('London' => 'Paris', from_port => 0);
=cut
sub add_edge {
my $self = shift;
my $edge = shift;
# Also cope with simple $from => $to
if ( ref($edge) ne 'HASH' ) {
my $from = $edge;
my %edge = ( from => $from, to => shift, @_ );
$edge = \%edge;
}
$self->add_edge_munge($edge) if $self->can('add_edge_munge');
if ( not exists $edge->{from} or not exists $edge->{to} ) {
carp("GraphViz add_edge: 'from' or 'to' parameter missing!");
return;
}
( run in 1.469 second using v1.01-cache-2.11-cpan-39bf76dae61 )