The Perl and Raku Conference 2025: Greenville, South Carolina - June 27-29 Learn more

NAME

Map::Tube::GraphViz - GraphViz output for Map::Tube.

SYNOPSIS

my $obj = Map::Tube::GraphViz->new(%params);
$obj->graph($output_file);

METHODS

new(%params)
Constructor.
  • callback_edge

    Edge callback.
    Default value is this:
    sub {
    my ($self, $from, $to) = @_;
    $self->{'g'}->add_edge(
    'from' => $from,
    'to' => $to,
    );
    return;
    }
  • callback_node

    Node callback.
    Default value is \&Map::Tube::GraphViz::Utils::node_color.
  • driver

    GraphViz2 driver.
    Default value is 'neato'.
  • g

    GraphViz2 object.
    Parameters 'g' and 'name' cannot combine.
    Default value is this:
    GraphViz2->new(
    'global' => {
    'directed' => 0,
    },
    $name ? (
    'graph' => {
    'label' => $name,
    'labelloc' => 'top',
    },
    ) : (),
    );
  • name

    Name of map.
    Parameters 'g' and 'name' cannot combine.
    Default value is Map::Tube->name or undef.
  • output

    GraphViz2 output.
    It is required.
    Default value is 'png'.
    Possible values are every formats supported by GraphViz2 module.
  • tube

    Map::Tube object.
    It is required.
    Default value is undef.
graph($output_file)
Get graph and save it to $output_file file.
Returns undef.

ERRORS

new():
Cannot load UNIVERSAL::DOES module.
Parameter 'tube' is required.
Parameter 'tube' must be 'Map::Tube' object.
Parameter 'output' is required.
Unsupported 'output' parameter '%s'.
From Map::Tube::GraphViz::Utils::color_line():
No color for line '%s'.
From Class::Utils::set_params():
Unknown parameter '%s'.

EXAMPLE1

use strict;
use English;
use Error::Pure qw(err);
# Arguments.
if (@ARGV < 1) {
print STDERR "Usage: $0 metro\n";
exit 1;
}
my $metro = $ARGV[0];
# Object.
my $class = 'Map::Tube::'.$metro;
eval "require $class;";
if ($EVAL_ERROR) {
err "Cannot load '$class' class.",
'Error', $EVAL_ERROR;
}
# Metro object.
my $tube = eval "$class->new";
if ($EVAL_ERROR) {
err "Cannot create object for '$class' class.",
'Error', $EVAL_ERROR;
}
# GraphViz object.
my $g = Map::Tube::GraphViz->new(
'tube' => $tube,
);
# Get graph to file.
$g->graph($metro.'.png');
# Print file.
system "ls -l $metro.png";
# Output without arguments like:
# Usage: /tmp/SZXfa2g154 metro
# Output with 'Berlin' argument like:
# -rw-r--r-- 1 skim skim 1503067 Jan 27 07:24 Berlin.png
Berlin

EXAMPLE2

use strict;
use English;
use Error::Pure qw(err);
use Map::Tube::GraphViz::Utils qw(node_color_without_label);
# Arguments.
if (@ARGV < 1) {
print STDERR "Usage: $0 metro\n";
exit 1;
}
my $metro = $ARGV[0];
# Object.
my $class = 'Map::Tube::'.$metro;
eval "require $class;";
if ($EVAL_ERROR) {
err "Cannot load '$class' class.",
'Error', $EVAL_ERROR;
}
# Metro object.
my $tube = eval "$class->new";
if ($EVAL_ERROR) {
err "Cannot create object for '$class' class.",
'Error', $EVAL_ERROR;
}
# GraphViz object.
my $g = Map::Tube::GraphViz->new(
'callback_node' => \&node_color_without_label,
'tube' => $tube,
);
# Get graph to file.
$g->graph($metro.'.png');
# Print file.
system "ls -l $metro.png";
# Output without arguments like:
# Usage: /tmp/SZXfa2g154 metro
# Output with 'Berlin' argument like:
# -rw-r--r-- 1 skim skim 885928 Jan 27 07:43 Berlin.png
Berlin

EXAMPLE3

use strict;
use English;
use Error::Pure qw(err);
use Map::Tube::GraphViz::Utils qw(node_color_without_label);
# Arguments.
if (@ARGV < 1) {
print STDERR "Usage: $0 metro\n";
exit 1;
}
my $metro = $ARGV[0];
# Object.
my $class = 'Map::Tube::'.$metro;
eval "require $class;";
if ($EVAL_ERROR) {
err "Cannot load '$class' class.",
'Error', $EVAL_ERROR;
}
# Metro object.
my $tube = eval "$class->new";
if ($EVAL_ERROR) {
err "Cannot create object for '$class' class.",
'Error', $EVAL_ERROR;
}
# GraphViz object.
my $g = Map::Tube::GraphViz->new(
'callback_node' => \&node_color_without_label,
'g' => GraphViz2->new(
'global' => {
'directed' => 0,
},
'graph' => {
'label' => $metro,
'labelloc' => 'top',
'overlap' => 0,
},
),
'tube' => $tube,
);
# Get graph to file.
$g->graph($metro.'.png');
# Print file.
system "ls -l $metro.png";
# Output without arguments like:
# Usage: /tmp/SZXfa2g154 metro
# Output with 'Berlin' argument like:
# -rw-r--r-- 1 skim skim 1212857 Jan 27 07:51 Berlin.png
Berlin

EXAMPLE4

use strict;
use English;
use Error::Pure qw(err);
use Map::Tube::GraphViz::Utils qw(node_color_id);
# Arguments.
if (@ARGV < 1) {
print STDERR "Usage: $0 metro\n";
exit 1;
}
my $metro = $ARGV[0];
# Object.
my $class = 'Map::Tube::'.$metro;
eval "require $class;";
if ($EVAL_ERROR) {
err "Cannot load '$class' class.",
'Error', $EVAL_ERROR;
}
# Metro object.
my $tube = eval "$class->new";
if ($EVAL_ERROR) {
err "Cannot create object for '$class' class.",
'Error', $EVAL_ERROR;
}
# GraphViz object.
my $g = Map::Tube::GraphViz->new(
'callback_node' => \&node_color_id,
'tube' => $tube,
);
# Get graph to file.
$g->graph($metro.'.png');
# Print file.
system "ls -l $metro.png";
# Output without arguments like:
# Usage: /tmp/SZXfa2g154 metro
# Output with 'Berlin' argument like:
# -rw-r--r-- 1 skim skim 1141071 Feb 24 08:04 Berlin.png
Berlin

DEPENDENCIES

Class::Utils, English, Error::Pure, GraphViz2, List::MoreUtils, Map::Tube::GraphViz::Utils, Scalar::Util.

SEE ALSO

Map::Metro::Graph

Map::Metro graph.

Task::Map::Tube

Install the Map::Tube modules.

Task::Map::Tube::Metro

Install the Map::Tube concrete metro modules.

REPOSITORY

https://github.com/michal-josef-spacek/Map-Tube-GraphViz

AUTHOR

Michal Josef Špaček mailto:skim@cpan.org

http://skim.cz

CONTRIBUTORS

Gisbert W. Selke gws@cpan.org

LICENSE AND COPYRIGHT

© 2014-2020 Michal Josef Špaček

Artistic License

BSD 2-Clause License

VERSION

0.07